এই চ্যালেঞ্জটি অপঠনযোগ্যদের জন্য নিখুঁতভাবে উপযুক্ত।
এর প্রথম সংস্করণটি ছিল 3379 বাইট, আমি আপনাকে কতটা গল্ফ দিয়েছিলাম তার একটি ধারণা দেওয়ার জন্য।
চ্যালেঞ্জটিতে বর্ণিত ঠিক মতো প্রোগ্রামটি ইনপুটটি গ্রহণ করে: শব্দের একটি পৃথক পৃথক তালিকা (যার মধ্যে অঙ্ক এবং বিরাম চিহ্নগুলিও থাকতে পারে), এর পরে একটি স্থান এবং একটি পূর্ণসংখ্যা যা কমপক্ষে 4 হয় (নিম্ন সংখ্যাগুলি অসীম লুপ উত্পন্ন করে) ।
' "" "" ""' "" "" "" "" ' "" "'" " '" "'" " '" "'" " '" "'" "" ' "" "" "'" " '" "" "" "'" " '" ""' "" "" "" "" "" ' "" "" ""' "" "" "" ' "" "" "" ""' "" " '" "'" "" "" "" ' "" "" "" ""' "" " '" "" "" "" "'" "" "" "" " '""" "" "" " '" "" "" "" "'" "" "" "" " '" "" "" "" "'" "" "" "" " '" "" "" " "" ' "" "" "" ""' "" "" "" "" ' "" "" "" ""' "" "" "" "" ' "" "" "" ""' "" "" "" "" ' "" "" "" ""' "" "" "" "" ' "" "" "" ""' "" "" "" "" ' "" """ "" " '" "" "" "" "'" "" "" "" " '" "" "" "" "'" "" "" "" " '" "" "" "" " ' "" "" "" ""' "" "" "" "" ' "" "" "" ""' "" "" "" "" ' "" "" "" ""' "" "" "" "" ' "" "" "" ""' "" "" "" "" ' "" "" "" "'" " '" ""' "" "" " '" """ "" " '" "" "" "'" "" "" "" " '" ""' "" "" "" "" ' "" "" "" "'" "" "" "" " '" ""' "" " '" "" ""' "" "" "" " '" "" "" "'" "" "" "" " '" ""' "" ' "" " "" "" ' "" "" "" ""' "" " '" "" "'" "" " '" "" "" "'" " '" ""' "" "" """ " '" "" "" "" "'" "" "" "" " '" "" "" "" "'" "" "" "" " '" "" "" "" "'" "" "" "" " '" "" "" "" "'" "" "" "" " '" "" "" "" "'" "" "" "" " '" "" "" " "" ' "" "" "" ""' "" "" "" "" ' "" "" "" ""' "" "" "" "" ' "" "'" """" ' ""' "" "" "" ' ""' "" ' "" "'" "" "" "" " '" "" "" ""' "" ' ""' "" " ' "" "" "" ' ""' "" " '" "'" " '" "'" " '" "'" " '" "'" " '" "'" " '" "" "" " " '" "'" "" ' "" "" ""' "" ' ""' "" " '" "" ""' "" "" "" ' "" "" "" "'" """ "" "" ' "" "'" "" "" "" " '" "" "" ""' "" "" "" " '" "" "" "" "'" "" ' " "" "" " '" "'" "" ' ""' "" "" "" " '" "'" "" ' "" "" "'" "" "" " '" "'" "" ' "" "" "" ""' "" "" "" " '" "'" "" ' "" "" ""' "" "" "" ' "" "'" "" """ "" ' "" "" "" "'" "" ' "" "'" "" "" " '" "'" " '" "'" " '" ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" "" "" ' ""' "" ' ""' "" ' " " '" ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' ""' ""' "" ' ""' "" ' ""' "" ' ""' "" "" "" ' ""' "" ' "" "'" " '" "'" " '" " "" "" ' "" "" "" ""' "" " '" "'" " '" "'" " '" "'" " '" "" "" "'" "" ' "" " ' "" "" "'" "" "" "" ' ""' "" "" "" " '" "" "" "" "'" "" ' "" ""' "" "" '"" "" ' "" "" "'" "" "" "" ' "" "" ""' "" "" "" "" ' "" "'" " '" "" "" ""' "" "" "" "" ' "" "'" "" "" " '" ""' "" "" "" "" ' "" "" "" "'" "" ' "" "" " "" "" ' "" "" ""' "" ' "" "'" "" "" "" ' ""' "" "" "" " '" "" "" "" "'"" " '" "" "" "'" "" ' "" "" "" ""' "" "" "" " '" ""' "" " '" "" ""' "" "" "" " '" "" "" "'" "" "" "" " '" ""' "" "" "" "" ' "" "" "" "'" "" "" "" " ' "" " '" ""' "" "" "" ' ""' "" ' ""' "" " '" "" "" "" ""' "" "" "" " '""" "" "" "" ' "" "" "" "'" " '" "'" " '" ""' "" "" "" ' "" "'" "" "" "" " ' "" "" "" " '" ""' "" "" "" " '" ""' "" "" ' "" ""' "" "" "" "" " '" "" "" " " '" "'" " '" "'" "" ' "'" "" "" "" ' ""' "" ' ""' "" ' ""' "" " '" ""'"" "" " '" "" "" ""' "" "" "" ' "" "" "" ""' "" " '" "'" "" "" "" ' "" "" " "" " '" ""' " '" "'" " '" "'" " '" "'" " '" "'" " '" "'" " '" "'" " '" "'" " '" "'" " '" "'" " '" "'" " '" "'" " '" "'" " '" "'" " '" "'" " '" "'" " '"" ' ""' "" "" "" " '" "" "" ""' "" "" "" "" ' "" "'" "" "" "" "" ' "" "" " "" ' ""' "" " '"' "" "" "" " '" "'" " '" "'" " '" ""' "" " '" "" "'" "" " ' "" "" "" "" " '" "" "" ""' "" ' ""' "" ' "" "'" "" ' "" ""' "" "" ' "" "" '" "" "'" "" "" ' "" "" "" ""' "" "" "" " '" "" "" "'" "" ' ""' "" "" "" " '" ""' "" " '" "" "" "" ""' "" "" "" " '" "'" "" ' "" "" ""' "" " '" "'" "" "" "" ' "" "'" "" ' "" "" "'" " '" "" "" "'" "" ' ""' "" "" "" " '""" ' "'" " '" "'" " '" "'" " '" "'" " '" "'" " '" "'" " '" "'" " '" "'" " ' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' "" "" "" "'" "" "" " '" "" "" "" "'" "" ' ""' "" "" "" " '" "" "" "" "'""" ' "'" ' "'" "" "" ' "" "" "" "'" "" "" " '" "" "" "" "'" "" ' ""' "" "" "" " '" "" "" "" "'" "" ' ""' "" ' "" "" "" "'" " '" "'" " '" "'" "" ' "" " "" "" "" ' "" "" "" "'" " '" ""' " '" "" "" ""' "" ' ""' "" ' ""' "" " '"" " '"' "" "" "" " '" "'" " '" ""' "" "" "" "" ' "" "" ""' "" " '" ""
ব্যাখ্যা
প্রোগ্রামটি ইনপুটটি কীভাবে প্রসেস করে আমি আপনাকে তাড়াতে চলেছি thyme horseradish peppermint 10
। প্রত্যাশিত আউটপুট হয় thyme,\nhorser...,\npeppermint
।
প্রথমে আমরা সেল # 7 এ শুরু করি এবং পুরো ইনপুটটি পড়ি, তবে প্রতিটি অক্ষর থেকে 32 বিয়োগ করে যাতে স্পেসগুলি শূন্য হয়ে যায়।
সুস্পষ্ট কারণে, এটি চলমান পয়েন্টারটি ( পি নামে এখানে নামকরণ করা হয়েছে, ঘরে # 0 টি সঞ্চিত আছে) শেষে যাবে। শেষ ফাঁকটি খুঁজে পেতে আমরা একটি লুপ ব্যবহার করি, যা আউটপুটটির প্রস্থ নির্ধারণ করে এমন সংখ্যার শুরু (এই উদাহরণে সেল # 36)।
আমরা এখন নম্বরটি ডিকোড করতে চাই (অর্থাত্ দশমিক থেকে রূপান্তর)। চূড়ান্ত ফলাফল টি এবং আর উভয় কক্ষে হবে । আমরা শূন্য থেকে শুরু যে সত্য উপর নির্ভর করে।
সংখ্যার প্রতিটি অঙ্কের জন্য, নিম্নলিখিতটি করুন:
- −15 এ টি সেট করুন ।
- কিছুক্ষণের মধ্যে লুপ, হ্রাস r (যার ফলাফল এখনও পর্যন্ত রয়েছে) থেকে −1 (কারণ আমাদের ঠিক r পুনরাবৃত্তির প্রয়োজন , তবে যেহেতু লুপের অবস্থা হিসাবে এটি পরীক্ষা করার আগে হ্রাস হ্রাস ঘটে তাই 0 এ হ্রাস করলে আরও কিছু কম পুনরাবৃত্তি ঘটবে) এবং প্রতিটি পুনরাবৃত্তির জন্য, 10 টি যোগ করুন । এখন টি 10 বার পূর্ববর্তী ফলাফলের বিয়োগ 15 ধারণ করে।
- আবার যখন একটি লুপ, হ্রাস * পি 0 এবং প্রতিটি পুনরাবৃত্তির জন্য, 1 যোগ টি । পরে টি অক্ষর: সঠিক অন্তর্বর্তী ফলাফলের এতদূর রয়েছে
'0'
করার '9'
হওয়া ASCII কোড, তাই 32 এর পূর্ববর্তী বিয়োগ তারা 16-25 হয় পরে 48-57, তাই আমরা আসলে 15-24 যোগ টি , যা -15 সঙ্গে বাতিল আমরা এটা আগে সেট। এটিও গুরুত্বপূর্ণ যে এটি কোষগুলিকে অঙ্ক করে যা ডিজিটাল অক্ষর ধারণ করে যাতে পরবর্তী কোডগুলি শব্দের তালিকার শেষটি সনাক্ত করতে পারে।
- নতুন মধ্যবর্তী ফলাফলকে আর সেট করুন যাতে পরবর্তী পুনরাবৃত্তি এটি আর-তে খুঁজে পায় । (দ্রষ্টব্য , আমাদের আবার টি থেকে পড়ার দরকার নেই , লুপের সময় আমরা কেবলমাত্র শেষের মানটি ব্যবহার করতে পারি কারণ আমরা জানি যে পি পি শূন্য হতে পারে না, তাই এটি কমপক্ষে একবার চালানো হয়েছে))
অবশেষে, আমরা যে সংখ্যাটি স্রেফ গণনা করেছি তাকে রূপে রূপান্তর করতে আমরা আর একটি সরল যখন লুপ ( কাউন্টার হিসাবে টি হ্রাস করা ) ব্যবহার করি। আমরা সেল 0 0 থেকে বাম দিকে যেতে 1s স্ট্রিং সঞ্চয় করি। এটি নির্ভর করে যে সেল # 1, এটির জন্য আমাদের চলমান পয়েন্টার ( কিউ ) 0 থেকে শুরু হবে We আমরা একটি কম 1s পাই কারণ অপঠনযোগ্যগুলিতে লুপগুলি এমন হয়:
এরপর আমরা আর মান প্রয়োজন দ , ব্যবহার পুনরায় তাই আমরা যে অন্য কিছু কক্ষ। আমরা পয়েন্টারগুলি p এবং q পুনরায় সেট করি এবং পরে আমাদের প্রয়োজনীয় অক্ষরগুলির ASCII কোড সহ কিছু ঘর শুরু করি। আমিও লেবেল থাকেন গ এবং গুলি যা আমরা পরে ব্যবহার করা হবে, এবং আমরা যে উপর নির্ভর করবে গুলি শূন্য এ শুরু হয়:
আরে, এক মিনিট অপেক্ষা করুন সেল # 0 রঙিন কেন লাল? ... ঠিক আছে, এটি একটি চৈতন্য কৌশলটি হাইলাইট করা। মনে আছে আমরা এক 1 খুব কম আউটপুট? কৌশলটি হ'ল আমরা এর জন্য সংশোধন করার জন্য # 0 কক্ষটি একটি "এক্সটেনশন" হিসাবে ব্যবহার করি। এটি কাজ করে কারণ আমরা জানি যে পি কখনই 0 হবে না This এইভাবে, লাল ব্লকটি এখন 10 কোষ প্রশস্ত, ঠিক আমাদের সংখ্যাটি। এটি 0 টির পরিবর্তে Q থেকে 1 টি শুরু করতে সক্ষম হতে 9 টি অক্ষর সাশ্রয় করে ।
এখন আমরা সেই সময়ের লুপটি প্রবেশ করি যা শব্দের মধ্য দিয়ে যায় এবং সেগুলি সমস্ত আউটপুট করে।
পদক্ষেপ 1: পরবর্তী শব্দটি বর্তমান লাইনে ফিট হবে কিনা তা সন্ধান করুন। আমরা কেবল চলন্ত এটি করতে পি অধিকার এবং কুই যখন একটি লুপ পর্যন্ত অবশিষ্ট পি পরবর্তী ফাঁক হিট:
এখন যে পি হয় ডান শব্দের, আমরা পরীক্ষা করতে পারবেন এটি পরীক্ষা যদি দ্বারা তালিকায় শেষ কথা কিনা * (P + 1) শূন্য। আমরা যে মান সংরক্ষণ (আমাদের উদাহরণে 72 যা কারণ এটি "জ" "-এর সজিনা" বিয়োগ 32 থেকে) মধ্যে গ কারণ আমরা তা পরে আবার প্রয়োজন হবে। এই ক্ষেত্রে এটি শূন্য নয়, সুতরাং শব্দের পাশাপাশি আমাদের একটি কমা আউটপুট তৈরি করতে হবে, সুতরাং শব্দটি একটি অক্ষর দীর্ঘতর। আরও একবার কিউ হ্রাস করে এটি অ্যাকাউন্ট করুন । অবশেষে, শব্দের শুরুর দিকে পি আবার সরানোর জন্য লুপের সময় অন্যটি ব্যবহার করুন ।
আমরা এখন জানি যে শব্দটি বর্তমান লাইনে ফিট হবে কারণ q একটি শূন্য- বিন্দুতে নির্দেশ করছে, সুতরাং আমাদের যা করতে হবে তা হ'ল:
- প্রতিটি অক্ষর মুদ্রণ করে শব্দের মাধ্যমে আবার পি এগিয়ে যান (প্লাস 32, কারণ সমস্ত ASCII কোড 32 দ্বারা বন্ধ রয়েছে)।
- যদি সিটি শূন্য নয়, একটি কমা মুদ্রণ করুন (ঘরে # 5 মানটি ব্যবহার করে)।
- সেট গুলি একটি নন-জিরো মান পরবর্তী পুনরাবৃত্তিতে আমরা লাইনের শুরুতে আর তাই আউটপুট পরবর্তী শব্দের আগে একটি স্থান অক্ষর প্রয়োজন ইঙ্গিত। (আমরা এর জন্য উপরের মুদ্রণ বিবৃতিটির রিটার্ন মানটি পুনরায় ব্যবহার করি, যা কমাটির জন্য 44))
এখনও পর্যন্ত আউটপুট: thyme,
তারপরে বড় লুপের পরবর্তী পুনরাবৃত্তি শুরু হয়। আগের মতোই, আমরা পরীক্ষা করে দেখি যে আমরা বাম থেকে ডানে শব্দের মধ্য দিয়ে যেতে যেতে পরবর্তী শব্দটি কিউ হ্রাস করে বাকী রেখার সাথে বাকী আছে কিনা । নোট করুন যে আমরা বর্তমান লাইনে ইতিমধ্যে কতগুলি অক্ষর মুদ্রিত করেছি তার উপর নজর রেখে, পূর্ববর্তী পুনরাবৃত্তি থেকে q এখনও −5 is "সজিনা", প্লাস কমা জন্য, প্লাস এক অক্ষর গণনা কারণ পরে গুলি হল নন-জিরো যা নির্দেশ করে আমরা আউটপুট পাশাপাশি একটি স্থান প্রয়োজন, কুই 1s ব্লক শেষে পেরিয়ে হবে:
এখন কিউ একটি শূন্য কক্ষে পয়েন্ট, যার অর্থ হ'ল "ঘোড়া রাশি" বর্তমান লাইনের সাথে খাপ খায় না। আমরা এখন যা করি এটি নির্ভর করে যে গুলি শূন্য নয় কিনা । আমাদের ক্ষেত্রে এটি, যার অর্থ আমাদের পরবর্তী লাইনে আবৃত করা প্রয়োজন। এর জন্য আমাদের যা করতে হবে তা হ'ল:
- একটি নতুন লাইন মুদ্রণ করুন (সেল # 3 ব্যবহার করে)
- সেট কুই 1 ফিরে
- সেট গুলি 0
এখনও পর্যন্ত আউটপুট: thyme,\n
পরবর্তী পুনরাবৃত্তির জন্য, পি আগের মতো একই জায়গায় রয়েছে, তাই আমরা আবার একই শব্দটির দিকে তাকাব। পূর্বের মতো, আমরা "ঘোড়াগুলিতে" অক্ষর গণনা করি, সেট গ আবার যখন এর পরে আরও একটি শব্দ লক্ষ্য করা যায়, কমাটির জন্য হ্রাস q , এবং শব্দের শুরুর দিকে পি: রাইন্ড করে:
পূর্ববর্তী পুনরাবৃত্তির মতো, আমরা দেখতে পেলাম যে "ঘোড়াগুলি" এখনও ফিট করে না কারণ q শূন্য কোষে শেষ হয়। যাইহোক, এই সময় গুলি শূন্য, যার অর্থ আমরা গতবারের চেয়ে আলাদা কিছু করি। আমাদের কিছু শব্দ, তিনটি বিন্দু এবং একটি কমা আউটপুট করতে হবে। আমাদের প্রস্থটি 10, সুতরাং আমাদের শব্দের 6 টি অক্ষর আউটপুট করতে হবে। আসুন দেখুন আমরা কোথায় শেষ:
- 1s এর লাল ব্লকের শুরুটি সন্ধান করুন। আমরা ডান দিকে গিয়ে এটি করতে পারি কারণ আমরা জানি যে এর অবশ্যই q এর বাম হতে হবে।
- বৃদ্ধি যদি আমাদের আরও একটি কমা আউটপুট ( সি ≠ 0) প্রয়োজন হয় তবে আরও একবার কিউ ।
টেপটি এখন এমন দেখাচ্ছে:
আমি এখানে 6 টি কোষ বিস্তৃত করেছি। আপনি দেখতে পাচ্ছেন, আমাদের অবধি অক্ষর আউটপুট করা দরকার q = −1 । এটি চেক করার জন্য খুব কোড-দক্ষ (মূলত, while ((++q)+1) { ... }
)। তাই:
- এই অক্ষরগুলি মুদ্রণ করুন (প্লাস 32, কারণ সমস্ত ASCII কোডগুলি 32 দ্বারা বন্ধ রয়েছে) অবধি Q না হওয়া পর্যন্ত −1 পৌঁছায়। পি তখন "অশ্বারোশিষ" শব্দের মাঝামাঝি 19 এর কোষে থাকবে।
- তিনটি বিন্দু মুদ্রণ করুন। যেহেতু মুদ্রণ কমান্ড তার নিজস্ব যুক্তি ফেরায়, আমরা কোড-দক্ষতার সাথে এটি নীড় (প্রয়োজনীয়ভাবে,
print(print(print('.')))
) করতে পারি। আমরা # 5 ঘর থেকে ASCII মানটি নিয়েছি এবং বিন্দুর ASCII কোড পেতে এটিতে 2 টি যুক্ত করি।
- পদক্ষেপ পি শব্দের শেষে হয়। যেহেতু আমরা জানি যে আমরা ইতিমধ্যে শব্দের শেষে পৌঁছতে পারিনি (কারণ শব্দটি দীর্ঘ ছিল, এবং বিন্দাগুলি ফিট করার জন্য এটি থেকে কমপক্ষে 3 টি অক্ষর অপসারণ করতে হয়েছিল), এই লুপটিতে অবশ্যই কমপক্ষে একটি পুনরাবৃত্তি রয়েছে, সুতরাং লুপটি যখন ডুপটির জন্য ASCII মান গণনা করে এবং তারপরে লুপটির রিটার্ন মান মুদ্রণ ফাংশনগুলিতে পাস করার সময় কোডটির চেয়ে ছোট হয়।
- সি -শূন্য না হলে কমা মুদ্রণ করুন ।
এই সব পরে, আমরা একটি newline এবং সেট (সেল # 3 ব্যবহার করে) প্রিন্ট কুই 1. ফিরে আমরা সেট করতে পারেন গুলি 0 যদিও এটি ইতিমধ্যেই 0, যা এই একই তোলে যখন আমরা সম্পৃক্ত রয়েছে যে, আমরা ইতিপূর্বে করেছিল পরের লাইনে (যখন গুলি নন-জিরো ছিল না), তাই কোড পুনরায় এড়াতে, আমরা এটা শর্তসাপেক্ষ যে চেক পরে কি গুলি ।
এখনও পর্যন্ত আউটপুট: thyme,\nhorser...,\n
একটি মাত্র পুনরাবৃত্তি বাকি আছে। এবার শব্দের অক্ষর গণনা করার পরে আমরা এটি পেয়েছি:
এবার সেখানে পরে কিছুই নয় পি , তাই আমরা সেট গ "কোন কমা" ইঙ্গিত 0, এবং সেই অনুযায়ী আমরা হ্রাস না কুই আরও সময়। যেহেতু q এখন একটি শূন্য-কক্ষকে নির্দেশ করে, আমরা জানি শব্দটি ফিট হয়ে যাবে, সুতরাং একই কোডটি প্রথম পুনরাবৃত্তির মতো কার্যকর করা হবে, এই সময়টি সি শূন্য ব্যতীত , তাই এটি কমাটি মুদ্রণ করবে না।
আউটপুট: thyme,\nhorser...,\npeppermint
এই ওয়াকথ্রুতে আমি এমন কোনও মামলা অন্তর্ভুক্ত করি নি যেখানে কোডটি আসলে কোনও স্থান মুদ্রণ করবে, তবে আমি মনে করি এটি এখন মোটামুটি পরিষ্কার হওয়া উচিত। কোড খুঁজে বের করে যদি যে শব্দ তড়কা ( * কুই ≠ 0) এবং গুলি , নন-জিরো এটা করার আগে কোনো শব্দ কেবল আউটপুট একটি স্থান হবে।