?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 = Trueve 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-1bir kez döngü yaparız , her yinelemesi ikinci yığındaki dizinin bir sonraki değerini alır. Sonunda Ninci 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ı 0ikinci 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, 0biz 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 0s 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 0veya 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 (ve0ikinci ses asla itilmedi). Bu durumda dizinin geçerli değerini artırır 0ve döngüden çıkmak için a düğmesine basarız. Son olarak, her zaman 0yığının üstünde, atmamız gereken bir tane olacaktır.
Prelude'da mantıksal olumsuzlamanın sinir bozucu olduğunu söyledim ...
nyerine kullanır2 - n % 1. Yanıtların önemli ölçüde farklı olmasını beklemek için herhangi bir nedeniniz var mı?