बैक-एंड-फोर्थ अनुक्रम


18

एक पथ से बना है <और >एक में समाप्त होता है @, जैसे

><>@

एक वॉकर बाईं सबसे सेल पर शुरू होता है। वह इस प्रकार से पथ को आगे बढ़ाएगा:

  • यदि वॉकर एक @सेल पर है , तो वह लक्ष्य तक पहुंच गया है और किया गया है।
  • यदि वॉकर एक >सेल पर है , तो संपूर्ण पथ एक कदम दाईं ओर, चक्रीय रूप से, वाकर को अपने साथ ले जाता है
  • यदि वॉकर एक <सेल पर है , तो संपूर्ण पथ एक कदम बाईं ओर स्थानांतरित होता है, चक्रीय रूप से, वॉकर को अपने साथ ले जाता है
  • बाद में, वॉकर एक भी कदम उठाता है। यदि वह रास्ते के दोनों छोर पर है, तो वह अंत से दूर चला जाता है। अन्यथा वह उस दिशा में आगे बढ़ता रहता है जिसे वह अंतिम चरण पर ले जाता है (रोटेशन की अनदेखी), शुरू में सही चलना।

उपरोक्त उदाहरण के माध्यम से काम करते हैं। वॉकर की स्थिति इस प्रकार है ^:

><>@   --rotate-->  @><>
^                    ^
step right (first step):
@><>   --rotate-->  ><>@
  ^                  ^
step right:
><>@   --rotate-->  @><>
  ^                    ^
step left (dead end):
@><>   --rotate-->  ><>@
  ^                  ^
step left:
><>@   --rotate-->  @><>
^                    ^
step left:
@><>   Goal reached!
^

वॉकर ने प्रक्रिया में 6 कोशिकाओं का दौरा किया (शुरुआती सेल के साथ-साथ @और प्रत्येक सेल की गिनती जितनी बार की जाती है)।

यहां एक छोटा सा उदाहरण है, जहां एक घुमाव द्वारा वॉकर को किनारों के पार ले जाया जाता है:

>>@   --rotate-->  @>>
^                   ^
step right (first step):
@>>   --rotate-->  >@>
  ^                ^
step right (dead end):
>@>   Goal reached!
 ^

इस बार वॉकर ने 3 कोशिकाओं का दौरा किया ।

हम इसे आसानी से पूर्णांक अनुक्रम में बदल सकते हैं:

  • आपको एक पूर्णांक एन दिया गया है , जैसे 9
  • आप इस पूर्णांक के द्विआधारी प्रतिनिधित्व की गणना करते हैं, जैसे 1001
  • फिर बारी 1में >और 0में <और एक संलग्न @: ><<>@
  • हम इस तरह से निर्मित संख्या में वॉकर द्वारा देखी गई कोशिकाओं की संख्या को एन के साथ जोड़ते हैं।

परिणामी अनुक्रम के पहले कुछ तत्व हैं:

2, 3, 3, 4, 6, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6,
6, 10, 6, 10, 8, 8, 6, 10, 8, 8, 6, 6, 6, 6, 7, 7

यह काफी मनमाना लग सकता है, लेकिन परिणामस्वरूप अनुक्रम वास्तव में संरचना का एक बहुत निकला है:

यहाँ छवि विवरण दर्ज करें

संदर्भ के लिए, आप इस पास्टबिन में अनुक्रम के पहले 2048 नंबर पा सकते हैं ।

चुनौती

