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!


@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.


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)));


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!


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

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".


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



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>


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


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.





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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.