ব্যাখ্যা
বেফুঞ্জ একটি দ্বি-মাত্রিক প্রোগ্রাম যা স্ট্যাকগুলি ব্যবহার করে ।
এর অর্থ, 5 + 6 করার জন্য আপনি লেখেন 56+
, অর্থ:
56+
5 push 5 into stack
6 push 6 into stack
+ pop the first two items in the stack and add them up, and push the result into stack
(to those of you who do not know stacks, "push" just means add and "pop" just means take off)
তবে আপনার বুদ্ধিমান হিসাবে লক্ষ্য করেছেন, আমরা 56
সরাসরি স্ট্যাকের মধ্যে নম্বরটি চাপতে পারি না ।
এটি করার জন্য, আমাদের 78*
পরিবর্তে লিখতে হবে, যা গুণকে বৃদ্ধি করে 7
এবং 8
পণ্যটিকে স্ট্যাকের মধ্যে ঠেলে দেয়।
বিস্তারিত
ইনপুটটি যে কোনও বিন্যাসে নেওয়া যেতে পারে, এর অর্থ এটি প্রোগ্রামারের বিবেচনার ভিত্তিতে এটি STDIN হতে পারে বা নাও হতে পারে।
ইনপুটটি ইতিবাচক পূর্ণসংখ্যা হবে (অন্তর্ভুক্ত 0
বা নেতিবাচক পূর্ণসংখ্যার জন্য কোনও বোনাস নেই )।
আউটপুটটি কেবল এই অক্ষর সমন্বিত একটি স্ট্রিং হবে: 0123456789+-*/
(আমি মডুলো ব্যবহার করব না%
))
লক্ষ্যটি হ'ল সংক্ষিপ্ততম স্ট্রিংটি যা উপরে বর্ণিত ফর্ম্যাটটি ব্যবহার করে ইনপুট উপস্থাপন করতে পারে find
উদাহরণস্বরূপ, যদি ইনপুট হয় 123
তবে আউটপুটটি হবে 67*99*+
। বাম থেকে ডানে আউটপুট মূল্যায়ন করা উচিত।
যদি একাধিক গ্রহণযোগ্য আউটপুট থাকে (উদাহরণস্বরূপ 99*67*+
এটি গ্রহণযোগ্যও হয়), যে কোনও একটি মুদ্রণ করা যেতে পারে (তাদের সমস্ত মুদ্রণের জন্য কোনও বোনাস নেই)।
অারোও ব্যাখ্যা
আপনি যদি এখনও বুঝতে না পারেন তবে কীভাবে 67*99*+
মূল্যায়ন করে তা 123
এখানে বিশদ বিবরণ।
stack |operation|explanation
67*99*+
[6] 6 push 6 to stack
[6,7] 7 push 7 to stack
[42] * pop two from stack and multiply, then put result to stack
[42,9] 9 push 9 to stack
[42,9,9] 9 push 9 to stack
[42,81] * pop two from stack and multiply, then put result to stack
[123] + pop two from stack and add, then put result to stack
টি এল; ডিআর
প্রোগ্রামটিকে সংক্ষিপ্ততম স্ট্রিংটি সন্ধান করতে হবে যা উপরে উল্লিখিত বিন্যাসটি ব্যবহার করে ইনপুট (সংখ্যা) উপস্থাপন করতে পারে।
মন্তব্য
এটি একটি কোড-গল্ফ চ্যালেঞ্জ, তাই বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী।
দ্ব্যর্থতা নিরসন
-
পারেন হতে পারে x-y
বা y-x
প্রোগ্রামার এর বিবেচনার ভিত্তিতে। যাইহোক, পছন্দটি অবশ্যই সমাধানের মধ্যে সামঞ্জস্যপূর্ণ হতে হবে। তেমনিভাবে /
।
নমুনা প্রোগ্রাম
লুয়া, 1862 বাইট ( এটি অনলাইনে চেষ্টা করুন )
যেহেতু আমি লেখক, আমি একেবারেই গল্ফ করব না।
ব্যাখ্যা:
This uses the depth-first search method.
গভীরতা-প্রথম অনুসন্ধান সম্পর্কে আরও: এখানে ।
কার্যক্রম:
local input = (...) or 81
local function div(a,b)
if b == 0 then
return "error"
end
local result = a/b
if result > 0 then
return math.floor(result)
else
return math.ceil(result)
end
end
local function eval(expr)
local stack = {}
for i=1,#expr do
local c = expr:sub(i,i)
if c:match('[0-9]') then
table.insert(stack, tonumber(c))
else
local a = table.remove(stack)
local b = table.remove(stack)
if a and b then
if c == '+' then
table.insert(stack, a+b)
elseif c == '-' then
table.insert(stack, b-a)
elseif c == '*' then
table.insert(stack, a*b)
elseif c == '/' then
local test = div(b,a)
if test == "error" then
return -1
else
table.insert(stack, a+b)
end
end
else
return -1
end
end
end
return table.remove(stack) or -1
end
local samples, temp = {""}, {}
while true do
temp = {}
for i=1,#samples do
local s = samples[i]
table.insert(temp, s..'0')
table.insert(temp, s..'1')
table.insert(temp, s..'2')
table.insert(temp, s..'3')
table.insert(temp, s..'4')
table.insert(temp, s..'5')
table.insert(temp, s..'6')
table.insert(temp, s..'7')
table.insert(temp, s..'8')
table.insert(temp, s..'9')
table.insert(temp, s..'+')
table.insert(temp, s..'-')
table.insert(temp, s..'*')
table.insert(temp, s..'/')
end
for i=1,#temp do
if input == eval(temp[i]) then
print(temp[i])
return
end
end
samples = temp
end
বোনাস
আপনি কোড লিখতে যদি বেফুঞ্জ (বা এর কোনও রূপ) ব্যবহার করেন তবে আপনার জন্য একটি কেক ।