यह चुनौती " बेस्ट ऑफ़ पीपीसीजी 2016 " में " रूकी ऑफ़ द ईयर " श्रेणी जीतने के लिए ais523 के लिए एक पुरस्कार है । बधाई हो!
बैकफ्लिप उपयोगकर्ता ais523 द्वारा बनाई गई एक गूढ़ प्रोग्रामिंग भाषा है , जिसने 30 से अधिक अन्य रोचक एसोलैंग बनाए हैं ।
बैकफ्लिप एक 2 डी भाषा है जैसे बेफुंज या > <> जहां निर्देश सूचक पाठ (कार्यक्रम) का एक ग्रिड ट्रेस करता है, ऊपर, नीचे, बाएं और दाएं घूम रहा है, यह उस चरित्र के आधार पर दिशा बदल रहा है। गंभीर रूप से, बैकफ़्लिप कार्यक्रम में ग्रिड बदल जाता है क्योंकि यह लैंग्टन के एंट की तरह थोड़ा पीछे की ओर है ।
इस चुनौती के लिए आप मान सकते हैं कि एक बैकफ़्लिप कार्यक्रम हमेशा पाठ का एक आयताकार ग्रिड होता है (सभी लाइनें समान लंबाई), 1 × 1 आकार में न्यूनतम, केवल अक्षर होते हैं ./\<>^V
। ( .
अंतरिक्ष के बजाय दृश्यता के लिए उपयोग किया जाता है।) शब्दार्थ बैकफ्लिप हम यहाँ उपयोग करेंगे मूल कल्पना के समान है ।
BackFlip में इंस्ट्रक्शन पॉइंटर (IP) हमेशा प्रोग्राम के ऊपरी-बाएं कोने से दाएं-बाएं से शुरू होता है। इसके तीन प्रकार के कमांड हो सकते हैं:
.
एक सेशन नहीं है यह जिस दिशा में जा रहा था उस पर आईपी जारी है। नो-ऑप एक नो-ऑप रहता है।/
और\
दर्पण हैं। वे अपने कोण द्वारा इंगित दिशा में आईपी को दर्शाते हैं, फिर वे दूसरे प्रकार के दर्पण में बदलते हैं ।- उदाहरण के लिए, यदि आईपी सिर एक में छोड़ दिया जाता है
\
, तो यह बाएं की बजाय ऊपर की ओर बढ़ने लगता है और एक\
बन जाता है/
।
- उदाहरण के लिए, यदि आईपी सिर एक में छोड़ दिया जाता है
<
,>
,^
, औरV
तीर हैं। वे जिस दिशा में इंगित करते हैं उस दिशा में IP को पुनर्निर्देशित करते हैं, फिर वे एक तीर में बदलते हैं जो IP से उस दिशा में इंगित करता है (जिस दिशा में IP चल रहा था उसके विपरीत) ।- उदाहरण के लिए, यदि IP नीचे की ओर जाता है
>
, तो यह नीचे की बजाय दाएं चलना शुरू कर देता है और क्योंकि IP जिस दिशा से आया है वह>
बन जाता है^
।
- उदाहरण के लिए, यदि IP नीचे की ओर जाता है
एक BackFlip प्रोग्राम समाप्त हो जाता है जब IP सीमा से बाहर चला जाता है, यानी ग्रिड बंद हो जाता है। यह सभी बैकफ्लिप कार्यक्रमों को समाप्त करता है, क्योंकि अंत में अनंत लूप असंभव हैं। (आप मान सकते हैं कि यह सच है।)
इस चुनौती में आपका लक्ष्य एक प्रोग्राम या फ़ंक्शन लिखना है जो BackFlip प्रोग्राम में होता है और प्रोग्राम को समाप्त करने से पहले निर्देश सूचक द्वारा ले जाने वाली चालों की संख्या को आउटपुट करता है। यही है, प्रोग्राम चलाने के दौरान आईपी कितने कदम उठाता है? इसमें ग्रिड पर प्रारंभिक चरण और अंतिम चरण शामिल हैं।
उदाहरण के लिए, निर्देश सूचक तुच्छ ग्रिड में 5 चरण लेता है ....
:
.... <- empty 4×1 grid
012345 <- step number of the IP
तो करने के लिए उत्पादन ....
है 5
।
अधिक जटिल 4 × 2 ग्रिड में
\...
\.><
आईपी अपने 9 वें चरण पर ग्रिड से बाहर निकलता है, इसलिए आउटपुट है 9
:
step grid IP position (@)
0 \... @....
\.>< ....
1 \... @...
\.>< ....
2 /... ....
\.>< @...
3 /... ....
/.>< .@..
4 /... ....
/.>< ..@.
5 /... ....
/.<< ...@
6 /... ....
/.<< ..@.
7 /... ....
/.>< .@..
8 /... ....
/.>< @...
9 /... ....
\.>< ....
@
बाइट्स में सबसे छोटा कोड जीतता है।
यदि आप चाहें तो मल्टीलाइन स्ट्रिंग के बजाय वर्णों की एक पंक्ति या मैट्रिक्स के रूप में इनपुट ले सकते हैं, लेकिन आपको वर्णों का उपयोग करना चाहिए ./\<>^V
(पूर्णांक opcodes नहीं)। यदि आप .
पसंद करते हैं तो आप इसके स्थान का उपयोग कर सकते हैं । यह ठीक है अगर \
इनपुट में बच जाने वाले पात्रों की तरह है। आउटपुट हमेशा एक से अधिक पूर्णांक होता है।
परीक्षण के मामलों
....
5
\...
\.><
9
.
2
..
3
.
.
2
\
2
^
2
.^.
3
<.
2
\\
\/
7
>V
^<
6
>\
>/
6
\><
2
\><
\><
7
\><
\><
\><
12
\.V.
\.\<
5
\.V.
\./<
9
V./\
V./\
>./<
..\/
14
\V..
.^..
\/><
.V..
.^..
20
\.V.V.
\./.\<
.>\<..
..^.^.
31
\.V.V.V.
\./>/.\<
.>\>\<..
..^.^.^.
69
\.V.V.V.V.
\./>/>/.\<
.>\>\>\<..
..^.^.^.^.
145
\.V.V.V.V.V.V.V.V.V.V.
\./>/>/>/>/>/>/>/>/.\<
.>\>\>\>\>\>\>\>\>\<..
..^.^.^.^.^.^.^.^.^.^.
9721
/
से जाने से IP ऊपर जाएगा और ऊपर /
जाने से IP सही जाएगी, जैसे कि यह एक दीवार से उछलती हुई गेंद हो। (लेकिन /
आईपी को छूने के बाद बैकस्लैश में बदलाव याद रखें ।)