दो ब्रेनफक कार्यक्रम लिखें


10

2 ब्रेनफक कोड स्निपेट्स को देखते हुए Aऔर Bकुछ ब्रेनफक कोड को आउटपुट Cकरता है, जिसमें एस परिणाम Bके इनपुट के साथ चलने के समान व्यवहार Aहोता है। ध्यान दें कि Cकिसी भी इनपुट के लिए काम करना चाहिए जो निम्न मान्यताओं से मेल खाता हो, जैसे कि उसे दिया गया हो A

आप मान सकते हैं:

  1. परिमित इनपुट।
  2. A और B दोनों पड़ाव।
  3. EOF लगातार 0 या लगातार -1 है।
  4. लगातार कोशिकाओं को छोड़ देने की अनुमति दें या अस्वीकार करें
  5. अनबाउंड टेप (अन्यथा आवश्यकता असंभव हो सकती है)
  6. लगातार 8-बिट रैपिंग या अनबाउंड पूर्णांक
  7. कोई स्ट्रीम (ए या बी के लिए इनपुट या आउटपुट) में ईओएफ का प्रतिनिधित्व करने वाली बाइट नहीं होती है
  8. कोड A और B में वे अक्षर हो सकते हैं जो संभवतः आपके C में दिखाई देते हैं, और +-[]<>,.

जैसे (EOF = 0)

A = ,[..,]
B = ,[...,]
C = ,[......,]

A = >,[>,]<[.<]
B = ,[...,]
C = >>>>,[[-<+<+<+>>>]>>>,]<<<<[.<]

A = >,[>,]<[.<]
B = ,[...,]
C = >,[>,]<[...<]

A = ,.
B = ,.
C = ,>,[,]<.

A = ,.
B = ,.
C = ,.

वैध परीक्षण हैं

प्रत्येक भाषा की जीत में सबसे छोटा कोड। ब्रेनफक में विजेता स्वीकार किया जाएगा।


7
Shortest code in each language winऔर Shortest Brainfuck solution will be acceptedदो अलग-अलग जीत मापदंड हैं।
मेगो

2
@ मेरा मतलब है कि अगर आप दिमाग में जवाब देते हैं और आप जीतते हैं, तो आप स्वीकार किए जाते हैं
l4m2

1
इसके अलावा। आप पर विस्तृत कर सकते हैं 4.Consistently allow or disallow cells to left। अग्रणी उत्तर को काम करने के लिए उत्तर में बाईं ओर कोशिकाओं की आवश्यकता होती है, लेकिन ए, बी और सी को हटाकर पहले बाइट को स्थानांतरित नहीं करने के लिए। मेरे उत्तर के उत्तर, A, B, और C. के उत्तर में बाईं ओर चलते हैं यदि मेरे कार्यक्रम और C के नियम A से भिन्न हो सकते हैं, और B तो मैं निश्चित रूप से मेरे उत्तर को बहुत छोटा कर सकता हूं।
सिल्वेस्टर

1
संपूर्ण समस्या कथन A, B, और C के बारे में है, और केवल अंतिम दो वाक्य उत्तर की भाषा का कोई संदर्भ देते हैं। शायद लेखक ने उत्तर को ए, बी और सी के समान स्वाद में होने का इरादा किया था, लेकिन यह मेरी गलती नहीं होगी। समस्या लेखकों की दूरदर्शिता की कमी के लिए सॉल्वरों को दंडित नहीं किया जाना चाहिए। किसी भी दर पर यह >मेरे उत्तर की शुरुआत में कुछ एस को जोड़ने के लिए तुच्छ है, ताकि इसे अधिक प्रतिबंधक स्वाद के साथ अनुपालन किया जा सके (लेकिन गोल्फ के लिए, हमें विकल्पों पर भी विचार करना चाहिए)। इसके अलावा, यह मुझे स्पष्ट लगता है कि ए, बी और सी एक दूसरे के समान स्वाद में होना चाहिए।
मिच श्वार्ट्ज

1
हो सकता है कि मैं चुनौती को पूरी तरह से गलत समझ रहा हूं, लेकिन # 3 और # 4 मामलों की जांच करना मुश्किल लग रहा है।
जेम्स

जवाबों:


8

ब्रेनफक, 526 बाइट्स

-<+++++<+<+++++<-[+++++++[<++++++++>-]<--->>]<<--<--<+..<<<<,[[<+>>+<-]----[>-<-
---]>[+[++[++++++++++++++[++[[-]<]<<<[>-->>>-.>>>.<<<.>.>.<<.+>>--..>.<..<.>.>..
<++.<.>..>.<..<.>--.>>.<<.>.<..<.>.>.<.<.>++.<<.>.>.>.<.<.>..>.<..<.>>>.<<--.++<
<<]>>>>[<]<]>[<<<<[>]>[+>>>>>.>.<<<.>.<.>>>.<.[.<.>>>]<++[<<.<.>>.<<--.<<.>.>.++
>>>-]<<<<.>.>>.<.<<<.>>..>>.<<<.>--.>.<++...<<.>>--..>>.<.<..<.>.>>.<<++...>.<..
<.>>>.<<--...++<<[.>]<<<--.<<.>>++.<.>>>.<<--.++<<<]]<]>[<<<.>>]<]>[>>.>.<<<.>.>
>>.[<]]<]>[>>.>.<..<.>>>.[<]<<<+>->>]<<.[-]>,]

प्रारूपित:

