Çünkü yeterince ezoterik dil golfu alamıyoruz, değil mi?
/// - belirgin eğik çizgiler - s///
Perl ününün regex değiştirme işlevine dayanan eğlenceli bir dildir . Yalnızca iki özel karakter içerir, eğik çizgi /
ve ters eğik çizgi \
. Üzerinde wiki esolangs hakkında tam bir makale bulabilirsiniz , ancak bazı örneklerin yanı sıra, aşağıdaki dilin tanımını da çoğaltacağım .
Kısacası, /pattern/repl/rest
programda tanımlayarak ve ikameyi olabildiğince çok kez değiştirerek çalışır . Hiçbir karakter özel değildir /
ve \
: /
Programdaki desenleri ve değiştirmeleri gösterirken, kodunuza \
değişmez /
veya \
karakter eklemenizi sağlar . Özellikle, bunlar normal ifadeler değil, sadece düz dize değişimleridir.
Buradaki zorluk , /// dili için, STDIN okuyan bir program veya bir dize argümanı alan bir işlev olarak, mümkün olduğunca az karakter olarak bir tercüman üretmektir.
/// dışında herhangi bir dili kullanabilirsiniz. /// adlı bir kütüphaneyi kullanamazsınız; Bununla birlikte, regex'leri, regex kütüphanelerini veya string eşleştirme kütüphanelerini kullanabilirsiniz.
infaz
Dört durum vardır; baskı , desen , değiştirme ve değiştirme . İkame hariç her devlette :
- Program boşsa, yürütme durur.
- Aksi takdirde, ilk karakter ise
\
, bir sonraki karakterle (varsa) bir şeyler yapın ve her ikisini de programdan kaldırın. - Aksi takdirde, ilk karakter ise
/
onu kaldırın ve bir sonraki duruma geçin. - Aksi halde, ilk karakterle bir şeyler yapın ve programdan kaldırın.
- Tekrar et.
Devletler , sırasıyla baskı , desen , değiştirme ve değiştirme işlemlerini gerçekleştirir.
- Gelen baskı modunda, karakter araçları çıktı 'bir şey yapmak'.
- In desen modunda araçlar geçerli Pattern karakter eklemek 'bir şey yapmak'.
- In yedek modunda araçlar geçerli Değiştirilmesi karakter eklemek 'bir şey yapmak'.
In ikame modunda kurallar farklı bir dizi izleyin. Mevcut Modelin ilk oluşumunu, programda mevcut Yedek ile yerine, başka bir değişiklik mümkün olmadıkça tekrarlayın. Bu noktada, Desen ve Değiştirme'yi temizleyin ve baskı moduna dönün .
Programda /foo/foobar/foo foo foo
aşağıdakiler gerçekleşir:
/foo/foobar/foo foo foo
foo foo foo
foobar foo foo
foobarbar foo foo
foobarbarbar foo foo
...
Bu sonsuza kadar döngüler ve asla ikame modundan çıkmaz . Benzer şekilde, Desen boşsa, boş dizenin ilk oluşumu - programın başlangıcında - her zaman eşleşir, bu nedenle değiştirme modu sonsuza kadar döngüler, asla durmaz.
Örnekler
no
Çıktı: no
.
/ world! world!/Hello,/ world! world! world!
Çıktı: Hello, world!
.
/foo/Hello, world!//B\/\\R/foo/B/\R
Çıktı: Hello, world!
.
a/ab/bbaa/abb
Çıktı: a
. Program durmuyor.
//
Çıktı: yok.
///
Çıktı: yok. Program durmuyor.
/\\/good/\/
Çıktı: good
.
Ayrıca deneyebileceğiniz wikide bir de kısma var .
\
Karakter /
, daha sonra normal olarak kullanılabilecek, onu izleyen herhangi bir karakterden kaçar . Bu çok görünmese de, /// Turing-complete yapar .
///
IDE'mde kullanacağım !
/-/World//--/Hello//--W/--, w/---!
Ne aşk değil? (