মোটামুটি ভার্জোজ টিউরিং টারপিটের জন্য খারাপ নয় ...
N
Count i while _%128-9 {
Count x while _/128%2 {
Write 40
_+128
}
Write _%128
_+128-_%128+N
}
Count j while _/256-j {
Write 41
}
(হ্যাঁ, সমস্ত সাদা স্থান বাধ্যতামূলক)
দ্রষ্টব্য: AC এর ইনপুট সীমাবদ্ধতার কারণে !! , কিছু শেষ সীমানা ছাড়াই অক্ষরের একটি নির্বিচারে স্ট্রিং পড়া অসম্ভব impossible অতএব, এই প্রোগ্রামটি ট্যাব অক্ষর দ্বারা অনুসরণ করা একটি স্ট্রিং হিসাবে ইনপুট (স্টিডিনে) প্রত্যাশা করে।
Acc !! ?
এটি এমন একটি ভাষা যা আমি তৈরি করেছি যা কেবল ব্যবহারযোগ্য হবে না । একমাত্র ডেটা টাইপটি পূর্ণসংখ্যা, একমাত্র নিয়ন্ত্রণ প্রবাহ Count x while y
রচনাটি লুপ এবং ডেটা সংরক্ষণের একমাত্র উপায় হ'ল একক সঞ্চালক _
। বিশেষ মান N
এবং Write
বিবৃতি ব্যবহার করে ইনপুট এবং আউটপুট একবারে একটি করে অক্ষর সম্পন্ন হয় । এই সীমাবদ্ধতা সত্ত্বেও, আমি নিশ্চিত যে এ্যাক !! টুরিং-সম্পূর্ণ।
ব্যাখ্যা
এ্যাক মৌলিক কৌশল !! প্রোগ্রামিং হ'ল সংযোজককে ধারণামূলকভাবে বিভাজন করতে মোড %
এবং পূর্ণসংখ্যা বিভাগ ব্যবহার করে /
এটি একসাথে একাধিক মান সংরক্ষণ করতে দেয়। এই প্রোগ্রামে, আমরা এই জাতীয় তিনটি বিভাগ ব্যবহার করি: সর্বনিম্ন-অর্ডার সাত বিট ( _%128
) ইনপুট থেকে একটি ASCII কোড সঞ্চয় করে; পরবর্তী বিট ( _/128%2
) একটি পতাকা মান সংরক্ষণ করে; এবং অবশিষ্ট বিটস ( _/256
) আমাদের প্রয়োজন নিকট-পেরেনগুলির সংখ্যা গণনা করুন।
এসি ইনপুট !! বিশেষ মান থেকে আসে N
, যা একটি একক অক্ষর পড়ে এবং এর ASCII কোডের মূল্যায়ন করে। যে কোনও বিবৃতি সম্পূর্ণরূপে একটি অভিব্যক্তি নিয়ে গঠিত তা অভিব্যক্তির ফলাফলকে সঞ্চয়ের জন্য বরাদ্দ করে। সুতরাং আমরা সঞ্চয়ের মধ্যে প্রথম অক্ষরের কোড সংরক্ষণ করে শুরু করি।
_%128
সর্বাধিক পঠিত অক্ষর সংরক্ষণ করবে। সুতরাং প্রথম লুপটি _%128-9
ননজারো চলাকালীন চলবে - যা বর্তমান অক্ষরটি একটি ট্যাব না হওয়া পর্যন্ত।
লুপের অভ্যন্তরে, আমরা প্রথম পুনরাবৃত্তিতে (
না থাকলে আমরা মুদ্রণ করতে চাই । এসি থেকে !! যদি বিবৃতি নেই, শর্তসাপেক্ষে আমাদের লুপ ব্যবহার করতে হবে। আমরা 128 এর বিটটি সঞ্চয়ীটির _/128%2
একটি পতাকা মান হিসাবে ব্যবহার করি । প্রথম পাসে, সঞ্চয়ের একমাত্র জিনিসটি ASCII মান <128, সুতরাং পতাকা 0 হয় এবং লুপটি এড়িয়ে যায়। পরবর্তী প্রতিটি পাসে, আমরা পতাকাটি 1 হ'ল তা নিশ্চিত করব।
Count x
লুপের অভ্যন্তরে (যখনই পতাকাটি 1 থাকে), আমরা একটি খোলা পেরেন (এএসসিআইআই 40
) লিখি এবং সঞ্চয়ের সাথে 128 যুক্ত করি, যার ফলে পতাকাটি 0 এ সেট করা হয় এবং লুপটি প্রস্থান করা হয়। এটির মান বাড়ানোর ক্ষেত্রেও এটি ঘটে _/256
, যা আমরা আউটপুট হওয়ার জন্য আমাদের নিকটবর্তী প্যারেনগুলির টেলি হিসাবে ব্যবহার করব।
পতাকার মান নির্বিশেষে, আমরা সর্বাধিক সাম্প্রতিক ইনপুট চর লিখি _%128
।
পরবর্তী অ্যাসাইনমেন্ট ( _+128-_%128+N
) দুটি কাজ করে। প্রথমত, 128 যোগ করে এটি লুপের মাধ্যমে পরবর্তী বারের জন্য পতাকা সেট করে। দ্বিতীয়ত, এটি _%128
স্লটটি জিরোস করে, অন্য একটি চরিত্র পড়ে এবং এটি সেখানে সংরক্ষণ করে। তারপরে আমরা লুপ করি।
যখন Count i
লুপটি প্রস্থান করে, আমরা কেবল একটি ট্যাব অক্ষরটি পড়েছি, এবং সঞ্চয়ের মানটি এইভাবে ভেঙে যায়:
_%128
: 9
(ট্যাব অক্ষর)
_/128%2
: 1
(পতাকা)
_/256
: পঠিত অক্ষরের সংখ্যা, বিয়োগ 1
(বিয়োগ 1 টি হ'ল মূল লুপটি দিয়ে প্রথম পাসের সময় আমরা কেবল একবার সঞ্চয়ের সাথে 128 যোগ করি)) এখন আমাদের যা দরকার তা হল নিকটতম প্যারেনস। Count j while _/256-j
লুপ _/256
বার, 41
প্রতিবার একটি ঘনিষ্ঠ-পেরেন (ASCII ) লেখা । ভাল খবর!