özet
Yalnızca karakterler kullanılarak yeni bir dize düzenleme dili oluşturuldu $+#-!*|@>
! Senin görevin mümkün olduğunca az bayt içinde bir tercüman uygulamaktır.
Giriş
Bu dilin tek bir satırı olan bir dize. Bu herhangi bir makul yolla (stdin, fonksiyon parametresi, komut satırı argümanı vb.) Veya önceden tanımlanmış bir değişken olarak alınabilir. Program kullanıcı girişi isterse , stdin'den istediği tüm kullanıcı girişlerini kabul edin ve daha fazlasını yapın, aşağıya bakın. Bunun geçerli bir program olduğunu varsayabilirsiniz.
Çıktı
Dil ne olursa olsun, aşağıdaki özellikler. Bir dizeyi makul bir şekilde (stdout, işlev çıktısı, vb.) Veya değişken bir değeri çıkarmalısınız. Dil açıkça verir, bu olmalıdır Stdout'a gidin. Standart boşluklar yasaklanmıştır.
Dil Özellikleri
İşleme ve Sözdizimi
Dil, yalnızca dize manipülasyonu yaptığı için çok basit bir işleme biçimine sahiptir: boş bir dize ( ""
) ile başlar ve her terimle değiştirir. Bir terim bir veya iki bölümden oluşur: bir işlev (aşağıda) ve ardından davranışını düzenleyen bir parametre (aşağıda). Terimler borularla ( |
) ayrılır . Bunun boş bir program olmayacağını ve hiçbir terimin boş olmayacağını varsayabilirsiniz. Programın sonunda değeri çıkarmalısınız.
Fonksiyonlar
Dilin aşağıda gösterildiği gibi sadece 6 işlevi vardır. Her işlev bir veya sıfır parametresini kabul eder.
+
dizeleri bitiştir (bir dize parametresi alır, geçerli değere birleştirir)!
geçerli değerin karakter sırasını tersine çevir (parametre yok)*
dizeyi tekrarla (bir tamsayı parametresi alır, geçerli değeri birçok kez tekrarlar)-
bir değerin tüm tekrarlamalarını kaldırır (bir dize parametresi alır, tüm tekrarlamalarını geçerli değerden kaldırır)$
[sözde-] geçerli değeri rastgele karıştırır (parametre yok)<
geçerli değeristdout
(parametre yok)
Değerler
Bunlar, işlevlere iletilebilen ve bunlarla eşleşen regex ile temsil edilen değerlerdir:
@[^|]*
borular dışında herhangi bir karakter içeren bir dize değişmezi. Boş olabilir.#[0-9]+
bir tam sayı değişmezi>
sonraki satırıstdin
. İle kullanılırsa*
, tamsayıya dönüştürün.
Test Durumları
╔════════════════════════╤═════════════╤══════════════╗
║code │input │output ║
╟────────────────────────┼─────────────┼──────────────╢
║+>|!|+@hello|*> │13 │31hello31hello║
║ │2 │ ║
╟────────────────────────┼─────────────┼──────────────╢
║+>|+@abcdefg|$ │hello │hcloeebafdlg ║
╟────────────────────────┼─────────────┼──────────────╢
║+@how areyou|-@o|-> │w │h areyu ║
╟────────────────────────┼─────────────┼──────────────╢
║+@out|<|*#3 │ │out ║
║ │ │outoutout ║
╟────────────────────────┼─────────────┼──────────────╢
║+> │what ever 345│what ever 345 ║
╟────────────────────────┼─────────────┼──────────────╢
║+@$pe<i@l|<|-@$pe<i@l|+>│A|$o $pe<!@| │$pe<i@l ║
║ │ │A|$o $pe<!@| ║
╟────────────────────────┼─────────────┼──────────────╢
║<|+>|!|< │input text | ║
║ │ │txet tupni ║
║ │ │txet tupni ║
╟────────────────────────┼─────────────┼──────────────╢
║+@># │ |># ║
╚════════════════════════╧═════════════╧══════════════╝
Test durumu 2'nin rastgele olduğunu, bu nedenle içindeki karakterlerin tüm permütasyonlarının geçerli olduğunu unutmayın. Ayrıca, tablodaki çıktılar yeni satırlarla ayrılır, ancak programınızın aynı şeyi yapması gerekmez. Her durumda son değer son çıktı.
Örnek (Golfsiz) python yorumlayıcısı
Çevrimiçi deneyin! IDO veya kullandığınız herhangi bir yöntemle çalıştırırsanız IMO daha iyi olur. (Sonra 424 bayt aşağı golf, ama eminim çok daha iyi yapabilirim).
<
karşılaşıldığında yeni satır yazdırıyor gibi görünüyor . Bu zorunlu mu?
+@>#
? Ben de kullandım #
.