2.}<@>%?<{>$"/\M!8;
রিডেবল:
2 . }
< @ > %
? < { > $
" / \ M
! 8 ;
এটি অনলাইন চেষ্টা করুন!
এটি সম্ভবত একটি বাইট বা দুটি দ্বারা গল্ফ করা যেতে পারে তবে এর জন্য কিছু সত্যিকারের বুদ্ধিমান বিন্যাসের প্রয়োজন হতে পারে, এটি ব্রুট ফোর্সের মাধ্যমে আরও সহজেই পাওয়া যেতে পারে (এমনকি এটি পেতে যদি এটি আরও বেশি সময় নিতে পারে তবে)।
উচ্চ স্তরের ব্যাখ্যা
প্রোগ্রামটি বেশিরভাগ ক্ষেত্রে এই সিডোকোড অনুসরণ করে:
while (read number is not zero)
{
if (number is even)
print number;
}
STDIN খালি হয়ে যাওয়ার পরে কীভাবে হেক্সাগনি কোনও নম্বর পড়ার চেষ্টা করে তা অপব্যবহার করে (এটি একটি শূন্য ফেরায়)। এই পদ্ধতির সাথে এগিয়ে আসতে সাহায্যের জন্য মার্টিনকে অনেক ধন্যবাদ thanks
সম্পূর্ণ ব্যাখ্যা
টিমভির দুর্দান্ত রহস্যজনক আইডিই চালানোর জন্য আমি এখনও মনোর সাথে ফেটে যাইনি , তাই মার্টিনকে কিছু সহায়ক সুন্দর ছবি সরবরাহ করার জন্য আমি ঝুঁকিয়েছি !
প্রথমত, হেক্সাগনিতে বেসিক নিয়ন্ত্রণ প্রবাহের জন্য একটু প্রাইমার। প্রথম নির্দেশিকা নির্দেশক (আইপি), যা এই প্রোগ্রামে ব্যবহৃত একমাত্র, ষড়্ভুজীয় উত্স কোডের উপরের বামদিকে শুরু হয় এবং ডানদিকে অগ্রসর হতে শুরু করে। আইপি যখনই ষড়্ভুজটির প্রান্ত ছেড়ে যায়, তখন এটি side_length - 1
সারি সারিটি ষড়্চাগরের মাঝের দিকে চলে যায় । যেহেতু এই প্রোগ্রামটি একটি পাশের দৈর্ঘ্যের তিনটি ষড়্ভুজ ব্যবহার করে, যখন এটি ঘটে তখন আইপি সর্বদা দুটি সারি চালিয়ে যাবে। একমাত্র ব্যতিক্রম হ'ল এটি যদি মাঝারি সারির বাইরে চলে যায়, যেখানে এটি শর্তাধীনভাবে বর্তমান স্মৃতি প্রান্তের মানের উপর নির্ভর করে ষড়্ভুজের শীর্ষ বা নীচের দিকে অগ্রসর হয়।
শর্তসাপেক্ষ সম্পর্কে এখন কিছুটা। নিয়ন্ত্রণ প্রবাহের জন্য Hexagony একমাত্র কন্ডিশন হয় >
, <
এবং ষড়ভূজ মাঝখানে প্রান্ত। এগুলি একটি স্থির নিয়ম অনুসরণ করে: যদি বর্তমান মেমরি প্রান্তের মান শূন্য হয় বা নেতিবাচক নিয়ন্ত্রণ প্রবাহ বাম দিকে সরানো হয় এবং যদি ইতিবাচক হয় তবে নিয়ন্ত্রণ ডানদিকে প্রবাহিত হয়। বন্ধনীর চেয়ে বৃহত্তর এবং কম আইপিটিকে ষাট ডিগ্রি কোণে পুনঃনির্দেশিত করে the
হেক্সাগনির একটি বিশেষ মেমোরি মডেল রয়েছে, যেখানে সমস্ত ডেটা অসীম ষড়ভুজ গ্রিডের প্রান্তে সঞ্চিত থাকে। এই প্রোগ্রামটিতে কেবল তিনটি প্রান্ত ব্যবহার করা হয়েছে: একটি দুটি সংরক্ষণ করতে, একটি বর্তমানে পঠিত সংখ্যার জন্য এবং একটি দুটি দুটি মডুলোর জন্য। দেখে মনে হচ্ছে এটির মতো:
Mod \ / Input
|
2
প্রোগ্রামটির ব্যাখ্যার সময় আমি প্রতিটি বিন্দুতে আমরা কোথায় স্মৃতিতে আছি তা সাবধানতার সাথে ব্যাখ্যা করতে যাচ্ছি না, সুতরাং আমরা যখন স্মৃতিতে আছি তখন আপনি যদি বিভ্রান্ত হন তবে এখানে ফিরে আসুন।
এই সমস্ত উপায় ছাড়িয়ে আসল ব্যাখ্যা শুরু হতে পারে। প্রথমে, আমরা একটি 2 দিয়ে মেমরিতে "2" প্রান্তটি পপুলেট করি, তারপরে আমরা একটি নো-অপ্ট চালিত করি এবং মেমরি পয়েন্টারটিকে ডানদিকে ( 2.}
) সরাতে পারি ।
এর পরে, আমরা মূল প্রোগ্রামটির লুপটি শুরু করি। আমরা STDIN থেকে প্রথম সংখ্যাটি পড়ি এবং তারপরে আমরা একটি শর্তযুক্ত ( ?<
) তে আঘাত করি hit যদি এসটিডিনে কোনও নম্বর না থাকে, এটি বর্তমান মেমরি প্রান্তে একটি শূন্য পাঠায়, তাই আমরা বাম দিকে ঘুরিয়ে দেব @
যা প্রোগ্রামটি শেষ করে। অন্যথায়, আমরা একটি আয়না ছুঁড়ে ফেলা, মেমরি পয়েন্টারটি পিছনে এবং বাম দিকে সরিয়ে, 2 দিয়ে ইনপুট ভাগ করার অবশিষ্ট গণনা করতে ষড়ভুজের চারপাশে মোড়ানো এবং তারপরে অন্য শর্তযুক্ত ( /"%>
) চাপুন ।
যদি বাকী অংশটি এক ছিল (অর্থাত্ সংখ্যাটি বিজোড় ছিল), আমরা আবার নো-অপটিকে চালিয়ে শুরু করে উপরের নীল পথটি অনুসরণ করে ডানদিকে ঘুরলাম, তারপরে আমরা ষড়্ভুজের নীচে প্রায় আবৃত করব, বর্তমান প্রান্তটি 10 দ্বারা গুণ করব এবং তারপরে যুক্ত করব আট, একটি দম্পতি আয়না ছুঁড়ে ফেলা, আবার একই গুন এবং সংযোজন করুন, বর্তমান প্রান্তে 188 পেয়ে, ষড়ভুজ শীর্ষে প্রায় আবৃত, আবার না-অপারেটিং চালিয়ে, এবং শেষ পর্যন্ত প্রোগ্রামটি শেষ করুন ( .8/\8.@
)। এই সংঘটিত ফলাফলটি একটি সুখী দুর্ঘটনা ছিল, আমি প্রথমে অনেক সহজ যুক্তি দিয়েছিলাম, কিন্তু লক্ষ্য করেছি যে আমি এটি অপ-এর পক্ষে সরিয়ে ফেলতে পারি, যা আমি হেক্সাগনির চেতনায় বেশি বলে মনে করি।
যদি বাকীটি শূন্য হয় তবে আমরা পরিবর্তে উপরের দিকে লাল পথ অনুসরণ করে বাম দিকে ঘুরলাম। এটি আমাদের বাম দিকে মেমরি পয়েন্টারটি সরিয়ে নিয়ে যায় এবং তারপরে সেখানে মান (ইনপুট মান) একটি সংখ্যা হিসাবে মুদ্রণ করে। আমরা যে আয়নাটির মুখোমুখি হই আমরা যেদিকে চলি ( {/!
) সেদিকে চালিত হওয়ার কারণে কোনও অপ-বিকল্প হিসাবে কাজ করে । তারপরে আমরা ষড়ভুজের কিনারায় আঘাত করলাম যা কেবলমাত্র একটি ফলাফল নিয়ে শর্তযুক্ত কাজ করে, কারণ ইতিমধ্যে ইতিমধ্যে ইনপুট মানটি ইতিবাচক হওয়ার জন্য পরীক্ষা করা হয়েছিল, তাই আমরা সর্বদা ডান দিকে এগিয়ে যাই (যদি আপনি নিজেকে আইপি এর দিকে মুখ করে ভাবছেন) । তারপরে আমরা ইনপুটটি 10 দিয়ে একাধিক করে দুটি যোগ করি, কেবল দিক পরিবর্তন করতে, চারপাশে মোড়ানো এবং মূল মান M, 77 এর ascii মান সহ নতুন মানটিকে ওভারিট করে। তারপরে আমরা কিছু আয়নাতে আঘাত করি এবং এর মাঝের প্রান্তটি দিয়ে প্রস্থান করি একটি ট্রামপোলিন সহ ষড়ভুজ (2<M\>$
)। যেহেতু 77 ইতিবাচক, তাই আমরা ষড়ভুজটির নীচের দিকে ডানদিকে এগিয়ে চলেছি এবং ট্রামপোলিনের কারণে প্রথম নির্দেশটি ( !
) ছেড়ে যায় । তারপরে আমরা বর্তমান মেমরি প্রান্তটি 10 দ্বারা গুণিত করব এবং 88 যোগ করব, 778 পেয়ে যাব We আমরা তারপরে একটি ASCII অক্ষর হিসাবে এই মান মোড 256 (10) আউটপুট করি, যা নিউলাইন হিসাবে ঘটে। অবশেষে আমরা ষড়্ভুজটি থেকে বেরিয়ে এসে প্রথমটিকে আবার গুটিয়ে ফেলি ?
যা পরবর্তী ইনপুট মানটি দিয়ে 778 কে ওভাররাইড করে।