ক্রিসমাস উদযাপনের মধ্যে, চালিয়ে যাওয়া বা বন্ধ করা কাজ করা মজাদার চ্যালেঞ্জ ছিল। পোস্ট করার জন্য আপনাকে ধন্যবাদ! এটি গল্ফ করা আকর্ষণীয় ছিল কারণ স্পেসিফিকেশনটি ব্যতিক্রম এবং বিশেষ ক্ষেত্রে পূর্ণ, যার জন্য প্রচুর শর্ত থাকলে। এছাড়াও, যখন আমি রূপান্তর করতে এবং এই সময়ে দশমিক থেকে করার দরকার নেই, আমি না প্রকারের একটি "সর্বোচ্চ" ফাংশন প্রয়োজন প্রতিটি সংখ্যায় ডিজিটের বৃহত্তম সংখ্যা এবং প্রতিটি জায়গায় ডিজিটের বৃহত্তম মান নির্ধারণ।
এর প্রথম সংস্করণটি 4844 বাইট ছিল, আমি আপনাকে কতটা গল্ফ দিয়েছিলাম তার একটি ধারণা দেওয়ার জন্য।
প্রোগ্রামটি পূর্ণসংখ্যার কমা-বিচ্ছিন্ন তালিকা হিসাবে ইনপুটটি প্রত্যাশা করে । কোনও স্পেস বা নিউলাইন নেই। এগুলি ব্যবহার করা অপরিজ্ঞাত আচরণ তৈরি করবে।
' "" "" ""' "" ' ""' "" ' ""' "" ' "" "'" "" "" " '" ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" "" "" ' ""' "" ' ""' "" ' ""' "" ' "" "'" " ' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" '"" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" "" "" ' " "" "" "" " '" ""' "" ' ""' "" ' ""' "" ' "" "" ""' "" ' "" "'" " '" "'" " ' "" ' ""' "" ' ""' "" ' "" "'" "" "" ' "" "" ""' "" " '" "" "" "" "'" "" """ " '" ""' "" "" "" ' "" "" "" ""' "" " '" "'" " '" "" "" ""' "" "" "" "" ' "" "'" "" "" ' ""' "" "" "" ' ""' "" ' ""' "" " '" "" "" "" "" "'" "" " ' "" "" "" ' ""' "" ' "" "'" "" "" "" ' ""' "" ' ""' "" ' ""' "" ' "" "'""" "" "" "" ' "" "" ""' "" "" "" ' ""' "" " '" "'" "" "" "" ' ""' "" " '" " ' "" "" "'" "" "" " '" "'" " '" ""' "" "" "" "" ' "" "" "" "'" " '" "'" "" ' "" "" ""' "" ' ""' "" ' "" "'" "" "" "" " '" "" "" ""' "" ' ""' "" ' """ ' "" "" ""' "" "" "" ' "" "'" "" "" "" " '" "" "" ""' "" " '" ""' "" "" "" ' "" "'" "" "" "" " '" ""' "" "" "" ' ""' "" ' "" "'" "" "" ' "" "" "" " ' "" "" "" "'" "" ' "" "" ""' "" " '" "" "" "" "'" "" "" "" ' "" "'" """ " '" "" "" "'" "" ' ""' "" "" "" " '" ""' "" "" ' "" "" ""' "" ' ""' "" ' "" "'" "" "" "" " '" ""' "" "" " '" "" "" "" "'" "" "" " '" "" "" ""' "" " '" "'" "" "" "" ' "" "" "" "'" "" ' "" "" "" "" "'" "" "" "" "" ' """" "" " '" "" "" ""' "" " '" ""' "" "" "" "" " '" "'" "" "" "" ' "" "'" "" ' "" "" "" ""' "" " '" "" "'" "" " '" "" "" "'" " '" ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" " '" "" ""' "" "" "" " '" "" "" "'" " '" ""' "" ' """ "" "" ' ""' "" " '" "" "'" "" " '" "" ""' "" "" "" ' ""' "" ' ""' "" ' " " '" "'" " '" ""' "" "" "" ' ""' "" ' ""' "" ' "" "'" "" "" "" ' "" "" ""' "" ' "" "'" " '" "" "" ""' "" ' "" "'" "" ' "" "" "'" "" "" "" ' "" "" "" '" "'" "" ' "" "" "" ""' "" "" "" " '" "'" "" ' "" "" "" "" "'" "" "" "" " '" "" "" ""' "" "" "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" " '" "" "" "" " ' "" "" "" "'" " '" "'" " '" "'" " '" "'" " '" ""' "" "" "" "" " '" "" """ "" ' "" "" "" ""' "" "" "" " '" "" "" ""' "" " '" "" "" "" ""' "" "" "" " '" "'" " '" "'" "" ' "" "" ""' "" ' ""' "" ' ""' "" " '"' "" "" "" "" " ' "" ' "" "" "" "'" "" "" "" ' ""' "" " '" "" "" "" ""' "" ' ""' "" "" """ ' "" "" "" "'" " '" ""' "" "" ' "" "" ""' "" "" "" " '" "'" "" ' "" "" " "" "" ' "" "" "" "" "'" " '" "" "" ""' "" " '" ""' "" "" "" "" " '" "'" " ' "" "" "" " '" "" "" ""' "" " '" ""' "" "" "" "" " '" "'" " '" "'" "" """ " '" "" "" ""' "" ' "" "'" "" ' "" "" "" ""' "" " '" "'" "" "" "" ' "" " "" "" ' ""' "" " '" "" "" "" "'" "" "" "" " '" ""' "" "" "" " '" "" "" "" " ' "" "'" "" "" "" "" ' "" "" "" "'" "" "" "" ' "" "'" "" "" "" "" ' ""' "" "" "" "'" "" ' "" "" "" "'" " '" "'" " '" "'" " '" "'" "" ' ""' "" ' " "" "" "" ' ""' "" ' ""' "" ' ""' "" " '" "" "" ""' "" "" "" "" ' "" "'" "" "" "" ' ""' "" ' ""' "" ' ""' "" " '" "" "'" "" "" "" "" ' "" "" "" "" "' ""' "" "" " '" "" "" ""' "" "" "" ' ""' "" ' "" "'" "" "" "" " '" "" "" " " '" "'" " '" ""' "" "" "" ' "" "" "" "'" " '" ""' "" "" "" "" ' "" "" "" " ' "" "" "" "'" " '" ""' "" " '" "" "" "" ""' "" "" "" " '" "'" " '" "'"" '" "'" "" "" "" ' ""' "" ' "" "'" "" ' "" "" "" "" "'" " '" "" "" ""' "" " '" ""' "" "" "" "" ' "" "'" "" "" " '" "" "" ""' "" ' "" "'" "" "" "" " ' "" "" "" " '" "" "" ""' "" ' "" "'" "" ' "" "" "'" "" "" "" ' "" "" ""' ""' "" ' "" "'" " '" "" "" ""' "" ' ""' "" " '" ""' "" "" ' "" ""' "" "" " '" "" "" "'" "" "" "" ' ""' "" " '" "" "" "" "'" "" "" "" ' "" "" "" "'" " '" ""' "" "" "" ' "" "" ""' "" ' ""' "" " '" "" "" "" "'" "" "" "" ' "" '" "'" "" ' "" "'" "" "" ' "" "" "" "'" "" "" " '" "'" " '" ""' "" ' "" " "" "" ' ""' "" ' "" "'" "" "" " '" "" "" ""' "" ' "" "'" " '" "" "" ""' "" "" "" " '" "'" "" ' "" "" "" "" "'" " '" "" "" ""' "" " '" "" "" "'" """" "" " '" "" "" "" "'" "" "" "" " '" "" "" "" "'" "" "" "" ' ""' "" ' "" " ' "" "'" "" ' "" "'" "" "" "" "" ' "" "" "'" "" "" "" ' "" "" ""' "" ' "" " ' ""' "" "" "" " '" "'" "" ' "" "" "" "'" " '" "'" " '" "'" "" ' "" "'""" "" "" "" ' "" "" "" "'" " '" "'" " '" ""' " '" "" "" ""' "" "" "" "" ' " "" ' "" "'" "" "" "" "" ' "" "" "" ""' "" "" "" "" ' "" "" "" ""' "" "" "" " '" "" "" ""' "" " '" "" "" "" ""' "" "" "" " '" "'" " '" "'" "" ' "'"" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' "" "'" "" ' "" "" ""' "" "" "" " ' "" " '" "" "" "" "'" "" "" " '" "'" " '" "'" "" ' "" "" "'" "" "" "" ' "" " "" " '" "'" " '" ""' "" "" "" "" ' "" "" "" "'" " '" "'" "" ' "" "" ""'"" "" "" " '" ""' "" "" "" "" ' "" "" "" "'" "" "" "" ' "" "'" ""
ব্যাখ্যা
প্রোগ্রামটি কীভাবে সুনির্দিষ্ট ইনপুটটি প্রসেস করে তা দেখিয়ে কীভাবে কাজ করে তা আমি আপনাকে চলতে যাচ্ছি 202,100,1
।
শুরুতে, আমরা কয়েকটি মান তৈরি করি যা আমাদের পরে প্রয়োজন হবে - বেশিরভাগ অক্ষরগুলির ASCII কোড যা আমরা আউটপুট করব।
আপনি দেখতে পারেন '8'
এবং '.'
ইতিমধ্যে উপলব্ধ। '|'
তবে, এটি সত্যিই 124, 14 নয় We 124 পেতে এটিতে স্লট # 1 এর দ্বিগুণ অস্থায়ী মান যুক্ত করতে আমরা কিছুক্ষণ লুপ ব্যবহার করি (যা 14 + 55 × 2, কারণ লুপটি 56−1 = 55 এর জন্য চালিত হয়) পুনরাবৃত্তিও)। এটি কিছু বাইট সংরক্ষণ করে কারণ বড় বড় পূর্ণসংখ্যার লিটারেলগুলি 124 এর মতো সত্যই দীর্ঘ। নিম্নলিখিত চিত্রটিতে, আমি প্রোগ্রামটি ব্যবহার করে প্রতিটি ভেরিয়েবলের অবস্থান প্রদর্শন করি।
এরপরে, আমরা সমস্ত অক্ষর ইনপুট করতে চাইছি এবং সেল # 12 থেকে শুরু হওয়া টেপটিতে এগুলি সংরক্ষণ করতে চাই ( পি এটির জন্য চলমান পয়েন্টার)। একই সাথে, আমরা জানতে চাই যে দীর্ঘতম সংখ্যাটি কত দীর্ঘ (কতগুলি সংখ্যা)। এটি অর্জনের জন্য, আমরা সেল # −1 থেকে শুরু করে বাম দিকে বাঁকানো মোট চালিয়ে রাখি (আমরা রান পয়েন্টার হিসাবে q ব্যবহার করি )। প্রথম ইনপুট নম্বর ( 202
) পরে, টেপটি এখন এমন দেখাচ্ছে:
আপনি লক্ষ করেছেন যে সংখ্যাগুলি 4 দ্বারা বন্ধ রয়েছে Well আচ্ছা, আমরা যখন প্রথমবার তাদের ইনপুট করি তখন সেগুলি তাদের ASCII মান হয়, সুতরাং তারা 48 দ্বারা "অফ" হয় এবং কমাটি 44 হয় each প্রতিটি অক্ষরের জন্য আমরা 46 টির অনুলিপি করি '.'
মধ্যে R এবং তারপর যখন একটি লুপ (যা 45 subtracts) সঙ্গে এটি বিয়োগ এবং তারপর আমরা 1. যোগ আমরা যাতে কমা (আমাদের বিভাজক) 0, তাই আমরা একটি শর্তাধীন ব্যবহার করতে পারেন এটি স্বীকার করতে পারি না।
এছাড়াও, আপনি খেয়াল করতে পারেন যে আমরা # 11 এ সেল রেখেছি 0 আমাদের প্রথম সংখ্যার সীমানা সনাক্ত করতে হবে।
পরবর্তী অক্ষরটি একটি কমা হবে, সুতরাং আমরা # 15 এ 0 সঞ্চয় করি তবে অবশ্যই এবার আমরা q অগ্রিম করব না । পরিবর্তে, আমরা q কে 0 এ সেট করে দিয়েছি এবং ইতিমধ্যে 1 টি রেখেছি "ওভাররাইটিং" শুরু করি।
বাকী সমস্ত অক্ষর প্রক্রিয়া করার পরে, আমরা এটি পাই:
আপনি দেখতে পাচ্ছেন, q দ্বারা লেখা 1s এখন দীর্ঘতম সংখ্যার দৈর্ঘ্য (একাকারে) নির্দেশ করে।
একেবারে বামে q সরাতে আমরা এখন কিছুক্ষণ লুপ ব্যবহার করি এবং তারপরে সেখানে অন্য পয়েন্টার রাখি যা আমি r2 বলব । R2 এর উদ্দেশ্য পরে স্পষ্ট হয়ে উঠবে।
এই মুহুর্তে, আমি পরিভাষাটি স্পষ্ট করে বলি যে আমি এটি জুড়ে ব্যবহার করব।
- দ্বারা সংখ্যা , আমি ইনপুট সংখ্যা যে কমা দ্বারা পৃথক করা হয় এক মানে। আমাদের উদাহরণে, তারা 202, 100 এবং 1।
- দ্বারা অঙ্ক , আমি সংখ্যার একটি নির্দিষ্ট এক একটি একক অঙ্ক মানে। প্রথম সংখ্যাটিতে 3 টি সংখ্যা রয়েছে।
- দ্বারা জায়গা , আমি বেশী জায়গা, দশ জায়গা শত শত জায়গা, ইত্যাদি সুতরাং এর অর্থ যদি আমি বলি "বর্তমান জায়গায় ডিজিটের", এবং বর্তমান স্থান বেশী জায়গা, যারা সংখ্যা 2, 0 যে হয়, এবং অন্য 1 অর্ডার।
এখন আমাদের নিয়মিত প্রোগ্রামিংয়ে ফিরে আসুন। প্রোগ্রামের পুরো অংশটি একটি বড় লুপ যা ঘরের দিকে # 0 এ পৌঁছানো অবধি কিউকে এগিয়ে নিয়ে যায়। পথের প্রতিটি কক্ষই একটি স্থানকে প্রতিনিধিত্ব করে, যেখানে ডানদিকে ডান দিকের স্থান রয়েছে এবং কিউ সবচেয়ে তাত্পর্যপূর্ণভাবে শুরু হবে। আমাদের উদাহরণে, এটি শত জায়গা।
আমরা সেল Q পয়েন্টগুলিতে বৃদ্ধি (যা, * কিউ ) বাড়িয়ে এগিয়ে চলেছি ।
আমরা এখন শতাধিক জায়গার জন্য "দ্বিতীয় পর্যায়ে" আছি। এই পর্যায়ে, আমরা খুঁজে পাবেন যে শত জায়গায় সমস্ত সংখ্যার মধ্যে বৃহত্তম অঙ্কটি কী। আমরা এই জন্য একই ইউনারী কাউন্টিং কৌতুক ব্যবহার করেন, এই সময় পয়েন্টার বলা হয় ব্যতীত R এবং পয়েন্টার R2 চিহ্ন তার শুরু অবস্থানে যা আমরা এটা প্রত্যেক সময় আমরা পরবর্তী সংখ্যা উপর সরানো পুনরায় সেট করার প্রয়োজন।
প্রথম সংখ্যা দিয়ে শুরু করা যাক। আমরা পি তে 11 সেট করে শুরু করি (সমস্ত সংখ্যার হার্ড-কোডিং শুরুর অবস্থান)। তারপরে আমরা সংখ্যার শেষটি খুঁজে পেতে কিছুক্ষণ লুপ ব্যবহার করি এবং অবস্থানটি চিহ্নিত করতে সেখানে পি 2 সেট করি। একই সময়ে, আমরা কিউ 2 থেকে 0:
কিউ 2 টি ভার্সগুলিতে ইঙ্গিত করছে এই বিষয়টি দ্বারা বিচলিত হবেন না। আমাদের শূন্য কোষের কোনও প্যাডিং নেই কারণ আমরা শূন্যের সংখ্যাটি শূন্যের কারণেই আমরা # 0 সেল সনাক্ত করতে পারি।
এর পরে, আমরা পি এবং কিউ 2 হ্রাস করে বর্তমান সংখ্যাটি অতিক্রম করব যতক্ষণ না * পি শূন্য হয়। প্রতিটি জায়গায়, * কিউ 2 এর মান আমাদের কী করতে হবে তা আমাদের জানায়। 1 এর অর্থ "কিছুই করবেন না", তাই আমরা চালিয়ে যাচ্ছি। শেষ পর্যন্ত আমরা # #3 সেলটিতে 2 টির মুখোমুখি হই। প্রতিবার * q2 1 এর সমান নয়, Q2 সর্বদা q এর সমান হয় না ।
আমি ইতিমধ্যে বলেছি, দ্বিতীয় ধাপটি "এই জায়গার বৃহত্তম সংখ্যা নির্ধারণ করুন"। সুতরাং আমরা সেট R থেকে R2 , হ্রাস করার জন্য একটি লুপ ব্যবহার * পি এবং পদক্ষেপ দ বামমুখী এবং 1s সঙ্গে টেপ পূরণ করুন, এবং তারপর যখন পদক্ষেপ লুপ অন্যটি ব্যবহার R ডান এবং বৃদ্ধি ফিরে * পি আবার মান পুনরুদ্ধার করতে। মনে রাখবেন যে প্রতিটি সময়ে লুপটি আমরা যে মানটি ব্যবহার করি তার চেয়ে কম পুনরাবৃত্তির জন্য চলে; এ কারণে, লিখিত 1s এর সংখ্যাটি ডিজিটের মানের চেয়ে 3 টি বেশি (4 টির চেয়ে বেশি) হবে এবং চূড়ান্ত মান * পিতে সঞ্চিত 2 আরও হবে। সুতরাং, এটি কার্যকরভাবে * পি 2 দ্বারা হ্রাস পেয়েছে ।
এর পরে, আমরা p2 এর মান পি সেট করেছিলাম এবং তারপরে আমরা আবার সব করি। দ্বিতীয়বারের জন্য, Q2 থেকে 0 নির্ধারণ করুন , পি ডান দিকে সরানোর মাধ্যমে সংখ্যার শেষটি সন্ধান করুন এবং তারপরে পি এবং কিউ 2 একসাথে কমিয়ে এই সংখ্যাটির সংখ্যাগুলি দিয়ে যান । আবার আমরা কক্ষ # −3 তে 2 টির মুখোমুখি হব এবং লিখব যে * আর এর অনেক 1 টি বামে রয়েছে ।
তৃতীয় সংখ্যার ক্ষেত্রে আমরা কিছুই না করে শেষ করি কারণ এর শত জায়গা নেই (সুতরাং q2 কখনই Q তে পৌঁছায় না ) তবে এটি ঠিক আছে কারণ এটি সর্বোচ্চ সংখ্যার মান গণনাকে প্রভাবিত করে না।
আমরা * (আর - 4) সেলটিও সেট করেছিলাম, যা আমি এখানে শিরোনামহীন তীর দিয়ে চিহ্নিত করেছি 1 (যদিও এটি ইতিমধ্যে 1 এ রয়েছে)। আমি আপনাকে এখনও কেন বলব না, তবে সম্ভবত আপনি ইতিমধ্যে অনুমান করেছেন?
* কিউ এর পরবর্তী বৃদ্ধি আমাদের তিন ধাপে নিয়ে যায়, যা "বর্তমান জায়গায় সমস্ত অঙ্ক থেকে সর্বাধিক অঙ্কটি বিয়োগ করে"। আগের মতো, আমরা পি 11 টি এবং কিউ 2 থেকে 0 তে রিসেট করি এবং তারপরে আমরা আগের পর্যায়ে যেমন করেছি সমস্ত সংখ্যার মধ্য দিয়ে যেতে পারি; এই সময় ছাড়া, * কুই = 3 পরিবর্তে 2. প্রতিটি সময় Q2 পূরণ করে কুই এবং পি একটি শত শত জায়গায় হয়, আমরা ব্যবহার কিছুদিনের হ্রাস করার লুপ * পি সেখানে ব্লক বাম 1s হয় অনেক বার হিসাবে * R2 (5 আমাদের উদাহরণে) r ব্যবহার করেএকটি চলমান পয়েন্টার হিসাবে। আমরা আসলে এর চেয়ে আরও একবার এটি হ্রাস করেছি যাতে বৃহত্তম অঙ্কটি শেষ হয় −2 এ, যে কারণে পরে স্পষ্ট হবে:
আমরা সমস্ত সংখ্যা প্রক্রিয়া করার পরে, আমরা এখন ৩ য় পর্যায়ে এসেছি Here এখানে আমরা দুটি একক জিনিস সম্পাদন করি।
- প্রথমত, আমরা আরো আকার বিয়োগ R থেকে -block (প্লাস 1) * কুই কিন্তু ব্যবহার R2 পয়েন্টার, যা বাম পাতার করুন। * q এভাবে নেতিবাচক হয়ে ওঠে। আমাদের ক্ষেত্রে, আর- ব্লকটিতে পাঁচটি 1 রয়েছে, সুতরাং * কিউ −3 হয়ে যায়।
- দ্বিতীয়ত, আমরা একটি পরিবর্তনশীল সেট আউট নির্দেশ করে আমরা এখন আউটপুট পর্যায় ঢুকছে একটি অ শূন্য মান হতে। (প্রযুক্তিগতভাবে, * কিউ ইতিবাচক যে ইতিমধ্যে আউটপুট পর্যায়ে ইঙ্গিত দেয়, কিন্তু এটি পরীক্ষা করা খুব কঠিন, তাই অতিরিক্ত ভেরিয়েবল।)
আপনি এখন বুঝতে পেরেছেন যে আমরা সংখ্যার মধ্য দিয়ে চলেছি, প্রতিটি স্থানের মধ্যে বর্তমান স্থানটি ( * q এর অ -1 মান দ্বারা নির্দেশিত ) সন্ধান করব এবং * কিউ এর মানের উপর নির্ভর করে কিছু করব । আমরা দেখতে পাই যে * q প্রথমে 2 (= সর্বাধিক অঙ্কের মান গণনা করা) করতে উন্নত হয়, তারপরে 3 (এই জায়গার প্রতিটি অঙ্কের থেকে সর্বাধিক অঙ্কের মানটি বিয়োগ) এবং তারপরে আমরা এটিকে বিয়োগ করে তুলি। সেখান থেকে, এটি 1-এ পৌঁছা পর্যন্ত এটি অবিরত থাকবে, এভাবে "কিছু না করা" এর অর্থ পুনরুদ্ধার করা। এই মুহুর্তে, আমরা পরের স্থানে চলে যাই।
এখন, যখন * q নেতিবাচক হয়, আমরা আউটপুট আউট করি। * কিউ হুবহু সঠিক মানের যাতে আমরা 1 টির আগে পৌঁছে যাওয়ার আগে অক্ষরের সারিগুলির সঠিক সংখ্যা আউটপুট করব; বৃহত্তম অঙ্কটি যদি 2 হয় তবে আমাদের 3 টি সারি আউটপুট করতে হবে। আসুন দেখে নেওয়া যাক * কিউ এর প্রতিটি মূল্যে কী ঘটে :
- * কি = −2:
- প্রথম সংখ্যার জন্য, * পি = 2, যা সূচিত করে যে আমাদের একটি
'.'
(বিন্দু) বা একটি ':'
(কোলন) আউটপুট করতে হবে to আমরা q এর দিকে তাকিয়ে কোনটি ঠিক করি : যদি এটি −1 হয় তবে আমরা সেই স্থানে থাকি, সুতরাং আউটপুট করুন ':'
(যা আমরা '8'
+2 হিসাবে গণনা করি ), অন্যথায় ক '.'
।
- দ্বিতীয় সংখ্যার জন্য, * পি = −3। −২ নয় এমন যে কোনও কিছু অর্থ আমরা একটি
'|'
(পাইপ) আউটপুট পাই এবং তারপরে মান বৃদ্ধি করি। এইভাবে এটি সঠিক জায়গায় −2 এ পৌঁছে যাবে এবং তারপরে আমরা সেই অঙ্কের বাকি অংশের জন্য '.'
s / ':'
s আউটপুট করব ।
- প্রতিটি ক্ষেত্রে, আমরা সংখ্যাটি প্রক্রিয়া করার আগে একটি চলক পিডি 0 তেও সেট করেছিলাম এবং আমরা একটি অক্ষর মুদ্রণ করেছি তা বোঝাতে পিডি (= "মুদ্রিত") একটি শূন্যহীন মানতে সেট করেছিলাম।
- তৃতীয় নম্বরের জন্য, কোনও প্রক্রিয়াজাতকরণ ঘটে না কারণ তৃতীয় নম্বরে শত স্থান নেই। এই ক্ষেত্রে, সংখ্যাটি প্রক্রিয়া করার পরে পিডি এখনও 0 হবে, ইঙ্গিত দেয় যে আমাদের এখনও আউটপুট করতে হবে
'|'
(তবে কেবল আউট শূন্য হয় না, কারণ অন্যথায় আমরা এখনও ২ বা 3 পর্যায়ে আছি)।
- সমস্ত সংখ্যা প্রক্রিয়াজাতকরণের পরে, যদি শূন্যের বাইরে হয় তবে একটি নতুন লাইন আউটপুট দিন। নোট করুন যে আমাদের আউট ভেরিয়েবলের প্রয়োজন যাতে আমরা স্টেজ 2 বা 3 এ নতুন লাইন আউটপুট না করি।
- * q = −1: আগের মতো একই, পি প্রথম দুটি সংখ্যা * 2ব্যতীত, সুতরাং উভয় আউটপুট একটি
'.'
(এবং তৃতীয়টি'|'
পূর্বে যেমনআউটপুট দেয়)।
- * কিউ = 0: যখন * কিউ 0 হয়, এর অর্থ হ'ল আমরা যদি সেই জায়গায় থাকি তবে কিছুই করবেন না, অন্যথায় * পি
'|'
নির্বিশেষেএকটি সারির আউটপুট আউট করুন। এইভাবে আমরা অঙ্কগুলির মধ্যে প্যাডিং পাই।
এখন আমরা বৃদ্ধি কুই পরবর্তী জায়গা, দশ জায়গা, এবং বৃদ্ধিতে উপর সরানো * কুই নেই। দ্বিতীয় পর্যায়টির শুরুতে, টেপটি দেখতে এমন দেখাচ্ছে:
তারপরে আমরা স্টেজ 2 পারফর্ম করি ঠিক আগের মতোই। মনে রাখবেন যে কার্যকরভাবে এই জায়গাটিতে প্রতিটি অঙ্ক থেকে 2 বিয়োগ করে এবং সর্বোচ্চ সংখ্যাকে নির্দেশ করে * r2 এর একটি অবিচ্ছিন্ন সংখ্যা ছেড়ে যায়। আমরা পূর্ববর্তী ইউনারি নম্বরটি একা রেখেছি এবং কেবল টেপটি বামদিকে প্রসারিত করে চলেছি; এটি "ক্লিন আপ" এর জন্য অপ্রয়োজনীয় অতিরিক্ত কোডের জন্য ব্যয় করবে। যখন আমরা শেষ হয়ে যাই এবং আমরা * কিউ বৃদ্ধি করি , স্টেজ 3 এর শুরুতে টেপটি এখন:
আসলে, এটি একটি মিথ্যা। এর আগে মনে রাখবেন যেখানে আমি বলেছিলাম যে আমরা * (আর - 4) 1 তে সেট করেছি এবং কেন আপনাকে বলিনি? এখন আমি আপনাকে বলব কেন। এটি এর মতো মামলার ক্ষেত্রে, যেখানে বৃহত্তম অঙ্কটি আসলে 0 হয়, যার অর্থ এই জায়গার সমস্ত অঙ্ক 0 হয় ting উপরের লেবেলযুক্ত তীর দ্বারা নির্দেশিত সেটিং * (আর - 4) 1 টি অবিচ্ছিন্ন সংখ্যাটি 1 দ্বারা প্রসারিত করে, তবে শুধুমাত্র এই বিশেষ ক্ষেত্রে। এইভাবে আমরা ভান করি যেন বৃহত্তম অঙ্কটি 1, যার অর্থ আমরা একটি অতিরিক্ত সারি আউটপুট করব।
পর্যায় 3 পরে (অতিরিক্ত স্থানে সমস্ত অঙ্ক থেকে সর্বাধিক অঙ্ক বিয়োগ করুন), * কিউকে নেতিবাচক করে তোলে এমন অতিরিক্ত পদক্ষেপ সহ , টেপটি দেখতে দেখতে এমনটি দেখাবে। গতবারের বৃহত্তম অঙ্কটি * পি ব্লকে −২ দ্বারা প্রতিনিধিত্ব করা হয়েছিল , তবে এবার তারা সবাই −3 কারণ তারা সবাই আসলে শূন্য কিন্তু আমরা ভান করছি যে সর্বোচ্চ সংখ্যাটি 1 হ'ল।
এখন আসুন দেখুন কি কি * 1 এর দিকে অগ্রসর হওয়ার সাথে সাথে ঘটে :
- যখন * q = −1 হয়, * পি মানগুলি সমস্ত −3 হয়, যার অর্থ আমরা আউটপুট
'|'
গুলি করব এবং সেগুলি বৃদ্ধি করব।
- যখন * কুই = 0, আমরা আউটপুট
'|'
কারণ যে আমরা কি সবসময় কি করতে যখন * কুই = 0, নির্বিশেষে * পি ।
সুতরাং, আমরা পাইপ দুটি সারি পাই।
পরিশেষে, আমরা * q এর জায়গায় চলে যাই । এটি একটি আকর্ষণীয় হয়ে যায় কারণ ':'
আসল অঙ্কটি 1 ছাড়া আর কিছু হলে আমাদের আউটপুট দরকার , তবে '8'
এটি যদি 1 হয় তবে প্রোগ্রামটি কীভাবে এগিয়ে যায় তা দেখা যাক। প্রথমত, আমরা পর্যায় 2 শুরু করার জন্য * কিউ বৃদ্ধি করি :
দ্বিতীয় পর্যায় ("সর্বাধিক অঙ্কের মান গণনা করুন") পরে, আমরা এইটি দিয়ে রেখেছি:
মঞ্চ 3 পরে ("বর্তমান স্থানে সমস্ত অঙ্ক থেকে সর্বাধিক অঙ্কের মানটি বিয়োগ করুন") টেপটি দেখতে এমন দেখাচ্ছে:
এবার আসুন * কিউ এর প্রতিটি পুনরাবৃত্তি ঘুরে:
- * কি = −2:
- প্রথম সংখ্যা: ইতিমধ্যে −2 এ, সুতরাং আউটপুট একটি
':'
( '.'
কারণ q = −1 এর চেয়ে বেশি ) output
- দ্বিতীয় সংখ্যা: −4 এ, সুতরাং আউটপুট এ
'|'
এবং ইনক্রিমেন্ট।
- তৃতীয় সংখ্যা: −3 এ, তাই আউটপুট এ
'|'
। তবে, এবার ইনক্রিমেন্টের পরিবর্তে একটি বিশেষ কেস ট্রিগার করে। কেবলমাত্র যদি আমরা শেষ স্থান ( q = −1) আউটপুট করে থাকি এবং আমরা এর জন্য দ্বিতীয় প্রান্তের ( * q = −2), এবং অঙ্কটি আসলে 1 ( * p = −3) হয় , তারপরে এটিকে −2 এ বাড়ানোর পরিবর্তে আমরা এটিকে −1 এ সেট করি। অন্য কথায়, আমরা ite1 কে একটি বিশেষ মান হিসাবে ব্যবহার করি তা বোঝাতে যে পরবর্তী পুনরাবৃত্তিতে আমাদের '8'
পরিবর্তে আউটপুট প্রয়োজন ':'
।
- * কিউ = −1:
- প্রথম সংখ্যা: ইতিমধ্যে −2 এ, সুতরাং আউটপুট এ
':'
।
- দ্বিতীয় সংখ্যা: −3 এ, সুতরাং আউটপুট এ
'|'
। বিশেষ শর্তটি ট্রিগার করে না কারণ * q আর −2 থাকে না। সুতরাং, বৃদ্ধি।
- তৃতীয় সংখ্যা: −1 এ, তাই আউটপুট
'8'
।
- * কিউ = 0: সাধারণত , আমরা
'|'
এখানেপ্যাডিং সারি আউটপুট করব, কিন্তু বিশেষ ক্ষেত্রে যেখানে আমরা একই জায়গায় আছি ( q = −1), আমরা এড়িয়ে চলেছি।
এর পরে, কিউ 0 তে বাড়ানো হয় এবং লুপটি শেষ হয়।
এখন আপনি জানেন কীভাবে কোনও ইনপুট 202,100,1
কাজ করে। যাইহোক, আরও একটি বিশেষ ক্ষেত্রে রয়েছে যা আমরা এখনও আচ্ছাদন করি নি। আপনি মনে রাখতে পারেন যে আমরা শেষ স্থানটি প্রক্রিয়া করার সময়, যখন * পি −3 ছিল তখন আমরা এটির জন্য −1 সেট করেছিলাম 1
(এটি it2 বাড়ানোর পরিবর্তে) যাতে পরবর্তী পুনরাবৃত্তিটি তার '8'
পরিবর্তে আউটপুট দেয় । এটি কেবলমাত্র কাজ করে কারণ আমাদের একটি পুনরাবৃত্তি রয়েছে যাতে * পি = is3 এবং আমরা এটি বৃদ্ধি করব বা সেটাকে −1 এ সেট করব কিনা সে বিষয়ে আমরা সিদ্ধান্ত নিই। আমরা না যেমন একটি পুনরাবৃত্তির আছে যদি সব বেশী জায়গায় ডিজিটের 0 বা 1. হয় এইরকম ক্ষেত্রে সব * পি 1s হবে মান শুরু -2 এ; এটিকে −1 এ সেট করার সিদ্ধান্ত নেওয়ার কোনও সুযোগ নেইবরং −3 থেকে বাড়ানো । এ কারণে, স্টেজ 3 এর ভিতরে আরও একটি বিশেষ-কেসিং শর্ত রয়েছে ("বর্তমান জায়গায় প্রতিটি অঙ্ক থেকে সর্বাধিক অঙ্কটি বিয়োগ করুন")। আমি দাবি করেছি যে প্রতিটি অঙ্ক থেকে সর্বাধিক অঙ্কের মান বিয়োগের পরে (যার পয়েন্টে সর্বাধিক অঙ্ক at1 এ থাকে), আমরা কেবল এটি আরও একবার হ্রাস করেছি, তবে আসলে এটির উপর একটি শর্ত রয়েছে যা নিম্নলিখিত হিসাবে চলেছে:
আমরা যে অঙ্কটি দেখছি এটি যদি এই জায়গায় সর্বাধিক অঙ্কের সমান হয় ( * পি = −1), এবং এই জায়গাটি স্থান ( Q = −1) হয় এবং সর্বাধিক অঙ্ক 1 ( * (r +) হয় 5) = 0, অর্থাত ইউনারী ব্লক এ অতি বাম মাত্র 5 কোষ দীর্ঘ) হয়, শুধুমাত্র তারপর আমরা চলে * পি এ -1 ইঙ্গিত শুধুমাত্র আউটপুট আবশ্যক আউটপুট একটি এর পুনরাবৃত্তির যে '8'
। অন্যান্য সমস্ত ক্ষেত্রে আমরা আরও একবার এটি হ্রাস করে থাকি।
সম্পন্ন. শুভ নব বর্ষ!
সম্পাদনা 1 (3183 → 3001): কিছু শুভ নববর্ষ গল্ফিং! আমি সম্পূর্ণরূপে পি 2 এবং r2 ভেরিয়েবলগুলি থেকে মুক্তি পেতে সক্ষম হয়েছি ! সংখ্যার শুরু এবং শেষ সন্ধানের জন্য p এখন পিছনে দৌড়, তবে এটি কোডটি সংক্ষিপ্ত বলে মনে হচ্ছে। আমি পাশাপাশি Q2 থেকে মুক্তি পাওয়ার চেষ্টা করেছি, তবে আমি কোডটি সেভাবে ছোট করতে পারি না।
আমি আরও কয়েকটি জায়গা পেয়েছি যেখানে আমি লুপের শেষ মানটিকে পুনরায় ব্যবহারের মতো সাধারণ অপঠনযোগ্য গল্ফিং কৌশলগুলি প্রয়োগ করতে পারি। পরিবর্তে, একটি উদাহরণ দিতে
while *(++p) { 1 } // just increment p until *p is 0; the 1 is a noop
if (pd) { x } else { y } // where pd is a variable
আমি '""""
(প্রথমটি করবো, তারপরে দ্বিতীয়টি করব) এবং '"""
(ধ্রুবক 1) এমনভাবে লিখে এটি সংরক্ষণ করতে পারি যা এটির মতো
if (while *(++p) { pd }) { x } else { y }
অবশ্যই, এটি কেবল তখনই কাজ করে যদি আমি জানতে পারি যে লুপটি কমপক্ষে একটি পুনরাবৃত্তির জন্য চলবে তবে যদি এটি হয় তবে এর রিটার্নের মান পিডি হয় তাই আমি যদি এটির জন্য শর্ত হিসাবে ব্যবহার করতে পারি।