-<+++++<+<+++++<-[+++++++[<++++++++>-]<--->>]
<<--<--<+..<<<<
,
[
  [<+> >+<-]
  ----[>-<----]>
  [
    not question mark
    +
    [
      not greater than
      ++
      [
        not less than
        ++++++++++++++
        [
          not period
          ++
          [
            not comma
            [-]<
          ]
          <<<
          [
            comma B
            >-->>> -.>>>.<<<.>.>.<<.+>>--..>.<..<.>.>..<++.<.>..>.<..<.>--.>>.<<
            .>.<..<.>.>.<.<.>++.<<.>.>.>.<.<.>..>.<..<.>>>.<<--.++<<<
          ]
          >>>>[<]<
        ]
        >
        [
          period
          <<<<
          [
            B
            >
          ]
          >
          [
            A
            +>>> >>.>.<<<.>.<.>>>.<.[.<.>>>]<++[<<.<.>>.<<--.<<.>.>.++>>>-]<<<<.
            >.>>.<.<<<.>>..>>.<<<.>--.>.<++...<<.>>--..>>.<.<..<.>.>>.<<++...>.<
            ..<.>>>.<<--...++<<[.>]<<<--.<<.>>++.<.>>>.<<--.++<<<
          ]
        ]
        <
      ]
      >
      [
        less than
        <<<.>>
      ]
      <
    ]
    >
    [
      greater than
      >>.>.<<<.>.>>>.[<]
    ]
    <
  ]
  >
  [
    question mark
    >>.>.<..<.>>>.[<]
    <<<+>->>
  ]
  <<.[-]>,
]

ए, बी, और सी: ईओएफ = 0 के संबंध में, कोशिकाओं को छोड़ना शुरू कर दिया गया, 8-बिट रैपिंग सेल।

?बी के बाद ए की अपेक्षा करता है।

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

(यह जवाब एक ब्रेनफॉक दुभाषिया के साथ संगत किया जा सकता है जो ट्रांसलेट करके और प्रीपेडिंग करके एक बाइट की कीमत पर शुरुआत के बाईं ओर जाने की अनुमति नहीं देता y/<>/></है >।)

मूल विचार 2-सेल नोड्स का उपयोग करके ए और बी के टेपों को अनुकरण करने के लिए स्ट्रिंग प्रतिस्थापन की एक श्रृंखला का उपयोग करना है, ए और बी .में बदलने के लिए विशेष ध्यान दिया जाता है ,ताकि मध्यवर्ती डेटा स्ट्रीम को एक ब्लॉक में रखा जाए नकली टेप के बाईं ओर स्थित कोशिकाएं। स्ट्रिंग प्रतिस्थापन योजना है:

  • >>A से पहले डालें

  • ए और बी दोनों में, के >साथ >[-]+>और <साथ बदलें<<

  • ए में, के .साथ बदलें>[-]-[>>]+[[>+<-]<[>+<-]<]>+[->>+]<[>>>-<<+[<<]<+>>>[>>]+<<<-]>[+<->]+</

  • >[>>]+>ए के बाद और बी से पहले डालें

  • बी में, के ,साथ बदलें,[,]>,<<[<<]<[[>]>>[>>]<+<[<<]<[<]>-]>[>]>>[>>]+<*


,[>,]<[.<]?,[...,]इनपुट 12345रिटर्न 111, >पहले भी पर्याप्त के साथ ?
l4m2

@ l4m2 हम्म, यह मेरे लिए TIO पर काम कर रहा है । ( ,[>,]<[.<]मान्य नहीं है लेकिन >,[>,]<[.<]है।)
मिच श्वार्ट्ज

तो क्या आपका "यह स्टार्ट सेल के बाईं ओर जाने की अनुमति देता है"?
l4m2

1
तो आपके उत्तर के लिए एक BF की आवश्यकता होती है जो एक अनंत टेप के बीच में शुरू होता है, लेकिन A और B की प्रकृति उस मानक तक सीमित है जहां कोई व्यक्ति अनंत तक टेप पर पहली सेल शुरू करता है?
सिल्वेस्टर

1
इस समाधान के लिए, स्टार्ट सेल के बाईं ओर जाने को A, B, और C में अस्वीकृत कर दिया जाता है, लेकिन कार्यक्रम में इसे अनुमति दी जाती है (हम इसे सुविधा के लिए D कह सकते हैं) A और B को लेता है और फिर C. I डॉन का उत्पादन करता है। यह नहीं लगता है कि यह बहुत ही उल्लेखनीय है, और समाधान की प्रकृति को देखते हुए एक प्राकृतिक विकल्प है। प्रारंभ के बाईं ओर जाने के ए, बी और सी के संदर्भ में प्रमुख परिणाम हैं, लेकिन यह डी के लिए काफी तुच्छ है, और विषयगत रूप से अधिक सुखद गोल्फ अनुभव के साथ-साथ थोड़ा कम स्कोर के लिए बनाता है, और यह भी नहीं करना चाहिए किसी भी अधिक थकाऊ परीक्षण, के रूप >में जरूरत के रूप में डी को प्रस्तुत करना आसान है ।
मिच श्वार्ट्ज

6

ब्रेनफक , 1287 बाइट्स

