Hexagony, 37 35 34 31
10"+}(=${";<$<1}42/.0@_=<>\;>(_
Expanded:
1 0 " +
} ( = $ {
" ; < $ < 1
} 4 2 / . 0 @
_ = < > \ ;
> ( _ . .
. . . .
Çevrimiçi deneyin
Temel olarak, ondan sıfıra kadar geri sayım yapan, iç döngüde bir yıldız işareti basan ve dış döngüde yeni bir çizgi yazan iki tane döngü vardır.
Açıklama:
Bu program üç ana bölümden oluşur: hafızanın başlaması, on yıldız basan bir döngü ve yeni bir satır basan bir döngü. Yeni bir satır basan ilmek ayrıca yıldız işaretlerini basan ilmeği de içerir.
İlk olarak, kod tamamen doğrusal bellek başlatma işlemini çalıştırır. Kod olduğu ortaya çalışır: 10"+}42
. Bu, yakındaki kenarların hafızasını şöyle görünecek şekilde ayarlar:
10 \ / 10
|
42
Şekil 42, yıldız karakteri için ASCII kodudur ve iki onlar döngü sayıcılarımız olarak kullanılacaktır. Unutulmaması gereken şey, hafıza işaretleyicisinin şu anda iki onlarca uzağa işaret ettiğidir, bu nedenle geriye doğru hareket etmek bizi onlardan birine yerleştirecektir.
Ardından, yıldız işareti yazdırma döngüsünü başlatırız. Doğrusal olarak, kod şöyle görünür: ;".._(
. Bu, bir yıldız işaretini basar, bellek işaretleyicisini geriye ve sola hareket ettirir ve sonunda oradaki değeri azaltır. Bir yinelemeden sonra, hafıza şöyle görünür:
10 \ / 9
|
42
Sonra döngü durumuna çarptık: en soldaki >
. Azalttığımız kenar hala pozitifse, hemen zıplıyoruz ve a'yı {
bizi 42'ye $
geri götürmek için ;
yürütüyoruz <
. Eğer değer sıfırsa, diğer döngüye gireriz.
Dış döngü, son zamanlarda sıfırlanan bellek kenarını on'a sıfırlayarak başlar (bu, 10
kodun içindeki, güneybatısında olan). Daha sonra, bu on'u yeni bir satır olan bir ASCII karakteri olarak basarız. Sonra, diğer bellek kenarına taşımak ve bunu azaltma {(
ve daha sonra noops bir demet ne miktarda yürütün: =${_=
. Şimdi, bu döngünün bir yinelemesinden sonra, bellek şöyle görünür:
9 \ / 10
|
42
Bu sefer, hafıza, yukarıdaki diyagramda bir dokuzu depolayan kenardan dışarı doğru bakıyor. Daha <
sonra dış döngü için döngü koşulu görevi görüyoruz . Değer sıfır değilse, bazı aynaların etrafında zıplıyoruz, ardından "
hareket eden güneybatıdaki altıgenin tepesine girdikten sonra tekrar anlamlı talimatlar vermeye başlıyoruz . Bu, geriye ve sola doğru hareket etmemize, tekrar 42'ye doğru ilerlememize, ancak içeriye bakmamıza neden olur. Sonra =
yönümüzü çevirir, durumu tekrar tekrar başlatmak için durumu sıfırlar. Kenar sıfıra ayarlanmışsa, komut gösterici programdan çıkana kadar hiçbir şey yapmayan küçük bir maceraya gider.
Macera, kardinal yönlerin güvenliğini tehlikeli bir şekilde göz ardı ederek, kuzeydoğuya yönelen talimat işaretçisi ile başlar. Cesurca, diretion ( /
) ile hizalı olan ve kahramanca trambolinden ($
tamamen başka bir, tamamen özdeş trambolinin ölümcül tuzağından kurtulmak. Başlatılmamış altıgen kenarların boşluğundan başlayarak, işaretçi, bir an için titremeden, birlikte karşılaştıkları iki boş kenarı birbirine ekleyerek geçerli kenarı toplamlarına ayarlar: 0 (kenar aslında sıfırdı, ancak işaretçi, bu oldukça önemli olduğuna inanıyoruz). Kenar sıfır olduğundan, işaretçi gizemli bir ormana (altıgenler) doğru yürürken yoldaki çataldan sola dönüş yapar. Orada, kendisini hafızada, aynı hafızaya başladığında aynı yere kadar sarılıncaya kadar ileri ve geri ve ileriye doğru hareket ederken bulur. Sorunun geçen sefer sıfıra ayarlanmış olması gerektiğini düşünerek, işaretçi cesurca1
geçerli kenara Sonra, soylu işaretçi, biri tuzağa düşürülmüş, başka bir yolu araştırıyor! Geçerli kenar azaltılır ve tekrar sıfıra ayarlanır! Olayların şok edici dönüşüyle şaşırtan işaretçi, mevcut kenarı negatif olana ayarlayarak tuzağa geri döner. İşaretçi, işaretçi nispeten hoş bir ormana geri dönmeye çalışır, yalnızca mevcut kenar pozitif olmadığından, patikaların yine de kaydığını ve işaretçinin kendisini bir mağarada yürürken bulduklarını fark etmek için çalışır. Ve bir mağarayla, kocaman altıgen bir solucanın ağzını kastediyorum. Çaresiz, işaretçi seksenliği ölen nefesiyle lanetler. Ayrıca, program sona erer.