এই প্রশ্নটি ব্রেন-ফ্লাকের প্রথম জন্মদিন উদযাপনের জন্য ডিজাইন করা বেশ কয়েকটি ব্রেন-ফ্লাক জন্মদিনের চ্যালেঞ্জগুলির মধ্যে প্রথম! আপনি ব্রেন-বিমানবিধ্বংসী কামান এর জন্মদিন সম্পর্কে আরও তথ্য পেতে পারেন এখানে
গত গ্রীষ্মে আমাদের ব্রেইন-ফ্ল্যাঙ্ক ইন্টিজার মেটাগল্ফ ছিল এবং এটি যে উত্তরগুলি উত্পন্ন করেছিল সেগুলি মস্তিষ্ক-ফ্লাক সম্প্রদায়ের জন্য তখন থেকে খুব কার্যকর। ইন্টিজার মেটাগল্ফকে এতটাই দক্ষ করে তোলে যে প্রধান জিনিসটি হ'ল মাল্টিপ্লিকেশন হার্ডকোডিং called
ব্রেইন-ফ্লাকের রানটাইমের গুণটি অত্যন্ত ব্যয়বহুল। সংক্ষিপ্ততম জ্ঞানের গুণক স্নিপেটটি হ'ল:
({}<>)({<({}[()])><>({})<>}{}<><{}>)
মেগাটম আবিষ্কার করেছেন
তবে সংকলনের সময় গুণনের জন্য খুব সহজ উপায় রয়েছে। উদাহরণস্বরূপ নিম্নলিখিত কোডটি 5 দ্বারা গুণ করবে:
(({})({})({})({}){})
এটি কাজ করে কারণ একটানা এক্সপ্রেশন একসাথে যুক্ত করা হয়। প্রত্যেকে ({})
স্ট্যাকের জন্য কিছুই করে না ( {}
পপস এবং (..)
ডানদিকে এটি পুশ করে) এবং স্ট্যাকের শীর্ষে যা আছে তার মূল্যায়ন করে। এই সমস্ত এক্সপ্রেশন একসাথে স্ট্যাকের শীর্ষে যা ছিল তার পাঁচগুণ যোগফল।
কোন n
নিম্নলিখিত পংক্তি অভিব্যক্তি একটি স্নিপেট যে স্ট্যাকের উপরে বাড়িয়ে দেব করতে হবে n
:
"("+"({})"*(n-1)+"{})"
এটি n
স্ট্যাকের শীর্ষে সমস্ত মূল্যায়ন করে এমন ভাব প্রকাশ করে কাজ করে । প্রথমটি n-1
আসলে কিছু পরিবর্তন করে না এবং শেষটি ধাক্কা দেওয়ার আগে স্ট্যাকের শীর্ষটি সরিয়ে দেয়।
সংমিশ্রিত সংখ্যার জন্য আপনি একাধিক ছোট এক্সপ্রেশন একসাথে বাইটগুলি সংরক্ষণ করতে পারেন। উদাহরণস্বরূপ আপনি 2 বার 5 দিয়ে গুণ করে 25 দিয়ে গুণ করতে পারেন:
(({})({})({})({}){})(({})({})({})({}){})
এটি বেশ সহজ, এবং কিছু সংখ্যার জন্য এটি বেশ ভালভাবে কাজ করে তবে এটি করার আরও ভাল উপায় রয়েছে। উদাহরণস্বরূপ একটি পদ্ধতি নিয়ে আমি সংখ্যার বাইনারি উপস্থাপনা ব্যবহার করেছি। ( এখানে একটি অজগর বাস্তবায়ন ) এই নতুন পদ্ধতিটি পূর্বে প্রদর্শিত সাধারণ স্ট্রিং এক্সপ্রেশনের চেয়ে অনেক বেশি কার্যকর, তবে এটি শেষ নয়, বহুগুণকে হার্ডকোড করার জন্য বিভিন্ন ধরণের আকর্ষণীয় উপায় রয়েছে এবং সম্ভবত এমন এক টন যা এখনও কেউ আবিষ্কার করেনি।
সুতরাং আমি মনে করি এখন সময় এসেছে যে আমরা কতটা ভাল পেতে পারি see
ব্রেন-ফ্লাকের সংক্ষিপ্ত বিবরণ
এই চ্যালেঞ্জের জন্য ব্রেন-ফ্লাক সম্পর্কে আপনার যে সমস্ত কিছু জানতে হবে তার একটি বিবরণ এখানে।
মস্তিষ্ক-ফ্ল্যাকের "নীলাডস" এবং "মনড" রয়েছে। নীলাদগুলি প্রথম বন্ধনী যা তাদের ভিতরে কিছুই নেই। প্রতিটি নীলাদ একটি কাজ করে এবং একটি মান দেয়। এই চ্যালেঞ্জের জন্য আমরা যে দুটি নীলাডের সাথে সম্পর্কিত তা হ'ল {}
এবং <>
। {}
সক্রিয় স্ট্যাকের শীর্ষে পপ করে এবং এর মান দেয়। <>
সক্রিয় স্ট্যাক এবং সক্রিয় স্ট্যাকটিকে স্যুইচ করে, যাতে সক্রিয় স্ট্যাকটি নিষ্ক্রিয় হয়ে যায় এবং নিষ্ক্রিয় স্ট্যাকটি সক্রিয় হয়, এটি শূন্য ফিরে আসে।
মনাদাগুলি তাদের ভিতরে স্টাফ সহ প্রথম বন্ধনী parent তারা একক যুক্তি গ্রহণ করে, তাদের ভিতরে থাকা সমস্ত কিছুর যোগফল, কখনও কখনও কোনও ক্রিয়া করে এবং তারপরে একটি মান ফেরত দেয়। এর মধ্যে আমরা যে তিনটির সাথে সম্পর্কিত তা হ'ল (...)
, <...>
এবং [...]
। এই চ্যালেঞ্জের জন্য সর্বাধিক গুরুত্বপূর্ণ মোনাডটি (...)
অভ্যন্তরের মান গ্রহণ করে এবং এটি সক্রিয় স্ট্যাকের দিকে ঠেলে দেয়। এটি তখন যুক্তি ফিরিয়ে দেয়। <...>
এবং [...]
উভয়ই "জড়" মনবাদ, তারা হ'ল কোনও ক্রিয়া সম্পাদন করে না বরং পরিবর্তিত মানটি পরিবর্তিত করে। <...>
যতক্ষণ না যুক্তি নির্বিশেষে সর্বদা শূন্য প্রদান করে। এদিকে [...]
সর্বদা যুক্তির সময় ফিরিয়ে দেয় -1
।
ব্যাখ্যার সাথে নমুনা প্রোগ্রাম
আপনি যদি ব্রেইন-ফ্ল্যাঙ্কে কখনও প্রোগ্রাম করেননি তবে বর্ণিত ক্রিয়াকলাপগুলি ব্যবহার করে কয়েকটি উদাহরণ প্রোগ্রামগুলি দেখানো ভাল ধারণা হতে পারে
({}{})
এটি স্ট্যাকের শীর্ষ দুটি নম্বর যুক্ত করে। প্রত্যেকটি {}
স্ট্যাকের একটি মান পপ করে এবং (...)
তাদের যোগফলটি পিছনে ঠেলে দেয়।
({}[{}])
একইভাবে এটি প্রথম থেকে স্ট্যাকের দ্বিতীয় আইটেমটি বিয়োগ করে। প্রতিটির মতো {}
একটি মান পপ করার আগে তবে [..]
দ্বিতীয়টির চারপাশে এটি যুক্ত হওয়ার কারণ হয়। আবার (...)
যোগফল ঠেলে দেয়।
({}<{}>)
এটি শীর্ষ মানের অক্ষত রেখে স্ট্যাকের দ্বিতীয় মানটিকে সরিয়ে দেয়। এটি ঠিক শেষ দুটিটির মতোই কাজ করে তবে দ্বিতীয় মানটি নিঃশব্দ হয়ে যায় <...>
তাই ধাক্কা কেবল প্রথম মানটিকে পিছনে ফেলে দেয়।
(({}))
এটি স্ট্যাকের শীর্ষে মানটির একটি দ্বিতীয় অনুলিপি তৈরি করে। এটি {}
এর মান পাওয়ার সাথে সাথে স্ট্যাকের শীর্ষে পপিংয়ের মাধ্যমে এটি করে , প্রথমে (..)
তার মানটিকে মূল্যায়ন করে পুনরায় চাপ দেয়। দ্বিতীয়টি (...)
প্রথম দ্বারা ফিরে আসা মানটি নেয় এবং স্ট্যাকের দিকেও ধাক্কা দেয়। একটি দ্বিতীয় অনুলিপি তৈরি।
কার্য
একটি পূর্ণসংখ্যার দেওয়া একটি n
স্ট্যাক-ক্লিন ব্রেন-ফ্ল্যাক স্নিপেট তৈরি করুন যা বর্তমান স্ট্যাকের শীর্ষটিকে দ্বারা গুন করে n
।
আপনি নিম্নলিখিত ব্রেইন-ফ্ল্যাক অপারেশন ব্যবহার করার অনুমতি দেওয়া হয়
(...) -> Push Monad, Pushes the result of its contents
<...> -> Zero Monad, Returns zero
[...] -> Negative Monad, Returns the opposite of its contents result
{} -> Pop nilad, Pops the TOS and returns its value
<> -> Switch nilad, Switches the active and inactive stack
অন্যান্য অপারেশনগুলি চ্যালেঞ্জের উদ্দেশ্যে নিষিদ্ধ করা হয়েছে।
স্কোরিং
আপনার স্কোর থেকে শুরু n=2
করে সমস্ত প্রোগ্রামের সংক্ষিপ্ত দৈর্ঘ্য হবে n=10000
। যাচাইকরণের জন্য আপনার প্রোগ্রামের আউটপুটটিতে একটি লিঙ্ক অন্তর্ভুক্ত করার বিষয়ে নিশ্চিত হন।
[...]
, সুতরাং এটি একটি শুরু a