++++++++++++++++[->+++>+++>++++>++++>++++++>++++++<<<<<<]>----->--->---->-->----->--->+<<<.....<<.>>....<<.>>.<<..>...>>>>[>+>,->[-]++++[-<-------->]+<[>>]>[<<-<-<<<..>.<.....>>.<<<.....>>.<<<<.>>..>>.<<<.>>>>.<<<...>>>.<<.<<<..>>>>.<<<..>>.....<<<..>>>>>.<<<<<.>>>>.<<<.>.....<<.>>>>>.<<<<.>>..>>>>>>>>]<<<-------------[>>]>[<<-<<<<..<<.>..>>.<<<.>.<<.>>>....<<<.>>>>.<<<.>.....<<.>>>>>.<<<<<.>>>>.<<<..>>.....<<<..>>>>>.<<<<..>..<<.>>>..<<<.>>>>.<<<.>.....<<.>>>>>.<<<<.>.<<..>>>>.<<<..>>.....<<<..>>>>>.<<<<..>..>>>.<<<.>>.<<<.>>.<<<.>>.>>>.<<....<<<.>>>>.<<<.>.....<<.>>>>>.<<<<<.>>>>.<<<..>>.....<<<..>>>>>.<<.....<<.>>>.<<<.>.....<<.>>>>>.<<<<.>.<<..>>>>.<<<..>>.....<<<..>>>>>.<<<<.>..>>>>>>>>>]<<<--------------[>>]>[<<-<<<<<...>>.<<<<.>>>>>.<<<<.>..>>>>>>>>>]<<<--[>>]>[<<-<<<<.......>.<<<<.>>>>>.<<<<.>..>>>>>>>>>]<<<<[+++++++[->++++++++<]>--.<]<]>>,[<+>>++++[-<--------->]+<+[>>]>[<<-<<<.<<<.>>>>.<<..<<.>>.>.<.....>>.<<<<<.>>>>.<<<.>.....<<.>>>>>.<<<<.>>...>.<<<.>...>>.<<.....>>>.<<....<<<.>>>>.<<<.>>.....<<<.>>>>>.<<<<.>..<<.>>>...>.<.....>>.<<<<<.>>>>.<<<.>.....<<.>>>>>.<<<<.>>...>>.<<..<<.>>>.<<.....>>>.<<....<<<.>>>>.<<<.>>.....<<<.>>>>>.<<<..>>>>>>>>>]<<<----------------[>>]>[<<-<<<<<.....>>>>>>>>>]<<<--[>>]>[<<-<<<<.....>>>>>>>>]<<<<[+++++++[->++++++++<]>--.<]>,]

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

यह रहा! ब्रेनफक कोड जो दो ब्रेनफक कोड की रचना करता है। का उपयोग "!" दो इनपुट कोड स्निपेट्स को अलग करने के लिए। उदाहरण के लिए स्निपेट ए:, >,[>,]<[.<]स्निपेट बी ,[...,]:। मेरे कार्यक्रम के लिए इनपुट >,[>,]<[.<]!,[...,]:। यह समाप्त नहीं होगा अगर नहीं "!" पाया जाता है।

यह अनिवार्य रूप से मेरे VBA संस्करण के समान है। जो कोड उत्पन्न होता है वह VBA संस्करण के समान होता है (ध्यान दें कि VBA पोस्ट में उदाहरण ब्रेनफक स्निपेट्स में नवीनतम परिवर्तन से पहले किए गए थे)।

व्याख्या

यह मेरा सोर्स कोड है:

[ 
Tape: "+"(43) "-"(45) "<"(60) ">"(62) "["(91) "]"(93) readA(1) printInput(0) input else exitIf exitElse
]

++++ ++++ ++++ ++++ [->+++>+++>++++>++++>++++++>++++++<<<<<<]>----->--->---->-->----->--->+

<<<.....<<.>>....<<.>>.<<..>... print init routine
>>>>[                           while readA
  >+                              set printInput = true
  >,                              read character
  ->[-]++++[-<-------->]          decrease input by 33 to check for "!"
  +                               set else flag

  # A check for "!"
  <[                              if input not "!"
    >>                              go to exitIf
  ]
  >[                              else
    <<-                             set printInput = false
    <-                              set readA = false
    <<<..>.<.....>>.<<<.....>>.<<<< print routine between A and B
    .>>..>>.<<<.>>>>.<<<...>>>.<<.<
    <<..>>>>.<<<..>>.....<<<..>>>>>
    .<<<<<.>>>>.<<<.>.....<<.>>>>>.
    <<<<.>>..>>>
    >>>>>                           go to exitElse
  ]

  # A check for "dot"
  <<<----- ----- ---              decrease input by 13 (total 46) to check for dot
  [                               if input not dot
    >>                              go to exitIf
  ]
  >[                              else
    <<-                             set printInput = false
    <<<<..<<.>..>>.<<<.>.<<.>>>.... print list storing routine
    <<<.>>>>.<<<.>.....<<.>>>>>.<<<
    <<.>>>>.<<<..>>.....<<<..>>>>>.
    <<<<..>..<<.>>>..<<<.>>>>.<<<.>
    .....<<.>>>>>.<<<<.>.<<..>>>>.<
    <<..>>.....<<<..>>>>>.<<<<..>..
    >>>.<<<.>>.<<<.>>.<<<.>>.>>>.<<
    ....<<<.>>>>.<<<.>.....<<.>>>>>
    .<<<<<.>>>>.<<<..>>.....<<<..>>
    >>>.<<.....<<.>>>.<<<.>.....<<.
    >>>>>.<<<<.>.<<..>>>>.<<<..>>..
    ...<<<..>>>>>.<<<<.>..>>>>>
    >>>>                            go to exitElse
  ]

  # A check for "less than"
  <<<----- ----- ----             decrease input by 14 (total 60) to check for "less than"
  [                               if input not "less than"
    >>                              go to exitIf
  ]
  >[                              else
    <<-                             set printInput = false
    <<<<<...>>.<<<<.>>>>>.<<<<.>..>>>>> print A move left routine
    >>>>                            go to exitElse
  ]

  # A check for "greater than"
  <<<--                           decrease input by 2 (total 62) to check for "greater than"
  [                               if input not "greater than"
    >>                              go to exitIf
  ]
  >[                              else
    <<-                             set printInput = false
    <<<<.......>.<<<<.>>>>>.<<<<.>..>>>>> print A move right routine
    >>>>                            go to exitElse
  ]

  # print remaining character
  <<<<[                           if printInput
    +++++++[->++++++++<]>--.<     print original character
  ]

<                               go to readA
]

