Zainspirowany i na pamiątkę naszego ukochanego geniuszu,
ROZERWAĆ
On wymyślił i wdrożył dfns - jego opus magnum i przedmiot wyzwanie.
Dla zainteresowanych: najnowsza pełna dokumentacja dfns i filmy z Johnem .
Zadanie
Biorąc pod uwagę kod źródłowy ASCII, odpowiedz, do której z czterech następujących kategorii należy:
Dyadic dop
Monadic dop
Dfn
Inny
Możesz zwrócić dowolne cztery spójne wartości, ale podaj mapowanie, jeśli nie jest to oczywiste.
Detale
Możesz założyć, że kod źródłowy zawsze zaczyna się od otwierającego nawiasu klamrowego, {
a kończy na zamykającym nawiasie klamrowym }
.
Rekurencyjnie zagnieżdżone nawiasy klamrowe mogą wystąpić (np. {{{}}}
), Ale kategorie 1–3 nigdy nie mogą mieć głębokości zagnieżdżenia nawiasów spadających poniżej 1 (tak jak {}{}
„Inne”), a wszystkie nawiasy klamrowe muszą być zrównoważone (podobnie jak {{}
„Inne”).
Znaki w następujących kontekstach w wierszu są ignorowane:
Po prawej stronie
#
(komentarz):significant#ignored
Ujęte w pojedyncze cudzysłowy
'
…'
(tj. W ciągu):significant'ignored'significant
(Dotyczy to#
również:'#'significant
)Po prawej stronie niesparowanego cytatu
'
(parowanie cytatów od lewej):significant'ignored
W nawiasach klamrowych poziom pierwszy (tj. Z wyłączeniem zagnieżdżonych nawiasów klamrowych):
Diadadowe leki dopingowe zawierają nieprzerwaną frazę
ww
Dopady monadyczne nie zawierają
ww
, ale zawierająaa
Dfns nie zawierają
ww
aniaa
Przypadki testowe
Dydaktyki
{ww}
{
www
}
{
''ww'
}
{aa
ww}
{'#''#'ww?aa}
Monadic dops
{aa}
{aaaa}
{aa{ww}'ww'}
{w#w'
aa'
}
{aaw*w}
{w'\'aa\''}
Dfns
{}
{a a}
{aA}
{
{aa}
}
{w
w''w#
w}
{{
}}
{w\'aa\'}
Inny
{}{}
{{}
{}}
{ww}}
{}
{}
{ww}{}
{#}
{'
'}
{'#\'ww?aa'}
-> inne?)''
(apostrof w łańcuchu, można również parsować jako dwa sąsiednie łańcuchy dla tego wyzwania)?'abc''def'
jest analizowany jako jedno czy dwa ciągi dla tego wyzwania.Odpowiedzi:
JavaScript (ES6),
145 ... 138136 bajtówWypróbuj online!
Alternatywne wersje
W jaki sposób?
Łańcuch wejściowy jest analizowany znak po znaku.
Tłumaczenie znaków na kody
Zmienne opisujące stan analizatora składni
Podczas analizowania używane są następujące zmienne:
aa
napotkano prawidłową frazęww
napotkano prawidłową frazęOstateczny wynik
źródło
Galaretka ,
50 48 4645 bajtówMonadyczny link przyjmujący listę znaków, która daje:
Wypróbuj online! Lub zobacz zestaw testowy .
używa cytowania w Pythonie, aby uniknąć możliwości oceny danych wejściowych jako zestawu Python lub słownika
W jaki sposób?
źródło
Czysty ,
309293284 bajtówMożemy uciec tylko za pomocą 3 nazwy zmiennych w czasie, więc będziemy je nazywać
a
,p
il
.Wypróbuj online!
Definiuje funkcję
$ :: [Char] -> Int
i kilka pomocników, podając mapowanie:0
: Inny1
: Dyadic dop2
: Monadic dop3
: DfnRozszerzony (pierwsza wersja) i zawierający więcej niż 3 nazwy zmiennych:
źródło
Retina 0.8.2 , 91 bajtów
Wypróbuj online! Link zawiera pakiet testowy. Wyjaśnienie:
Usuń ciągi i komentarze.
Usuń dopasowane nawiasy, pracując od środka, ale zostaw pierwszy i ostatni nawias.
Jeśli nie mamy pasujących nawiasów, to jest to Inny.
W przeciwnym razie, jeśli mamy,
ww
to jest to Dyadic Dop.W przeciwnym razie, jeśli mamy,
aa
to jest to Monadic Dop.W przeciwnym razie, jeśli nie jest to uwzględnione powyżej, oznacza to Dfn.
źródło