Bu meydan okuma için bir ödüldür ais523 için kazanan " Yılın Çaylağı " kategoriye " PPCG 2016 Best of ". Tebrikler!
BackFlip kullanıcı tarafından yapılan bir ezoterik programlama dilidir ais523 yarattı, aşkın 30 diğer ilginç esolangs .
BackFlip, Befunge veya > <> gibi bir 2D dildir ; burada yönerge işaretçisi, üzerinde bulunan karaktere bağlı olarak yönü değiştirerek yukarı, aşağı, sola ve sağa hareket ederek bir metin ızgarasını (program) hareket ettirir. Kritik olarak, bir BackFlip programındaki ızgara, çapraz hareket ederken, Langton'ın Ant'i gibi biraz değişir .
Bu meydan okuma için bir BackFlip programının her zaman en az 1 × 1 boyutunda, yalnızca karakterleri içeren dikdörtgen bir metin ızgarası olduğunu varsayabilirsiniz ./\<>^V
. ( .
alan yerine görünürlük için kullanılır.) Anlamsal olarak, burada kullanacağımız BackFlip orijinal spesifikasyonla aynıdır .
BackFlip'teki yönerge işaretçisi (IP) her zaman programın sol üst köşesinin hemen solunda, sağa doğru başlar. Karşılaşabileceği üç tür komut vardır:
.
hayır-op. IP devam ettiği yönde devam eder. No-op, no-op olarak kalır./
ve\
aynalar. IP'yi açılarıyla belirtilen yönde yansıtırlar, daha sonra diğer ayna türüne dönüşürler .- Örneğin, IP kafaları a 'ya bırakılırsa
\
, sol yerine yukarı doğru hareket etmeye başlar ve\
a olur/
.
- Örneğin, IP kafaları a 'ya bırakılırsa
<
,>
,^
VeV
oklar. IP'yi işaret ettikleri yöne yönlendirirler, ardından IP'nin geldiği yönü (IP'nin hareket ettiği yönün karşısında) gösteren bir oka dönüşürler .- Örneğin, IP aşağı
>
doğru ilerlerse, aşağı doğru yerine sağa doğru hareket etmeye başlar ve bu IP'nin geldiği yön olduğu için>
a olur^
.
- Örneğin, IP aşağı
Bir BackFlip programı IP sınırların dışına çıktığında, yani şebekeden çıktığında sona erer. Sonsuz döngüler imkansız olduğu için tüm BackFlip programlarının sonunda sona erdiği ortaya çıkıyor . (Bunun doğru olduğunu varsayabilirsiniz.)
Bu meydan okumadaki amacınız, bir BackFlip programında yer alan ve yönerge işaretçisinin program sona ermeden önce aldığı hamle sayısını veren bir program veya işlev yazmaktır. Yani, IP bir programı çalıştırırken kaç adım atar? Bu, ızgara üzerindeki ilk adımı ve son adımını içerir.
Örneğin, talimat işaretçisi önemsiz ızgarada 5 adım atar ....
:
.... <- empty 4×1 grid
012345 <- step number of the IP
İçin çıkış Yani ....
DİR 5
.
Daha karmaşık 4 × 2 ızgarada
\...
\.><
IP 9. adımda ızgaradan çıkar, dolayısıyla çıktı 9
:
step grid IP position (@)
0 \... @....
\.>< ....
1 \... @...
\.>< ....
2 /... ....
\.>< @...
3 /... ....
/.>< .@..
4 /... ....
/.>< ..@.
5 /... ....
/.<< ...@
6 /... ....
/.<< ..@.
7 /... ....
/.>< .@..
8 /... ....
/.>< @...
9 /... ....
\.>< ....
@
Bayt cinsinden en kısa kod kazanır.
İsterseniz girdiyi çok satırlı dize yerine satır dizisi veya karakter matrisi olarak alabilirsiniz, ancak karakterleri kullanmalısınız ./\<>^V
(tamsayı opcode değil). .
Tercih edilirse boşluk kullanabilirsiniz . Gibi karakterlerin \
girişte kaçması gerekiyorsa sorun yok. Çıktı her zaman birden fazla tamsayıdır.
Test Durumları
....
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
/
doğru ilerlemek IP'nin yukarı çıkmasını ve yukarı doğru ilerlemesinin /
sanki bir duvardan sıçrayan bir topmuş gibi sağa gitmesini sağlayacaktır. (Ancak /
IP ona dokunduktan sonra ters eğik çizgi üzerindeki değişiklikleri hatırlayın .)