APL (158 वर्ण, स्कोर = 4)
'''{(((3+z)×^/⍵)-5+2×+/+/¨⍺=0)⌽(2×77+z)⍴(77+z←2×+/0=⊃,/⍺,⍵)⍴⊃,/(~^/¨⍺=0)/⍺}1 0 '''{(((3+z)×^/⍵)-5+2×+/+/¨⍺=0)⌽(2×77+z)⍴(77+z←2×+/0=⊃,/⍺,⍵)⍴⊃,/(~^/¨⍺=0)/⍺}1 0
मैं यहाँ Dyalog APL का उपयोग कर रहा हूँ। 0
अभिव्यक्तियों के अंत में और स्ट्रिंग के अंत (पहले '''
) में जोड़कर चक्रों की संख्या को एक (0 के बाद एक स्थान) से बढ़ाया जा सकता है । चक्र की लंबाई है (# 0's) + 1
, और अभिव्यक्ति की लंबाई है 150 + 4*(cycle length))
। यह मानते हुए कि हम हमेशा के लिए शून्य जोड़ना जारी रखते हैं, स्कोर है Limit[(150 + 4*n)/(n - 1), n -> Infinity] = 4
, जहां n
चक्र की लंबाई है।
यहाँ चक्र लंबाई = 6 के साथ एक उदाहरण दिया गया है:
'''{(((3+z)×^/⍵)-5+2×+/+/¨⍺=0)⌽(2×77+z)⍴(77+z←2×+/0=⊃,/⍺,⍵)⍴⊃,/(~^/¨⍺=0)/⍺}1 0 0 0 0 0 '''{(((3+z)×^/⍵)-5+2×+/+/¨⍺=0)⌽(2×77+z)⍴(77+z←2×+/0=⊃,/⍺,⍵)⍴⊃,/(~^/¨⍺=0)/⍺}1 0 0 0 0 0
0 '''{(((3+z)×^/⍵)-5+2×+/+/¨⍺=0)⌽(2×77+z)⍴(77+z←2×+/0=⊃,/⍺,⍵)⍴⊃,/(~^/¨⍺=0)/⍺}1 0 0 0 0 0 '''{(((3+z)×^/⍵)-5+2×+/+/¨⍺=0)⌽(2×77+z)⍴(77+z←2×+/0=⊃,/⍺,⍵)⍴⊃,/(~^/¨⍺=0)/⍺}1 0 0 0 0
0 '''{(((3+z)×^/⍵)-5+2×+/+/¨⍺=0)⌽(2×77+z)⍴(77+z←2×+/0=⊃,/⍺,⍵)⍴⊃,/(~^/¨⍺=0)/⍺}1 0 0 0 0 0 '''{(((3+z)×^/⍵)-5+2×+/+/¨⍺=0)⌽(2×77+z)⍴(77+z←2×+/0=⊃,/⍺,⍵)⍴⊃,/(~^/¨⍺=0)/⍺}1 0 0 0 0
0 0 '''{(((3+z)×^/⍵)-5+2×+/+/¨⍺=0)⌽(2×77+z)⍴(77+z←2×+/0=⊃,/⍺,⍵)⍴⊃,/(~^/¨⍺=0)/⍺}1 0 0 0 0 0 '''{(((3+z)×^/⍵)-5+2×+/+/¨⍺=0)⌽(2×77+z)⍴(77+z←2×+/0=⊃,/⍺,⍵)⍴⊃,/(~^/¨⍺=0)/⍺}1 0 0 0
0 0 '''{(((3+z)×^/⍵)-5+2×+/+/¨⍺=0)⌽(2×77+z)⍴(77+z←2×+/0=⊃,/⍺,⍵)⍴⊃,/(~^/¨⍺=0)/⍺}1 0 0 0 0 0 '''{(((3+z)×^/⍵)-5+2×+/+/¨⍺=0)⌽(2×77+z)⍴(77+z←2×+/0=⊃,/⍺,⍵)⍴⊃,/(~^/¨⍺=0)/⍺}1 0 0 0
0 0 0 '''{(((3+z)×^/⍵)-5+2×+/+/¨⍺=0)⌽(2×77+z)⍴(77+z←2×+/0=⊃,/⍺,⍵)⍴⊃,/(~^/¨⍺=0)/⍺}1 0 0 0 0 0 '''{(((3+z)×^/⍵)-5+2×+/+/¨⍺=0)⌽(2×77+z)⍴(77+z←2×+/0=⊃,/⍺,⍵)⍴⊃,/(~^/¨⍺=0)/⍺}1 0 0
0 0 0 '''{(((3+z)×^/⍵)-5+2×+/+/¨⍺=0)⌽(2×77+z)⍴(77+z←2×+/0=⊃,/⍺,⍵)⍴⊃,/(~^/¨⍺=0)/⍺}1 0 0 0 0 0 '''{(((3+z)×^/⍵)-5+2×+/+/¨⍺=0)⌽(2×77+z)⍴(77+z←2×+/0=⊃,/⍺,⍵)⍴⊃,/(~^/¨⍺=0)/⍺}1 0 0
0 0 0 0 '''{(((3+z)×^/⍵)-5+2×+/+/¨⍺=0)⌽(2×77+z)⍴(77+z←2×+/0=⊃,/⍺,⍵)⍴⊃,/(~^/¨⍺=0)/⍺}1 0 0 0 0 0 '''{(((3+z)×^/⍵)-5+2×+/+/¨⍺=0)⌽(2×77+z)⍴(77+z←2×+/0=⊃,/⍺,⍵)⍴⊃,/(~^/¨⍺=0)/⍺}1 0
0 0 0 0 '''{(((3+z)×^/⍵)-5+2×+/+/¨⍺=0)⌽(2×77+z)⍴(77+z←2×+/0=⊃,/⍺,⍵)⍴⊃,/(~^/¨⍺=0)/⍺}1 0 0 0 0 0 '''{(((3+z)×^/⍵)-5+2×+/+/¨⍺=0)⌽(2×77+z)⍴(77+z←2×+/0=⊃,/⍺,⍵)⍴⊃,/(~^/¨⍺=0)/⍺}1 0
0 0 0 0 0 '''{(((3+z)×^/⍵)-5+2×+/+/¨⍺=0)⌽(2×77+z)⍴(77+z←2×+/0=⊃,/⍺,⍵)⍴⊃,/(~^/¨⍺=0)/⍺}1 0 0 0 0 0 '''{(((3+z)×^/⍵)-5+2×+/+/¨⍺=0)⌽(2×77+z)⍴(77+z←2×+/0=⊃,/⍺,⍵)⍴⊃,/(~^/¨⍺=0)/⍺}1
0 0 0 0 0 '''{(((3+z)×^/⍵)-5+2×+/+/¨⍺=0)⌽(2×77+z)⍴(77+z←2×+/0=⊃,/⍺,⍵)⍴⊃,/(~^/¨⍺=0)/⍺}1 0 0 0 0 0 '''{(((3+z)×^/⍵)-5+2×+/+/¨⍺=0)⌽(2×77+z)⍴(77+z←2×+/0=⊃,/⍺,⍵)⍴⊃,/(~^/¨⍺=0)/⍺}1
'''{(((3+z)×^/⍵)-5+2×+/+/¨⍺=0)⌽(2×77+z)⍴(77+z←2×+/0=⊃,/⍺,⍵)⍴⊃,/(~^/¨⍺=0)/⍺}1 0 0 0 0 0 '''{(((3+z)×^/⍵)-5+2×+/+/¨⍺=0)⌽(2×77+z)⍴(77+z←2×+/0=⊃,/⍺,⍵)⍴⊃,/(~^/¨⍺=0)/⍺}1 0 0 0 0 0
192 वर्ण, स्कोर = 2
'''{2≠⍴⍺:¯3⌽(2×1+⍴⍺)⍴(1+⍴⍺)⍴⍺ ⋄ a←⊃2⌷⍺ ⋄ ⍵=0:¯2⌽(2×1+⍴a)⍴(1+⍴a)⍴a⋄(-4+⌊10⍟⊃⍺)⌽(2×1+⍴a)⍴(1+⍴a)⍴a}01'''{2≠⍴⍺:¯3⌽(2×1+⍴⍺)⍴(1+⍴⍺)⍴⍺⋄a←⊃2⌷⍺⋄⍵=0:¯2⌽(2×1+⍴a)⍴(1+⍴a)⍴a⋄(-4+⌊10⍟⊃⍺)⌽(2×1+⍴a)⍴(1+⍴a)⍴a}01
कार्यान्वयन के आधार पर, विफलता का एक बिंदु तब हो सकता है जब स्ट्रिंग के लिए पूर्वनिर्मित पूर्णांक बहुत बड़ा हो। सैद्धांतिक रूप से, हालांकि, हम दो वर्णों को जोड़कर एक चक्र जोड़ सकते हैं - 1
स्ट्रिंग के अंत में (पहले '''
) और 1
पूरी रेखा के अंत में।
200 वर्ण, स्कोर = 1
'''{a←{2=⍴⍵:⊃2⌷⍵⋄⍵}⍺⋄(⍺{⍵=9:⍬⋄⍕1+{2=⍴⍵:10×⊃⍵⋄0}⍺}⍵),(¯2⌽(2×1+⍴a)⍴(1+⍴a)⍴a),⍺{⍵=9:(⍕9),⍕⊃⍺⋄⍕⌊⍵÷10}⍵}'''{a←{2=⍴⍵:⊃2⌷⍵⋄⍵}⍺⋄(⍺{⍵=9:⍬⋄⍕1+{2=⍴⍵:10×⊃⍵⋄0}⍺}⍵),(¯2⌽(2×1+⍴a)⍴(1+⍴a)⍴a),⍺{⍵=9:(⍕9),⍕⊃⍺⋄⍕⌊⍵÷10}⍵}91
मेरे एपीएल कार्यान्वयन में डिफ़ॉल्ट रूप से असीमित सटीक पूर्णांक नहीं हैं, इसलिए पूर्णांक को एक फ्लोट में बदल दिया जाता है जब यह बहुत बड़ा हो जाता है, जिससे आउटपुट गलत हो जाता है। तो यह सबसे अधिक बारीक है, लेकिन सैद्धांतिक रूप से (या तो हाथ से या एक अलग एपीएल दुभाषिया के साथ), इसमें 1. का स्कोर होना चाहिए। बस 1
अभिव्यक्ति के अंत में एक जोड़ दें , और आप एक और चक्र प्राप्त करें।
अवलोकन (छोटी रानी के साथ)
मैं पहले संस्करण का अवलोकन देने जा रहा हूं, क्योंकि मुझे लगता है कि इसे समझना शायद सबसे आसान है। हालांकि, उस संस्करण से निपटने से पहले, हम एपीएल में एक साधारण क्वीन पर विचार करने जा रहे हैं :
1⌽22⍴11⍴'''1⌽22⍴11⍴'''
मैंने पाया है कि कुछ एपीएल अभिव्यक्तियों को समझने के सर्वोत्तम तरीकों में से एक है संचालकों / कार्यों के कैस्केड के दौरान आउटपुट को देखना। APL में सभी ऑपरेटर और फ़ंक्शन राइट-एसोसिएटिव हैं और उनकी एक ही पूर्वता है, इसलिए यहाँ है, दाएँ से बाएँ:
'''1⌽22⍴11⍴'''
: यह सिर्फ एक स्ट्रिंग शाब्दिक (पात्रों की एक सूची) है। ''
एकल उद्धरण चिह्न से बचने का एपीएल तरीका है। आउटपुट: '1⌽22⍴11⍴'
।
11⍴'''1⌽22⍴11⍴'''
: यहां, हम ⍴
लंबाई के होने के लिए स्ट्रिंग को फिर से सेट करते हैं 11
। क्योंकि स्ट्रिंग की लंबाई 11 से कम है, इसे दोहराया जाता है (यानी, 5⍴'abc'
उपज होगी 'abcab'
)। आउटपुट: '1⌽22⍴11⍴''
। तो अब हमारे पास अंत में दो उद्धरण चिह्न हैं - हम कहीं जा रहे हैं!
22⍴11⍴'''1⌽22⍴11⍴'''
: इसी तरह, अब हम अपने पिछले आउटपुट को लंबाई का होना मानते हैं 22
। आउटपुट: '1⌽22⍴11⍴'''1⌽22⍴11⍴''
। हम लगभग वहाँ हैं - हमें केवल पहले एकल उद्धरण को अंत तक ले जाने की आवश्यकता है।
1⌽22⍴11⍴'''1⌽22⍴11⍴'''
: यहां, हम ( ⌽
) वर्णों की सूची को घुमाते हैं 1
। यह स्ट्रिंग के पहले चरित्र को अंत तक ले जाता है। एक अन्य उदाहरण के रूप में, 2⌽'abcdef'
रिटर्न 'cdefab'
। आउटपुट: 1⌽22⍴11⍴'''1⌽22⍴11⍴'''
।
घूमती हुई रानी
वह छोटी क्वीन हमारे घूमने वाले क्वीन का मुख्य आधार है। अब, यह ध्यान में रखते हुए, आइए एक नज़र डालते हैं:
'''{(((3+z)×^/⍵)-5+2×+/+/¨⍺=0)⌽(2×77+z)⍴(77+z←2×+/0=⊃,/⍺,⍵)⍴⊃,/(~^/¨⍺=0)/⍺}1 0 '''{(((3+z)×^/⍵)-5+2×+/+/¨⍺=0)⌽(2×77+z)⍴(77+z←2×+/0=⊃,/⍺,⍵)⍴⊃,/(~^/¨⍺=0)/⍺}1 0
{ ... }
एक अनाम फ़ंक्शन को परिभाषित करता है, जो वह जगह है जहां हम काम करेंगे। ध्यान दें कि एपीएल में कार्य एक सही तर्क लेते हैं, जिसे निरूपित किया गया है ⍵
, और एक वैकल्पिक बाएं तर्क, द्वारा निरूपित किया गया है ⍺
(विचार करें)। हम इस कार्य को हमारे क्वीन स्ट्रिंग और कुछ को खिलाना चाहते हैं ताकि हमें चक्र की मनमानी संख्या बनाने में सहायता मिल सके। अपने आप पर चीजों को आसान बनाने के लिए (और कोई भी साइकिल जोड़ना चाहता है), हम क्वीन स्ट्रिंग को बाएं तर्क बनाते हैं। सही तर्क, तब है, जहां हमने अपनी सूची में चक्र लगाए हैं। एक स्थान से अलग 2 या अधिक आइटम एक सूची बनाता है, इसलिए इस उदाहरण में, हमारे पास 2-तत्व सूची है जिसमें a 1
और a शामिल हैं 0
।
हम देख सकते हैं कि फ़ंक्शन पहले से क्वीन के समान दिखता है। हमारे पास ...⌽...⍴...⍴...
पहले से एक ही फॉर्म है। तो यह अच्छा है - हम कम से कम इतना तो समझते हैं! के अनेक बिंदुओं में गहरा गड्ढा, पिछले के बाद सब कुछ के साथ शुरू करते हैं ⍴
: ⊃,/(~^/¨⍺=0)/⍺
।
- जैसा कि आप ऊपर दिए गए उदाहरण को देखकर कह सकते हैं, हम स्ट्रिंग को दाएं हाथ की तरफ से उपसर्ग करते हैं, प्रत्येक जोड़ के साथ एक जोड़ते हैं; लेकिन हम अभी उन लोगों के बारे में परवाह नहीं है। हम सिर्फ स्ट्रिंग चाहते हैं!
- पहले, विचार करें कि कोष्ठक में क्या है। (वे अधिकांश अन्य भाषाओं की तरह समूह बनाते हैं।)
⍺=0
एक सूची देता है, इस मामले में, उसी आकार के साथ ⍺
, जहां प्रत्येक तत्व ⍺
को प्रतिस्थापित किया जाता है 1
यदि यह समान है 0
, और 0
अन्यथा। यह पुनरावर्ती रूप से किया जाता है; इसलिए यदि हमारे पास पात्रों की सूची की एक सूची है, तो व्यक्तिगत वर्णों को 0 के विरुद्ध परीक्षण किया जाएगा, और आपको द्विआधारी मूल्यों की सूची की सूची की एक सूची वापस मिल जाएगी।
- तो अगर
⍺
हमारे तार सिर्फ शामिल होते हैं, तो हमें 0 की सूची वापस मिल जाती है। अन्यथा, हमारे बाएं तर्क में कुछ 0 उपसर्ग है (जैसे 0 0 0 'quinestring'
), इसलिए यह एक सूची है जिसमें 0 और एक अन्य सूची है, हमारी स्ट्रिंग। तब हमारा आउटपुट दिखता है 1 1 1 <sub-list of zeros>
।
^/¨⍺=0
: हम व्युत्पन्न फ़ंक्शन को लागू करते हैं ^/
, जो प्रत्येक के ( ) तत्व के /
लिए तार्किक और ( ^
) फ़ंक्शन का उपयोग करके कम ( ) करता ¨
है ⍺=0
। यह शून्य की उप-सूची को समतल करना है ताकि हम क्वीन स्ट्रिंग को एक बाइनरी मान मान सकें। पिछले उदाहरण को ध्यान में रखते हुए, आउटपुट होगा 1 1 1 0
।
~
: हम पहले से प्रत्येक मान को बाइनरी नहीं करते हैं (उदाहरण के लिए, लौटना 0 0 0 1
)।
(~^/¨⍺=0)/⍺
: प्रत्येक तत्व के लिए ⍺
, हम /
इसे ( ) बाएं तर्क में संबंधित तत्व द्वारा दिए गए समय की संख्या कहते हैं। यह 0 के सभी को समाप्त कर देता है, हमें केवल हमारे क्विन स्ट्रिंग के साथ छोड़ देता है।
⊃,/
यह सुनिश्चित करने के लिए कुछ आवश्यक कागजी कार्रवाई है कि हम नतीजे फ़ंक्शन ( ,
) के साथ परिणाम को कम करके वर्णों की एक चपटी सूची प्राप्त करें । यदि इनपुट पहले से ही एक चपटी सूची है (यानी, हमारे मुख्य फ़ंक्शन के लिए बाएं तर्क केवल स्ट्रिंग है), तो हमें उस सूची से युक्त 1-तत्व सूची मिलती है। दूसरे मामले में, जब हमारे पास एक सूची होती है जिसमें स्ट्रिंग के लिए एक उप-सूची होती है, तो हमें एक ही चीज़ वापस मिलती है (एक उप-सूची वाली सूची)। फिर हम इसे अनपैक करते हैं ( ⊃
), हमें सूची का पहला तत्व देते हैं (यानी, पात्रों की उप-सूची)। यह अनावश्यक प्रतीत हो सकता है, लेकिन अन्यथा हम 1-तत्व सूची को फिर से खोलने की कोशिश कर रहे होंगे!
इसके बाद, हम कोष्ठक के भीतर पहले पुनर्वसन के लिए दी गई लंबाई को देखते हैं:
⍺,⍵
: हम पहले तर्क को सही तर्क देते हैं
⊃,/⍺,⍵
: पहले की तरह ही - सूची को समतल करें।
+/0=⊃,/⍺,⍵
: /
जोड़ ( +
) फ़ंक्शन का उपयोग करके कम करके सूची में शून्य की संख्या जोड़ें ।
2×+/0=⊃,/⍺,⍵
: उस संख्या को दो से गुणा करें।
z←2×+/0=⊃,/⍺,⍵
: असाइन करें ( ←
) एक चर के लिए परिणाम z
,। पुनरावृत्ति करने के लिए, z
अब बाएँ और दाएँ दोनों तर्कों में शून्य की संख्या दोगुनी है।
77+z←2×+/0=⊃,/⍺,⍵
: फिर हम जोड़ते हैं 77
, क्वीन स्ट्रिंग के पात्रों के लिए, निम्नलिखित स्थान के बाद सब कुछ अनदेखा करना 1
। प्रारंभिक क्वीन उदाहरण की तरह, हम एक और एकल उद्धरण प्राप्त करने के लिए स्ट्रिंग की लंबाई में 1 जोड़ते हैं।
- इस उदाहरण में, इस आकार का आउटपुट है:
'{(((3+z)×^/⍵)-5+2×+/+/¨⍺=0)⌽(2×77+z)⍴(77+z←2×+/0=⊃,/⍺,⍵)⍴⊃,/(~^/¨⍺=0)/⍺}1 0 ''
इस प्रकार है कि फेरबदल का तर्क सरल है और छोटी रानी (पहले पुनर्वसन के लिए 2 गुना लंबाई) को दर्शाता है। अब हमारा आउटपुट है:
'{(((3+z)×^/⍵)-5+2×+/+/¨⍺=0)⌽(2×77+z)⍴(77+z←2×+/0=⊃,/⍺,⍵)⍴⊃,/(~^/¨⍺=0)/⍺}1 0 '''{(((3+z)×^/⍵)-5+2×+/+/¨⍺=0)⌽(2×77+z)⍴(77+z←2×+/0=⊃,/⍺,⍵)⍴⊃,/(~^/¨⍺=0)/⍺}1 0 ''
अब अंतिम चरण के लिए, जहां हम गणना करते हैं कि आउटपुट स्ट्रिंग को घुमाने के लिए कितना:
- जैसा कि आप पिछले आउटपुट को देखकर देख सकते हैं, हम शुरुआत में 2 अंतिम उद्धरण लाने के लिए इसे वापस (एक नकारात्मक राशि) घुमाना चाहते हैं। क्योंकि हम चाहते हैं कि
0
(और एक अन्य स्थान) शुरुआत में भी आगे बढ़े, हम इसे अतिरिक्त 3 वर्णों को घुमाना चाहते हैं।
+/+/¨⍺=0
: बाएँ तर्क में शून्य की संख्या जोड़ें । पहला (दाईं ओर से) +/¨
प्रत्येक तत्व की गणना (अर्थात, एक सबलिस्ट या सिर्फ एक पूर्णांक) पर हस्ताक्षर करता है, और दूसरा +/
हमें उस परिणामी सूची का योग देता है।
5+2×+/+/¨⍺=0
: दो से गुणा करें (साथ ही रिक्त स्थान को घुमाने के लिए), और 5 जोड़ें (परिणाम हम पहले के साथ आए थे)।
- अब,
-
जब हम अपने चक्र के अंत में केस को संभालने के लिए बाएं तर्क से पिछले मान को घटाते हैं:
(3+z)×^/⍵
: और सही तर्क में सभी तत्व एक साथ यह देखने के लिए कि क्या हम अपने अंत तक पहुँच चुके हैं ( 1
), और इससे गुणा करें 3+z
।
और हम कर रहे हैं!