সিজেএম, 25 - 25 = 0 বাইট
q~1,*_@{[\{1$^}/_](;)\}/;
এটি নীচের গল্ফস্ক্রিপ্ট উত্তরের সরাসরি একটি সিজাম বন্দর, যেহেতু মার্টিন বাটনার এর উত্তর পড়ার পরে আমি বুঝতে পেরেছিলাম যে সিজেমের পূর্ণসংখ্যা এবং চরিত্রের ধরণের পরিচালনা করার কারণে আমি একটি বাইট সংরক্ষণ করতে পারি। (মূলত, গল্ফস্ক্রিপ্ট কোডে 1&ASCII অক্ষরগুলিকে বিট করার জন্য সিজেমের ব্যবহারের প্রয়োজন হয় না , তবে qইনপুটটি পড়ার জন্য একটি প্রেন্টেন্টের প্রয়োজন হয় such ) আমি সাধারণত এ জাতীয় তুচ্ছ বন্দরটিকে একটি সস্তা কৌশল হিসাবে বিবেচনা করব তবে শূন্য স্কোর অর্জন করতে পারব I এটি আইএমও সার্থক।
যাইহোক, এই প্রোগ্রামটি নীচের মূল গল্ফস্ক্রিপ্ট প্রোগ্রামের মতো কাজ করে, সুতরাং দয়া করে এর বিবরণ এবং ব্যবহারের নির্দেশাবলী দেখুন। যথারীতি, আপনি এই অনলাইন দোভাষী ব্যবহার করে সিজেএম সংস্করণ পরীক্ষা করতে পারেন ।
গল্ফস্ক্রিপ্ট, 26 - 25 = 1 বাইট
~1,*.@{[1&\{1$^}/.](;)\}/;
এই সমাধানটি কেবল একবার ইনপুট স্ট্রিংয়ের মাধ্যমে পুনরাবৃত্তি করে, তাই আমি বিশ্বাস করি এটি −25 বাইট বোনাসের জন্য যোগ্যতা অর্জন করে। এটি অভ্যন্তরীণভাবে একটি কে- এলিমেন্ট অ্যারে বজায় রেখে কাজ করে যা প্রতিটি কে -প্রাক-পুনরাবৃত্তির বর্তমান বিট সঞ্চয় করে ।
স্ট্যান্ডিনের মাধ্যমে ইনপুট দেওয়া উচিত, বিন্যাসে "1111111" 3, অর্থাত্ কোট করা স্ট্রিং 0এবং 1অক্ষর হিসাবে, তার পরে k সংখ্যাটি । উদ্ধৃতি ছাড়াই বিটস্ট্রিং হিসাবে আউটপুট স্টাডাউট হবে।
এই কোডটি অনলাইনে পরীক্ষা করুন। (যদি প্রোগ্রামটি শেষ হয়ে যায় তবে এটি আবার চালানোর চেষ্টা করুন; ওয়েব গল্ফস্ক্রিপ্ট সার্ভারটি এলোমেলো সময়সীমার জন্য কুখ্যাত is
মন্তব্যগুলির সাথে এই প্রোগ্রামটির একটি প্রসারিত সংস্করণ এখানে রয়েছে:
~ # eval the input, leaving a string and the number k on the stack
1,* # turn the number k into an array of k zeros ("the state array")
. # make a copy of the array; it will be left on the stack, making up the
# first k bits of the output (which are always zeros)
@ # move the input string to the top of the stack, to be iterated over
{
[ # place a start-of-array marker on the stack, for later use
1& # zero out all but the lowest bit of this input byte
\ # move the state array to the top of the stack, to be iterated over
{ 1$^ } / # iterate over each element of the state array, XORing each
# element with the previous value on the stack, and leave
# the results on the stack
. # duplicate the last value on the stack (which is the output bit we want)
] # collect all values put on the stack since the last [ into an array
(; # remove the first element of the array (the input bit)
) # pop the last element (the duplicated output bit) off the array
\ # move the popped bit below the new state array on the stack
}
/ # iterate the preceding code block over the bytes in the input string
; # discard the state array, leaving just the output bits on the stack
মূলত, বেশিরভাগ পুনরাবৃত্ত সমাধানগুলির মতো, এই কোডটি পুনরাবৃত্তিটি প্রয়োগ করে বোঝা যায়
খ i , j : = b i , ( j −1) ⊕ b ( i −1), ( j −1) ,
যেখানে b 0, j হ'ল j -th ইনপুট বিট ( j ≥ 1 এর জন্য), b k , j হ'ল j -th আউটপুট বিট, এবং b i , 0 = 0 অনুমান দ্বারা। পার্থক্যটি হ'ল, যদিও পুনরাবৃত্ত সমাধানগুলি কার্যকরভাবে পুনরাবৃত্তিটি "সারি সারি সারি" গণনা করুন (অর্থাত্ প্রথম খ 1, জে সমস্ত জে , তারপরে বি 2, জ , ইত্যাদি), এই সমাধানটি পরিবর্তে এটি দ্বারা কলামটি গণনা করে কলাম "(বা আরও সঠিকভাবে," তির্যক দ্বারা তির্যক "), প্রথম গণনা খ i , i এর জন্য 1 ≤ i≤ কে , তারপরে বি i , i +1 , তারপরে বি i , i +2 ইত্যাদি
এই পদ্ধতির একটি (তাত্ত্বিক) সুবিধা হ'ল, নীতিগতভাবে, এই পদ্ধতিটি কেবল ও ( কে ) স্টোরেজ ব্যবহার করে একটি নির্বিচারে দীর্ঘ ইনপুট স্ট্রিং প্রক্রিয়া করতে পারে । অবশ্যই, গল্ফস্ক্রিপ্ট ইন্টারপ্রেটার স্বয়ংক্রিয়ভাবে প্রোগ্রাম চালানোর আগে সমস্ত ইনপুট মেমরির মধ্যে পড়ে, বেশিরভাগই এই সুবিধাটিকে তুচ্ছ করে।