Bazen beyin şifresi kodu yazarken, hata ayıklamayı teşvik etmek için gerekenden daha uzun hale getirme ihtiyacı hissedersiniz . Sadece onu içeri sokarak yapabilirsin ><
, ama bu ne eğlenceli? Kodunuzu okuyan birinin kafasını karıştırmak için daha uzun ve daha az NOPey'e ihtiyacınız olacak.
Brainfuck'a hızlı giriş
Brainfuck , 1993 yılında Urban Müller tarafından oluşturulan ve aşırı minimalizmi ile dikkat çeken ezoterik bir programlama dilidir. (Vikipedi)
Brainfuck sekiz komutları dayalı bir dildir: +-><,.[]
. Kod, bir Turing makinesi gibi bir şey üzerinde çalıştırılır: üzerinde değerlerin değiştirilebileceği sonsuz bir bant. Bu mücadelede ilk dörde odaklanacağız:
+ increment the value at the pointer
- decrement the value at the pointer
> move the pointer right
< move the pointer left
Brainfuck NOP'ları
Beyin fırtınası NOP, herhangi bir devletten yürütüldüğünde, devlette hiçbir değişikliğe yol açmayan bir beyin fırtınası karakter dizisidir. Yukarıda belirtilen dört karakterden oluşur.
Meydan okuma
Buradaki zorluk, yürütüldüğü zaman verilen uzunlukta rastgele bir beyin hastası NOP üreten bir program veya işlev yazmaktır.
Giriş
Girdi olarak negatif olmayan bir tamsayı alın n
. (NOP’lar garip değildir n
.)
Çıktı
Boyunda NOP rastgele bir beyin fırtınası çıktısı alacaksınız n
.
kurallar
- NOP'un tanımı: Programın çıktısı bir beyin fırtınası programında herhangi bir noktaya yerleştirildiğinde, söz konusu programın davranışı hiçbir şekilde değişmemelidir. Başka bir deyişle, tercümanın durumunu değiştirmemelidir.
- Örneğin
+>-<
, iki hücrenin değerlerini geri değiştirmeden değiştirdiği için yanlış olduğunu unutmayın . Lütfen yayınlamadan önce çözümünüzü test edin. - Ayrıca
+>-<->+<
, yalnızca kaldırarak hiçbir şeye indirgenemeyecek bir NOP olduğunu unutmayın><
<>
+-
-+
. Böylece, bunları sadece içlerine ekleyen bir algoritma kullanamazsınız.
- Örneğin
- Uzunluktaki her geçerli NOP
n
, çıktıda sıfır görünme şansına sahip olmamalıdır. Dağılım olsa da tekdüze olmak zorunda değildir. - Söz konusu beyin hilesi tercümanı, iki kat sınırsız keyfi hücre hücresine sahiptir. Yani, her iki yöne de sonsuz gidebilir ve her bir hücreyi süresiz olarak artırabilir / azaltabilirsiniz.
- Program , makinemde = 100 için 1 dakika içinde
n
bitmelidir, bu nedenle olası tüm NOP'ları oluşturmaz ve birini seçmez. - Geçersiz bir giriş (tamsayı olmayan, negatif, tek, vb.) Verilirse, kilitlenme dahil istediğiniz her şeyi yapabilirsiniz.
puanlama
Bu kod golf , yani bayt cinsinden en kısa cevap kazanır.
Örnekler
n
= 4 için geçerli tüm çıktılar :
++-- +-+- +--+ --++ -+-+ -++-
>><< ><>< ><<> <<>> <><> <>><
><+- ><-+ <>+- <>-+
>+-< >-+< <+-> <-+>
+><- -><+ +<>- -<>+
+->< -+>< +-<> -+<>
n
= 20 için olası birkaç çıktı :
+>>->+<->-<<<->>++<<
>+>-<+<->+-<>->+<-<+
+--+-++--++-+--+-++-
>>>>>>>>>+-<<<<<<<<<
.
yan etkisi vardır, ,
kullanılmadan alınamayan bir değerin üzerine yazar []
. Fakat []
bir değeri sıfır olarak ayarlayacaktır. Bu, aynı zamanda []
, etkilenen hücrenin başlangıçta sıfır olduğundan emin olmadıkça, bir değerin üzerine yazar (böylece onu kurtarmak için başka birine ihtiyacımız olur). Bununla birlikte, böyle bir hücreyi böyle bir şeyi aramak [>]
zorunda kalırdık ve geldiğimiz konuma güvenilir bir şekilde geri dönmek imkansızdır.
+-<>
istediğiniz gibi kullanmayan bir beyin fırtınası NOP :a