>>,                             read next character
[                               while input
  <+                              set printInput = true

  # B check for comma
  >>++++[-<----- ---->]+<+        decrement input by 44 to check for comma
  [                               if input not comma
    >>                              go to exitIf
  ]
  >[                              else
    <<-                             set printInput = false
    <<<.<<<.>>>>.<<..<<.>>.>.<..... print B list reading routine
    >>.<<<<<.>>>>.<<<.>.....<<.>>>>
    >.<<<<.>>...>.<<<.>...>>.<<....
    .>>>.<<....<<<.>>>>.<<<.>>.....
    <<<.>>>>>.<<<<.>..<<.>>>...>.<.
    ....>>.<<<<<.>>>>.<<<.>.....<<.
    >>>>>.<<<<.>>...>>.<<..<<.>>>.<
    <.....>>>.<<....<<<.>>>>.<<<.>>
    .....<<<.>>>>>.<<<..>>>>> 
    >>>>                            go to exitElse
  ]

  # B check for "less than"
  <<<----- ----- ----- -          decrease input by 16 (total 60) to check for "less than"
  [                               if input not "less than"
    >>                              go to exitIf
  ]
  >[                              else
    <<-                             set printInput = false
    <<<<<.....>>>>>                 print B move left routine
    >>>>                            go to exitElse
  ]

  # B check for "greater than"
  <<<--                           decrease input by 2 (total 62) to check for "greater than"
  [                               if input not "greater than"
    >>                              go to exitIf
  ]
  >[                              else
    <<-                             set printInput = false
    <<<<.....>>>>                   print B move right routine
    >>>>                            go to exitElse
  ]

  # print remaining character
  <<<<[                           if printInput
    +++++++[->++++++++<]>--.<     print original character
  ]

>,                              input next character
]


@ l4m2: क्षमा करें, मैंने परीक्षण डेटा में थोड़ी गलती की है। मैंने लिखा है >[,>]<[.<]!,[...,], इसलिए स्निपेट ए कुछ भी आउटपुट नहीं करता है। बेशक यह >,[>,]<[.<]!,[...,]एक काम करने वाले उदाहरण के लिए होना चाहिए ।
डोरियन

5

VBA, 512 489 479 बाइट्स

Sub f(A,B):Debug.?">>>>>->>>>->--<<<"&Replace(Replace(Replace(A,"<","<<<[+]-<<"),">",">>>>>>>[+]-<<"),".",">>-<<[-<+>>>>+[-<<<<<+]+[-->>>>>++]--<<+>>+[-<<<<<+]-<++[-->>>>>++]--<<]<[->+<]>>>>+[-<<<<<+]+[-->>>>>++]>>>>>-[-<<<<<+]-<++[-->>>>>++]-<<")&">>[>>>>>]<<<<<[+<<[-]<<<]>++[-->>>>>++]+[-<<<<<+]->>"&Replace(Replace(Replace(B,"<","<<<<<"),">",">>>>>"),",","[-]>>->[>>>>>]+[-<<<<<+]->>>[-<<<[<<<<<]>>>>+[->>>>>+]-<<+>>>[>>>>>]+[-<<<<<+]->>>]>>-[<<<<<]>>>>+[->>>>>+]<<"):End Sub

व्याख्या

वीबीए कोड एक तरह से ब्रेनफक कोड को बदल देता है, कि स्निपेट ए का आउटपुट एक सूची में संग्रहीत किया जाएगा और स्निपेट बी के इनपुट को उस सूची से पढ़ा जाएगा।

यह पहले कुछ चरों को शुरू करता है

>>>>>->>>>->--<<<

फिर यह स्निपेट ए को पढ़ता है और हर बार , हर एक और स्टोरिंग रूटीन <द्वारा बदलता है<<<[+]-<<>>>>>>>>[+]-<<.

>>>>>>>[+]-<<"),".",">>->+[-<<<<<+]+[-->>>>>++]>>>>>-[-<<<<<+]-<++[-->>>>>++]--<<[-<+>>>>+[-<<<<<+]+[-->>>>>++]--<<+>>+[-<<<<<+]-<++[-->>>>>++]--<<]<[->+<]>>>+<<

उसके बाद यह स्निपेट ए की मेमोरी को हटाता है और संग्रहित सूची में बदलाव करता है, इसलिए इसे स्निपेट इनपुट के लिए पढ़ा जा सकता है:

>>[>>>>>]<<<<<[+<<[-]<<<]>++[-->>>>>++]+[-<<<<<+]->>>>>-<<<

फिर स्निपेट बी को पढ़ा जाएगा, हर <को बदल दिया जाएगा <<<<<, हर >को बदल दिया जाएगा >>>>>और हर ,को नियमित पढ़ने की सूची से बदल दिया जाएगा:

[-]>>->[>>>>>]+[-<<<<<+]->>>[-<<<[<<<<<]>>>>+[->>>>>+]-<<+>>>[>>>>>]+[-<<<<<+]->>>]>>-[<<<<<]>>>>+[->>>>>+]<<

Brainfuck स्रोत कोड

यह कोड के ब्रेनफॉक भागों के लिए मेरा स्रोत है। मैं बाद में विस्तार से बताऊंगा।

[
Tape: tempMem data out/in dataAnchors outAnchors (all repeating)
dataAnchors of Snippet A: -1 = memory has been used, -2 = active memory cell for copying to out/in
dataAnchors of Snippet B: -1 = active memory cell for copying from out/in
outAnchors of Snippet A: -1 = start of list, -2 = next output position
outAnchors of Snippet B: -1 = character has been read (or start of input)
]

### Init
>>              two blank data cells (for non wrapping pointer)
>>>-            set start of input
>> >>-          set first "used" flag
>--             set end of input
<<<             return to first usable data cell

### A move right routine
>>>>>           move to the next data cell
>>[+]-          clear and set "used" flag
<<              return to data cell

### A move left routine
<<<[+]-         clear and set "used" flag of previous data cell
<<              go to data cell

### A print routine
>>-             set flag
<<[             while value greater 0
  -               decrement value
  <+              increment tempMem
  >>>>+[-<<<<<+]  find start of input
  +[-->>>>>++]--  find end of input
  <<+             increment input
  >>+[-<<<<<+]-   find start of input
  <++[-->>>>>++]--find flag
  <<              go to active data cell
]
<[->+<]         move stored value back to data
>>>>+[-<<<<<+]  find start of input
+[-->>>>>++]    find end of input
>>>>>-          set new end of input
[-<<<<<+]-      return to start of input
<++[-->>>>>++]- return to and delete data flag
<<              go to data cell