आपने अनुमान लगाया: आप उपरोक्त अनुक्रम की गणना कर रहे हैं। आप तीन तरीकों में से एक कर सकते हैं:

  • आप एक अनंत अनुक्रम (जबकि मेमोरी परमिट) का उत्पादन कर सकते हैं, या तो लगातार आउटपुट (गैर-संख्यात्मक वर्णों द्वारा अलग) मानों या उन्हें समर्थन करने वाली भाषाओं में अनंत जनरेटर के कुछ रूप का उपयोग करके। यदि आप STDOUT में एक अनंत स्ट्रीम प्रिंट करते हैं, तो आपको एक-एक करके संख्याओं को प्रिंट नहीं करना है, लेकिन यह सुनिश्चित करें कि प्रत्येक संख्या एक परिमित समय (और क्रम में) के बाद प्रिंट की जाएगी। यदि आप इस विकल्प का उपयोग करते हैं, तो आपको कोई इनपुट नहीं लेना चाहिए।
  • आप एक पूर्णांक N को इनपुट के रूप में ले सकते हैं और अनुक्रम के N वें पद का निर्माण कर सकते हैं ।
  • आप एक पूर्णांक N को इनपुट के रूप में ले सकते हैं और अनुक्रम के N पद तक सब कुछ उत्पन्न कर सकते हैं , या तो एक सूची या स्ट्रिंग के रूप में एक अस्वाभाविक विभाजक का उपयोग कर सकते हैं।

जब से मैं भाषाओं जो आसानी से पूर्णांक के बजाय बेस के बीच परिवर्तित नहीं कर सकते, दंडित नहीं करना चाहती एन आप के बजाय द्विआधारी प्रतिनिधित्व लग सकते हैं एन , का उपयोग करते हुए 0और 1हमेशा की तरह है (किसी सूची या स्ट्रिंग के रूप में), अधिकांश के साथ -साइनसेंट बिट पहले।

आप STDIN (या निकटतम विकल्प), कमांड-लाइन तर्क या फ़ंक्शन तर्क के माध्यम से इनपुट ले रहे हैं और STDOUT (या निकटतम विकल्प), फ़ंक्शन रिटर्न मान या फ़ंक्शन (आउट) पैरामीटर के माध्यम से परिणाम लिख सकते हैं।

मानक नियम लागू होते हैं।

पृष्ठभूमि

यह वास्तव में गणना करता है की संख्या "टिक्स" मेरे गूढ़ प्रोग्रामिंग भाषा की एक सीधी-सपाट दुभाषिया Labyrinth स्रोत कोड के रूप में "पथ" की व्याख्या करने की आवश्यकता होगी। उस मामले में, "वॉकर" बस अनुदेश सूचक (जो एक स्थिति और एक दिशा है), है @आदेश कार्यक्रम समाप्त हो जाता है और <और >स्रोत-कोड संशोधन आदेशों हैं।


कौन सा आवश्यक है? 1, 2, या 3 और हमारे सबमिशन कैसे बने
Abr001am

@ Agawa001 "आप ऐसा कर सकते हैं कि तीन तरीकों में से एक:" उनमें से किसी एक को चुनें, जो भी आपको लगता है कि जिस दृष्टिकोण और भाषा का आप उपयोग करना चाहते हैं उसके लिए सबसे आसान है।
मार्टिन एंडर

आज सभी दोहराव संख्या क्यों?! codegolf.stackexchange.com/questions/78787/… : D
बिल्ली

जवाबों:


6

जेली , 10 बाइट्स

ð+\ḤiḤoµL‘

यह फ़ंक्शन इनपुट के रूप में अपने द्विआधारी अंकों की सूची के रूप में एक पूर्णांक को स्वीकार करता है।

एल्गोरिथ्म @ Agawa001 के उत्तर से एक के बराबर है ।

इसे ऑनलाइन आज़माएं! या पहले 2048 नंबर जेनरेट करें

पृष्ठभूमि

कुल L + 1 स्थिति देते हुए, 0 से L तक के मार्ग के नीचे स्थित पदों की गणना करें । L , एन को पथ एनकोडिंग संख्या के बाइनरी अंकों की संख्या से मेल खाता है । इस अंकन के साथ, वॉकर स्थिति 0 पर शुरू होता है , स्थिति L पर गोल ।

