Skoro nie mamy dość golfów z ezoterycznym językiem, prawda?
/// - wyraźne ukośniki - to zabawny, mały język oparty na s///
funkcji zastępowania wyrażeń regularnych w słowie Perla. Zawiera tylko dwa znaki specjalne, ukośnik /
i ukośnik odwrotny \
. Pełny artykuł na ten temat można znaleźć na wiki esolangs , ale odtworzę opis języka poniżej, a także kilka przykładów.
Krótko mówiąc, działa poprzez identyfikację /pattern/repl/rest
w programie i dokonanie podstawienia tyle razy, ile to możliwe. Żadne znaki nie są wyjątkowe, z wyjątkiem /
i \
: /
wyznacza wzory i zamienniki w programie, a jednocześnie \
pozwala wstawiać literały /
lub \
znaki w kodzie. W szczególności nie są to wyrażenia regularne, tylko zwykłe podstawienia ciągów.
Wyzwanie polega na stworzeniu interpretera dla języka ///, jako programu odczytującego STDIN lub funkcji przyjmującej argument ciągu, w jak najmniejszej liczbie znaków.
Możesz używać dowolnego języka oprócz samego ///. Nie wolno używać bibliotek, które interpretują ///; możesz jednak użyć wyrażeń regularnych, bibliotek wyrażeń regularnych lub bibliotek dopasowujących ciągi znaków.
Wykonanie
Istnieją cztery stany: druk , wzór , zamiana i zamiana . W każdym stanie oprócz substytucji :
- Jeśli program jest pusty, wykonywanie zostaje zatrzymane.
- W przeciwnym razie, jeśli pierwszym znakiem jest
\
, zrób coś z następnym znakiem (jeśli jest obecny) i usuń oba z programu. - W przeciwnym razie, jeśli pierwszym znakiem jest
/
, usuń go i przejdź do następnego stanu. - W przeciwnym razie zrób coś z pierwszym znakiem i usuń go z programu.
- Powtarzać.
Stany przechodzą kolejno przez drukowanie , wzór , zastępowanie i zastępowanie w kolejności.
- W trybie drukowania „zrób coś” oznacza wypisanie znaku.
- W trybie wzorca „zrób coś” oznacza dodanie znaku do bieżącego wzorca.
- W trybie zastępczym „zrób coś” oznacza dodać znak do bieżącej zamiany .
W trybie zastępczym przestrzegasz innego zestawu zasad. Wielokrotnie zastępuj pierwsze wystąpienie bieżącego Wzorca bieżącym Zastąpieniem w programie, dopóki nie będzie już możliwe zastąpienie. W tym momencie wyczyść wzór i zamiennik i wróć do trybu drukowania .
W programie /foo/foobar/foo foo foo
dzieje się:
/foo/foobar/foo foo foo
foo foo foo
foobar foo foo
foobarbar foo foo
foobarbarbar foo foo
...
Zapętla się na zawsze i nigdy nie wychodzi z trybu zastępowania . Podobnie, jeśli wzorzec jest pusty, to pierwsze wystąpienie pustego ciągu - na początku programu - zawsze pasuje, więc tryb podstawiania zapętla się na zawsze, nigdy się nie zatrzymując.
Przykłady
no
Wyjście: no
.
/ world! world!/Hello,/ world! world! world!
Wyjście: Hello, world!
.
/foo/Hello, world!//B\/\\R/foo/B/\R
Wyjście: Hello, world!
.
a/ab/bbaa/abb
Wyjście: a
. Program się nie zatrzymuje.
//
Wyjście: brak.
///
Wyjście: brak. Program się nie zatrzymuje.
/\\/good/\/
Wyjście: good
.
Na wiki znajduje się również quine, którą możesz wypróbować.
\
Postać ucieka każdej następującej po niej postaci, w tym /
, która później może być używana normalnie. Chociaż nie wygląda to zbyt wiele, powoduje to, że /// Turing jest kompletny .
///
IDE, które tworzę!
/-/World//--/Hello//--W/--, w/---!
Czego nie kochać? (Spróbuj usunąć myślniki od końca)