Brainf * ck Döngü Sorunu


19

Yazdırmanızı isteyen bir siber kulüp için sorunum var:

ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!

',' Karakterini kullanmadan 29 bayt veya daha kısa bir sürede Brainf ** k kullanma.

Bir çalışma kodu var:

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

Ancak döngüm çok uzun, bu sınırı aşan 16 bayt gönderdi.

İkinci döngümü çalıştırabilmem için ikinci ve üçüncü hücreyi 58 ve 90'a ayarlamanın daha etkili bir yolu var mı? Yoksa hepsini görmemenin daha iyi bir yolu var mı?


1
Sadece dört bayt kaydederken Sorunuza gelince, bu üretmek için aslında iyidir 59 ve 90 ve değişim -.için .-bırakarak, >.<.
Martin Ender

Bende +[--->++<]>++++[.-]19 bayt için ama ... yanı kumanda karakter yazdırır
Timtech

@MartinEnder Bunun için üzgünüm, diğer yazı hakkındaki yorumunuzu gördüm ve çok daha uygun görünen bu grubu buldum, çok cevap vermediği için SO'daki birini sileceğim.
Nick Rod

2
Dürüst olmak gerekirse bu "siber kulüp" ne olduğunu merak ediyorum, çünkü çocuk gerçekten iyi golfçüler olmalı!
Sp3000

Yanıtlar:


23

27 24 bayt

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

Bir gün boyunca temel olarak kaba bir zorlayıcı yazıp sonuçların gelmesini izledim. Şimdi gerçek bir iş yapmaya geri dönebilirim ... Bir sonraki kaba zorlama günü ...

Çevrimiçi deneyin!

Bileşen ++[<++[++<]>>>+]bandı şu şekilde başlatır:

[130, 0, 0, 0, 91, 59, 0]
                       ^

ki sadece ihtiyacımız olan şey için mükemmel!


8
Sihirbazlık. (∩`-´) ⊃━ ☆ ゚. * ・。 ゚
primo

@primo Adil olmak gerekirse, ilk yarıda neler yapılacağına dair hiçbir fikrim yok ve bence kendi algoritmalarınızı / tekniklerinizi geliştirebilmeniz şaşırtıcı :)
Sp3000

Her döngünün sonunda bant: codepad.org/ZoJUlQ8M . Yaptığı değerlerde veya hatta hiç sona erdirmesi sezgisel değil;)
primo

1
Alternatif 24:+[[>++<<]>->+>+]<[-<-.>]
Primo

15

30 bayt

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

Çevrimiçi deneyin!

85 ve 171 brainfuck içinde oluşturmak (modüler tersleri oldukça kolaydır 3 ve -3 ). 85 , 90'a oldukça yakın ve 171 , burada kullanılan 177'ye ( 59 · 3 ) oldukça yakın . Biraz hackery ile bunun yerine 88 ve 176 üretebiliyorum .

Yine de hedefin bir bayt kısaluğunda.

Diğer öneriler

Genel olarak, bir liste üzerinde yineleme yapmak, diğer yoldan ziyade sabit ile çarpmak daha kısadır. Bu özellikle 3 veya daha fazla değer için geçerlidir. Örneğin, bu:

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

şu şekilde yazılabilir:

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

Sadece iki iç değer vardı, bu yüzden bu durumda bir gelişme yok. Aslında, sadece yeniden düzenleme bir bayt daha kısadır:

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

Çarpılması 30 ile 2 ve 3 , yerine 10 ile 6 ve 9 . Martin Büttner'ın önerisiyle, bu orijinalde çok fazla değişiklik yapılmadan 38 bayta düştü :

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

58'i çoğaltmayı ve daha büyük bir sayı ile yinelemeyi asla düşünemezdim, bu çok daha verimli.
Nick Rod

4

34 bayt

Sizi 11 bayt kurtardı, ama yine de 5 bayt çok uzun ...

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

Zaten saatler geçirdim, umarım birisi bunu geliştirebilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.