### After snippet A: Delete memory of A and configure out/in list
>>[>>>>>]<<<<< go to last used data
[+<<[-]<<<]    delete each data
>++[-->>>>>++] find and delete end of input flag
+[-<<<<<+]-    go to start of input
>>             go to first data cell

### B move right routine
>>>>>          go to next data cell

### B move left routine
<<<<<          go to previous data cell

### B reading routine
[-]                      set cell = 0
>>-                      set flag
>[>>>>>]+[-<<<<<+]-      find start of input
>>>[                     if value greater 0
  -                        decrement value
  <<<[<<<<<]>>>>           go to initial start of input (combined with next)
  +[->>>>>+]-              find mem cell flag
  <<+                      increment mem cell
  >>>[>>>>>]+[-<<<<<+]->>> return to input cell
]
>>-                      set new start of input
[<<<<<]>>>>              go to initial start of input (combined with next)
+[->>>>>+]               find and delete mem cell flag
<<                       go to mem cell

परीक्षण के मामले के लिए आउटपुट 1: f ",[..,]",",[...,]"

>>>>>->>>>->--<<<,[>>->+[-<<<<<+]+[-->>>>>++]>>>>>-[-<<<<<+]-<++[-->>>>>++]--<<[-<+>>>>+[-<<<<<+]+[-->>>>>++]--<<+>>+[-<<<<<+]-<++[-->>>>>++]--<<]<[->+<]>>>+<<>>->+[-<<<<<+]+[-->>>>>++]>>>>>-[-<<<<<+]-<++[-->>>>>++]--<<[-<+>>>>+[-<<<<<+]+[-->>>>>++]--<<+>>+[-<<<<<+]-<++[-->>>>>++]--<<]<[->+<]>>>+<<,]>>[>>>>>]<<<<<[+<<[-]<<<]>++[-->>>>>++]+[-<<<<<+]->>>>>-<<<[-]>>->[>>>>>]+[-<<<<<+]->>>[-<<<[<<<<<]>>>>+[->>>>>+]-<<+>>>[>>>>>]+[-<<<<<+]->>>]>>-[<<<<<]>>>>+[->>>>>+]<<[...[-]>>->[>>>>>]+[-<<<<<+]->>>[-<<<[<<<<<]>>>>+[->>>>>+]-<<+>>>[>>>>>]+[-<<<<<+]->>>]>>-[<<<<<]>>>>+[->>>>>+]<<] 

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

टेस्ट केस 2 के लिए आउटपुट: f ">,[>,]<[.<]",",[...,]"

>>>>>->>>>->--<<<>>>>>>>[+]-<<,[>>>>>>>[+]-<<,]<<<[+]-<<[>>->+[-<<<<<+]+[-->>>>>++]>>>>>-[-<<<<<+]-<++[-->>>>>++]--<<[-<+>>>>+[-<<<<<+]+[-->>>>>++]--<<+>>+[-<<<<<+]-<++[-->>>>>++]--<<]<[->+<]>>>+<<<<<[+]-<<]>>[>>>>>]<<<<<[+<<[-]<<<]>++[-->>>>>++]+[-<<<<<+]->>>>>-<<<[-]>>->[>>>>>]+[-<<<<<+]->>>[-<<<[<<<<<]>>>>+[->>>>>+]-<<+>>>[>>>>>]+[-<<<<<+]->>>]>>-[<<<<<]>>>>+[->>>>>+]<<[...[-]>>->[>>>>>]+[-<<<<<+]->>>[-<<<[<<<<<]>>>>+[->>>>>+]-<<+>>>[>>>>>]+[-<<<<<+]->>>]>>-[<<<<<]>>>>+[->>>>>+]<<]

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

टेस्ट केस 3 के लिए आउटपुट: f ",.",",."

>>>>>->>>>->--<<<,>>->+[-<<<<<+]+[-->>>>>++]>>>>>-[-<<<<<+]-<++[-->>>>>++]--<<[-<+>>>>+[-<<<<<+]+[-->>>>>++]--<<+>>+[-<<<<<+]-<++[-->>>>>++]--<<]<[->+<]>>>+<<>>[>>>>>]<<<<<[+<<[-]<<<]>++[-->>>>>++]+[-<<<<<+]->>>>>-<<<[-]>>->[>>>>>]+[-<<<<<+]->>>[-<<<[<<<<<]>>>>+[->>>>>+]-<<+>>>[>>>>>]+[-<<<<<+]->>>]>>-[<<<<<]>>>>+[->>>>>+]<<.

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

जटिल परीक्षण का मामला: स्निपेट ए: बिल्ड वर्णमाला त्रिकोण >+++++[<+++++>-]<+[>>[>[.>]]>++++++++++.--[<++++++++>-]<[+.<]<-]>>,>[.>]++++++++++.[<[.<]>,>[.>]<] इसे ऑनलाइन आज़माएं!

स्निपेट बी: आरोही क्रम में इनपुट छाँटें >>,[>>,]<<[[-<+<]>[>[>>]<[.[-]<[[>>+<<-]<]>>]>]<<] यह ऑनलाइन प्रयास करें!

परिणाम:

