Validar la sintaxis de 2Col!

11

Como algunas personas pueden haber notado últimamente, he abandonado en gran medida el desarrollo de Braingolf porque es aburrido y sin inspiración, y pasé a 2Col, que es un poco más interesante y no está diseñado para ser un lenguaje de golf.

La característica definitoria de 2Col es que cada línea de código debe tener exactamente 2 caracteres de largo, excluyendo la nueva línea. Esto significa que la longitud de un programa de 2Col siempre se puede calcular como 3n-1dónde nestá el número de líneas en el programa.

Así que aquí está mi desafío: dado el código 2Col como una cadena, genera una verdad si es un código 2Col válido (cada línea tiene exactamente 2 caracteres y se ajusta a la 3n-1fórmula), y falsey de lo contrario.

Entrada

La entrada debe tomarse como una sola cadena o como una matriz de caracteres.

Salida

Un valor verdadero si la cadena de entrada es un diseño válido, y un valor falso de lo contrario.

Su código debe ser coherente en los valores de verdad / falsey que utiliza

Casos de prueba

======
F!
$^
----
truthy
======


======
*8
+1
Sq
----
truthy
======


======
nop
xt
----
falsey
======


======
+1
+1
#^

----
falsey
======


======
<empty string>
----
falsey
======


======
ye
----
truthy
======


======
no<space>
----
falsey
======


======
test
----
falsey
======


======
puzzle
----
falsey
======

Puntuación

Este es el por lo que gana menos bytes!

Skidsdev
fuente
@Shaggy no, a menos que por alguna razón el lenguaje que usas considere truefalso y falseverdadero
Skidsdev
1
@StephenS lo hará
Skidsdev
@Mayube gracias, lo siento, olvidé agregar "podría" delante de ese xD
Stephen
Sugiero agregar un caso de prueba: puzzle. Esto hará que las soluciones que hacen toda la longitud del módulo de cadena 3, luego se nieguen (que funciona para todos los casos de prueba actuales) inválidas.
Camarada SparklePony
@ComradeSparklePony lo hará
Skidsdev

Respuestas:

6

Brachylog (2), 4 bytes

ṇl₂ᵐ

Pruébalo en línea!

Programa completo (porque este es un ; salida de programas completos de Brachylog false.si hubo un error de aserción, true.sin uno).

Explicación

ṇl₂ᵐ
ṇ     Split input into lines
   ᵐ  For each line:
 l₂     Assert that that line has length 2

Los subíndices lson una de las características más nuevas de Brachylog (aunque aún son más antiguas que el desafío), y este es un buen desafío para usarlas.


fuente
Aunque ṇlᵛ2y ṇlᵛ²también funcionaría.
Cadena no relacionada
3

JavaScript (ES6), 24 28 25 24 bytes

Programa fijo y reducido de tres bytes gracias a @ PunPun1000

Afeitado un byte gracias a @Shaggy

s=>/^(..\n)*..$/.test(s)

Devuelve verdadero si es válido y falso si no.

f=
s=>/^(..\n)*..$/.test(s)

t=
`22
22
22
22
22`

console.log(f(t));
console.log(f(t.slice(0, -1)));

Stephen
fuente
Solo mirando esto, no creo que funcione para dos de los casos de prueba (el verdadero con solo 2 caracteres y sin nueva línea, y el falso con una nueva línea final). Sin embargo, s=>s.match(/^(..\n)*..$/)debe coincidir correctamente con ambos y al mismo tiempo ser más corto en 25 bytes
PunPun1000,
@ PunPun1000 gracias, tienes razón.
Stephen
Desafortunadamente, esto no es válido ya que los 2 valores de salida no son consistentes. Sin embargo, debería poder arreglar eso y guardar un byte utilizando en testlugar de match.
Shaggy
@Shaggy gracias - la razón por la que no vi eso cuando respondí porque eso acababa de ser editado
Stephen
Lo sé, por eso lo señalé;) Es posible que desee actualizar la nota en sus valores de retorno.
Shaggy
2

Cubix , 20 bytes

Devuelve 1 por veracidad y nada por falsey

@1OuABq>;;?w-!$@;U_N

