सीजाम, 25 - 25 = 0 बाइट्स
q~1,*_@{[\{1$^}/_](;)\}/;
यह नीचे दिए गए गोल्फस्क्रिप्ट जवाब का सिर्फ एक सीधा सीजेएम पोर्ट है, क्योंकि मार्टिन बंटनर के जवाब को पढ़ने के बाद , मुझे एहसास हुआ कि मैं सीजेएम के पूर्णांक और चरित्र प्रकारों को संभालने के कारण एक बाइट बचा सकता हूं। (मूल रूप से, CJam 1&को गोल्फस्क्रिप्ट कोड में ASCII वर्णों को बिट्स में बाध्य करने के लिए उपयोग करने की आवश्यकता नहीं है , लेकिन qइनपुट को पढ़ने के लिए एक पूर्वनिर्धारित की आवश्यकता है ।) मैं आमतौर पर इस तरह के एक तुच्छ बंदरगाह को एक सस्ती चाल पर विचार करूंगा, लेकिन एक शून्य से प्राप्त किया जा सकता है। यह IMO सार्थक है।
किसी भी स्थिति में, यह कार्यक्रम नीचे दिए गए मूल गोल्फस्क्रिप्ट कार्यक्रम की तरह ही काम करता है, इसलिए कृपया इसके विवरण और उपयोग के निर्देश देखें। हमेशा की तरह, आप इस ऑनलाइन दुभाषिया का उपयोग करके सीजेएम संस्करण का परीक्षण कर सकते हैं ।
गोल्फस्क्रिप्ट, 26 - 25 = 1 बाइट
~1,*.@{[1&\{1$^}/.](;)\}/;
यह समाधान केवल एक बार इनपुट स्ट्रिंग पर आधारित है, इसलिए मेरा मानना है कि यह er25 बाइट बोनस के लिए योग्य है। यह आंतरिक रूप से एक k -element सरणी को बनाए रखने के द्वारा काम करता है जो k- पूर्व-पुनरावृत्तियों में से प्रत्येक के वर्तमान बिट को संग्रहीत करता है।
इनपुट को स्टैडिन के माध्यम से, प्रारूप में "1111111" 3, अर्थात के के अक्षर 0और 1वर्ण के रूप में दिया जाना चाहिए , उसके बाद नंबर k होगा । आउटपुट स्टैडआउट होगा, उद्धरण के बिना एक बिटस्ट्रिंग के रूप में।
इस कोड को ऑनलाइन टेस्ट करें। (यदि प्रोग्राम का समय समाप्त हो गया है, तो इसे पुनः चलाने का प्रयास करें; वेब गोल्फस्क्रिप्ट सर्वर यादृच्छिक समय के लिए कुख्यात है।)
यहाँ इस कार्यक्रम का एक विस्तारित संस्करण है, टिप्पणियों के साथ:
~ # 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
मूल रूप से, अधिकांश पुनरावृत्त समाधानों की तरह, इस कोड को पुनरावृत्ति को लागू करने के रूप में समझा जा सकता है
ख मैं , जे : = ख मैं , ( जे -1) ⊕ ख ( मैं -1), ( जे -1) ,
जहां ख 0, जे है j वें इनपुट बिट (के लिए जे ≥ 1), ख कश्मीर , जे है j वें उत्पादन बिट, और ख मैं , 0 = 0 धारणा के द्वारा। अंतर यह है कि, जबकि पुनरावृत्त समाधान, वास्तव में, पुनरावृत्ति की गणना "पंक्ति द्वारा पंक्ति" (यानी पहले बी 1, जे के लिए सभी जे , फिर बी 2, जे , आदि), यह समाधान इसके बजाय "कॉलम" द्वारा गणना करता है। स्तंभ "(या, और अधिक सही," विकर्ण द्वारा "विकर्ण), पहली कंप्यूटिंग ख मैं , मैं 1 के लिए ≤ मैं≤ k , फिर b i , i +1 , फिर b i , i +2 , आदि।
इस दृष्टिकोण का एक (सैद्धांतिक) लाभ यह है कि, सिद्धांत रूप में, यह विधि केवल O ( k ) स्टोरेज का उपयोग करके मनमाने ढंग से लंबे इनपुट स्ट्रिंग को संसाधित कर सकती है । बेशक, गोल्फस्क्रिप्ट दुभाषिया कार्यक्रम को चलाने से पहले मेमोरी में सभी इनपुट को स्वचालित रूप से पढ़ता है, वैसे भी ज्यादातर इस लाभ को नकारते हैं।