Ezoterik programlama dilinde Kıvırcık, programlar yalnızca kaşlı ayraçlar {}
ve noktalı virgüllerden oluşur ;
. Bu mütevazi araç setine rağmen, Curly'nin herhangi bir olumsuz olmayan tamsayıyı temsil edebilecek gerçekleri vardır. Biçimde henüz kimsenin okumaması biraz zor, bu yüzden bize dönüşüm için bazı kodlar yazalım.
Sayıların formatı
Kıvırcık sayılar aşağıdaki kurallara göre yapılandırılmıştır:
- Noktalı virgül eklemek, numaraya bir tane ekler.
- Kıvrımlı parantez içine alınmış bir sayı dört ile çarpılır.
- Kıvrımlı ayraç grupları iç içe olabilir, ancak birleştirilemez. Diş telleri uygun şekilde eşleşmelidir.
- Bir küme parantezi kümesinin dışındaki noktalı virgüller daha önce değil, sonra gelmelidir.
- Ayrıştırmadaki belirsizliği önlemek için, bir sayı daima bir küme ayracı ile başlamalıdır.
Bazı örnekler:
{;;} 2*4 = 8
{{;};}; (1*4+1)*4+1 = 21
{};;; 0*4+3 = 3
(Kural 5'in 0'dan 3'e kadar olan sayıların boş bir küme paranteziyle başlaması gerektiği anlamına geldiğini unutmayın.)
Ve bazı geçersiz örnekler:
{{;}{;;}} Curly brace groups side-by-side, not nested
{;}} Unmatched brace
{;{;}} Semicolon before curly-brace group
;;; Number does not start with curly brace
Kıvırcık sayılar için bir BNF dilbilgisi:
<number> ::= "{" <inner> "}" <semis>
<inner> ::= <semis>
| <number>
<semis> ::= ";" <semis>
| ""
Gibi Numaralar {;;;;}
(üst üste en fazla 3 noktalı virgül) ya da {{};}
(gereksiz boş ayracı gruplar) olarak adlandırılır uygunsuz Kıvırcık numaralar. Yukarıdaki gramerlere uyarlar ve her zamanki gibi değerlendirilebilirler, ancak aynı zamanda daha kısa temsiller de yapabilirler (yukarıdaki örnekler için {{;}}
ve {;}
sırasıyla).
Meydan okuma
Bir dize giren / alan bir program veya işlev yazın. Dize negatif olmayan bir ondalık tamsayıysa, uygun tamsayı için uygun (yani mümkün olan en kısa) Kıvırcık gösterimi verir / verir. Dize bir Kıvırcık sayı ise, ondalık gösterimini verir / verir.
Giriş , STDIN, komut satırı argümanı veya function parametresi ile alınabilir. Bu gerekir bir dize; başka bir deyişle, Kıvırcık sayılar için dizeleri kabul eden bir fonksiyon yazamazsınız, ondalık sayılar için tamsayılar yazabilirsiniz.
Çıktı STDOUT'a yazdırılabilir veya işlevden geri döndürülebilir. Bir fonksiyon olabilir , uygun bir tamsayı dönmek, ya da her durumda dizeleri döndürebilir.
Programınızın hatalı giriş yapması gerekmez (biçimlendirme kurallarını kıran kıvrımlı sayılar, kayan nokta sayıları, negatif tam sayılar, rastgele metinler) ve uygun olmayan kıvrımlı sayıları işlemek için gerekli değildir (aşağıya bakınız). Giriş yalnızca yazdırılabilir ASCII karakterlerinden oluşacaktır.
puanlama
Bayt cinsinden en kısa kod kazanır. Programınız aşağıdakilerden her ikisini de yapabiliyorsa :
- Doğru olmayan Kıvırcık sayıları doğru şekilde
- Kıvırcık bir sayı verildiğinde, gösterilmeyen fazladan karakterleri yoksay
{};
daha sonra puanınızdan% 10 çıkarın. (Tam sayı girişi, bonus için bile hiçbir zaman yabancı karakterlere sahip olmaz.)
Test durumları
Input Output
{;;} 8
{{;};}; 21
{};;; 3
{{{{;}}};} 260
{} 0
4 {;}
17 {{;}};
1 {};
0 {}
96 {{{;};;}}
Bonus için:
{};;;;; 5
{{;;;;};;} 72
c{u;r;l}y;! 9
42{;} ;;;; 8
Not: Kıvırcık henüz uygulanmadı. Fakat bu soru iyi giderse, daha da geliştirebilirim.