Überprüfen Sie die 2Col-Syntax!

11

Wie einige Leute in letzter Zeit vielleicht bemerkt haben, habe ich die Entwicklung von Braingolf weitgehend aufgegeben, weil es langweilig und uninspiriert ist, und bin zu 2Col übergegangen, das etwas interessanter ist und nicht als Golfsprache konzipiert wurde.

Das entscheidende Merkmal von 2Col ist, dass jede Codezeile mit Ausnahme der neuen Zeile genau 2 Zeichen lang sein muss. Dies bedeutet , dass die Länge eines 2col Programms kann immer berechnet werden , 3n-1wo ndie Anzahl der Zeilen im Programm.

Hier ist meine Herausforderung: Wenn Sie 2Col-Code als Zeichenfolge angeben, geben Sie wahrheitsgemäß aus, wenn es sich um einen gültigen 2Col-Code handelt (jede Zeile besteht aus genau 2 Zeichen und entspricht der 3n-1Formel), andernfalls falsey.

Eingang

Die Eingabe sollte als einzelne Zeichenfolge oder als Array von Zeichen erfolgen.

Ausgabe

Ein wahrer Wert, wenn die Eingabezeichenfolge ein gültiges Layout ist, und ansonsten ein falscher Wert.

Ihr Code sollte konsistent sein, in welchen Wahrheits- / False-Werten er verwendet wird

Testfälle

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


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


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


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

----
falsey
======


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


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


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


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


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

Wertung

Dies ist so dass die wenigsten Bytes gewinnen!

Skidsdev
quelle
@ Shaggy nein, nicht, es sei denn, aus irgendeinem Grund betrachtet die Sprache, die Sie verwenden, trueFalsey und falseTruthy
Skidsdev
1
@ Stephens wird tun
Skidsdev
@ Mayube danke, sorry, ich habe vergessen, "könntest du" vor diesem xD hinzuzufügen
Stephen
Ich schlage vor, Sie fügen einen Testfall hinzu : puzzle. Dies macht Lösungen ungültig, die die gesamte Länge des Strings Modulo 3 ausführen und dann negiert werden (was für alle aktuellen Testfälle funktioniert).
Genosse SparklePony
@ ComradeSparklePony wird tun
Skidsdev

Antworten:

6

Brachylog (2), 4 Bytes

ṇl₂ᵐ

Probieren Sie es online aus!

Vollständiges Programm (da dies ein ; vollständige Programme von Brachylog werden ausgegeben, false.wenn ein Assertionsfehler aufgetreten ist , true.ohne eines).

Erläuterung

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

Indizes auf lsind eine der neuesten Funktionen von Brachylog (obwohl immer noch älter als die Herausforderung), und dies ist eine gute Herausforderung, um sie zu verwenden.


quelle
Obwohl ṇlᵛ2und ṇlᵛ²würde auch funktionieren.
Unrelated String
3

JavaScript (ES6), 24 28 25 24 Byte

Programm behoben und dank @ PunPun1000 von drei Bytes rasiert

Dank @Shaggy ein Byte rasiert

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

Gibt true zurück, wenn gültig, und false, wenn nicht.

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

t=
`22
22
22
22
22`

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

Stephen
quelle
Wenn ich mir das nur ansehe, denke ich nicht, dass es für zwei der Testfälle funktioniert (der wahrheitsgemäße mit nur 2 Zeichen und ohne neue Zeile und der falsche mit einer nachgestellten neuen Zeile). Sollte s=>s.match(/^(..\n)*..$/)jedoch korrekt mit beiden übereinstimmen und gleichzeitig mit 25 Bytes kürzer sein
PunPun1000
@ PunPun1000 danke, du bist richtig.
Stephen
Leider ist dies ungültig, da die beiden Ausgabewerte nicht konsistent sind. Sie sollten dies jedoch beheben und ein Byte speichern können, indem Sie testanstelle von verwenden match.
Shaggy
@ Shaggy danke - der Grund, warum ich das nicht gesehen habe, als ich geantwortet habe, weil das gerade bearbeitet wurde
Stephen
Ich weiß, deshalb habe ich darauf hingewiesen;) Vielleicht möchten Sie den Hinweis zu Ihren Rückgabewerten aktualisieren.
Shaggy
2

Cubix , 20 Bytes

Gibt 1 für wahr und nichts für Falsey zurück

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

Kubifiziert

    @ 1
    O u
A B q > ; ; ? w
- ! $ @ ; U _ N
    . .
    . .
  • ABq Schlürfen Sie alle Eingaben ein, kehren Sie sie um und drücken Sie den EOI (-1) auf den Boden des Stapels
  • >;; Treten Sie in die Schleife ein und entfernen Sie Gegenstände vom Stapel
  • ? Test auf EOI (-1).
    • Wenn gefunden 1uO@, 1 auf den Stapel schieben, auf Integer-Ausgabe umkehren und anhalten
    • Ansonsten _reflektiert auf die Rücken Für ?welche Umleitungen auf die wSpur Verschiebung
  • N-!$@;U Schieben Sie den Zeilenvorschub (10) auf den Stapel, subtrahieren Sie das Testergebnis, überspringen Sie den Stopp, falls falsch, entfernen Sie das Ergebnis und drehen Sie es um
  • ;;> Entfernen Sie die Zeilenvorschübe vom Stapel und leiten Sie sie in die Schleife um.

Probieren Sie es online aus!

MickyT
quelle
2

Python, 51

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

Testfallläufer:

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
quelle
2

Haskell, 23 52 32 Bytes

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

Ich habe mich von einigen anderen Lösungen inspirieren lassen "\n".

Programmmann
quelle
Ich habe es behoben, aber RIP meine kurze Lösung.
Programmmann
1

Gelee , 6 Bytes

ỴL€=2Ṃ

Probieren Sie es online aus!

Erläuterung:

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

JavaScript (ES6), 35 24 Byte

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

Versuch es

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

Zottelig
quelle
There's gotta be a shorter way to do this with RegEx! Yup (und meins ist wahrscheinlich nicht optimal)
Stephen
1

J-uby , 19 18 Bytes

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

:=~&erstellt eine anonyme Funktion, die akzeptiert xund zurückgegeben wird, 0wenn sie mit dem regulären Ausdruck übereinstimmt /^(..\n*)..$/moder auf nilandere Weise.

Cyoce
quelle
0

Java (OpenJDK 8) , 25 Bytes

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

Probieren Sie es online aus!

Überprüft, ob die Eingabezeichenfolge eine beliebige Anzahl von Zeilen enthält, gefolgt von einem Zeilenvorschub und einer letzten Zeile ohne eine (stellt mindestens eine Zeile sicher).

PunPun1000
quelle
0

Bash + GNU-Dienstprogramme, 13

grep -qv ^..$

Dies setzt den Shell-Rückgabewert (zugänglich in $?) für false auf 0 und für true auf 1. Dies ist im Gegensatz zur normalen Shell-Konvention der entgegengesetzte Sinn. Um dies richtig zu machen, müssten Sie Folgendes tun:

Bash + GNU-Dienstprogramme, 15

! grep -qv ^..$
Digitales Trauma
quelle
0

Ruby, 22 Bytes

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

Japt , 7 6 Bytes

·eÈʶ2

Probieren Sie es online aus


Erläuterung

     :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
Zottelig
quelle