Validez la syntaxe 2Col!

11

Comme deux personnes l'ont peut-être remarqué récemment, j'ai largement abandonné le développement de Braingolf parce qu'il est ennuyeux et sans inspiration, et je suis passé à 2Col qui est un peu plus intéressant et n'est pas conçu pour être un langage de golf.

La caractéristique déterminante de 2Col est que chaque ligne de code doit comporter exactement 2 caractères, à l'exclusion de la nouvelle ligne. Cela signifie que la longueur d'un programme 2Col peut toujours être calculée comme 3n-1nest le nombre de lignes dans le programme.

Voici donc mon défi: étant donné le code 2Col sous forme de chaîne, affichez true s'il s'agit d'un code 2Col valide (chaque ligne est exactement de 2 caractères et conforme à la 3n-1formule), et falsey sinon.

Contribution

L'entrée doit être considérée comme une chaîne unique ou un tableau de caractères.

Production

Une valeur véridique si la chaîne d'entrée est une mise en page valide, et une valeur falsey dans le cas contraire.

Votre code doit être cohérent dans les valeurs de vérité / falsey qu'il utilise

Cas de 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
======

Notation

C'est le donc le moins d'octets gagne!

Skidsdev
la source
@Shaggy non, sauf si pour une raison ou une autre la langue que vous utilisez considère truefalsey et falsevéridique
Skidsdev
1
@StephenS fera l'affaire
Skidsdev
@Mayube merci, désolé, j'ai oublié d'ajouter "pourriez-vous" devant ce xD
Stephen
Je vous suggère d' ajouter un test: puzzle. Cela rendra invalides les solutions qui font toute la longueur de la chaîne modulo 3, puis annulées (ce qui fonctionne pour tous les cas de test actuels).
Camarade SparklePony
@ComradeSparklePony fera l'affaire
Skidsdev

Réponses:

6

Brachylog (2), 4 octets

ṇl₂ᵐ

Essayez-le en ligne!

Programme complet (car c'est un ; les programmes complets Brachylog sortent en false.cas d'échec d'une assertion, true.sans un).

Explication

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

Les abonnements sur lsont l'une des dernières fonctionnalités de Brachylog (bien que toujours plus ancienne que le défi), et c'est un bon défi pour les utiliser.


la source
Bien ṇlᵛ2et ṇlᵛ²fonctionnerait également.
Unrelated String
3

JavaScript (ES6), 24 28 25 24 octets

Programme fixe et rasé de trois octets grâce à @ PunPun1000

Rasé d'un octet grâce à @Shaggy

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

Renvoie vrai si valide et faux sinon.

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

t=
`22
22
22
22
22`

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

Stephen
la source
En regardant cela, je ne pense pas que cela fonctionne pour deux des cas de test (celui véridique avec seulement 2 caractères et pas de nouvelle ligne, et celui de falsey avec une nouvelle ligne de fin). Cependant, s=>s.match(/^(..\n)*..$/)devrait correspondre correctement à ces deux éléments tout en étant plus court à 25 octets
PunPun1000
@ PunPun1000 merci, vous avez raison.
Stephen
Malheureusement, cela n'est pas valide car les 2 valeurs de sortie ne sont pas cohérentes. Cependant, vous devriez pouvoir résoudre ce problème et enregistrer un octet en utilisant testau lieu de match.
Shaggy
@Shaggy merci - la raison pour laquelle je n'ai pas vu ça quand j'ai répondu parce que ça venait d'être édité
Stephen
Je sais, c'est pourquoi je l'ai souligné;) Vous voudrez peut-être mettre à jour la note sur vos valeurs de retour.
Shaggy
2

Cubix , 20 octets

Renvoie 1 pour véridique et rien pour falsey

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

Cubifié

    @ 1
    O u
A B q > ; ; ? w
- ! $ @ ; U _ N
    . .
    . .
  • ABq slurp dans toutes les entrées, inversez-le et poussez le EOI (-1) au bas de la pile
  • >;; Entrez dans la boucle et retirez les éléments de la pile
  • ? Test pour EOI (-1).
    • Si trouvé, 1uO@poussez 1 vers la pile, tournez sur la sortie entière et arrêtez
    • Sinon, _réfléchissez sur le ?qui redirige vers le wchangement de voie
  • N-!$@;U pousser le saut de ligne (10) sur la pile, soustraire, résultat du test, sauter l'arrêt si faux, retirer le résultat et faire demi-tour
  • ;;> supprimez les sauts de ligne de la pile et redirigez-les dans la boucle.

Essayez-le en ligne!

MickyT
la source
2

Python, 51

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

Coureur de cas de test:

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
la source
2

Haskell, 23 52 32 octets

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

Je me suis inspiré de quelques autres solutions, astuce astucieuse pour l'ajouter "\n".

Programme homme
la source
Je l'ai corrigé, mais RIP ma solution courte.
Programme homme
1

Gelée , 6 octets

ỴL€=2Ṃ

Essayez-le en ligne!

Explication:

ỴL€=2Ṃ
Ỵ       Split at newlines
 L€     Length of each...
   =2   ...equals two.
     Ṃ  Minimum.
Camarade SparklePony
la source
1

JavaScript (ES6), 35 24 octets

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

Essayez-le

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

Hirsute
la source
There's gotta be a shorter way to do this with RegEx! Ouaip (et le mien n'est probablement pas optimal)
Stephen
1

05AB1E , 6 octets

¶¡D2ùQ

Essayez-le en ligne!

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

J-uby , 19 18 octets

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

:=~&crée une fonction anonyme qui prend xet renvoie 0si elle correspond à l'expression régulière /^(..\n*)..$/m, ou nilautrement.

Cyoce
la source
0

Java (OpenJDK 8) , 25 octets

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

Essayez-le en ligne!

Vérifie si la chaîne d'entrée a un nombre quelconque de lignes suivi d'un saut de ligne et d'une ligne finale sans une (garantit au moins une ligne)

PunPun1000
la source
0

Utilitaires Bash + GNU, 13

grep -qv ^..$

Cela définit la valeur de retour du shell (accessible en $?) sur 0 pour false et 1 pour true. C'est en fait le sens opposé par rapport à la convention shell standard , donc pour faire ce que vous devez faire:

Utilitaires Bash + GNU, 15

! grep -qv ^..$
Traumatisme numérique
la source
0

Rubis, 22 octets

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

Japt , 7 6 octets

·eÈʶ2

Essayez-le en ligne


Explication

     :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
Hirsute
la source