Un haïku est un poème à trois lignes, comptant respectivement 5/7/5 syllabes .
Un haïku-w est un poème de trois lignes, avec un nombre de mots de 5/7/5 respectivement.
Défi
Ecrivez un programme qui retournera true si l'entrée est un haiku-w, et false sinon.
Une entrée valide de haiku-w doit comporter 3 lignes, séparées par une nouvelle ligne.
- La ligne 1 doit comprendre 5 mots, chaque mot étant séparé par un espace.
- La ligne 2 doit être composée de 7 mots, chaque mot étant séparé par un espace.
- La ligne 3 doit comprendre 5 mots, chaque mot étant séparé par un espace.
Exemples
The man in the suit
is the same man from the store.
He is a cool guy.
Résultat: vrai
Whitecaps on the bay:
A broken signboard banging
In the April wind.
Résultat: faux
Règles
- C'est du code-golf , donc la réponse la plus courte en octets est gagnante.
- Les échappatoires standard de code-golf s'appliquent. La triche est interdite.
- Les autres valeurs de retour booléennes, telles que
1
et0
, sont acceptables. - Une liste de chaînes de longueur 3 en entrée est également acceptable.
- Les entrées de haiku-w valides ne doivent pas avoir d'espaces de début ou de fin, ni d'espaces multiples séparant des mots.
code-golf
decision-problem
DomTheDeveloper
la source
la source
Réponses:
JavaScript (ES6),
73726463544239 octetsMerci à Neil d'avoir économisé 13 octets
Explication
C'est une fonction de grosse flèche qui prend un tableau de chaînes en argument. Il remplace chaque ligne par son nombre de mots. Si c'est un haiku-w,
a
contient maintenant un tableau de cinq, sept et cinq encore. Puisque JavaScript ne nous permet pas de comparer 2 tableaux en même temps, le tableau est d'abord converti en chaîne, puis comparé. Cela se traduit par un booléen qui est renvoyé.la source
%
et*
ont le même précédent, de sorte que vous n'avez pas besoin de()
s, même si je pense que cela(d*2|5)
pourrait également fonctionner. En outre, vous pouvez vous en sortir avec un seul&
, bien que je pense que vous pouvez améliorer même cela en utilisant(b...).length==3>b.some(...length-...)
.a=>a.map(c=>c.split
.length)=='5,7,5'
.+''
-==
stringifie si l'autre argument est une chaîne.AWK (GNU Awk),
24,30,28, 20 octetsGolfé
Produira "517253" pour True et une chaîne vide pour False .
Le Guide de l'utilisateur GNU Awk
Comment ça marche
Chaque instruction awk (règle) consiste en un motif (ou une expression) avec une action associée:
Awk lit l'entrée par ligne (enregistrement par enregistrement) et évalue l'expression du modèle pour voir si une action correspondante doit être appelée.
Le code ci-dessus est une expression Awk autonome (modèle) sans le bloc d'action, ce qui est implicite
{print $0}
dans ce cas.Il devrait être lu de droite à gauche:
q=q NF NR
Ajout d' un N mbre de F OMAINES (mots) et N mbre de R ecords ( à savoir le numéro de la ligne en cours), à la variable q .
De cette façon, lors du traitement d’un Haiku-w approprié, q sera réglé sur:
$0=q
Attribuez la valeur nouvellement calculée de q à 0 $ (qui contient la totalité de la ligne / de l'enregistrement en cours par défaut).
517253==$0
Comparez-le avec une "signature" pour un Haiku-w (517253) correct. S'il existe une correspondance, l'expression entière devient "true" et une action correspondante (implicite
print $0
) est exécutée, en envoyant "517253" à la sortie standard (True). , sinon la sortie sera vide (False).Notez que ceci reconnaîtra correctement un Haiku-w, même s'il est suivi d'un nombre arbitraire de lignes de mémoire, mais je crois que c'est correct, comme suit:
(c’est-à-dire que nous pouvons supposer que l’entrée a une longueur de 3 lignes)
Tester
Essayez-le en ligne!
la source
Python , 42 octets
Essayez-le en ligne!
Prend les entrées sous forme de liste de lignes, les mots étant séparés par des espaces simples.
Comme nous sommes assurés qu'il n'y aura pas d'espaces de début ou de fin, et que seuls des espaces séparent chaque mot, nous pouvons vérifier un w-haiku en comptant simplement les espaces de chaque ligne.
Nous faisons cela dans une compréhension de liste, pour créer une liste des comptes d'espace. Si c'est un haïku correct, ça devrait ressembler
[4, 6, 4]
, alors on le compare avec ceci et on retourne le résultat.la source
map(str.count,l,' ')
.Gelée ,
10 à9 octetsEssayez-le en ligne!
Explication
la source
ċ€⁶⁼4,6,4
etċ€⁶⁼464D¤
… je ne trouve rien de plus court, cependant. (Oh, vous pouvez le retourner aussi:464D⁼ċ€⁶$
)ċ€⁶Ḍ=464
fonctionne très bien pour 8.Lot, 102 octets
Quitte avec un niveau d'erreur non nul dès qu'il lit une ligne contenant un nombre incorrect de mots.
la source
Mathematica, 21 octets
Fonction sans nom prenant une liste de listes de caractères en entrée et retour
True
ouFalse
. Compte simplement le nombre d'espaces dans chaque liste de caractères, ce qui, selon les règles du défi, correspond parfaitement au nombre de mots de chaque ligne.Soumission précédente:
Mathematica, 31 octets
Fonction sans nom prenant une liste de chaînes en entrée et renvoyant
True
ouFalse
.la source
Haskell,
3433 octetsEssayez-le en ligne! .
Edit: merci à @xnor pour un octet!
la source
f l=[sum[1|' '<-c]|c<-l]==[4,6,4]
.Rétine , 12 octets
(il y a un espace de fin après la première ligne)
Essayez-le en ligne!
M%`
- Comptez le nombre d'espaces dans chaque ligne.M
- Mode de correspondance - affiche le nombre de correspondances.%
- pour chaque ligne`
- configuration séparée et motif regex^4¶6¶4$
- Il devrait y avoir 4, 6 et 4 espaces et exactement trois lignes.¶
correspond aux nouvelles lignes. Le reste est une simple expression régulière.Imprime
1
pour une entrée valide,0
pour invalide.la source
Python,
5844 octets-14 par tbodt
la source
split("\n")
.lambda h:[len(l.split())for l in h]==[5,7,5]
Perl , 26 octets
24 octets de code + 2 octets pour les
-ap
drapeaux.Essayez-le en ligne!
la source
Pyth, 9 octets
Un programme qui prend la saisie d'une liste de
"quoted strings"
et imprimeTrue
ouFalse
selon le cas.Suite de tests
Comment ça marche
la source
Japt , 11 octets
Économisez beaucoup d'octets grâce à @ETHproductions
Cela prend un tableau de trois chaînes en entrée.
Courez en ligne!
la source
PowerShell , 43 octets
Essayez-le en ligne!
Explication
Prend l'entrée en tant que chaîne séparée par une nouvelle ligne.
Supprime tous les espaces non blancs, puis vérifie qu'il correspond "4 espaces, nouvelle ligne, 6 espaces, nouvelle ligne, 4 espaces nouvelle ligne" à l'aide d'une expression régulière.
Le groupe de capture correspond à 4 espaces, le backreference s'y
\1
réfère. Les nouvelles lignes sont incorporées dans la chaîne. Notez que la deuxième ligne de l'expression rationnelle contient deux espaces après la référence arrière.la source
Pyke,
11 à9 octetsEssayez-le ici!
Après l'
u
octet, il y a les octets suivants:0x03 0x04 0x06 0x04
la source
J, 12 octets
L'entrée est une liste encadrée de chaînes.
Explication
Ceci est une fourche avec une dent gauche constante. Ceci vérifie le résultat de la tâche droite
#@;:@>
, pour l’égalité avec4 6 4
. Le bon moment décompresse chaque (>
), then (@
) convertit chaque chaîne en mots (;:
), then (@
) prend la longueur de each (#
).la source
R, 48 octets
Lit un vecteur de caractères de 3 longueurs à partir de stdin et fonctionne en comptant le nombre d'espaces. Pour compter le nombre d'espaces, nous utilisons le
str_count
dustringr
package qui peut compter les occurrences basé sur un modèle de regex.Une approche alternative sans utiliser de paquet pourrait être:
la source
el
, merci pour ça.C 142 octets
Version non-golfée:
Retourne 1 pour la séquence 5/7/5 sinon 0.
Un test positif:
la source
C ++, 357 octets
Une sorte de nouveau code au golf, mais c'est le mieux que je puisse faire rapidement
la source
Ruby 1.9.3
Pas de golf, mais est lui-même un haïku-w
ou...
Malheureusement, ne fonctionne pas avec les espaces blancs de début sur les lignes, mais résiste au trailing.
la source
Python 2 ,
5764 octetsÉditer Corrigé avec l'ajout de 7 octets après les commentaires de @Dada. Merci!
Essayez-le en ligne!
Ce n’est pas la réponse Python la plus courte de loin mais je voulais simplement utiliser le nouveau truc que j’ai appris récemment à utiliser
input()
pour afficher la sortie et enregistrer uneprint
déclaration. Prend une liste de lignes en entrée. Requiert Ctrl C (ou toute autre pression sur une touche) pour terminer le programme (avec une exception) dans un terminal mais fonctionne correctement sans TIO.la source
MATL, 16 octets
L'entrée est un tableau de cellules de chaînes et retourne un tableau de vérité ou de falsey .
Essayez-le en ligne
Explication
la source
MATLAB / Octave, 38 octets
Cette solution accepte un tableau de cellules de chaînes en entrée, compte le nombre d'espaces dans chaque ligne, puis compare le résultat au tableau.
[4 6 4]
et génère un tableau de vérité (toutes les valeurs sont 1) ou de falsey (toute valeur est égale à zéro).Démo en ligne
la source
Perl 6 , 25 octets
la source
Clojure, 44 octets
L'entrée est une liste de chaînes. Fonction ne trouve que des espaces et les compte. Cette explication est un haïku. :)
la source
Java 7, 154 octets
L'exigence du programme et le potentiel d'avoir moins ou plus de trois lignes, sans parler du langage de Java lui-même, font que ce code "joué au golf" est plutôt volumineux.
Ungolfed:
Essayez ici.
la source
SimpleTemplate, 77 octets
Malheureusement, l'expression habituelle est la plus courte.
Requiert que le texte soit donné comme premier argument, avec des nouvelles lignes de style * NIX. Cela ne fonctionnera pas avec les nouvelles lignes de style Windows.
Ungolfed:
Non basé sur regex, 114 byes
Cela nécessite que chaque ligne soit donnée comme argument de la fonction.
Ungolfed:
la source
Empilés, 22 octets
Prend les entrées du haut de la pile sous forme de liste de chaînes de caractères, en tant que telles:
Explication
la source
Java (OpenJDK) , 82 octets
-2 octets grâce à @ corvus_192!
Essayez-le en ligne!
Il a l'air tellement golfable mais sans une fonction de carte intégrée, je ne peux pas trouver un bon moyen. La itération dans la matrice prend quelques octets de plus, tout comme l'écriture d'une fonction de carte à l'aide de flux.
L'expression Lambda prend un tableau de chaînes et renvoie un booléen.
la source
Arrays.stream
, mais c'est assez long pour que cela ne vaille pas la peine d'être utilisé (surtout si vous devez importerArrays
)&
au lieu de&&
pour sauvegarder deux octetsSmileBASIC,
9694 octetsla source
R, 100 octets
Prend comme argument une liste de chaînes de longueur 3. Ne jouerez probablement plus au golf, car cela le transforme en la réponse de @ Billywob.
la source