प्रत्येक चरण के साथ वॉकर लेता है, उसे लक्ष्य के करीब एक कदम मिलता है (जिस दिशा में वह वर्तमान में चल रहा है)। इसके अलावा, प्रत्येक शिफ्ट-स्टेप के साथ, इस पर निर्भर करता है कि वह शिफ्टिंग दिशा के साथ या उसके खिलाफ चलता है, या तो वह 2 modulo L + 1 द्वारा अपनी स्थिति को बढ़ाता है या घटाता है , या वह वर्तमान स्थिति में रहता है।

दिशा बदलने के लिए, उसे स्थिति L - 1 ( L का सामना करना पड़ रहा है ) या स्थिति 1 ( 0 का सामना करना पड़ रहा है ) पर उतरना है , फिर उसकी दिशा में स्थानांतरित हो जाएं। अगला कदम वह उसे अपनी पिछली स्थिति में वापस लाएगा, जो विपरीत दिशा का सामना कर रहा है।

  • यदि L सम है, L - 1 विषम है, तो वह अपनी प्रारंभिक स्थिति से L - 1 तक सीधे आगे नहीं बढ़ सकता है। इसे तक पहुंचने का एकमात्र तरीका एल से गुजरना है , 0 पर ले जाना और 1 पर उतरने के लिए अगला कदम उठाना , फिर दाईं ओर आगे बढ़ना। इसके लिए 2 एल पदों को आगे बढ़ाने की आवश्यकता होती है , जो कि एल चरणों से कम में नहीं किया जा सकता है ।

    हालांकि, दिशा बदलने के बिना एल कदम उठाने के बाद , वह लक्ष्य तक पहुंच गया होगा। शुरुआती सेल के लिए एक को जोड़ने पर, हमें इस मामले में कुल L + 1 विज़िट की गई सेल मिलती हैं ।

  • यदि L विषम है, L - 1 सम है, तो वह दाईं ओर (L - 1) / 2 बार स्थानांतरित होकर उस स्थिति तक पहुँच सकता है । स्थिति तो एल - 1 के नीचे एक है 1 उस समय, वह स्थिति में स्थानांतरित कर दिया जाएगा करने के एल , घूम, और स्थिति पर कदम एल - 1 (का सामना करना पड़ leftwards)।

    यह उसके लक्ष्य तक पहुँचने से पहले हो सकता है या नहीं भी हो सकता है, इसलिए विश्लेषण करने के लिए दो मामले हैं:

    • यदि N के द्विआधारी विस्तार में 1 से कम (L + 1) / 2 घटनाएं होती हैं , तो L कदम उठाना दिशा मोड़ने के लिए पर्याप्त नहीं होगा। चूंकि ये एल चरण वॉकर को अपने लक्ष्य तक लाते हैं, इसलिए शुरुआती सेल के लिए एक जोड़ने पर, हमें इस मामले में कुल L + 1 विज़िट की गई सेल मिलती हैं ।

    • तो देखते हैं कम से कम (एल + 1) / 2 की घटनाओं 1 की बाइनरी विस्तार में एन , करने के लिए आगे बढ़ रहा ((एल + 1) / 2) वें घटना की आवश्यकता होगी मैं कदम है, जहां मैं कि घटना की प्रारंभिक स्थिति है की 1

      इस प्रकार, I कदम उठाने के बाद , वॉकर स्थिति L - 1 में है , बाईं ओर का सामना कर रहा है। फिर से दिशाओं को मोड़ने के लिए, उसे अग्रिम 1 की ओर बाईं ओर चलना होगा । हालाँकि, जैसा भी मामला है, चूंकि (एल - 1) - 1 विषम है, इसके लिए 0 से गुजरने और कम टी एल कदम उठाने की आवश्यकता नहीं होगी ।

      चूंकि बाईं दिशा में लक्ष्य की प्रारंभिक दूरी 1 है , I कदम उठाने के बाद , वॉकर खुद को दिशाओं को बदलने के बाद लक्ष्य से I + 1 की दूरी पर पाता है । चूंकि I <L , हमारे पास है कि I + 1 so L है , इसलिए अगले I + 1 चरण उसे लक्ष्य तक पहुंचाएंगे।

      यह कुल I + I + 1 = 2I + 1 उठाए गए कदम देता है। शुरुआती सेल के लिए एक जोड़ने पर, हमें इस मामले में कुल 2I + 1 + 1 = 2 (I + 1) विज़िट की गई सेल मिलती हैं ।

