?1-(v #1)-
1 0v ^(# 0 (1+0)#)!
(#) ^#1-(0)#
Standart uyumlu bir yorumlayıcı kullanılıyorsa, bu girdi ve çıktıyı bayt değerleri olarak alır . Aslında STDIN / STDOUT üzerinde ondalık sayılar kullanmak için, ihtiyacım olacağını Python yorumlayıcısı ile NUMERIC_OUTPUT = True
ve ek bir seçenek NUMERIC_INPUT = True
.
açıklama
Programın iskeleti
?1-( 1 -
1 )!
N
İlk sese girdiyi okur ve almak için azaltırız N-1
. Ayrıca ikinci sesi ilklendiririz 1
. Sonra N-1
bir kez döngü yaparız , her yinelemesi ikinci yığındaki dizinin bir sonraki değerini alır. Sonunda N
inci numarasını yazdırıyoruz .
Programın amacı, dizinin her öğesini üçüncü sesde bir kuyruğa koymak ve her yinelemede bu kuyruğun başını azaltmaktır. Kafa ulaştığında 0
, dizinin değerini artırır ve çıkarırız 0
.
Şimdi mesele, Prelude'un sıraları değil yığınları kullanmasıdır. Yani bir yığın gibi kullanmak için bu yığını biraz kaydırmamız gerekiyor.
v #
0v ^
(#)
Bu, dizinin geçerli değerini ilk sese (geçici bir kopya olarak) kopyalar, a'yı 0
ikinci sese doğru iter (kuyruğun sonunu işaretlemek için). Ve sonra üçüncü yığını ikinciye kaydırmak (ve böylece tersine çevirmek) için bir döngü gerçekleştirir. Döngüden sonra, geçerli sıra değerinin kopyasını ikinci yığının (sıramızın kuyruğu) üzerine koyarız.
)
(#
^#1-
Bu biraz çirkin görünüyor, ama aslında yığını üçüncü sese geri döndüren bir döngü. Yana )
değişen talimatlar ile aynı sütunda ise, 0
biz başkasıyla kaldırmak gerekir bu yüzden ikinci bir sesle koymak daha önce de, üçüncü bir sesle sona erecek #
. Sonra 3. sesin üst kısmını azaltın, yani sıranın başını azaltın.
Şimdi biraz can sıkıcı oluyor - bu değer olduğunda bir kod çalıştırmak istiyoruz 0
, ancak Prelude'un tek kontrol yapısı (döngü) sadece sıfır olmayan değerlere yanıt veriyor.
0 (1+0)#
(0)#
İkinci sesin üst kısmının doğru olduğuna dikkat edin (Golomb dizisi herhangi bir 0
s içermez ). Böylece iş yükü bu sese girer (ikinci parantez çifti). Kuyruğun başı henüz değilse bunun olmasını engellememiz gerekir 0
. İlk olarak, üçüncü ses 0
üzerinde, kuyruk başı hala sıfır değilse ikinci sesi üzerine a iten bir "döngü" var . Ayrıca 0
, döngüden hemen çıkmak için üçüncü sesi de ekledik. #
Üçüncü sesime sonra ya o kaldırır 0
veya eğer sıranın başını kaldıran o zaten sıfır oldu. Şimdi bu ikinci döngü sadece kuyruğun başı sıfırsa (ve0
ikinci ses asla itilmedi). Bu durumda dizinin geçerli değerini artırır 0
ve döngüden çıkmak için a düğmesine basarız. Son olarak, her zaman 0
yığının üstünde, atmamız gereken bir tane olacaktır.
Prelude'da mantıksal olumsuzlamanın sinir bozucu olduğunu söyledim ...
n
yerine kullanır2 - n % 1
. Yanıtların önemli ölçüde farklı olmasını beklemek için herhangi bir nedeniniz var mı?