Buradaki zorluk, Brainfuck kodunu aşağıdaki kurallara göre küçültmektir :
- Bir olmayan şeyleri kaldırın
+-><[].,
. - Ardışık herhangi bir grup
+
veya-
karakter için+
s ve-
s miktarı aynıysa bunları kaldırın. - Yukarıdaki gibi yapın, ancak
>
ve ile<
. +-><
Hiçbir şey yapmazlarsa karakter dizilerini kaldırın . Örneğin, kaldırmalısınız+>-<->+<
. (Bu, uygulanması en zor ve en zor olan olabilir.)+>-<+>-<
Kaldırılmaması gereken herhangi bir yanlış pozitif almadığınızdan emin olun .
Test durumları:
Giriş
++++++[->++++++<]>. prints a $
[-]< resets tape
>,[>,]<[.<] reverses NUL terminated input string
++-->><< does nothing
Çıktı
++++++[->++++++<]>.[-],[>,]<[.<]
Giriş
Should disappear: ++>>+<+++<->-->-<<->-<
Should disappear: +++>-<--->+<
Should stay: +++>-<+>---<
Çıktı
+++>-<+>---<
İstediğiniz gibi giriş ve çıkış kabul edebilirsiniz - stdin / stdout, fonksiyon, vb., Ancak giriş kodlanmış olmayabilir.
Bu kod golf , karakter sayısındaki en kısa kod kazanacak.
+++>-<+>---<
mi? Gereksiz işaretçi hareketini önlemek için kısaltılabilir, ancak beklenen çıktı değişmeden kalır. Hem soruya hem de cevaba bakmaya dayanan anlayışım, Doorknob'un gevşek bir şekilde alınan spesifikasyonlarla iyi olduğunu; +-><
açıkça belirtildiği gibi herhangi bir op olmayan bitişik diziyi ortadan kaldırmalıyız ve bunun ötesinde, örneğinizde olduğu gibi ekstra küçültme yapmanın mümkün olduğu ++>>++<<--
ve ayrıca kodun işlevselliğini değiştirmediği sürece yeniden düzenlemeler yapabiliriz >+<+
. +>+<
.
+>-<->+<
. (. Bu uygulamaya en zor ve en zor biri olabilir) gibi emin herhangi yanlış pozitif alamadım olun +>-<+>-<
, hangi kaldırılmaması gerekir. " - bu biraz belirsiz
++>>++<<--
çıktı>>++<<
ve bu kaplı değildi. Lütfen daha fazla test durumu ekleyin.