यह काम किस प्रकार करता है

ð+\ḤiḤoµL‘  Main link. Argument: x (list of binary digits of N)

       µ    Monadic chain. Argument: x
        L   Compute L, the length of x.
         ‘  Increment to yield L + 1.

ð           Dyadic chain. Left argument: x. Right argument: L + 1
 +\         Compute the cumulative sum of x.
            This replaces the k-th one (and all zeroes to its right) with k.
   Ḥ        Unhalve; multiply all partial sums by 2.
    i       Find the first index of L + 1.
            This either gives I + 1, the 1-based index of the ((L + 1) / 2)-th one
            or 0 if the list doesn't contain L + 1.
            The result will be 0 if x contains less than (L + 1) / 2 ones
            or if L + 1 is an odd integer.
     Ḥ      Unhalve; yield either 2(I + 1) or 0.
      o     Logical OR with L + 1; if the previous operation returned a falsy
            value (i.e., if it yielded 0), replace that value with L + 1.

9

मतलाब (स्कोर = 230, एन = इन्फ)

function w(s,f),b=[];e=0;for i=s:f,a=dec2bin(i);c=find(a=='1');g=numel(a)+1;if numel(c)>=g/2;if mod(g,2)==1,fprintf('%d ',g);else,d=c(g/2);fprintf('%d ',2*d);end,else,fprintf('%d ',g);end,e=e+1;if(e==100),e=0;fprintf('\n');end;end
  • फ़ंक्शन शुरू होने वाले इंडेक्स और एफ के रूप में समाप्त होता है (प्रकार infयदि आप अनंत पर रखना चाहते हैं)।
  • यह सुनिश्चित करने के लिए फ़ंक्शन किसी भी दो आउटपुट प्रकारों के बीच किसी भी उल्लेखनीय समय अंतराल के बिना हमेशा के लिए जा सकता h=1000000000000000000000000000000000000000000000000000;w(h,h+1)है।
  • एल्गोरिथ्म एक गणितीय दृष्टिकोण का अनुसरण करता है जिसे मैं बाद में समझाऊंगा, और यह मार्टिन की संदर्भित सूची की पुष्टि करता है, इस कार्यक्रम पर आधारित है:

    stored=[2, 3, 3, 4, 6, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 10, 6, 10, 8, 8, 6, 10, 8, 8, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 14, 8, 8, 8, 14, 8, 14, 12, 12, 8, 8, 8, 14, 8, 14, 12, 12, 8, 14, 12, 12, 10, 10, 10, 10, 8, 8, 8, 14, 8, 14, 12, 12, 8, 14, 12, 12, 10, 10, 10, 10, 8, 14, 12, 12, 10, 10, 10, 10, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 18, 10, 10, 10, 10, 10, 10, 10, 18, 10, 10, 10, 18, 10, 18, 16, 16, 10, 10, 10, 10, 10, 10, 10, 18, 10, 10, 10, 18, 10, 18, 16, 16, 10, 10, 10, 18, 10, 18, 16, 16, 10, 18, 16, 16, 14, 14, 14, 14, 10, 10, 10, 10, 10, 10, 10, 18, 10, 10, 10, 18, 10, 18, 16, 16, 10, 10, 10, 18, 10, 18, 16, 16, 10, 18, 16, 16, 14, 14, 14, 14, 10, 10, 10, 18, 10, 18, 16, 16, 10, 18, 16, 16, 14, 14, 14, 14, 10, 18, 16, 16, 14, 14, 14, 14, 12, 12, 12, 12, 12, 12, 12, 12, 10, 10, 10, 10, 10, 10, 10, 18, 10, 10, 10, 18, 10, 18, 16, 16, 10, 10, 10, 18, 10, 18, 16, 16, 10, 18, 16, 16, 14, 14, 14, 14, 10, 10, 10, 18, 10, 18, 16, 16, 10, 18, 16, 16, 14, 14, 14, 14, 10, 18, 16, 16, 14, 14, 14, 14, 12, 12, 12, 12, 12, 12, 12, 12, 10, 10, 10, 18, 10, 18, 16, 16, 10, 18, 16, 16, 14, 14, 14, 14, 10, 18, 16, 16, 14, 14, 14, 14, 12, 12, 12, 12, 12, 12, 12, 12, 10, 18, 16, 16, 14, 14, 14, 14, 12, 12, 12, 12, 12, 12, 12, 12, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 22, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 22, 12, 12, 12, 12, 12, 12, 12, 22, 12, 12, 12, 22, 12, 22, 20, 20, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 22, 12, 12, 12, 12, 12, 12, 12, 22, 12, 12, 12, 22, 12, 22, 20, 20, 12, 12, 12, 12, 12, 12, 12, 22, 12, 12, 12, 22, 12, 22, 20, 20, 12, 12, 12, 22, 12, 22, 20, 20, 12, 22, 20, 20, 18, 18, 18, 18, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 22, 12, 12, 12, 12, 12, 12, 12, 22, 12, 12, 12, 22, 12, 22, 20, 20, 12, 12, 12, 12, 12, 12, 12, 22, 12, 12, 12, 22, 12, 22, 20, 20, 12, 12, 12, 22, 12, 22, 20, 20, 12, 22, 20, 20, 18, 18, 18, 18, 12, 12, 12, 12, 12, 12, 12, 22, 12, 12, 12, 22, 12, 22, 20, 20, 12, 12, 12, 22, 12, 22, 20, 20, 12, 22, 20, 20, 18, 18, 18, 18, 12, 12, 12, 22, 12, 22, 20, 20, 12, 22, 20, 20, 18, 18, 18, 18, 12, 22, 20, 20, 18, 18, 18, 18, 16, 16, 16, 16, 16, 16, 16, 16, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 22, 12, 12, 12, 12, 12, 12, 12, 22, 12, 12, 12, 22, 12, 22, 20, 20, 12, 12, 12, 12, 12, 12, 12, 22, 12, 12, 12, 22, 12, 22, 20, 20, 12, 12, 12, 22, 12, 22, 20, 20, 12, 22, 20, 20, 18, 18, 18, 18, 12, 12, 12, 12, 12, 12, 12, 22, 12, 12, 12, 22, 12, 22, 20, 20, 12, 12, 12, 22, 12, 22, 20, 20, 12, 22, 20, 20, 18, 18, 18, 18, 12, 12, 12, 22, 12, 22, 20, 20, 12, 22, 20, 20, 18, 18, 18, 18, 12, 22, 20, 20, 18, 18, 18, 18, 16, 16, 16, 16, 16, 16, 16, 16, 12, 12, 12, 12, 12, 12, 12, 22, 12, 12, 12, 22, 12, 22, 20, 20, 12, 12, 12, 22, 12, 22, 20, 20, 12, 22, 20, 20, 18, 18, 18, 18, 12, 12, 12, 22, 12, 22, 20, 20, 12, 22, 20, 20, 18, 18, 18, 18, 12, 22, 20, 20, 18, 18, 18, 18, 16, 16, 16, 16, 16, 16, 16, 16, 12, 12, 12, 22, 12, 22, 20, 20, 12, 22, 20, 20, 18, 18, 18, 18, 12, 22, 20, 20, 18, 18, 18, 18, 16, 16, 16, 16, 16, 16, 16, 16, 12, 22, 20, 20, 18, 18, 18, 18, 16, 16, 16, 16, 16, 16, 16, 16, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 22, 12, 12, 12, 12, 12, 12, 12, 22, 12, 12, 12, 22, 12, 22, 20, 20, 12, 12, 12, 12, 12, 12, 12, 22, 12, 12, 12, 22, 12, 22, 20, 20, 12, 12, 12, 22, 12, 22, 20, 20, 12, 22, 20, 20, 18, 18, 18, 18, 12, 12, 12, 12, 12, 12, 12, 22, 12, 12, 12, 22, 12, 22, 20, 20, 12, 12, 12, 22, 12, 22, 20, 20, 12, 22, 20, 20, 18, 18, 18, 18, 12, 12, 12, 22, 12, 22, 20, 20, 12, 22, 20, 20, 18, 18, 18, 18, 12, 22, 20, 20, 18, 18, 18, 18, 16, 16, 16, 16, 16, 16, 16, 16, 12, 12, 12, 12, 12, 12, 12, 22, 12, 12, 12, 22, 12, 22, 20, 20, 12, 12, 12, 22, 12, 22, 20, 20, 12, 22, 20, 20, 18, 18, 18, 18, 12, 12, 12, 22, 12, 22, 20, 20, 12, 22, 20, 20, 18, 18, 18, 18, 12, 22, 20, 20, 18, 18, 18, 18, 16, 16, 16, 16, 16, 16, 16, 16, 12, 12, 12, 22, 12, 22, 20, 20, 12, 22, 20, 20, 18, 18, 18, 18, 12, 22, 20, 20, 18, 18, 18, 18, 16, 16, 16, 16, 16, 16, 16, 16, 12, 22, 20, 20, 18, 18, 18, 18, 16, 16, 16, 16, 16, 16, 16, 16, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 12, 12, 12, 12, 12, 12, 12, 22, 12, 12, 12, 22, 12, 22, 20, 20, 12, 12, 12, 22, 12, 22, 20, 20, 12, 22, 20, 20, 18, 18, 18, 18, 12, 12, 12, 22, 12, 22, 20, 20, 12, 22, 20, 20, 18, 18, 18, 18, 12, 22, 20, 20, 18, 18, 18, 18, 16, 16, 16, 16, 16, 16, 16, 16, 12, 12, 12, 22, 12, 22, 20, 20, 12, 22, 20, 20, 18, 18, 18, 18, 12, 22, 20, 20, 18, 18, 18, 18, 16, 16, 16, 16, 16, 16, 16, 16, 12, 22, 20, 20, 18, 18, 18, 18, 16, 16, 16, 16, 16, 16, 16, 16, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 12, 12, 12, 22, 12, 22, 20, 20, 12, 22, 20, 20, 18, 18, 18, 18, 12, 22, 20, 20, 18, 18, 18, 18, 16, 16, 16, 16, 16, 16, 16, 16, 12, 22, 20, 20, 18, 18, 18, 18, 16, 16, 16, 16, 16, 16, 16, 16, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 12, 22, 20, 20, 18, 18, 18, 18, 16, 16, 16, 16, 16, 16, 16, 16, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13];
    b=[];for i=1:numel(stored)
    a=dec2bin(i);
    c=find(a=='1');
    if numel(c)>=(numel(a)+1)/2
    if mod(numel(a)+1,2)==1
    b=[b numel(a)+1];
    else
    d=c((numel(a)+1)/2);
    b=[b 2*d];
    end
    else
    b=[b numel(a)+1];
    end
    end
    for i=1:numel(stored)
    if (b(i))
    if b(i)~=stored(i)
    'error',
    end
    end
    end
    
  • चूंकि एल्गोरिथ्म 2048 पहले टेस्टेसिस की पुष्टि करता है, इसलिए मैं नेत्रहीन रूप से यह मान लूंगा कि यह किसी भी परीक्षण के मामले में होगा, इसलिए मेरा एल्गोरिथ्म कुछ गुणों के बारे में काम करता है, जिन्हें मैंने इस प्रक्रिया में शिफ्टिंग और पॉइंटर के दर्द के बिना खोजा है:

    1- यदि द्विआधारी अनुवाद में दो बार 1 की संख्या sequnce की लंबाई से अधिक है Lतो आउटपुट हैL+1

    2- यदि अनुक्रम लंबाई समान है और पिछली स्थिति सेट नहीं है तो आउटपुट समान है L+1

    3- अन्यथा, आउटपुट L/21 के वें सूचकांक से दोगुना है ।