Cubified

    @ 1
    O u
A B q > ; ; ? w
- ! $ @ ; U _ N
    . .
    . .
  • ABq sorber toda la entrada, invertirla y empujar el EOI (-1) al fondo de la pila
  • >;; Entra en el bucle y elimina elementos de la pila
  • ? Prueba de EOI (-1).
    • Si se encuentra, 1uO@empuje 1 a la pila, gire en U hacia la salida entera y pare
    • De lo contrario, _reflexione nuevamente sobre el ?que redirige al wcambio de carril
  • N-!$@;U empuje el avance de línea (10) en la pila, reste, pruebe el resultado, omita el alto si es falso, elimine el resultado y gire en U
  • ;;> eliminar los avances de línea de la pila y redirigirlos al bucle.

Pruébalo en línea!

MickyT
fuente
2

Python, 51

lambda s:all(len(l)==2for l in(s+"\n").splitlines())

Prueba caso corredor:

tcs = {
    "F!\n$^": 1,
    "*8\n+1\nSq": 1,
    "nop\nxt": 0,
    "+1\n+1\n#^\n": 0,
    "": 0,
    "ye": 1,
    "no ": 0,
    "test": 0,
    "puzzle": 0
}
f = lambda s:all(len(l)==2for l in(s+"\n").splitlines())
for tc, expected in tcs.items():
    assert f(tc) == expected
Łukasz Rogalski
fuente
2

Haskell, 23 52 32 bytes

all((==2).length).lines.(++"\n")

Obtuve mi inspiración de algunas otras soluciones, ingenioso truco añadiendo eso "\n".

Programa hombre
fuente
Lo arreglé, pero RIP mi solución corta.
Programa hombre
1

Jalea , 6 bytes

ỴL€=2Ṃ

Pruébalo en línea!

Explicación:

ỴL€=2Ṃ
Ỵ       Split at newlines
 L€     Length of each...
   =2   ...equals two.
     Ṃ  Minimum.
Camarada SparklePony
fuente
1

JavaScript (ES6), 35 24 bytes

s=>!/^.?$|.../gm.test(s)

Intentalo

f=
s=>!/^.?$|.../gm.test(s)
oninput=_=>o.innerText=f(i.value)
o.innerText=f(i.value=`F!
$^`)
<textarea id=i></textarea><pre id=o>

Lanudo
fuente
There's gotta be a shorter way to do this with RegEx! (y el mío probablemente no es óptimo)
Stephen
1

05AB1E , 6 bytes

¶¡D2ùQ

Pruébalo en línea!

¶¡D2ùQ   Argument s
¶¡       Split s on newlines
  D      Duplicate
   2ù    Keep only elements of length 2
     Q   Compare
kalsowerus
fuente
1

J-uby , 19 18 bytes

:=~&/^(..\n*)..$/m

:=~&realiza una función anónima que toma xy devuelve 0si coincide con la expresión regular /^(..\n*)..$/m, o de lo nilcontrario.

Cyoce
fuente
0

Java (OpenJDK 8) , 25 bytes

s->s.matches("(..\n)*..")

Pruébalo en línea!

Comprueba si la cadena de entrada tiene cualquier número de líneas seguidas de un avance de línea y una línea final sin una (asegura al menos una línea)

PunPun1000
fuente
0

Bash + utilidades GNU, 13

grep -qv ^..$

Esto establece el valor de retorno del shell (accesible en $?) en 0 para falso y 1 para verdadero. Esto es en realidad el sentido opuesto en comparación con la convención de shell normal , por lo que para hacer eso bien, debe hacer lo siguiente:

Bash + GNU utilidades, 15

! grep -qv ^..$
Trauma digital
fuente
0

Ruby, 22 bytes

->s{s=~/^(..\n*)..$/m}
Cyoce
fuente
0

Japt , 7 6 bytes

·eÈʶ2

Pruébalo en línea


Explicación

     :Implicit input of string "U"
·    :Split to array on newline
eÈ   :Maps over the array, checking that every item's ...
Ê    :length ...
¶2   :Equals 2
     :Implicit output of result
Lanudo
fuente