Euh, c'est un haïku?


19

Vous voulez donc créer un haïku, mais vous ne savez pas s'il suit les règles de syllabe d'un haïku.

Je ne pouvais pas être dérangé pour écrire un texte de présentation approprié comme je le fais habituellement, vous devrez donc vous en tirer. Restons coincés.

Trouver un haïku dans la nature

Aux fins de ce défi, nous vérifierons si le poème donné répond à ces critères:

  • Il y a trois lignes.
  • La première ligne a 5 syllabes.
  • La deuxième ligne a 7 syllabes.
  • La troisième ligne a 5 syllabes.

Chaque ligne est composée d'un ou plusieurs mots, séparés par des groupes d'espaces. Ces mots ne sont pas nécessairement des mots anglais valides.

Chaque mot est divisé en syllabes, puis ces syllabes sont comptées pour obtenir le nombre total de syllabes de la ligne.

Une syllabe comporte 2 ou 3 parties: le début, la fin et peut-être le milieu. Chaque partie est soit un groupe de consonnes (également connu comme un groupe de consonnes, comme s, skou spl) ou un groupe de voyelles (comme i, eaou oui).

Si le début est un groupe de consonnes, le milieu sera un groupe de voyelles et la fin sera un groupe de consonnes. Si le début est un groupe de voyelles, la fin sera un groupe de consonnes et il n'y aura pas de milieu.

Par exemple, le mot exampleest composé de trois syllabes, ex, amet ple. plen'a pas de fin car il a été écourté à la fin du mot.

Autre exemple, le mot syllablea aussi trois syllabes, syll, ablet equi n'a pas non plus fin.

Pour un dernier exemple, le mot worda une syllabe word, qui se termine par un groupe de consonnes.

Le défi

Étant donné une chaîne, une liste de chaînes, une liste de listes ou tout autre format raisonnable représentant un poème avec au moins une ligne, déterminez s'il répond aux critères d'un haïku décrit ci-dessus et retournez le résultat.

Vous pouvez renvoyer le résultat dans l'un de ces formats:

  • Une valeur vraie si le poème est un haïku et un faux sinon.
  • Une valeur fausse si le poème est un haïku et un vrai sinon.
  • Une valeur d'une plage finie de valeurs spécifiées dans la soumission si le poème est un haïku et une valeur d'une plage finie mutuellement exclusive de valeurs également spécifiée dans la soumission.

Vous pouvez également supposer que le poème ne contient aucun caractère non alphabétique, mais vous ne pouvez pas supposer qu'il est entièrement en majuscules ou en minuscules.

Aux fins de ce défi, Yest une voyelle.

Cas de test

Truthy

This is a haiku
Yes it truly is one
See what I did man

I am so tired
of writing this already
when can I stop this

Writing another
Of these horrific things
Come on please

Consonant only
Counts as one syllable
ghjk tgh knmb wrts vbc

Falsy

oh boy writing non haiku is so much easier

This is
so good
on my
poor dear brain

The syllables do not match
at least I do not think so
I have not checked

It does not really matter
these test cases will help
At least I think they will

I am done here
This is enough
Goodbye

Notation

Puisqu'il s'agit de
La réponse la plus courte gagnera
Bonne chance à tous



Réponses:


4

Gelée ,  25  23 octets

-2 grâce à Erik l'Outgolfer (utilisez une liste de lignes en entrée)

e€Øy0;ŒgP€
ḲLÐfÇ€ḣ8µ€ḣ4

Un lien monadique prenant une liste de listes de caractères (les lignes) et renvoyant une liste de listes de listes de zéros et de uns. Un haïku valide aura une longueur de 3 et une fois que toutes les listes les plus profondes qui sont un seul zéro sont remplacées par une seule, la somme des listes aplaties sera respectivement de 5, 7 et 5. La formation (si les séries de lettres sont des consonnes et ne prend que les 8 premiers mots de chacune des 4 lignes maximum) garantit qu'il n'y a que fini de chacune des plages valides et invalides.

Essayez-le en ligne! ou voir la suite de tests (encore plus déroutante!)


Voici une version  32  30 octets beaucoup plus facile à utiliser , affichant simplement 1 ou 0:

e€Øy0;ŒgP€SȯL$
ḲLÐfÇ€Sµ€⁼5,7,5