क्या आप स्पष्ट कर सकते हैं कि "1 का उत्पादन L / 2th इंडेक्स से दोगुना है।" ? यह अविश्वसनीय रूप से अस्पष्ट है।
orlp

इस क्रम में @orlp १००१०००१ में १ की दूसरी घटना ४ है, २ से
this

1
यह कम से कम 89 बाइट्स तक नीचे हो सकता है a=dec2bin(input(''));c=find(a=='1');g=nnz(a)+1;if nnz(c)<g/2|mod(g,2);g,else,2*c(g/2),end, जो केवल अनुक्रम का एक तत्व देता है।
डेविड

8

पायथन, 122 119 113 110 110 108 107 103 बाइट्स

def l(b):
 p=e=w=len(b);d=i=1
 while e:p+=1-2*b[w-e];d*=2*(1!=d-p>~w)-1;p-=d;e=(e-d)%-~w;i+=1
 return i

बाइनरी अंकों की सूची के रूप में इनपुट लेता है। परीक्षण करने के लिए सहायक समारोह:

b = lambda n: [int(d) for d in bin(n)[2:]]

7 बाइट बचाने के लिए लिन को श्रेय।


4
प्यू प्यू प्यू। : D
AdmBorkBork

यह ज्यादा नहीं है, लेकिन ... मुझे लगता p-d-1in[-2,w]है कि एक बाइट बचाता है।
लिन

