Burada birkaç ipucu:
Sabitler:
Esolangs' sabitleri sayfa özgü değerleri oluşturmak için en kısa yollardan son derece yararlı bir listesi vardır. Kendimi bu sayfa için program başına en az iki kez danışmanlık yaparken buluyorum.
Her şeyin başlangıcı:
+++[[<+>>++<-]>]
Bu, kaseti 3 * n ^ 2 biçiminde ayarlar;
3 6 12 24 48 96 192 128 0 0 '
Bu neden bu kadar önemli?
Hadi listeden aşağıya gidelim:
- 3 ve 6 sıkıcı
- 12: 10'a (yeni satır) veya 13'e (satır başı) yakın. 0-9 için sayaç için de kullanılabilir
- 24: 26'ya yakın, alfabedeki harf sayısı
- 48: için ASCII
0
- 96: 97'ye yakın, ASCII.
a
- 196 ve 128: 196-128 = 64, 65'e yakın, ASCII
A
.
Bu bir algoritmadan ASCII serisindeki pratik olarak her dizinin başındayız, her biri için bir sayaç ve kolay ulaşılabilecek bir yeni satır.
Pratik bir örnek:
Tüm büyük ve küçük harf ve rakamların yazdırılması.
Algoritması ile:
+++[[<+>>++<-]>]<<[-<->]<<<<++[->>+.>+.<<<]<--[>>.+<<-]
olmadan:
+++++++++++++[->+++++++>++>+++++>++++>+<<<<<]>+++++>[-<+.>>.+<]>>---->---[-<.+>]
İkinci örnekte kaseti başlatmak için baytların çoğunu harcıyoruz . Bunlardan bazıları ilk örnekteki ekstra hareketlerle dengelenmiştir, ancak bu yöntemin açıkça avantajı vardır.
Aynı damardaki birkaç ilginç algoritma:
3 * 2 ^ n + 1:
+++[[<+>>++<-]+>]
Tape: 4 7 13 25 49 65 197 129 1 0'
Bu, değerleri bir kaç şeyi gerçekleştiren 1'e kadar dengeler. 12'ye bir satır başı, 64 tanesi büyük harfli alfabenin gerçek başlangıcı ve 24 tanesi 26'ya yaklaşıyor.
2 ^ N:
+[[<+>>++<-]>]
Tape: 1 2 4 8 16 32 64 128
64 büyük harfler için iyi, 32, alan için ASCII ve 128 26 için sayaç olarak kullanılabilir (130/5 = 26). Bu, sayılar ve küçük harflerin gerekli olmadığı bazı durumlarda baytları kurtarabilir.
Soruya uyan uygulamayı seçin:
- Negatif hücreler neredeyse her zaman faydalıdır ve bunlardan kaçınmak için hiçbir neden yoktur (bytecount'unuzu değiştirmezseniz).
- Sarma hücreleriyle hemen hemen aynı şey, hatta daha fazlası, çünkü çoğu sabit sargı kullanır.
- Rasgele hücre boyutları, Fibonacci dizisini sonsuz olarak (
+[[-<+>>+>+<<]>]
) hesaplamak veya daha büyük / negatif sayıları işlemek gibi sonsuz matematik dizileri için kullanışlıdır . Olumsuz gibi bazı yaygın yöntemler, yani [-]
ve [->+<]
sayı negatifse, her ihtimale güvenerek edilemez.
- 0, -1 olarak EOF veya değişiklik yok. Ekstra kontroller olmadan tüm giriş boyunca dolaşabileceğiniz için 0 genellikle tercih edilir. Dizi yapıları üzerinde döngü yaparken -1 yararlıdır. Henüz bir değişiklik yapmanın bir yolunu bulamadım :(.
Frick'in neler olup bittiğini takip et:
Her zaman işaretçinin, etrafındaki verilerle ilişkili olması gerektiği konusunda yorumlarda bulunmalı ve her hücrenin olası değerlerinin aralığını bildiğinizden emin olmalısınız. Bu özellikle sonradan tekrar biraraya iki ihtimal katılmak isteyeceksiniz çünkü bir döngü önce işaretçi ayrılmışlar zaman önemli.
Herhangi bir noktada, kodum bunun gibi görünen diğer tüm satırlarda yorumlarla doludur:
*0 *dat a_1 ? 0' !0 0*
or
*0 *dat 0' ap1 0 !0 0*
Bazı ekstra tavsiyeler, sembollere özel anlamlar atamaktır. Yukarıdaki örnekte, '
işaretçinin olduğu yerde, *
bu yönde tekrarlama ?
anlamına gelir, bilinmeyen değeri olan bir hücre !0
anlamına gelir , sıfır olmayan bir hücre anlamına gelir _
, bunun yerine geçer -
ve p
yerine geçer +
. or
Teybin her iki gösterime de benzeyebileceğini ve bunun gibi ele alınması gerektiğini ima eder.
Simge planınız mutlaka benimkiyle aynı olmak zorunda değildir (birkaç kusurludur), sadece tutarlı olmalıdır. Bu hata ayıklama sırasında da son derece kullanışlıdır, çünkü bu noktaya kadar çalıştırabilir ve gerçek bandı, olması gereken ile karşılaştırabilirsiniz; bu, kodunuzdaki olası kusurları gösterebilir.