introduction
Un acronyme récursif est un acronyme qui contient ou se réfère à lui-même, par exemple:
Fish
pourrait être un acronyme récursif pour Fish is shiny hero
, notez comment il contient également l'acronyme lui-même. Un autre exemple est Hi
-> Hi igloo
. Ou même ppcg paints
->ppcg paints cool galaxies pouring acid into night time stars
Donc, fondamentalement, une phrase est un acronyme récursif si les premières lettres de chacun des mots épelent le ou les premiers mots.
Défi
Créez un programme qui prend une chaîne de 1 ou plusieurs mots séparés par un caractère espace et génère un acronyme récursif ou une chaîne vide si cela est impossible. Il est impossible de faire un acronyme récursif pour une chaîne comme, par exemple, ppcg elephant
parce que vous commenceriez par prendre le p
from ppcg
puis en ajoutant cela à l'acronyme, puis en prenant le e
from elephant
. Mais maintenant nous avons une contradiction, puisque l'acronyme définit actuellement "pe ..", ce qui est en conflit avec "pp ..". C'est également le cas, par exemple hi
,. Vous prendriez le h
de hi
, mais la phrase est maintenant terminée et il n'y a plus de lettres à épeler hi
et il ne nous reste plus que h
ce qui ne correspond pashi
. (La chaîne a besoin d'un nombre de mots supérieur ou égal au nombre de lettres de l'acronyme)
L'entrée et la sortie ne sont pas sensibles à la casse
Restrictions
- Tout ce qui est entré dans votre programme sera un mot anglais valide. Mais vous devez également vous assurer de générer des mots anglais valides (vous pouvez utiliser une base de données ou simplement stocker un mot pour chacune des 26 lettres)
- Les failles standard et les règles d'E / S par défaut s'appliquent
Cas de test
hi igloo -> hi
ppcg paints -> (impossible)
ppcg paints cool giraffes -> ppcg
ppcg paints cool galaxies pouring acid into night time stars -> ppcgpaints
ppcg paints cool galaxies pouring acid into night time -> ppcg
ppcg questions professional pool challengers greatly -> (impossible)
I -> I
Notation
C'est le code-golf , donc le plus petit code source en octets gagne
ppcg paints cool galaxies pouring acid into night time
serait "ppcgpaint" lorsqu'il est transformé en acronyme, mais la sortie devrait êtreppcg
même si ce n'est qu'une correspondance partielle?Réponses:
Japt , 13 octets
Essayez-le en ligne!
la source
ppcg paints cool galaxies pouring acid into night time stars
cas de test05AB1E , 16 octets
Essayez-le en ligne!
la source
ð¡
lieu de#
lors de votre dernière modification? Certains cas de test spéciaux que je ne prends pas en compte?#
que l'échec de l'entrée d'un seul mot produirait l'entrée au lieu d'une chaîne vide.#
devrait agir de la même manière queð¡
. enveloppé dans une liste)? D'autres personnes lisant ceci; FYI: L'utilisation de#
(split on space) sur une chaîne sans espaces entraîne la chaîne telle quelle (c."test" -> "test"
-à-d.). L'utilisation deð¡
(fractionner sur l'espace) sur une chaîne sans espaces entraîne la chaîne encapsulée dans une liste (c'est-à-dire"test" -> ["test"]
).#
également utilisé commequit if true
(ce qui est sa fonction principale). Si#
renvoyé faux, vous ne voudriez probablement pas que la valeur vérifiée soit encapsulée dans une liste, laissée sur la pile.Haskell,
5148 octetsEdit: -3 octets grâce à @xnor.
Trouve l'acronyme.
Essayez-le en ligne!
la source
x
, la composition(\w-> ...).words
serait plus courte.Perl 6 ,
50 42 5849 octets-9 octets grâce à nwellnhof
Essayez-le en ligne!
Première option.
J'exploite le fait que leOu l'expression rationnelle de la réponse de Moonheart est plus courteord
seul retourne la valeur ordinale de la première lettre d'une chaîne, alors qu'ilchrs
prend une liste d'ordres et renvoie une chaîne.:(
. Pour référence, la réponse précédente était.words>>.ord.chrs
au lieu de[~] m:g/<<./
Explication:
la source
Retina 0.8.2 , 60 octets
Essayez-le en ligne! Recherche l'acronyme récursif, le cas échéant. Explication:
Dupliquez l'entrée.
Réduisez les mots de la première ligne à leurs lettres initiales.
Insérez des espaces pour faire correspondre les mots d'origine, si possible.
Sortez la première ligne si c'est un préfixe de la deuxième ligne.
la source
pp
ellePerl 6 , 56 octets
Essayez-le en ligne!
Auparavant, les regex étaient déroutantes et inutilisables pour moi. Du coup je les comprends parfaitement. Ce qui m'est arrivé: P
Répond au choix 1.
la source
ppcgpaints
test, sinon j'aurais suggéré quelque chose comme$!∈.words
pour la condition ifK (ngn / k) , 40 octets
Première option:
Essayez-le en ligne!
la source
Rust, 155 ans, essayez-le en ligne!
Sélectionné: Problème 1: Recherche d'un acronyme
Ungolfed, juste un peu:
Ou si nous pouvons supposer que l'entrée est entièrement en minuscules, seulement 130:
la source
Gelée , 9 octets
Un programme complet imprimant l'abréviation récursive si cela est possible.
Essayez-le en ligne!
Comment?
la source
JavaScript [ES6], 74 octets
Crée une expression régulière pour correspondre. Voir des exemples dans le code.
Tous les cas de test:
la source
increase i
Python 2 , 106 octets
Première option - trouver un acronyme récursif.
Renvoie le résultat dans la liste.
Essayez-le en ligne!
Python 2 , 120 octets
Première option - trouver un acronyme récursif.
Essayez-le en ligne!
la source
Javascript, 71 octets
Approche 1
Non golfé:
la source
Rubis
-apl
, 57 octetsEssayez-le en ligne!
la source
Python 2 , 109 octets
Essayez-le en ligne!
la source
Scala, 76 octets
Solution pour cas simple (acronymes sans espaces blancs)
Scala,
144 octets100 octets (voir la solution en ASCII uniquement dans les commentaires)Test en REPL
la source
:::
être remplacé par++
? Aussi,List[String]
->Seq[Any]
?