d*=2*(1!=d-p>~w)-1चार और को बचाने के लिए बयान बदलना ! ° वी °
लिन

@ लीन मॉर्गन के कानूनों का अच्छा उपयोग!
orlp

क्या आप मेरी तुलना करने के लिए एक विस्तृत आउटपुट रेंज प्रदान कर सकते हैं? thanx
अब्रियम २१

3

पायथन 2, 99 बाइट्स

def l(b):l=len(b);return(l>=sum(b)*2or l%2<1)and-~l or[i+1for i,c in enumerate(b)if b[i]][l/2]*2

Agawa001 के शानदार जवाब का पायथन पोर्ट।

पठनीय संस्करण:

def l(b):
    if len(b) >= 2*sum(b) or len(b)%2 == 0:
        return len(b) + 1

    return 2*[i+1 for i, c in enumerate(b) if b[i]][len(b)//2]

@ Agawa001 मैंने अभी तक आपके एल्गोरिथ्म को नहीं समझा है, लेकिन मैंने इसे प्रयोगात्मक रूप से 10 मिलियन तक सत्यापित किया है।
orlp

3

MATL, 31 , 25 बाइट्स

BXHnQtHsy2/<w2\+~?2/Hfw)E

यह Agawa001 के एल्गोरिथ्म का सिर्फ एक MATL संस्करण है, सिवाय इसके कि एक पूर्णांक इनपुट N लेता है और अनुक्रम में N-th शब्द देता है। यह ढेर में सभी तत्वों के साथ रखने के लिए मुश्किल था! पागल होने से बचने के लिए मुझे क्लिपबोर्ड का सहारा लेना पड़ा। आप इसे ऑनलाइन आज़मा सकते हैं !

