Gökkuşağının sonundaki hücre


31

Hepimiz , en ünlü ve etkili ezoterik dillerden biri olan beyin sesini duymuş ya da en azından duymuş olduk . Bu günlerde çoğu uygulama sonsuz bir bant kullanırken, Urban Müller'in orijinal derleyicisi 30000 hücreye sahipti. Az bilinen bir gerçektir *, kasetin sonunda, tipik bir beyin fırtınası programında neredeyse hiç etkileşime girmeyen bir şeyin olduğu, aslında özel bir değer olduğu.

Bu değeri 29999 >s ve a ile basabilmenize rağmen ., brainfuck, kısa ve özlü çözümleri ile tanınır, bu nedenle amacınız bu değeri minimum karakter sayısı ile basmaktır .

*kurgu

Kurallar:

  • Brainfuck talimatlarında bir tazeleme:
    • +/ -: Geçerli hücreyi artırma / azaltma, 255 artırıldığında ve tersi olduğunda 255'ten 0'a kaydırma
    • </ >: İşaretçiyi bant üzerinde sola / sağa hareket ettirin
    • .: Geçerli hücrenin değerini yazdır.
    • [: ]Hücredeki değer 0 ise karşılık gelen atla
    • ]: [Hücredeki değer 0 değilse karşılık gelenlere geçin
  • Bu durumda ,(Get girişi) hiçbir şey yapmaz, çünkü orijinal derleyici EOF'de hücreyi değiştirmeden bırakır ve bu program hiçbir giriş almamalıdır.
  • Bant başlangıçta bilinmeyen bir değer içeren hücre 30000 hariç, tüm 0'larla doldurulur.
  • İşaretçi, hücre 1 'de başlar ve bunu yazdırdıktan sonra hücre 30000'de sona ermelidir.
  • Çözümleri bu yüzden 1 ve 30000 sağında solunda Hücreler, tanımsız davranışa sahip değil bu hücrelerin ziyaret edin.
  • Not 30000 de değeri o olduğunu bir sıfır olmayan hücre çalışmaları olmaz bulana kadar bu kadar basit döngü, bir 0 olabilir.
  • Yalnızca 30000 hücresindeki değeri yazdırmalısınız
  • En kısa çözüm kazanır!
    • Tie-breaker daha verimli bir programdır (en az adımda uygulanır), ardından en hızlı sunum süresi.

İpucu: Esolanging Fruit, kodunuzu test etmek için https://copy.sh/brainfuck kullanmanızı önerir . Teknik özellikler bu zorlukta açıklandığı gibidir ve abortseçeneğinizi seçebilirsiniz; böylece program sınırlarını aşarsa durur.


Sandbox (silindi)
Jo King

3
1 bayt: .. Ben kazandım
Esolanging Fruit

1
@EsolangingFruit Lütfen sanrım olsun ...
Jo King

1
Kuralı "başlangıçta bilinmeyen bir değere sahip son hücre dışında tüm hücrelerin değeri 0," olarak değiştirmenizi öneririm.
user202729

4
Bunu yapan herkes için ipucu: copy.sh/brainfuck , bu zorlukla tanımlandığı şekilde BF uyguladığı ve varsayılan olarak 30k bantlı olduğu için muhtemelen bunu yapmak için en iyi sitedir. Teybin sonundan sağa hareket etmek tercümanın takılmasına neden olur.
Esolanging Fruit

Yanıtlar:


17

54 Bayt

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

119 x 252 = 29988. Basit bir iç içe döngü.

İşaretçinin 29999'da durduğunu doğrulamak için bu aracı kullandım .


12

50 bayt

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

Burada deneyin!

İlk bölüm ( >+[>+[<]>->+]>-<<) kaseti şu şekilde ayarlar:

0*12 121' 0 110

Bir sonraki bölüm ( [>>-------[[>]+[<]>-]<<-]) 121 kez 1tekrar eder ve her seferinde bandın sonuna 249 s ekler . Eğer matematik hızlı iseniz, 30129 yılında bu 121 * 249 sonuç fark edebilirsiniz 1s, ancak ilk yineleme ile başa çıkmak için 110 artık vardır ve sadece (ekler 110-7) 103 1sadece 29.983 var, yani teybe s 1s. Son kaset şuna benziyor:

0*12 0' 0 0 1*29983 0 ???

Ve >>>[>]>.değeri basmak için bir final .

Notun diğer bazı algoritmaları:

  • 252 * 119 = 29988 (ayrıca 50 bayt)
  • 163 * 184 = 29992 (56 bayt)
  • 204 * 147 = 29988 (60 bayt)
  • 153 * 196 = 29988 (56 bayt)
  • 191 * 157 = 29987 (57 bayt)
  • 254 * 118 = 29972 (56 bayt)
    • Ekstra baytlar temel olarak sadece ekstra mesafeyi ilerlettiğinden, bu, bir sonraki 50'ye en yakın olanı seçtiğimdir. 118 üreten ve 14 hücreden daha ilerleyen bir algoritma bulabilirsem, bu onu yenebilirdi.

3

81

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

Bu, 200 hücre tarafından 150 hücre üzerinde hareket eder.

Bu olmasını istediğimden çok daha uzun ve golf oynamak için ciddi bir engel var:

Neden çalıştığımı artık bilmiyorum.

Bu, bazılarının muhtemelen iptal edebileceği noktaya kadar olanlar için tazminatla doludur. Çeşitli bölümleri o kadar fazla ekledim ve sildim ki, neden bazı şeyleri nereye koyduğumu artık hatırlamıyorum (örneğin, ilk bölüm neden bant hücrelerini 200 ve 150 yerine 199 ve 151'e başlatıyor?).

İşte bu canavarlık hakkındaki yorumum, yine de, (ya da bir başkasının) onları yararlı bulacağı umuduyla:

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

0 0 0 199' 155

[
  n' k 0
  >[
    n k' j
    ->+[[->+<]<]>
    0' n k-1 j+1 OR
    n 0 0' j+1
    >>
  ]
  0*k n 0 0 k 0'
  <[-<<+>>]<<<-
  0*k n-1' k
]
>-------[[->+<]>-]>.

Bu aslında değeri yazdırmaz ve değer pozitifse taşar. Ama harika bir girişim
Jo King,

Öyleyse bir a ., yardımcı olur mu?
user202729 11

1
@JoKing Bu düzeltildi.
Esolanging Fruit
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.