এই চ্যালেঞ্জটি এপ্রিল 2018 এর লটএম চ্যালেঞ্জের পাশাপাশি ব্রেন- ফ্লকের দ্বিতীয় জন্মদিনের অংশ হিসাবে পোস্ট করা হয়েছিল
আমি ভাবছিলাম মস্তিষ্ক-ফ্লাক প্রোগ্রামগুলি এনকোড করার সবচেয়ে কার্যকর উপায় কী হবে। সুস্পষ্ট কাজটি করার জন্য, যেহেতু কেবলমাত্র 8 টি বৈধ অক্ষর রয়েছে তাই প্রতিটি অক্ষরকে 3-বিট ক্রমের ম্যাপ করা। এটি অবশ্যই খুব কার্যকর, তবে এটি এখনও খুব বাড়াবাড়ি। মস্তিষ্ক-ফ্ল্যাক কোডের কয়েকটি বৈশিষ্ট্য রয়েছে যা আমরা এনকোডিংটি সংক্ষিপ্ত করার জন্য সুবিধা নিতে পারি।
নীলাদগুলি, যা সবগুলি 2 টি ম্যাচ করা বন্ধনী দ্বারা উপস্থাপিত হয়, 2 টির পরিবর্তে তথ্যের একক ইউনিট হিসাবে সত্যই কাজ করে we
এটি একটি কম স্পষ্ট, তবে মনডগুলির সমাপনী বাইটগুলিও নিরর্থক। আপনি কি ভাবতে পারেন যে
'?'
নীচের স্নিপেটে চরিত্রগুলি কী উপস্থাপন করে?{(({}?<>?<>?
যদি আমরা ধরে নিই যে ইনপুটটি বৈধ মস্তিষ্ক-ফ্লাক কোড, তবে সেই প্রশ্ন চিহ্নগুলির প্রত্যেকটির জন্য কেবল একটি বিকল্প রয়েছে। এর অর্থ হ'ল আমরা প্রতিটি ক্লোজিং বন্ধনীর প্রতিনিধিত্ব করতে নিবিড়ভাবে একটি নিকট মনড চরিত্র ব্যবহার করতে পারি । চরিত্রটি ছোট রাখার অতিরিক্ত সুবিধা রয়েছে যা হফম্যান এনকোডিংটি ব্যবহার করতে চাইলে এটি যথেষ্ট সাহায্য করবে। যেহেতু ঘনিষ্ঠ মোনাড চরিত্রটি সম্ভবত বিস্তৃত মার্জিন দ্বারা সর্বাধিক সাধারণ চরিত্র হতে পারে, তাই এটি একক বিট দ্বারা প্রতিনিধিত্ব করা যেতে পারে যা অত্যন্ত দক্ষ।
এই দুটি কৌশলটি নিম্নলিখিত অ্যালগরিদমের মাধ্যমে মস্তিষ্ক-ফ্ল্যাঙ্ক কোডটি সংকুচিত করতে দেবে:
একটি মোনাডের প্রতিটি বন্ধ হওয়া বন্ধনী প্রতিস্থাপন করুন
|
। বা অন্য কথায়, প্রতিটি বার বন্ধনী বন্ধ করুন যা বারের সাথে এটির উদ্বোধনী ম্যাচের আগে নয় replace তাই ...(({})<(()()())>{})
হবে
(({}|<(()()()||{}|
বন্ধ হওয়া বন্ধনী সহ প্রতিটি নীলাদ প্রতিস্থাপন করুন। অতএব, মিলিত বন্ধনীগুলির মধ্যে কিছুই নেই নিচের ম্যাপিংটি ব্যবহার করে:
() --> ) {} --> } [] --> ] <> --> >
এখন আমাদের শেষ উদাহরণ হয়ে যায়:
((}|<()))||}|
চলমান
|
অক্ষরগুলি সরান । কারণ আমরা জানি যে মোট বারের মোট সংখ্যাটি({[<
অক্ষরের মোট সংখ্যার সমান হওয়া উচিত , যদি এখানে প্রান্তটিতে নিখোঁজ থাকে, তবে আমরা সেগুলি নির্ধারণ করতে পারি। সুতরাং যেমন একটি উদাহরণ:({({})({}[()])})
হবে
({(}|(}[)
আজকের জন্য আপনার চ্যালেঞ্জ এই প্রক্রিয়াটি বিপরীত করা।
সংক্ষিপ্ত মস্তিষ্ক-ফ্ল্যাকের একটি স্ট্রিং দেওয়া হয়েছে যাতে কেবলমাত্র অক্ষর থাকে (){}[]<>|
, এটিকে মূল মস্তিষ্ক-ফ্ল্যাক কোডে প্রসারিত করুন। আপনি ধরে নিতে পারেন যে ইনপুটটি সর্বদা বৈধ মস্তিষ্কের-প্রান্তে প্রসারিত হবে। এর অর্থ ইনপুটটির কোনও উপসর্গ অক্ষরের |
চেয়ে বেশি কখনই থাকবে না ({[<
।
ইনপুটটিতে পিছনের |
অক্ষর থাকবে না । এগুলি অবশ্যই প্রসঙ্গ থেকে অনুমান করা উচিত।
যথারীতি, আপনি একটি সম্পূর্ণ প্রোগ্রাম বা কোনও ফাংশন জমা দিতে পারেন এবং ইনপুট / আউটপুট ফর্ম্যাটগুলি অনুমোদিত iss এবং যেহেতু এটি একটি কোড-গল্ফ , তাই আপনার কোডটি উত্স কোডের দৈর্ঘ্য দ্বারা বাইটে স্কোর করা হবে, যত কম স্কোর হবে তত ভাল।
পরীক্ষার মামলা
এখানে কিছু পরীক্ষার মামলা রয়েছে। আপনি যদি আরও বেশি চান, আপনি এই অজগর স্ক্রিপ্ট এবং ব্রেন-ফ্লাক উইকি দিয়ে নিজের পরীক্ষার কেস তৈরি করতে পারেন , যেখানে এই পরীক্ষাগুলির বেশিরভাগই আসে।
#Compressed code
#Original code
())))
(()()()())
([([}()||||(>||{(})|>|}{((<}|||>}|}>}
([([{}(())])](<>)){({}())<>}{}{((<{}>))<>{}}{}<>{}
({(}|(}[)|||}
({({})({}[()])}{})
(((()))||(](((}}||(}([(((}))||||(]((}}|}|}}|||]||]|[))||(}))|}(}|(}]]|}
((((()()()))([]((({}{}))({}([((({}()())))]([](({}{}){}){}{})))[]))[])[()()])({}()()){}({})({}[][]){}