Inspirado y en memoria de nuestro querido genio,
Q.E.P.D
Él inventó e implementó dfns - su obra magna y el objeto de la impugnación.
Para los interesados: la última documentación completa de dfns y videos con John .
Tarea
Dado un código fuente ASCII, responda a cuál de las siguientes cuatro categorías pertenece:
Dopda diádica
Dop monádico
Dfn
Otro
Puede devolver cuatro valores consistentes, pero indique su asignación si no es obvio.
Detalles
Puede suponer que el código fuente siempre comienza con una llave de apertura {
y termina con una llave de cierre }
.
Pueden ocurrir llaves anidadas recursivamente (p {{{}}}
. Ej. ), Pero las categorías 1–3 nunca pueden tener una profundidad de anidación de {}{}
llaves debajo de 1 (también lo es "Otro") y todas las llaves deben estar equilibradas (también lo {{}
es "Otro").
Se ignoran los caracteres en los siguientes contextos en una línea:
A la derecha de
#
(un comentario):significant#ignored
Entre comillas simples
'
...'
(es decir, en una cadena):significant'ignored'significant
(Esto se aplica a#
demasiado:'#'significant
)A la derecha de una cotización no
'
emparejada (emparejamiento de cotizaciones de la izquierda):significant'ignored
En el nivel uno de llaves (es decir, excluyendo llaves anidadas):
Los dops diádicos contienen la frase ininterrumpida
ww
Dops monádicos no contienen
ww
, pero contienenaa
Dfns no contienen
ww
niaa
Casos de prueba
DOPs diádicos
{ww}
{
www
}
{
''ww'
}
{aa
ww}
{'#''#'ww?aa}
Dops monádicos
{aa}
{aaaa}
{aa{ww}'ww'}
{w#w'
aa'
}
{aaw*w}
{w'\'aa\''}
Dfns
{}
{a a}
{aA}
{
{aa}
}
{w
w''w#
w}
{{
}}
{w\'aa\'}
Otro
{}{}
{{}
{}}
{ww}}
{}
{}
{ww}{}
{#}
{'
'}
{'#\'ww?aa'}
-> ¿otro?)''
(el apóstrofe en la cadena, también se puede analizar como dos cadenas adyacentes para este desafío)?'abc''def'
se analiza como una o dos cadenas para este desafío.Respuestas:
JavaScript (ES6),
145 ... 138136 bytesPruébalo en línea!
Versiones alternativas
¿Cómo?
La cadena de entrada se analiza carácter por carácter.
Traducción de caracteres a códigos
Variables que describen el estado del analizador
Las siguientes variables se utilizan durante el análisis:
aa
se ha encontrado una frase válidaww
se ha encontrado una frase válidaResultado final
fuente
Jalea ,
50 48 4645 bytesUn enlace monádico que acepta una lista de caracteres que produce:
Pruébalo en línea! O ver un conjunto de pruebas .
usa citas de Python para evitar la posibilidad de evaluar la entrada como un conjunto o diccionario de Python
¿Cómo?
fuente
Limpio ,
309293284 bytesPodemos salirse con sólo con 3 nombres de variables a la vez, por lo que llamaremos
a
,p
yl
.Pruébalo en línea!
Define la función
$ :: [Char] -> Int
y algunos ayudantes, dando la asignación:0
: Otro1
: Dop Dádico2
: Dop monádico3
: DfnAmpliado (primera versión) y con más de 3 nombres de variables:
fuente
Retina 0.8.2 , 91 bytes
Pruébalo en línea! El enlace incluye un conjunto de pruebas. Explicación:
Eliminar cadenas y comentarios.
Retire los corchetes coincidentes, trabajando desde lo más interno, pero deje los primeros y últimos corchetes.
Si no tenemos corchetes coincidentes, entonces este es Otro.
De lo contrario, si tenemos,
ww
entonces este es Dyadic Dop.De lo contrario, si tenemos,
aa
entonces este es Monadic Dop.De lo contrario, si esto es algo no cubierto anteriormente, entonces esto es Dfn.
fuente