ব্রেইনফ্ল্যাক মাল্টিপ্লিকেশন মেটাগল্ফ


17

এই প্রশ্নটি ব্রেন-ফ্লাকের প্রথম জন্মদিন উদযাপনের জন্য ডিজাইন করা বেশ কয়েকটি ব্রেন-ফ্লাক জন্মদিনের চ্যালেঞ্জগুলির মধ্যে প্রথম! আপনি ব্রেন-বিমানবিধ্বংসী কামান এর জন্মদিন সম্পর্কে আরও তথ্য পেতে পারেন এখানে

গত গ্রীষ্মে আমাদের ব্রেইন-ফ্ল্যাঙ্ক ইন্টিজার মেটাগল্ফ ছিল এবং এটি যে উত্তরগুলি উত্পন্ন করেছিল সেগুলি মস্তিষ্ক-ফ্লাক সম্প্রদায়ের জন্য তখন থেকে খুব কার্যকর। ইন্টিজার মেটাগল্ফকে এতটাই দক্ষ করে তোলে যে প্রধান জিনিসটি হ'ল মাল্টিপ্লিকেশন হার্ডকোডিং 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। যাচাইকরণের জন্য আপনার প্রোগ্রামের আউটপুটটিতে একটি লিঙ্ক অন্তর্ভুক্ত করার বিষয়ে নিশ্চিত হন।


1
আগ্রহের বাইরে, কেন 1 এবং লুপ ক্রিয়াকলাপ নিষিদ্ধ?
নীল

@ নীল স্ট্যাক উচ্চতা অপারেটরটিও নিষিদ্ধ।
এরিক আউটগল্ফার

1
@ এরিকথ আউটগল্ফার আমি ইতিমধ্যে পূর্ণসংখ্যার মেটাগল্ফের সেইটিকে নিষিদ্ধ করেছি।
নীল

7
কম্পিউটার বিজ্ঞানীরা অদ্ভুত। এগুলি এমন প্রোগ্রামিং ভাষা উদ্ভাবন করে যা ব্যবহার করা অসম্ভব, সহজাতভাবে অ্যান্টি-গল্ফ, এবং একে অপরকে এই ভাষার সহজ সমস্যাগুলি সমাধান করার জন্য গল্ফড কোড লেখার জন্য চ্যালেঞ্জ জানায়। এর চেয়ে বড় কিছুই আর কিছু নয়। +1 ভাল স্যার।
ড্রাকো

1
@ কিওয়ার্প-ডের্প আমি লিঙ্কযুক্ত পাইথন প্রোগ্রামের আউটপুটটিকে (অনুকূল স্কোর 681950) অনুকূলকরণের দিকে নজর দিয়েছিলাম এবং 4492 ব্যবহার করে একটি তুচ্ছ সঞ্চয় পেয়েছি [...], সুতরাং এটি একটি শুরু a
নীল

উত্তর:


2

রুবি, 669856

$answers = Hash.new{|hash,n|
  valid = []
  2.upto(n**0.5){|i|
    valid.push("("+hash[n/i]+")"+"({})"*(i-2)+"{}") if n%i == 0
  }
  valid.push("({})"+hash[n-1])
  (hash[n] = valid.min_by{|s| s.length})
}
$answers[1] = "{}"

def full_answer n
  "("+$answers[n]+")"
end

এটি একটি দ্রুত বেসলাইন উত্তর। এখানে প্রথম 1000 মিনিট প্রোগ্রাম পাওয়া গেছে । (আমি তাদের সবগুলি পোস্ট করার চেষ্টা করেছি, তবে এটি সর্বাধিক পেস্টবিন আকারকে ওভারলোড করেছে)) পরে আমি একটি কোড ব্যাখ্যা যুক্ত করতে পারি।

উদাহরণ:

360:    ((((((({})(({}){}){})({}){})({}){}){}){}){})
4608:   (((((((((((({})({}){})({}){}){}){}){}){}){}){}){}){}){})
9991:   (({})((({})(((((((({})((({})({}){}){}){}){}){}){}){}){}){}){})({}){}){})
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.