Comme nous le savons tous, les limericks sont de courts poèmes de cinq lignes, parfois obscènes, avec un schéma de rimes AABBA et un mètre anapestic (quel qu'il soit):
Écriture absurde d'un Limerick
Ligne un et ligne cinq rime dans le mot
Et tout comme vous l'avez compté
Ils riment avec le second
La quatrième ligne doit rimer avec le troisième
Vous êtes chargé d'écrire le programme le plus court qui, lorsqu'il est alimenté en texte d'entrée, imprime s'il pense que l'entrée est un limerick valide. L'entrée peut être sur la ligne de commande ou via une entrée standard, à votre choix, et la sortie peut être soit un simple "Y" / "N" ou un score de confiance, encore une fois à votre choix.
Voici un autre exemple de limerick correct:
Il y avait une jeune femme dont les yeux
étaient uniques quant à la couleur et à la taille
Quand elle les ouvrit largement Les
gens se détournèrent tous
Et partirent surpris
Mais le poème ci-dessous n'est clairement pas un limerick, car il ne rime pas:
Il y avait un vieil homme de St. Bees
qui a été piqué au bras par une guêpe.
Lorsqu'on lui a demandé: "Est-ce que ça fait mal?"
Il a répondu: "Non, ce n'est pas le cas,
je suis tellement content que ce ne soit pas un frelon."
Ce n'est pas non plus celui-ci, car le compteur est tout faux:
J'ai entendu d'un homme de Berlin
qui détestait la chambre , il était en
Quand j'ai demandé la raison pour laquelle
il disait avec un soupir:
« Eh bien, voyez - vous, hier soir , il y avait deux truands autour qui célébraient les Bears gagner le reprisés Coupe du monde, et ils étaient vraiment bruyants, donc je n'ai pas pu dormir à cause du vacarme. "
Des indices
Voici quelques indices que vous pourriez utiliser pour décider si votre contribution est un limerick ou non:
- Les limericks ont toujours cinq lignes.
- Les lignes 1, 2 et 5 doivent rimer.
- Les lignes 3 et 4 doivent rimer.
- Les lignes 1, 2 et 5 ont environ 3x3 = 9 syllabes, tandis que les troisième et quatrième ont 2x3 = 6 syllabes
Notez qu'aucun de ceux-ci sauf le premier n'est dur et rapide: un taux d'exactitude de 100% est impossible.
Règles
Votre entrée doit au moins correctement classer les exemples 1 à 3 de manière déterministe.
Vous êtes autorisé à utiliser n'importe quel langage de programmation que vous souhaitez, à l'exception bien sûr des langages de programmation spécialement conçus pour ce concours (voir ici ).
Vous n'êtes pas autorisé à utiliser une bibliothèque à l'exception des offres standard de votre langage de programmation.
Vous êtes autorisé à supposer que ce fichier , le dictionnaire de prononciation CMU Sphinx, se trouve dans un fichier appelé «c» dans le répertoire actuel.
Vous n'êtes pas autorisé à coder en dur pour les entrées de test: votre programme devrait être un catégoriseur général limerick.
Vous êtes autorisé à supposer que l'entrée est ASCII, sans mise en forme spéciale (comme dans les exemples), mais votre programme ne doit pas être confondu par interpunction.
Bonus
Les bonus suivants sont disponibles:
- Votre programme sort son résultat sous forme de limerick? Soustrayez un bonus de 150 caractères !
- Votre programme identifie également correctement les sonnets? Soustrayez 150 caractères de bonus de longueur supplémentaire!
- Votre programme génère son résultat sous forme de sonnet lorsqu'il est utilisé sur un sonnet? Soustrayez 100 caractères de bonus supplémentaire de longueur supplémentaire!
Finalement...
N'oubliez pas de mentionner les bonus que vous pensez mériter, le cas échéant, et soustrayez le bonus de votre nombre de personnages pour arriver à votre score. Il s'agit d'un concours de golf à code : l'entrée la plus courte (c'est-à-dire l'entrée avec le score le plus bas) gagne.
Si vous avez besoin de plus de données de test (positives), consultez l' OEDILF ou le Book of Nonsense . Les données de test négatives devraient être faciles à construire.
Bonne chance!
la source
code-challenge
dû aux bonus. Veuillez lire les descriptions des balisesRéponses:
Python: 400-150-150 = 100
Le script le plus court que j'ai pu trouver est celui-là ...
... mais ne l'essayez même pas. Il analyse le dictionnaire fourni pour chaque mot qu'il rencontre, ce qui est donc très lent. En outre, une erreur est générée chaque fois qu'un mot n'est pas dans le dictionnaire.
Le code répond néanmoins aux exigences: reconnaître si le texte passé via stdin est un limerick, un sonnet ou aucun de ceux-ci.
Avec seulement 20 caractères supplémentaires, voici la version optimisée:
traits
Usage
3 sorties différentes sont possibles:
Code développé avec explications
la source
sys.stdin.read()
ou unopen(sys.argv[1]).read()
quelque part) et recompter.ECMAScript 6 (138 points; essayez dans Firefox):
288
-150
bonus de points pour inclure limerick (extrait de @MathieuRodic).Remarques:
Attend la variable
c
contienne le contenu du fichier de dictionnaire, car vous ne pouvez pas lire les fichiers en ECMAScript simple.ECMAScript n'a pas d'entrée standard, mais
prompt
est généralement considéré comme "entrée standard"; cependant, commeprompt
convertit les sauts de ligne en espaces dans la plupart des navigateurs (sinon tous), j'accepte les entrées de la variablei
.Code non golfé:
la source