পাইথন 3 , 177 170 163 130 বাইট
lambda a,b:s(d(a)^d(b))
def s(n,x=0,s=''):
while n:n-=1;s+=chr(n%256);n>>=8
return s
def d(n,c=0):
while s(c)!=n:c+=1
return c
এটি অনলাইন চেষ্টা করুন!
নটজাগানকে ধন্যবাদ -14 বাইটস
-৩৩ বাইটস লিকি নুনকে ধন্যবাদ জানায় (এবং এন্ডিয়াননেস পরিবর্তন করেছেন)
পাইথনে কোনও গল্ফ দেওয়ার চেষ্টা করার মতো আমার কোনও ব্যবসা নেই, তবে আমি লুয়া ব্যবহার করতে চাইনি কারণ যুক্তিযুক্ত দৈর্ঘ্যের স্টিংগুলিতে কাজ করার জন্য এই পদ্ধতির বড় সঠিক পূর্ণসংখ্যার প্রয়োজন। (দ্রষ্টব্য: স্ট্রিংয়ের দৈর্ঘ্যটি র্যাম্পিং করার সময় অ্যালগরিদমটি এখনও সত্যিই ধীর হয়)) এটি বেশিরভাগ ক্ষেত্রে কেবল উত্তর সরবরাহ করার জন্য;)
প্রতিটি স্ট্রিং স্ব-বিপরীত এবং খালি স্ট্রিংটি পরিচয়। এটি স্ট্রিং এবং অ-নেতিবাচক পূর্ণসংখ্যার মধ্যে একটি সাধারণ দ্বিচারের মধ্যে কেবল জোর করে। s
হ'ল সহায়ক ফাংশন যা হ'ল বাইজেশন (কেবলমাত্র এক উপায়) গণনা করে এবং d
বিপরীত হয়।
অ-ধীর সংস্করণ (148 বাইট, লিকি নুনের সৌজন্যে):
lambda a,b:s(d(a)^d(b))
def s(n,x=0,s=''):
while n:n-=1;s=chr(n%256)+s;n>>=8
return s
def d(n,c=0):
while n:c=c*256+ord(n[0])+1;n=n[1:]
return c
এটি অনলাইন চেষ্টা করুন!
আমি এটি একটি গ্রুপ-তত্ত্বের প্রাইমারের জন্যও হাইজ্যাক করতে যাচ্ছি।
কোন অধিকার বিপরীত হয় একটি বাম বিপরীত: INV (ক) + একটি = (INV (ক) + একটি) + E = (INV (ক) + একটি) + + (INV (ক) + + INV (INV (ক))) = inv (a) + (a + inv (a)) + inv (inv (a)) = (inv (a) + e) + inv (inv (a)) = inv (a) + inv (a) ) = ই
এর অর্থ এটিও হ'ল a হ'ল বিপরীত (ক) ।
যে কোনও সঠিক পরিচয় একটি বাম পরিচয়: e + a = (a + inv (a)) + a = a + (inv (a) + a) = a
অন্যান্য পরিচয় f : e = e + f = f দেওয়া হলে পরিচয়টি অনন্য
যদি a + x = a হয় তবে x = e : x = e + x = (inv (a) + a) + x = inv (a) + (a + x) = inv (a) + a = e
বিপরীতগুলি অনন্য, যদি একটি + x = ই হয় তবে: x = ই + এক্স = (ইনভ (ক) + ক) + এক্স = ইনভ (ক) + (এ + এক্স) = ইনভ (ক) + ই = ইনভ (এ) )
প্রমাণগুলি অনুসরণ করে প্রস্তাবগুলির সমাধানগুলির জন্য প্রতিবিম্ব তৈরি করা মোটামুটি সহজ হওয়া উচিত যা এই প্রস্তাবগুলি সন্তুষ্ট করে না।
এখানে একটি আরো প্রাকৃতিক অ্যালগরিদম আমি বাস্তবায়িত (কিন্তু গলফ না) এর অ্যাপ্লিকেশন Lua । এটি কারও ধারণা দেবে।
function string_to_list(s)
local list_val = {}
local pow2 = 2 ^ (math.log(#s, 2) // 1) -- // 1 to round down
local offset = 0
list_val.p = pow2
while pow2 > 0 do
list_val[pow2] = 0
if pow2 & #s ~= 0 then
for k = 1, pow2 do
list_val[pow2] = 256 * list_val[pow2] + s:byte(offset + k)
end
list_val[pow2] = list_val[pow2] + 1
offset = offset + pow2
end
pow2 = pow2 // 2
end
return list_val
end
function list_to_string(list_val)
local s = ""
local pow2 = list_val.p
while pow2 > 0 do
if list_val[pow2] then
local x = list_val[pow2] % (256 ^ pow2 + 1)
if x ~= 0 then
x = x - 1
local part = ""
for k = 1, pow2 do
part = string.char(x % 256) .. part
x = x // 256
end
s = s .. part
end
end
pow2 = pow2 // 2
end
return s
end
function list_add(list_val1, list_val2)
local result = {}
local pow2 = math.max(list_val1.p, list_val2.p)
result.p = pow2
while pow2 > 0 do
result[pow2] = (list_val1[pow2] or 0) + (list_val2[pow2] or 0)
pow2 = pow2 // 2
end
return result
end
function string_add(s1, s2)
return list_to_string(list_add(string_to_list(s1), string_to_list(s2)))
end
ধারণাটি মূলত তার দৈর্ঘ্যের দুটি-পাওয়ার উপাদানগুলির উপর ভিত্তি করে স্ট্রিংকে বিভক্ত করা এবং তারপরে শূন্যকে উপস্থাপনকারী অনুপস্থিত উপাদানগুলির সাথে ক্ষেত্র হিসাবে বিবেচনা করা হবে এবং প্রতিটি অনুপস্থিত উপাদান 1 থেকে 256 ^ n পর্যন্ত সংখ্যা উপস্থাপন করে, সুতরাং 256 ^ n + 1 টি মোট মান। তারপরে এই উপস্থাপনাগুলি উপাদান অনুসারে মডুলো 256 ^ n + 1 যোগ করা যেতে পারে।
দ্রষ্টব্য: এই লুয়া বাস্তবায়নে 7 টিরও বেশি আকারের স্ট্রিংয়ের জন্য সংখ্যাযুক্ত ওভারফ্লো সমস্যা থাকবে But
এটি অনলাইন চেষ্টা করুন!