:"@कोड से पहले और ]Dबाद में जोड़कर पहले N शब्दों को प्रिंट करने वाले लूप में बनाया जा सकता है ।

6 पूरे बाइट्स को बचाने के लिए लुइस मेंडो के लिए धन्यवाद!


2

जूलिया 0.4, 4ia4̷ 42 बाइट्स

x->(k=endof(x)+1;try k=2find(x)[k/2]end;k)

यह फ़ंक्शन इनपुट के रूप में अपने द्विआधारी अंकों की सूची के रूप में एक पूर्णांक को स्वीकार करता है।

एल्गोरिथ्म @ Agawa001 के उत्तर और मेरे जेली उत्तर से एक के बराबर है ।

इसे ऑनलाइन आज़माएं!

यह काम किस प्रकार करता है

find(x)x के सभी गैर-शून्य तत्वों के 1-आधारित सूचकांकों को लौटाता है । हम अनुक्रमणिका k / 2 पर परिणामी सारणी तक पहुँचने का प्रयास करते हैं और यदि सफल हो, तो चुने हुए सूचकांक के साथ k को दो बार अधिलेखित कर देते हैं ।

यह विफल हो जाएगा और केवल तभी यदि निम्न में से कोई एक सत्य है:

  • k / 2 एक गैर-इंटीग्रल फ्लोट है, इसलिए और InexactError को उठाया जाता है।

  • अनुक्रमणिका सरणी में k / 2 तत्वों से कम है , इसलिए एक BoundsError उठाया जाता है।

