99 (উচ্চারিত "নিরানব্বই") হ'ল এক নতুন নতুন এসোটেরিক প্রোগ্রামিং ল্যাঙ্গুয়েজ ( 99 এর সাথে বিভ্রান্ত হওয়ার জন্য নয় , তির্যকটি নোট করুন)। এই চ্যালেঞ্জটিতে আপনার কাজটি হ'ল 99 এর পক্ষে একজন অনুবাদক লিখুন যা যতটা সম্ভব সংক্ষিপ্ত। সবচেয়ে কম বাইট সহ জমা দেওয়া জয়লাভ করে। টাইব্রেকার প্রথমে পোস্ট জমা দেওয়ার জন্য যায়।
যেহেতু এই প্রশ্নটি স্বাভাবিকের চেয়ে কিছুটা গভীরতর, এবং আমি ভাল উত্তর দেখতে আগ্রহী, তাই আমি আমার প্রিয় উত্তরের (অগত্যা বিজয়ী নয়) একটি 250 প্রতিবেদনের অনুদান প্রদান করব।
99 স্পেক
99 একটি অপরিহার্য ভাষা। একটি 99 প্রোগ্রামের প্রতিটি লাইন একটি একক বিবৃতি , এবং কার্যকর করার সময়, নির্দেশ পয়েন্টারটি শীর্ষ লাইন থেকে শুরু হয় এবং পরবর্তী লাইনগুলির প্রতিটি মধ্য দিয়ে যায় এবং সেগুলি চালিয়ে যায়। শেষ লাইনটি কার্যকর করা হলে প্রোগ্রামটি শেষ হয়। গোটো স্টেটমেন্টগুলি নির্দেশ পয়েন্টারের পথটিকে পুনরায় সাজিয়ে তুলতে পারে।
নিউলাইন, স্পেস এবং 9
কেবলমাত্র তিনটি অক্ষর যা 99 টি প্রোগ্রামে গুরুত্বপূর্ণ। অন্যান্য সমস্ত অক্ষর সম্পূর্ণ উপেক্ষা করা হয়। অতিরিক্তভাবে, প্রতিটি লাইনের পিছনের স্থানগুলিকে অগ্রাহ্য করা হয় এবং একক সারিতে একাধিক স্পেস এক স্থান হিসাবে পড়ে। ("নিউলাইন" কোনও সাধারণ লাইন ব্রেক ব্রেককে বোঝায় । আপনার দোভাষী যেটি ব্যবহার করেন তা বিবেচ্য নয়))
সুতরাং এই প্রোগ্রাম:
9 BLAH 99 9a9bb9c9
9 this line and the next have 6 trailing spaces 9
এই প্রোগ্রামে অভিন্ন:
9 99 9999
9 9
ভেরিয়েবল
99 এ চলকগুলির সকলেরই নাম রয়েছে যা এক বা একাধিক 9
স্ট্রিং একসাথে ( 9+
রেজেক্সে) থাকে। উদাহরণস্বরূপ, 9
, 99
, এবং 9999999999
সব স্বতন্ত্র ভেরিয়েবল। স্বাভাবিকভাবেই, অসীম অনেকগুলি রয়েছে (মেমরির সীমাবদ্ধতা ব্যতীত)।
প্রতিটি ভেরিয়েবলের মান হ'ল একটি স্বাক্ষরিত, স্বেচ্ছাচারিত নির্ভুলতা পূর্ণসংখ্যা। ডিফল্টরূপে, প্রতিটি ভেরিয়েবলকে তার নিজস্ব সংখ্যা উপস্থাপনের জন্য বরাদ্দ করা হয়। সুতরাং যদি এটি পুনরায় নিয়োগ না করা হয় তবে ভেরিয়েবলের মান 9
9 নম্বর হয় এবং ভেরিয়েবলের মান 99
হয় 99 নম্বর এবং আরও অনেক কিছু। ভেরিয়েবলগুলি স্পষ্টভাবে নির্ধারিত না করা পর্যন্ত আপনি এটিকে প্লেইন সংখ্যা হিসাবে বিবেচনা করে ভাবতে পারেন।
আমি V
নীচে একটি নির্বিচারে পরিবর্তনশীল নাম উল্লেখ করতে ব্যবহার করব ।
প্রত্যেকটি উদাহরণস্বরূপ V
দিয়ে প্রতিস্থাপিত করা যেতে পারে 9
, 99
, 999
, 9999
, ইত্যাদি
বিবৃতি
99 টিতে পাঁচটি পৃথক বিবৃতি প্রকার রয়েছে । একটি 99 প্রোগ্রামের প্রতিটি লাইনে ঠিক একটি বিবৃতি থাকে।
এখানে বর্ণিত সিনট্যাক্সটি ধরে নিয়েছে যে সমস্ত বহিরাগত অক্ষর মুছে ফেলা হয়েছে, সমস্ত অনুমানযোগ্য স্থান সরিয়ে ফেলা হয়েছে এবং একাধিক স্পেসের সমস্ত ক্রম একক স্পেসে প্রতিস্থাপন করা হয়েছে।
1. কোন অপারেশন
খালি লাইনটি কোনও অপ-অপশন । এটি কিছুই করে না (নির্দেশের পয়েন্টার বাড়ানোর পাশাপাশি)।
2. আউটপুট
V
V
একটি লাইনের একক ভেরিয়েবল প্রিন্ট করে যা স্টডআউটে পরিবর্তনশীল।
যদি V
এর বিজোড় সংখ্যার 9
(( 9
, 999
ইত্যাদি) থাকে তবে V
9 দ্বারা বিভক্তের পূর্ণসংখ্যা মানটি মুদ্রণ করা হবে (দশমিক ক্ষেত্রে)।
যদি V
একটি এমনকি সংখ্যা হয়েছে 9
( 'গুলি 99
, 9999
ইত্যাদি,) তাহলে হওয়া ASCII কোড দিয়ে চরিত্র V
9 দ্বারা বিভক্ত, গেলিক ভাষার 128 প্রিন্ট করা হবে। (এটি (V / 9) % 128
0 থেকে 127 পর্যন্ত একটি মান))
উদাহরণ : প্রোগ্রাম
9
9999
মুদ্রণ হবে 1W
। প্রথম লাইন প্রিন্ট করে 1
কারণ 9/9 হয় 1. দ্বিতীয় লাইন প্রিন্ট W
কারণ 9999/9 1111, এবং 1111 মড 128 87, এবং 87 এর জন্য অক্ষর কোড W
।
নোট করুন লাইন বিরতি আউটপুট টোকেনগুলির মধ্যে মুদ্রিত হয় না। \n
একটি লাইন বিরতির জন্য স্পষ্টভাবে মুদ্রণ করা দরকার।
3. ইনপুট
V
শীর্ষস্থানীয় স্থান সহV
একটি লাইনে একক ভেরিয়েবল স্টিডিনের কাছ থেকে ইনপুট নেয় এবং এটিকে ভেরিয়েবলে সঞ্চয় করে।
এর যদি V
একটি বিজোড় সংখ্যার সংখ্যা থাকে 9
তবে ব্যবহারকারী যে কোনও স্বাক্ষরিত পূর্ণসংখ্যায় টাইপ করতে পারেন, এবং V
সেই মানটি 9 বার সেট করা হবে।
যদি V
এর এমনকি সংখ্যার সংখ্যা থাকে 9
তবে ব্যবহারকারী যে কোনও এএসসিআইআই অক্ষর টাইপ করতে পারেন এবং V
তার চরিত্রের কোডটি 9 বার সেট করা হবে।
উদাহরণ : প্রদত্ত -57
এবং A
ইনপুট হিসাবে, এই প্রোগ্রাম
9
9
99
99
আউটপুট হবে -57A
। অভ্যন্তরীণভাবে, ভেরিয়েবলের 9
মান -513 এবং 99
মান 585 হবে।
আপনার দোভাষীটি অনুমান করতে পারে যে ইনপুটগুলি সর্বদা সিনট্যাক্টিকভাবে বৈধ থাকে।
৪. অ্যাসাইনমেন্ট
এই বিবৃতিটি নির্বিচারে দীর্ঘ হতে পারে। এটি একটি লাইনে দুটি বা তত বেশি ভেরিয়েবল, স্পেস দ্বারা পৃথক করে:
V1 V2 V3 V4 V5 ...
এই নির্ধারণ সব সমষ্টির 'এমনকি সূচকের সঙ্গে গুলি, বিয়োগ এর সমষ্টি ' অদ্ভুত সূচকের (ব্যতীত সঙ্গে গুলি )। অ্যাসাইনমেন্টগুলি মান দ্বারা হয়, রেফারেন্স দ্বারা নয়।V1
V
V
V1
এটি বেশিরভাগ ভাষায় অনুবাদ করা যেতে পারে ।V1 = V2 - V3 + V4 - V5 + ...
সুতরাং, যদি কেবল দুটি ভেরিয়েবল থাকে তবে এটি সাধারণ অ্যাসাইনমেন্ট:
V1 V2
→ V1 = V2
যদি সেখানে তিনটি থাকে, তবে এটি বিয়োগ:
V1 V2 V3
→ V1 = V2 - V3
এবং +
/ -
সাইন প্রতিটি অতিরিক্ত ভেরিয়েবলের সাথে পিছনে পিছনে স্যুইচ করে চলে:
V1 V2 V3 V4
→ V1 = V2 - V3 + V4
উদাহরণ : এই প্রোগ্রামটি আউটপুট দেবে 1110123
:
999 Prints triple-nine divided by nine (111).
999 9 9 Assigns triple-nine to zero (nine minus nine).
999 Prints triple-nine divided by nine (0)
9 999 9 Assigns single-nine to negative nine (zero minus nine).
999 999 9 Adds nine to triple-nine (really subtracts negative nine).
999 Prints triple-nine divided by nine (1).
999 999 9 Adds nine to triple-nine (really subtracts negative nine).
999 Prints triple-nine divided by nine (2).
999 999 9 Adds nine to triple-nine (really subtracts negative nine).
999 Prints triple-nine divided by nine (3).
৫. গোটো (সমস্ত শূন্য হলে লাফ দিন)
এই বিবৃতিটিও ইচ্ছামত দীর্ঘ হতে পারে। এটি একটি লাইনে দুটি বা তত বেশি ভেরিয়েবল, একটি শীর্ষস্থানীয় স্থান সহ স্পেস দ্বারা পৃথক করে :
V1 V2 V3 V4 V5 ...
যদি কিছু মান মান -শূন্য হয়, তবে এটি ঠিক কোনও অপ-এর মতো আচরণ করে। নির্দেশ পয়েন্টারটি যথারীতি পরবর্তী লাইনে সরানো হয়।V1
তাহলে সব মূল্যবোধের ব্যতীত হয় শূন্য, তারপর নির্দেশ পয়েন্টার নম্বর লাইন চলে যায় । লাইনগুলি শূন্য-সূচকযুক্ত, সুতরাং যদি শূন্য হয়, তবে পয়েন্টারটি শীর্ষ লাইনে চলে যায়। Termin ণাত্মক বা সর্বোচ্চ সম্ভাব্য সূচকের (লাইন বিয়োগের সংখ্যা) এর চেয়ে বড় হলে প্রোগ্রামটি সমাপ্ত হয় (সাধারণত ত্রুটি ছাড়াই )।V1
V1
V1
V1
নোটটি এখানে 9 দ্বারা বিভক্ত হয়নি। এবং যেহেতু ভেরিয়েবলের এমন মান হওয়া অসম্ভব যেটি 9 এর একাধিক নয়, কেবল 9 টির গুণকগুলিই কেবল লাইন সংখ্যাগুলিতে লাফানো যায়।V1
উদাহরণ:
এই প্রোগ্রামটি 1
চিরকাল মুদ্রণ করবে:
9 Prints single-nine divided by nine (always 1).
99 9 9 Assigns double-nine to zero.
99 99 Jumps to line zero (top line) if double-nine is zero.
এই প্রোগ্রাম
99999999 Print G.
999 99 Set triple-nine to ninety-nine.
9999999999 9999999999 9999999999 99 99 9 9 999 999 Set 10-nine to zero.
99999999999 9999999999 Set 11-nine to zero.
999 Print triple-nine's value divided by nine. (This is the ninth line.)
99999999 Print G.
999 999 9 Subtract nine from triple-nine.
99999 999 Jump to line 5-nines if triple-nine is zero (ends program).
9 99999999999 9999999999 Jump to line nine if 10-nine and 11-nine are zero (always jumps).
হ্রাস ক্রমে 11 থেকে 1 সংখ্যা আউটপুট দেবে, এর চারপাশে ঘিরে G
:
G11G10G9G8G7G6G5G4G3G2G1G
অতিরিক্ত তথ্য
আদর্শ দোভাষীটি আর্গুমেন্ট হিসাবে 99 প্রোগ্রামের ফাইল নাম সহ কমান্ড লাইন থেকে চালিত হবে । আই / ও কমান্ড লাইনের ফ্লাইতেও করা হবে।
তবে আপনি কেবল একটি ইন্টারপ্রেটার ফাংশন লিখতে পারেন যা প্রোগ্রামটিকে স্ট্রিং হিসাবে গ্রহণ করে এবং ইনপুট টোকেনগুলির একটি তালিকা (যেমন ["-57", "A"]
)। ফাংশনটি আউটপুট স্ট্রিং প্রিন্ট বা ফিরে আসতে হবে।
আপনার ভাষায় এই বিকল্পগুলি অসম্ভব হলে দোভাষা চালানো এবং I / O পরিচালনা করার সামান্য বিভিন্ন উপায় ভাল fine
বোনাস: 99 তে কিছু শীতল লিখুন এবং আমি আনন্দের সাথে উদাহরণ হিসাবে এটি এই পোস্টে রাখব।
- এখানে ম্যাকের উত্তর থেকে একটি ঝরঝরে "বিয়ারের 99 টি বোতল" প্রোগ্রামটির একটি পাস্তবিন রয়েছে ।
আশা করি আপনি আমার 99 তম চ্যালেঞ্জ উপভোগ করেছেন ! : ডি