Essayez celui-ci ou voyez sa suite de tests .


Je ne pense pas que la "gamme" de possibilités non-haïku soit limitée - vous pouvez avoir un nombre illimité de mots / lignes.
Ørjan Johansen

Oh putain quand le changement a été fait, je pensais que c'était seulement la gamme haiku qui devait être finie. Cela me ramène au 32 octets, je pense.
Jonathan Allan

OK adressé pour quatre octets en limitant les mots par ligne à huit et les lignes à quatre.
Jonathan Allan

Je pense que vous pouvez supprimer Ỵµ, car vous pouvez prendre une liste de lignes.
Erik the Outgolfer

3

JavaScript (ES6), 84 75 octets

Prend la saisie comme une liste de listes de mots. Retourne truepour le haïku ou falsepour les non-haïku.

a=>a.map(s=>(s.map(w=>w.match(/[aeiouy]+/gi))+'').split`,`.length)=='5,7,5'

Cas de test


2

Rétine , 49 octets

i`[aeiouy]+
1
T`lL`2
2*12+
3
[12]+
3
%M`3
^5¶7¶5$

Essayez-le en ligne!

Sorties 1pour haïku, 0pour non-haïku.


@FryAmTheEggman Cela a fonctionné, sauf que j'ai dû ajouter ^et $parce que les xhaïkus d'affilée donneraient xcomme une chaîne.
fireflame241

1
Je pense que cela pourrait fonctionner pour 45 octets.
Neil

2

Python 2 , 126 125 120 121 121 octets

lambda s:[len(split('\s+',sub('[aeiouy][^aeiouy ]+','X ',t,0,I).strip()))for t in s.split('\n')]==[5,7,5]
from re import*

Essayez-le en ligne!


Votre dernière modification a rompu l'exigence selon laquelle les mots à consonne seule comptent pour 1 syllabe.
Ørjan Johansen

@ Ørjan Johansen: corrigé; THX!
Chas Brown


1
Vous pouvez jouer au golf quelques octets faciles en prenant l'entrée comme une liste de lignes et en remplaçant s.split () par justes
Rɪᴋᴇʀ


1

Nettoyer , 162 ... 115 octets

import StdEnv,StdLib
@t=[sum[max(sum(map hd(group[sum[1\\v<-:"AaEeIiOoUuYy"|c==v]\\c<-w])))1\\w<-l]\\l<-t]==[5,7,5]

Définit la fonction @, prendre [[[Char]]](liste de liste de mots) et donner Bool.
Renvoie Truelorsque l'entrée est un haïku, Falsesinon.

Essayez-le en ligne!


Semble échouer sur le cas de coin de mot consonne uniquement.
Ørjan Johansen

@ ØrjanJohansen fixé
Οurous

1

Mathematica 119 octets

Voici une version conforme aux règles données pour les syllabes:

Tr/@Map[Length@StringCases[#,("a"|"e"|"i"|"o"|"u"|"y")..]/. 0->1&,(s=StringSplit)/@s[ToLowerCase@#,"\n"],{2}]=={5,7,5}&

Voici une version de 83 octets qui compte réellement les syllabes:

Tr/@Map[Length@WordData[#,"Hyphenation"]&,(s=StringSplit)/@s[#,"\n"],{2}]=={5,7,5}&

par exemple

%@"This is a haiku
Yes it truly is one
See what I did man"

renvoie Falsepuisque la deuxième ligne a six syllabes au lieu des sept requises.


Cela échoue car le défi définit explicitement son propre nombre de syllabes, qui n'utilise pas les règles anglaises ordinaires.
Ørjan Johansen

Eh bien merci de ne pas avoir baissé les votes. Je vois une tentative de définition d'une syllabe, mais ce n'est pas clair. Je suppose que "un" a deux syllabes selon cette définition. On dirait que les gens ne font que compter les voyelles contiguës.
Kelly Lowder

Presque, mais les mots sans voyelles comptent pour une syllabe. Voir les commentaires sur la question. Je suppose que c'est juste déroutant de savoir quoi faire à propos des groupes de consonnes, mais cela n'affecte pas réellement le décompte final.
Ørjan Johansen

"un" a deux voyelles, et elles ne sont pas contiguës.
Kelly Lowder

À droite, ils comptent donc pour deux syllabes.
Ørjan Johansen
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.