Sprawdź poprawność składni 2Col!

11

Jak zauważyło ostatnio kilka osób, w dużej mierze porzuciłem rozwój Braingolfa, ponieważ jest nudny i nieinspirowany , i przeszedłem do 2Col, który jest nieco bardziej interesujący i nie jest przeznaczony do gry w golfa.

Cechą definiującą 2Col jest to, że każdy wiersz kodu musi mieć dokładnie 2 znaki, z wyjątkiem nowej linii. Oznacza to, że długość programu 2Col zawsze mogą być obliczone jako 3n-1gdzie njest liczba linii w programie.

Oto moje wyzwanie: biorąc pod uwagę kod 2Col jako ciąg, wypisuj prawdę, jeśli jest prawidłowy kod 2Col (każda linia ma dokładnie 2 znaki i jest zgodna ze 3n-1wzorem), a falsey w przeciwnym razie.

Wejście

Dane wejściowe należy traktować jako pojedynczy ciąg znaków lub tablicę znaków.

Wynik

Prawdziwa wartość, jeśli ciąg wejściowy jest poprawnym układem, a wartość falsey w przeciwnym razie.

Twój kod powinien być spójny pod względem wykorzystywanych wartości true / falsey

Przypadki testowe

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


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


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


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

----
falsey
======


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


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


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


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


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

Punktacja

To jest więc wygrywa najmniej bajtów!

Skidsdev
źródło
@ Shaggy nie, chyba że z jakiegoś powodu język, który używasz, uważa truefalsey i falseprawdę
Skidsdev
1
@StephenS Will do
Skidsdev
@Mayube dzięki, przepraszam, zapomniałem dodać „czy mógłbyś” przed tym xD
Stephen
Proponuję dodać przypadek testowy: puzzle. Spowoduje to, że rozwiązania wykonujące całą długość łańcucha modulo 3, a następnie zanegowane (co działa dla wszystkich bieżących przypadków testowych) są nieprawidłowe.
Towarzysz SparklePony,
@ComradeSparklePony zrobi
Skidsdev

Odpowiedzi:

6

Brachylog (2), 4 bajty

ṇl₂ᵐ

Wypróbuj online!

Pełny program (ponieważ jest to ; Brachylog wypisuje pełne programy, false.jeśli wystąpił błąd asercji, true.bez jednego).

Wyjaśnienie

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

Na indeksy lsą jednym z najnowszych funkcji Brachylog (choć jeszcze starsze niż wyzwanie), i jest to dobre wyzwanie używać je.


źródło
Chociaż ṇlᵛ2i ṇlᵛ²również działałoby.
Niespowiązany ciąg
3

JavaScript (ES6), 24 28 25 24 bajtów

Naprawiono program i ogolono trzy bajty dzięki @ PunPun1000

Wygolono jeden bajt dzięki @Shaggy

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

Zwraca wartość true, jeśli jest poprawna, lub false, jeśli nie.

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

t=
`22
22
22
22
22`

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

Stephen
źródło
Patrząc na to, nie sądzę, aby działało to w dwóch przypadkach testowych (prawdomównym z tylko 2 znakami i bez nowej linii oraz falsey z końcową nową linią). Jednak s=>s.match(/^(..\n)*..$/)powinien poprawnie pasować do obu, a jednocześnie być krótszy przy 25 bajtach
PunPun1000
@ PunPun1000 dziękuję, masz rację.
Stephen
Niestety jest to nieprawidłowe, ponieważ 2 wartości wyjściowe nie są spójne. Jednak powinieneś być w stanie to naprawić i zapisać bajt za pomocą testzamiast match.
Kudłaty
@ Shaggy dzięki - powód, dla którego nie widziałem tego, kiedy odpowiedziałem, ponieważ został właśnie zredagowany w
Stephen
Wiem, dlatego zwróciłem na to uwagę;) Być może warto zaktualizować notatkę o wartościach zwracanych.
Kudłaty
2

Cubix , 20 bajtów

Zwraca 1 za prawdę i nic za falsey

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

Cubified

    @ 1
    O u
A B q > ; ; ? w
- ! $ @ ; U _ N
    . .
    . .
  • ABq przeciągnij wszystkie dane wejściowe, odwróć je i przesuń EOI (-1) na spód stosu
  • >;; Wejdź do pętli i usuń przedmioty ze stosu
  • ? Test EOI (-1).
    • Jeśli znaleziono, 1uO@pchnij 1 na stos, przekręć na wyjściową liczbę całkowitą i zatrzymaj
    • W przeciwnym razie _powróć do tego, ?co przekierowuje na wzmianę linii
  • N-!$@;U przesuń linię (10) na stos, odejmij, wynik testu, pomiń zatrzymanie, jeśli jest fałszem, usuń wynik i zawróć
  • ;;> usuń kanały ze stosu i przekieruj do pętli.

Wypróbuj online!

MickyT
źródło
2

Python, 51

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

Runner przypadku testowego:

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
źródło
2

Haskell, 23 52 32 bajty

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

Inspirację czerpałem z innych rozwiązań, dodając sprytną sztuczkę "\n".

Program człowiek
źródło
Naprawiłem to, ale RIP moje krótkie rozwiązanie.
Program człowiek
1

Galaretka , 6 bajtów

ỴL€=2Ṃ

Wypróbuj online!

Wyjaśnienie:

ỴL€=2Ṃ
Ỵ       Split at newlines
 L€     Length of each...
   =2   ...equals two.
     Ṃ  Minimum.
Towarzyszu SparklePony
źródło
1

JavaScript (ES6), 35 24 bajtów

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

Spróbuj

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

Kudłaty
źródło
There's gotta be a shorter way to do this with RegEx! Tak (i mój prawdopodobnie nie jest optymalny)
Stephen
1

05AB1E , 6 bajtów

¶¡D2ùQ

Wypróbuj online!

¶¡D2ùQ   Argument s
¶¡       Split s on newlines
  D      Duplicate
   2ù    Keep only elements of length 2
     Q   Compare
kalsowerus
źródło
1

J-uby , 19 18 bajtów

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

:=~&tworzy anonimową funkcję, która przyjmuje xi zwraca, 0jeśli pasuje do wyrażenia regularnego /^(..\n*)..$/mlub w nilinny sposób.

Cyoce
źródło
0

Java (OpenJDK 8) , 25 bajtów

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

Wypróbuj online!

Sprawdza, czy ciąg wejściowy ma dowolną liczbę wierszy, po których następuje przejście do wiersza i ostatni wiersz bez jednego (zapewnia co najmniej jedną linię)

PunPun1000
źródło
0

Narzędzia Bash + GNU, 13

grep -qv ^..$

To ustawia wartość zwracaną przez powłokę (dostępną w $?) na 0 dla false i 1 dla true. Jest to w rzeczywistości odwrotny sens w porównaniu do normalnej konwencji powłoki , więc aby to zrobić, musisz:

Narzędzia Bash + GNU, 15

! grep -qv ^..$
Cyfrowa trauma
źródło
0

Ruby, 22 bajty

->s{s=~/^(..\n*)..$/m}
Cyoce
źródło
0

Japt , 7 6 bajtów

·eÈʶ2

Wypróbuj online


Wyjaśnienie

     :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
Kudłaty
źródło