किसी भी स्थिति में, ओवरराइटिंग k विफल हो जाएगी, इसलिए इसका मूल मूल्य वापस आ जाएगा।


1

जावास्क्रिप्ट (ईएस 6), 65 बाइट्स

s=>(l=s.length+1)%2|!(m=s.match(`(0*1){$l/2}}`))?l:m[0].length*2

एक बाइनरी स्ट्रिंग को स्वीकार करता है। विभिन्न अन्य उत्तरों से बाउंस चेक का उपयोग करता है।


1

पायथन 2, 74 बाइट्स

def f(x):k=len(x)+1;print next((i*2for i in range(k)if k==2*sum(x[:i])),k)

यह फ़ंक्शन इनपुट के रूप में अपने द्विआधारी अंकों की सूची के रूप में एक पूर्णांक को स्वीकार करता है।

एल्गोरिथ्म @ Agawa001 के उत्तर और मेरे जेली उत्तर से एक के बराबर है

Ideone पर इसका परीक्षण करें

यह काम किस प्रकार करता है

nextपहला पूर्णांक 2i खोजने का प्रयास करता है , जिसके लिए यह k==2*sum(x[:i])सही है। चूंकि x[:i]इसमें i तत्व हैं, यह 1 (k / 2) th 1 के 1-आधारित सूचकांक देता है ।

nextविफल हो जाएगा यदि k / 2 गैर-अभिन्न है या यदि x में k / 2 कम हैं। इस स्थिति में, डिफ़ॉल्ट मान k दिया जाता है।


0

> <> , 63 बाइट्स

2r11&>}:?v{1->:l2-%?vr{{$>1+$}$:2=$@&101.
 +&?!^&n;>{1+^ .0+bf<

जिस क्षण से मैंने इस चुनौती में उदाहरण पैटर्न देखा, मुझे पता था कि किस भाषा का उपयोग करना है :)

का उपयोग करते हुए एन प्राप्त करने के लिए एन वें अवधि।

स्टैक पर बाइनरी में इनपुट माना जाता है। वॉकर को चारों ओर ले जाने के बजाय, यह समाधान ज्यादातर वॉकर के नीचे टेप को स्थानांतरित करने पर निर्भर करता है।

इसे ऑनलाइन आज़माएं!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.