>>>>>->>>>->--<<<>>>>>>>[+]-<<+++++[<<<[+]-<<+++++>>>>>>>[+]-<<-]<<<[+]-<<+[>>>>>>>[+]-<<>>>>>>>[+]-<<[>>>>>>>[+]-<<[>>-<<[-<+>>>>+[-<<<<<+]+[-->>>>>++]--<<+>>+[-<<<<<+]-<++[-->>>>>++]--<<]<[->+<]>>>>+[-<<<<<+]+[-->>>>>++]>>>>>-[-<<<<<+]-<++[-->>>>>++]-<<>>>>>>>[+]-<<]]>>>>>>>[+]-<<++++++++++>>-<<[-<+>>>>+[-<<<<<+]+[-->>>>>++]--<<+>>+[-<<<<<+]-<++[-->>>>>++]--<<]<[->+<]>>>>+[-<<<<<+]+[-->>>>>++]>>>>>-[-<<<<<+]-<++[-->>>>>++]-<<--[<<<[+]-<<++++++++>>>>>>>[+]-<<-]<<<[+]-<<[+>>-<<[-<+>>>>+[-<<<<<+]+[-->>>>>++]--<<+>>+[-<<<<<+]-<++[-->>>>>++]--<<]<[->+<]>>>>+[-<<<<<+]+[-->>>>>++]>>>>>-[-<<<<<+]-<++[-->>>>>++]-<<<<<[+]-<<]<<<[+]-<<-]>>>>>>>[+]-<<>>>>>>>[+]-<<,>>>>>>>[+]-<<[>>-<<[-<+>>>>+[-<<<<<+]+[-->>>>>++]--<<+>>+[-<<<<<+]-<++[-->>>>>++]--<<]<[->+<]>>>>+[-<<<<<+]+[-->>>>>++]>>>>>-[-<<<<<+]-<++[-->>>>>++]-<<>>>>>>>[+]-<<]++++++++++>>-<<[-<+>>>>+[-<<<<<+]+[-->>>>>++]--<<+>>+[-<<<<<+]-<++[-->>>>>++]--<<]<[->+<]>>>>+[-<<<<<+]+[-->>>>>++]>>>>>-[-<<<<<+]-<++[-->>>>>++]-<<[<<<[+]-<<[>>-<<[-<+>>>>+[-<<<<<+]+[-->>>>>++]--<<+>>+[-<<<<<+]-<++[-->>>>>++]--<<]<[->+<]>>>>+[-<<<<<+]+[-->>>>>++]>>>>>-[-<<<<<+]-<++[-->>>>>++]-<<<<<[+]-<<]>>>>>>>[+]-<<,>>>>>>>[+]-<<[>>-<<[-<+>>>>+[-<<<<<+]+[-->>>>>++]--<<+>>+[-<<<<<+]-<++[-->>>>>++]--<<]<[->+<]>>>>+[-<<<<<+]+[-->>>>>++]>>>>>-[-<<<<<+]-<++[-->>>>>++]-<<>>>>>>>[+]-<<]<<<[+]-<<]>>[>>>>>]<<<<<[+<<[-]<<<]>++[-->>>>>++]+[-<<<<<+]->>>>>>>>>>>>[-]>>->[>>>>>]+[-<<<<<+]->>>[-<<<[<<<<<]>>>>+[->>>>>+]-<<+>>>[>>>>>]+[-<<<<<+]->>>]>>-[<<<<<]>>>>+[->>>>>+]<<[>>>>>>>>>>[-]>>->[>>>>>]+[-<<<<<+]->>>[-<<<[<<<<<]>>>>+[->>>>>+]-<<+>>>[>>>>>]+[-<<<<<+]->>>]>>-[<<<<<]>>>>+[->>>>>+]<<]<<<<<<<<<<[[-<<<<<+<<<<<]>>>>>[>>>>>[>>>>>>>>>>]<<<<<[.[-]<<<<<[[>>>>>>>>>>+<<<<<<<<<<-]<<<<<]>>>>>>>>>>]>>>>>]<<<<<<<<<<]

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


धन्यवाद। मुझे पता है कि यह बहुत ज्यादा अनगढ़ है। मैं सिर्फ पहला काम कोड प्रदान करना चाहता था। कोड के दिमाग के हिस्से में भी बदलाव करेगा।
डोरियन

5

ब्रेनफक , 785 बाइट्स

--->---->--->----->-->----->>++++[-<++++>]<[-<++++++<++++<+++<++++++<++++<+++>>>>>>]<<...<<<<.>.>>>>>>>,[[-<+<+>>]+++++++[-<------>]+<--[--[-[-------------[--[[-]>[-]<<.>]>[-<<<<.<..>..>.<<<<<.>>.<<.>.>>>>>>>]<]>[-<<<<.<..<<..<..>.>>>>>>>]<]>[-<<<<.<..>>.<..<<.<<.>.>>>>>>>>>+<<]<]>[->>>+<[>-<<<<<.>>>>>]>[-<<<<<<<...>.<<<<<.>>.>.<<..>>>>.<..<<.<..>>>>..<<<<<.>>>>.<.<<.>.<.>>>>.<<<<<.>>>>.<.<<.>.<.>.>>...<.>>.<<<<<.>>>>..<.<.<.>>>>.<<<<<.>>>>...<.<<....>>>>.<<<<..>.<.>>.>...>.<..<<.<.>.>>...<<<<.>>>>>.<<<<<.>...>>.>...<<.>.<<..<.>.>>>>>>>>>>>]<<<<]<]>[->>>+<[>-<<<<<<.<<<<<.>>.>>.<.<<..>>>>.<<<<..>.<..>>>>.<<<<.>.>>.>.<<<<<.>.>>.>.<<.<.>>>>.<<<<<.>>>>..>.<.<<.>>..>.<..<<.<.>>.<<.>>>>.<<<<..>.<.>>>>.<<<<.>.<.>.>>..>.<.<<.>>..>.<..<<.<<.>.>>>>>>>>>>]>[-<<<<<.>>>>>>]<<<<]<<[-]>>,]

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

बी से ए को विभाजित करने का विकल्प चुना /

explaination:

वास्तविक कोड है कि इस उत्पन्न ए / बी के लिए एक ध्वज और एक स्विच है कि निवेश के लिए देखने के लिए कम कर देता है के साथ सिर्फ एक पढ़ने के पाश है >, <, /, ,, और .और नहीं तो सिर्फ उत्पादन इनपुट। यह वास्तव में सिर्फ एक ट्रांसपिलर है जहां ट्रांसप्लड कोड एक डेटा संरचना के भीतर रहता है जैसे कि यह ए या एक दूसरे से संग्रहीत डेटा के साथ हस्तक्षेप नहीं करता है। /सिर्फ पहली अप्रयुक्त सेल करने के लिए सक्रिय कक्ष ले जाता है। मैंने मूल रूप से इसे साफ किया, लेकिन यह कार्यक्रम और आउटपुट को बड़ा बनाता है।

