Convalida la sintassi di 2Col!


11

Come un paio di persone potrebbero aver notato di recente, ho in gran parte abbandonato lo sviluppo di Braingolf perché è noioso e non ispirato, e sono passato a 2Col che è un po 'più interessante e non progettato per essere un linguaggio da golf.

La caratteristica distintiva di 2Col è che ogni riga di codice deve contenere esattamente 2 caratteri, esclusa la nuova riga. Ciò significa che la lunghezza di un programma 2Col può sempre essere calcolata come 3n-1dove si ntrova il numero di righe nel programma.

Quindi ecco la mia sfida: dato il codice 2Col come una stringa, output veritiero se è un codice 2Col valido (ogni riga ha esattamente 2 caratteri ed è conforme alla 3n-1formula), e false in caso contrario.

Ingresso

L'input deve essere considerato come una singola stringa o una matrice di caratteri.

Produzione

Un valore di verità se la stringa di input è un layout valido e un valore di falsa in caso contrario.

Il codice deve essere coerente con i valori di verità / falsità che utilizza

Casi test

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


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


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


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

----
falsey
======


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


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


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


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


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

punteggio

Si tratta di quindi vince il minor numero di byte!


@Shaggy no, a meno che per qualche ragione il linguaggio che usi non consideri truefalsità e falseverità
Skidsdev

1
@StephenS farà
Skidsdev

@Mayube grazie, scusa, ho dimenticato di aggiungere "potresti" di fronte a quel xD
Stephen

Io suggerisco di aggiungere un banco di prova: puzzle. Ciò renderà non valide le soluzioni che eseguono l'intera lunghezza della stringa modulo 3, quindi negate (che funziona per tutti gli attuali casi di test).
Compagno SparklePony,

Lo farà @ComradeSparklePony
Skidsdev

Risposte:


6

Brachylog (2), 4 byte

ṇl₂ᵐ

Provalo online!

Programma completo (perché si tratta di un ; Brachylog emette programmi completi in false.caso di errore di asserzione, true.senza uno).

Spiegazione

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

Gli abbonamenti lsono una delle funzionalità più recenti di Brachylog (anche se ancora più vecchie della sfida), e questa è una buona sfida su cui usarle.


Anche se ṇlᵛ2e ṇlᵛ²funzionerebbe anche.
Corda non correlata

3

JavaScript (ES6), 24 28 25 24 byte

Programma fisso e rasato di tre byte grazie a @ PunPun1000

Rasato di un byte grazie a @Shaggy

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

Restituisce vero se valido e falso in caso contrario.

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

t=
`22
22
22
22
22`

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


Solo guardando questo non penso che funzioni per due dei casi di test (quello vero con solo 2 caratteri e nessuna nuova riga, e quello falso con una nuova riga finale). Tuttavia, s=>s.match(/^(..\n)*..$/)dovrebbe corrispondere correttamente a entrambi, pur essendo più breve a 25 byte
PunPun1000,

@ PunPun1000 grazie, hai ragione.
Stephen,

Purtroppo questo non è valido poiché i 2 valori di output non sono coerenti. Tuttavia, dovresti essere in grado di risolverlo e salvare un byte utilizzando testinvece di match.
Shaggy,

@Shaggy grazie - il motivo per cui non l'ho visto quando ho risposto perché era stato appena modificato in
Stephen

Lo so, ecco perché l'ho sottolineato;) Potresti voler aggiornare la nota sui tuoi valori di ritorno.
Shaggy,

2

Cubix , 20 byte

Restituisce 1 per verità e niente per falsità

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

Cubified

    @ 1
    O u
A B q > ; ; ? w
- ! $ @ ; U _ N
    . .
    . .
  • ABq assorbe tutto l'input, invertilo e spingi l'EOI (-1) in fondo allo stack
  • >;; Entra nel ciclo e rimuovi gli oggetti dalla pila
  • ? Test per EOI (-1).
    • Se lo trovi, 1uO@spingi 1 nello stack, u-turn sull'output intero e fermati
    • Altrimenti _rifletti nuovamente sul ?quale reindirizza allo wspostamento corsia
  • N-!$@;U spingere l'avanzamento di riga (10) sulla pila, sottrarre, risultato del test, saltare l'arresto se falso, rimuovere il risultato e invertire
  • ;;> rimuove i feed di riga dallo stack e reindirizza nel loop.

Provalo online!


2

Python, 51

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

Runner per test case:

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

2

Haskell, 23 52 32 byte

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

Mi sono ispirato ad alcune altre soluzioni, aggiungendo un trucco intelligente "\n".


L'ho risolto, ma RIP la mia soluzione breve.
Program man



1

JavaScript (ES6), 35 24 byte

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

Provalo

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


There's gotta be a shorter way to do this with RegEx! (e il mio probabilmente non è ottimale)
Stephen


1

J-uby , 19 18 byte

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

:=~&crea una funzione anonima che accetta xe restituisce 0se corrisponde alla regex /^(..\n*)..$/mo in nilaltro modo.


0

Java (OpenJDK 8) , 25 byte

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

Provalo online!

Verifica se la stringa di input ha un numero qualsiasi di righe seguite da un avanzamento riga e da una riga finale senza una (assicura almeno una riga)


0

Utilità Bash + GNU, 13

grep -qv ^..$

Questo imposta il valore di ritorno della shell (accessibile in $?) su 0 per false e 1 per true. Questo è in realtà il senso opposto rispetto alla normale convenzione shell , quindi per rendere giusto quello che dovresti fare:

Utilità Bash + GNU, 15

! grep -qv ^..$


0

Japt , 7 6 byte

·eÈʶ2

Provalo online


Spiegazione

     :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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.