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
- z
ve 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 .)
i
Program yürütülmeden önce girdi girdi yığınına itilir . Yorumlayıcı, i
yürütmeden önce saklanacak değerleri isteyecektir . Yürütme işlemi tamamlandıktan sonra, çıkış yığınındaki her şey o
ASCII 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>StackIndentifier
veyaStackIndentifier<Operand
İtme operatörü işleneni sola götürür ve belirtilen yığının üzerine iter. Örneğin, 12>a
12 değerini yığına iter a
. a>b
yığındaki en üstteki değeri açar a
ve yığının üzerine iter b
. Boş bir yığının patlaması her zaman 0 a<b
değerini döndürür b>a
. a<b>c
dan üstteki değeri çıkar b
ve iter hem c
ve 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 a
1 ise, a+2
3'ü üzerine iter. Eğer a
boşsa a+2
, üzerine 2 itecektir. Yığının en üst a
ve b
1 ve 2 değerleri varsa, 2 a+b
değerini yığından çıkarır b
ve 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+a
iç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 a
yığına b
sı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!"
. o
Yığı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.
i
Kaynak programı stdin'den alırsam nasıl girdi isteyebilirim ?