कार्यक्रम के परिणाम में निम्नलिखित मेमोरी मॉडल है:

|0|input*|cz|d0|c0|d2|c0|...

cउखड़ जाती है। czहमेशा 0यह इंगित करता है कि मेरे एमफिल्ड बीएफ डेटा में पॉइंटर कहां है। सक्रिय मान -1 है, जबकि सभी विज़िट की गई कोशिकाओं में होगा 1। जैसे संचालन में aprintऔर breadकुछ cविशेष अर्थ प्राप्त करते हैं।

A- कोड प्रिंट सभी कोशिकाओं को एक और बाइट इनपुट के लिए कमरे को छोड़ने के लिए 1 बाइट को छोड़ देता है जो कि अगले बाइट्स में बैकअप के साथ कॉपी करने के लिए उखड़ जाती है।

बी-कोड रीड इनपुट से इनपुट प्राप्त करता है। यहां विनाशकारी होना ठीक है और जब आप अंतिम बाइट को "पढ़ते हैं" तो कार्यान्वयन के बावजूद आपको ईओएफ के रूप में 0 मिलता है।

मैंने EBF परिणाम बनाने वाले विस्तारित ब्रेनफैक कोड के रूप में शुरुआत की । अधिकांश डिबगिंग परिणाम फाइलों पर किया गया था और फिर इसे उत्पन्न करने वाले स्रोत को अपडेट किया गया था। तब मैं बस बीएफ आउटपुट प्राप्त करने के लिए स्वतंत्र रूप से संचालन करता हूं, लेकिन मैंने डोरियन के उत्तर पर ध्यान दिया, जिसने मुझे लंबाई में हराया, इसलिए मैंने छोटे बीएफ आउटपुट के लिए ईबीएफ स्रोत को जारी रखा। मूल स्रोत मेरे द्वारा किए गए अन्य सामान की तुलना में काफी पठनीय और सरल है:

:bck
:i
:t
:z
:r
:rc
:rz

;;; outputs a header with most of the result logic
{cinit
  |"
    ;; memory model of the result 
    ML/i/z/d/c
    PTR=1/1/2
    :iz:i:z:d:c:d2:c2

    ;; moves pointer back. Bad things will happen to 
    ;; A output if out of bounds
    {backward @d2 $c2++ $c-- $d
    }

    ;; moves pointer forward
    {forward $c++ $c2[-]- $d2 @d
    }

    ;; stores the current cell in input a the start of bf data
    {aprint
      $c2(-)+                 ; mark next cell as used even if it maybe
      $c[$c2]                 ; go to the end of used data
      $c((->+)$d(->+)@d2)     ; as long as c is something move d and c one place right
      @i$c+[->>+]@c           ; go to active cell, zero it
      $d(-                    ; copy: 
        $c2+                  ; backup in c2 
        $z[<<]@z              ; back to i
        $i+ $c[>>]@c          ; increement and back to zero carry
      )
      $c2-(- $d+)+            ; copy backup in c2 back to d
      $c-                     ; mark active cell
      $d                      ; move to d
    }

    ;; removes all the data from A. And initializes for B
    {aend
      $c[$c2]
      $c((-)<(-)<@c)@z
      $c-$d
    }

    ;; instead of read b fetched from input area
    {bread
      (-)>+@c2          ; clear d and c
      $c[$z]            ; go to z
      $i<[<] @iz        ; go to iz
      $i(-$iz+)         ; switch places between i and iz
      $iz(-             ; copy from iz to d
         $z[>]@z        ; move to z
         $c[$c2]        ; move to the current c 
         $d2+           ; increase d
         $c[$z]         ; back to z
         $i[$iz]        ; back to iz
         @i             ; but since we shave switched correct
      )
      $z[>]@z           ; go back to z
      $c[$c2]-          ; move to active cell and make it -1
      $d2 @d            ; go to d
    }

    $c-$d               ; init. Go to c t mark it active, then go to d
    "
  (-)
}

{cmain
  &cinit
  $t,(
    (-$i+$bck+) ; pour to i and bck

    ;; switch ( $i ) cases '<>,./' using $t
    $t+++++++(-$i------)+$i--; ,
    ($i--; .
      ($i-; /
        ($i-------------; <
          ($i--; >
            ((-) $t(-)  $bck.)
              $t (- |"&forward "(-) )
          ) $t (- |"&backward "(-) )
        ) $t (- |"&aend "(-) $r+ )
      ) $t (- $rc+$r[$rc-$bck.$rc]@r$rc[- |"&aprint "(-) $rz])
    ) $t (- $rc+$r[$rc-|"&bread "(-)]@r$rc[-$bck.$rz])
    $bck (-) ; clear backup
      $t,    ; read into t
  )
}

&cmain

अगर मुझे ठीक से समझ में आया है, तो [->+]प्रोग्राम C में इनपुट्स के लिए विफलता का कारण बनता है ->->,./,., और इसका उपयोग करके तय किया जा सकता है [->>+](यह सुनिश्चित करते हुए कि सूचक वांछित समानता के साथ एक सेल पर शुरू होता है)। के लिए [-<+], मुझे लगता है कि आप ए के सभी आउटपुट पर निर्भर रहने के लिए नेविगेशन स्कीम को बदल सकते हैं?
मिच श्वार्ट्ज

मुझे नहीं पता तुम्हारा क्या मतलब है। जब A ->->,.और B होता है ,., तो क्या आपका पसंदीदा दुभाषिया TIO के समान C का उत्पादन करता है, और C आपके दुभाषिए की अपेक्षा के अनुरूप काम करता है? क्योंकि यह TIO पर फेल है । (मैंने इसे अब हटाए गए एक टिप्पणी के जवाब में लिखा है।)
मिच श्वार्ट्ज

