এই প্রোগ্রামটি অ-মুদ্রণযোগ্য অক্ষর দ্বারা পূর্ণ, সুতরাং এখানে একটি হ্যাক্সডাম্প রয়েছে:
00000000: 2573 dc01 7e13 dcb6 1f %s..~....
দ্রষ্টব্য: এটি এমন একটি সংখ্যাসূচক ইনপুট রুটিন ব্যবহার করে যা নেতিবাচক সংখ্যাগুলি ইনপুট করতে অক্ষম, সুতরাং এই জমাটি কেবল নন-নেগেটিভ পূর্ণসংখ্যার মধ্যেই সীমাবদ্ধ।
একটি সমস্যা পুলিশ-ডাকাতদের চ্যালেঞ্জগুলির মধ্যে হ'ল আপনি কোডটির ব্যাখ্যা লিখবেন না (এটি ক্র্যাক করা আরও শক্ত করে তোলা)। অন্যদিকে, এর অর্থ এই যে আমাকে এখানে সমস্যায় পড়তে হবে না।
আমি ভাষাটি 7 হিসাবে বেছে নিয়েছি কারণ বিশেষত এর সংকীর্ণ স্বরলিপিটিতে এটি পড়া বেশ কঠিন, এবং কেন এটি কেবল আমার হওয়া উচিত তা আমি দেখতে পাই না লিখিত প্রোগ্রামগুলির 8-বিট অংশগুলি ঘুরে দেখার ঝামেলাতে যেতে না একটি 3-বিট এনকোডিং শুভকামনা!
ব্যাখ্যা
এখন যেহেতু প্রোগ্রামটি ফাটল ধরেছে (নিষ্ঠুরূপে, দুর্ভাগ্যক্রমে; এটি এই সংক্ষিপ্ত সমাধানগুলির মধ্যে সর্বদা একটি বিপদ), আমি পাশাপাশি যা করতে পারছিলাম তাও ব্যাখ্যা করতে পারি। প্রোগ্রামটি পড়ে এটি মোটামুটি সমাধানযোগ্য ছিল; আমি এটিকে আরও বেশি কঠিন করে তুলতে পারতাম, কিন্তু যখন ব্রুট-ফোর্স ফাটল উপস্থিত থাকে তখন এটি একটি খারাপ ধারণা বলে মনে হয়েছিল।
আমরা আরও প্রাকৃতিক এনকোডিংয়ে প্রোগ্রামটি উপস্থাপন করে শুরু করব। ; স্বাভাবিক হিসাবে, বোল্ড সংখ্যার যে কমান্ড অবিলম্বে চালানো (যা না সব প্রোগ্রামে representable হয় ইঙ্গিত 6
এবং 7
কিন্তু 2
করতে 5
, unbolded সংখ্যার তাদের পলান সমতুল (প্রতিনিধিত্ব না) 0
থেকে 5
, যার মধ্যে সব মূল প্রোগ্রামে representable হয়; নোট এটি 0
পালিয়ে যাওয়া 6
এবং 1
পালিয়ে যাওয়া 7
):
112 7 1 7 34002 77 023 67 13303
7 টি প্রোগ্রাম উত্সে উপলব্ধ কমান্ডগুলির সেটটির অর্থ হ'ল এটি মূলত কেবল একটি আক্ষরিক যা মূল স্ট্যাকের প্রতিনিধিত্ব করে (স্রেফ পালানো কমান্ডগুলি সহ আপনি আর কিছুই করতে পারবেন না, 6
এবং 7
)। সুতরাং একটি প্রোগ্রাম প্রথম যে জিনিসটি করবে তা হ'ল স্ট্যাকের উপরে একগুচ্ছ জিনিস। প্রোগ্রামটির সঞ্চালনের জন্য স্ট্যাকটি কীভাবে দেখায় তা এখানে রয়েছে ( |
in হিসাবে যথারীতি স্ট্যাক উপাদানগুলি পৃথক করে):
772 | 7 | 34662 | 023 | | 73363
চূড়ান্ত স্ট্যাক উপাদানটি তখন চালানোর কোডে অনুলিপি হয়ে যায় (স্ট্যাকের মধ্যে থাকা অবস্থায়)। এটি যেমন ঘটে থাকে, প্রোগ্রামটির কোডের একমাত্র অংশ এটি; অন্য সব কিছুই কেবল ডেটা। এখানে এটি কী অনুবাদ করে:
73363
7 পুশ স্ট্যাকের সম্মুখের একটি খালি উপাদান
3 আউটপুট শীর্ষ স্ট্যাক উপাদান, নীচের উপাদান বাতিল
73 এগুলোর সম্মিলিত প্রভাব: বাতিল শীর্ষ স্ট্যাক উপাদান
3 আউটপুট শীর্ষ স্ট্যাক উপাদান বাতিল নিচে উপাদান
6 শীর্ষ স্ট্যাক উপাদান Escape, তারপর এটি নীচের উপাদানটিতে যুক্ত করুন
3 শীর্ষ স্ট্যাক উপাদান আউটপুট করুন, নীচের উপাদানটি বাতিল করুন
অন্য কথায়, এটি বেশিরভাগ I / O নির্দেশাবলীর একগুচ্ছ। আসুন এটি বিশদভাবে বিশ্লেষণ করুন:
73
73363
এখনও যে স্ট্যাক শীর্ষে তা বাতিল করে ।
3
আউটপুট 023
, এবং বাতিল 34662
। এইভাবে এটি দেখা যায় যে এটি 34662
একটি মন্তব্য, যা প্রোগ্রামটির অন্যান্য সংস্করণে প্রয়োজনীয় বাইটগুলি সঞ্চয় করার জন্য ব্যবহৃত হয়েছিল। 023
যখন আউটপুট দেয় তখন কী হয়, এটি I / O ফর্ম্যাটটি 0 (পূর্ণসংখ্যা) নির্বাচন করে, তারপরে 23
একটি নির্দেশিকা যা প্রয়োগটিকে অনুরোধ করে একটি পূর্ণসংখ্যা ইনপুট করতে (7 এ আপনি ইনপুট অনুরোধ করে এমন নির্দিষ্ট কোডগুলি আউটপুট দেওয়ার মাধ্যমে ইনপুট করেন)। ইনপুটটি নীচের স্ট্যাক উপাদানটির অনুলিপি তৈরি করে করা হয়, উদাহরণস্বরূপ যদি ইনপুট পূর্ণসংখ্যা 10 হয়, তবে পরবর্তী স্ট্যাক উপাদানটি (বর্তমানে 7
) হয়ে যাবে 7777777777
। সুতরাং, আমরা দশমিক ব্যবহারকারীর কাছ থেকে ইনপুট গ্রহণ করছি, কিন্তু এটি অরিয়ার হিসাবে সংরক্ষণ করা হচ্ছে।
6
শীর্ষ স্ট্যাক উপাদান পালাতে (প্রতিটি নিদর্শনের পরিবর্তন 7
করতে 1
; এই হল কিভাবে সম্পূর্ণভাবে গঠিত স্ট্রিং 7
গুলি পলান করা হয়), তাহলে এর আগে স্ট্যাকের উপাদানে এটা appends ( 772
)। আমাদের ডেটা এখন যেমন কিছু7721111111111
।
- অবশেষে,
3
স্ট্যাক উপাদানটিকে প্রশ্নে আউটপুট করে (এবং ডিফল্ট প্রাথমিক স্ট্যাকের একটি ফাঁকা স্ট্যাক উপাদানটি পপ করে)। তার মান সংখ্যা গ্রহণ করে গণনা করা হয় 1
s এবং 7
s, এবং সংখ্যা বিয়োগ 0
s এবং 6
গুলি। ( 2
বেশিরভাগ ক্ষেত্রে মাঝের মাঝামাঝিটি উপেক্ষা করা হয়; এটি যদি স্ট্রিংয়ের শেষে হয় তবে তা উপেক্ষা করার পরিবর্তে এটি একটি পেছনের নতুন লাইন হয়ে উঠবে, তবে পিপিসিআই নিয়মগুলি এটিকে যত্ন করে না)) সুতরাং, আউটপুটটি আসল ইনপুট প্লাস 2।
এই মুহুর্তে, স্ট্যাকের জন্য দরকারী কিছু নেই এবং প্রোগ্রামে কিছুই নেই, সুতরাং প্রোগ্রামটি প্রস্থান করে।
কীভাবে আমরা এটিকে বিপরীত করব? এটা তোলে পরিবর্তনের একটি সহজ ব্যাপার 11
থেকে 00
, যাতে আমরা ইনপুট অক্ষর আছে যা এটি 2 নিম্ন করা prepending করছি, বরং 2 বেশী। 00
প্রোগ্রামে আরও একটি সুবিধামত লুকানো আটটি অক্টাল ডিজিট রয়েছে (যাতে অষ্টাল সংখ্যা এবং বাইটগুলি একে অপরের সাথে লাইন থাকে), তাই আমরা 11
শুরুতে এটি সহজেই অদলবদল করতে পারি ।