Giriş
Kipple , Mart 2003'te Rune Berg tarafından icat edilen yığın tabanlı, ezoterik bir programlama dilidir.
Kipple 27 yığın, 4 operatör ve bir kontrol yapısına sahiptir.
Yığınlar
Yığınları adlandırılır a- zve 32-bit işaretli tamsayı içerir. @Çıktı numaralarını daha uygun hale getirmek için özel bir yığın da vardır . Bir sayı üzerine itildiğinde @, o sayının rakamlarının ASCII değerleri aslında yerine itilir. (Örneğin, 12'ye basarsanız @, bunun @yerine 49 ve sonra 50'yi iter .)
iProgram yürütülmeden önce girdi girdi yığınına itilir . Yorumlayıcı, iyürütmeden önce saklanacak değerleri isteyecektir . Yürütme işlemi tamamlandıktan sonra, çıkış yığınındaki her şey oASCII karakteri olarak çıktı almak üzere açılır. Bu Kipple'ın tek IO mekanizması olduğundan, bir Kipple programıyla etkileşim kurmak imkansızdır.
Operatörler
İşlenen, bir yığın tanıtıcısı veya işaretli bir 32 bit tam sayıdır.
Push: >veya<
Sözdizimi: Operand>StackIndentifierveyaStackIndentifier<Operand
İtme operatörü işleneni sola götürür ve belirtilen yığının üzerine iter. Örneğin, 12>a12 değerini yığına iter a. a>byığındaki en üstteki değeri açar ave yığının üzerine iter b. Boş bir yığının patlaması her zaman 0 a<bdeğerini döndürür b>a. a<b>cdan üstteki değeri çıkar bve iter hem cve a.
Ekle: +
Sözdizimi: StackIndentifier+Operand
Ekle işleci, yığındaki en üstteki öğenin toplamını ve işleneni yığının üzerine iter. İşlenen bir yığınsa, değer ondan açılır. Örneğin, yığının en üst değeri a1 ise, a+23'ü üzerine iter. Eğer aboşsa a+2, üzerine 2 itecektir. Yığının en üst ave b1 ve 2 değerleri varsa, 2 a+bdeğerini yığından çıkarır bve 3'ü yığının üzerine iter a.
Çıkar: -
Sözdizimi: StackIndentifier-Operand
Çıkarma işleci, Toplama işleci gibi çalışır, ancak toplama yerine çıkarır.
Açık: ?
Sözdizimi: StackIndentifier?
Clear operatörü, en üstteki öğe 0 ise yığını boşaltır.
Aşağıdaki programı çalışacak böylece tercüman, yanındaki bir operatöre olmayan her şeyi göz ardı eder: a+2 this will be ignored c<i. Ancak, yorum eklemenin doğru yolu #karakteri kullanmaktır . A ile #satır sonu karakteri arasındaki her şey yürütmeden önce kaldırılır. ASCII karakteri # 10, Kipple'de satır sonu olarak tanımlanır.
İşlenenler iki operatör tarafından paylaşılabilir, örneğin a>b c>b c?olarak yazılabilir a>b<c?.
Program , değerleri (aşağıdan yukarıya) 1>a<2 a+aiçerecek şekilde içerecektir . Aynı şekilde operatör için.a[1 4][1 3]-
Kontrol Yapısı
Kipple'de sadece bir kontrol yapısı vardır: döngü.
Sözdizimi: (StackIndentifier code )
Belirtilen yığın boş olmadığı sürece, eşleşen parantez içindeki kod tekrarlanacaktır. Döngüler başka döngüler içerebilir. Örneğin, (a a>b)istifin tüm değerleri taşır ayığına bsırası olacak olsa da, ters . Bunu yapmanın işlevsel olarak aynı, ancak daha zarif bir yolu (a>b).
Örnekler
100>@ (@>o)
Bu çıktı 100
33>o 100>o 108>o 114>o 111>o 87>o 32>o 111>o 108>o 108>o 101>o 72>o
Bu yazdırılacaktır "Hello World!". oYığın çıktısı alınırken , yığının tepesinden alta doğru karakterleri açmaya başlar.
#prime.k by Jannis Harder
u<200
#change 200
k<2>m
u-2
(u-1 u>t u>z u<t
(k>e e+0 e>r)
(e>k)
m+1
m>t
m>z
m<t
t<0>z? t?
1>g
(r>b
m+0 m>a
b+0 b>w
(a-1
b+0 b>j
j?
1>s
(j<0>s j?)
s?
(s<0 w+0 w>b s?)
a>t
a>z
t>a
b-1
b>t
b>z
t>b
z<0>t? z?
a?)
b?
1>p
(b<0 b? 0>p)
p?
(p 0>r? 0>p? 0>g)
)
g?
(g m+0 m>k 0>g?)
u?)
(k>@
10>o
(@>o)
)
Bu asal sayı üreteci, ama nasıl çalıştığından emin değilim.
kurallar
Kipple'ı yorumlayan bir program / işlev yazmalısınız. Bu program / işlev bir kaynak dosyası aracılığıyla bir Kipple programı alabilir veya doğrudan kullanıcıdan STDIN aracılığıyla alabilir. STDIN kullanılamıyorsa, klavye girişinden almalı ve yazdırılamaz belirli bir karakter girilene kadar giriş almaya devam etmelidir. Örneğin, tercümanınız x86 makine koduyla yazılmışsa, Kipple programını karakter karakter olarak klavyeden alır ve esc(veya yazdırılabilir bir karakter yaymayan başka bir tuşa) basılana kadar bunu yapmaya devam eder .
Bir sözdizimi hatası veya yığın taşması gibi bir hata varsa, örneğin 0 yerine 10 veya yorumlayıcı / derleyici tarafından üretilen hata iletilerini döndürerek AMA HATA MESAJLARINI YAZDIRMAYIN .
Bu sorun için kod golfü ile ilgili diğer kurallar geçerlidir.
Kodunuz Kipple'ın örnek arşivindeki bazı örneklerle test edilecektir
Bu bir kod golfü . Bayt cinsinden en kısa kod kazanacaktır. İyi şanslar!
Kipple'da isteğe bağlı bir operatör olduğunu unutmayın, "ancak bu spesifikasyonun bir parçası değildir ve resmi tercümanda sadece ekstra bir özelliktir. Burada bahsetmedim, bu nedenle başvurunuzda desteklenmesine gerek yok.
Spesifikasyonun herhangi bir bölümü hakkında herhangi bir şüpheniz varsa , Java ile yazılmış resmi tercüman ile inceleyebilirsiniz . Bu, derlenmiş program ve kaynak kodunu içeren bir zip dosyası indirecektir. GPL lisansı altındadır.
iKaynak programı stdin'den alırsam nasıl girdi isteyebilirim ?