@MitchSchwartz आपकी टिप्पणी के लिए धन्यवाद। मैं थोड़ा अहंकारी था क्योंकि मुझे -1उपयोगकर्ता डेटा के लिए स्कैन करने की उम्मीद नहीं थी , लेकिन वास्तव में मैंने "सक्रिय सेल, शून्य डेटा" पर लाइन पर किया था। मैंने अपना उत्तर अपडेट कर दिया है और फिर मैंने एक बाइट जोड़ी: -ओ लेकिन कम से कम यह काम करता है। Btw। अगर Im -1B में इनपुट लाने के लिए स्कैन का उपयोग नहीं कर >[-<+]<रहा हूं, तो मुझे एक कॉपी के साथ सक्रिय बाइट को स्थानांतरित करना होगा और इस प्रकार मैं अधिक वर्ण जोड़ सकता हूं जिसके +[-<+]-साथ मैं बदलकर बचा सकता हूं [<]। यदि आप कॉपी नहीं करते हैं, तो आप यह नहीं जान पाएंगे कि आपने जो बाइट कंप्लीट की थी, वह समाप्त हो गई और सभी बाइट्स को कॉपी कर लिया।
सिल्वेस्टर

खैर की मेरी उल्लेख [-<+]वास्तव में इस तरह के रूप में कीड़े को नष्ट करने (के रूप में बचत बाइट्स के खिलाफ), इनपुट के लिए के संबंध में भी था -./,>++++++[<++++++>-]<., प्रिंट चाहिए जो #बजाय %। :) लेकिन मुझे बाइट्स को बचाने के लिए कुछ अवसर मिलते हैं। सौभाग्य! मैं अपने दोगुने अनंत टेप समाधान को अनुकूलित करने की कोशिश करूंगा, हालांकि आपने जो भी किया है उसे देखकर मुझे लगता है कि शायद सही-अनंत टेप अंत में गोल्फर है।
मिच श्वार्ट्ज

इसलिए, आपके कोड को अधिक बारीकी से जांचने के बाद, मैंने पाया कि हमारे सेटअप बहुत समान हैं, और यह कि सही-अनंत टेप का आपका उपयोग मेरे दोहरे अनंत टेप की तुलना में गोल्फ के लिए कहीं बेहतर है। कृपया एक समाधान के लिए मेरा हालिया sed अद्यतन देखें जो हमारे विचारों को जोड़ता है। मुझे लगता है कि गोल्फिंग सी इस समस्या का सबसे दिलचस्प हिस्सा है, लेकिन स्ट्रिंग रिप्लेसमेंट प्रोग्राम को इससे बाहर करने के लिए कुछ जगह भी है ...
मिच श्वार्ट्ज

4

सीड, 165 बाइट्स

s > >[-]+> g
s < << g
1s \. >[-]-R+[[>+<-]<[>+<-]<]>+[->>+]<[>+>>-<L+>R+<<<-]>[<+>-]+< g
1s .* R&<R+> 
2s , ,[,]>,<L[[>]R<+L[<]>-]>[>]R+< g
s L <[<<]< g
s R >>[>>] g

EOF = 0 के साथ जायके के लिए, कोशिकाओं को छोड़ना शुरू कर दिया, 8-बिट रैपिंग कोशिकाओं को छोड़ दिया।

पहली लाइन पर प्रोग्राम ए और दूसरी लाइन पर बी की उम्मीद है।

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

यह ए और बी के टेपों को अनुकरण करने के लिए 2-सेल नोड्स का उपयोग करता है, जिसमें ए का आउटपुट सबसे निचले नोड के बाईं ओर सन्निहित कोशिकाओं पर कब्जा करता है।

वैकल्पिक 173-बाइट समाधान:

1i>>
s > >[-]+> g
s < << g
1s \. >[-]-[>>]+[[>+<-]<[>+<-]<]>+[->>+]<[>>>-<<+[<<]<+>>>[>>]+<<<-]>[<+>-]+< g
1a>[>>]+>
2s , ,[,]>,<<[<<]<[[>]>>[>>]<+<[<<]<[<]>-]>[>]>>[>>]+< g

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

मूल रूप से मेरा डिज़ाइन एक दोहरे अनंत टेप पर आधारित था, जिसे बाईं ओर ले जाने के लिए और अधिक काम करने की आवश्यकता थी (पहले सामने आई सबसे बाईं सेल से आगे बढ़ने पर डेटा) और A से B तक संक्रमण (केवल सही सेल पर यात्रा करने के बजाय डेटा साफ़ करना) पहले से सामना किया हुआ)।

चाल और विचारों के लिए सिल्वेस्टर और डोरियन को धन्यवाद।


यह बहुत अच्छा लग रहा है। दुर्भाग्य से यह पहले टेस्ट में फेल हो गया। कार्यक्रम ए ,[..,]और कार्यक्रम बी ,[...,]
डोरियन

ओह, यह मेरी ओर से एक मूर्खतापूर्ण निरीक्षण है, मैंने बहुत जल्दबाजी की। यह ठीक करने योग्य है, लेकिन मुझे इसे अभी के लिए हटा देना चाहिए।
मिच श्वार्ट्ज

@ डोरियन यह अब तय किया जाना चाहिए। (मैं इसे देखता रहूंगा।) गलती की ओर इशारा करने के लिए धन्यवाद, और असुविधा के लिए खेद है।
मिच श्वार्ट्ज

मुझे पता है कि कुछ बाइट्स s/x/>>/gको बहुत अंत में होने से बचाया जा सकता है , लेकिन मैं उन सुधारों में अधिक दिलचस्पी रखता हूं जो अभी के लिए आउटपुट को छोटा कर देंगे।
मिच श्वार्ट्ज
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.