Ce défi est un hommage au gagnant du meilleur film aux Oscars 2017, La La Land Moonlight !
Ecrivez une fonction / programme qui prend une chaîne contenant uniquement des lettres [A-Za-z]
, les quatre symboles qui sont communs dans les phrases .,'?
et les espaces quotidiens , et génère la chaîne dans le style de La La Land.
Pour être plus précis, prenez les lettres jusqu'au premier groupe de voyelles, y compris, et imprimez / exportez-le deux fois en ajoutant un espace à chaque fois, puis imprimez / sortez la chaîne entière. y est une voyelle dans ce défi. La ponctuation et la capitalisation doivent être conservées.
Vous pouvez supposer que toutes les chaînes contiennent au moins une voyelle et que toutes les chaînes commencent par une lettre.
Cas de test:
Land
La La Land
Moonlight
Moo Moo Moonlight
quEueIng
quEueI quEueI quEueIng
This isn't a single word.
Thi Thi This isn't a single word.
It's fun to play golf
I I It's fun to play golf
Ooo
Ooo Ooo Ooo
I'm okay
I I I'm okay
Hmm, no. There will be at least one vowel, but it can be anywhere.
Hmm, no Hmm, no Hmm, no. There will be at least one vowel, but it can be anywhere.
Why is y a vowel?
Why Why Why is y a vowel?
C'est du code-golf donc le code le plus court dans chaque langue gagne. Les explications sont encouragées , même dans les langues courantes.
MOONLIGHT
. Et juste pour le plaisir:Why did the chicken cross the road?
Réponses:
Sed 30 octets
la source
*
au lieu de\+
?05AB1E ,
231918 octetsSauvé 1 octet grâce à Okx .
Essayez-le en ligne! ou en tant que suite de tests
Explication
la source
Jelly ,
24 22 20 1914 octets-5 octets en utilisant une astuce de la réponse géniale d'Emigna (recherchez 10 dans la liste isVowel)
Essayez-le en ligne! (pas tout à fait sûr de savoir comment faire une suite de tests pour ce programme complet)
Alternative de 15 octets:
Voici la suite de tests complète.
Comment?
la source
Python, 61 octets
Voici le premier langage non basé sur regex (utilisant regex).
Sauvé 1 octet grâce à Neil .
la source
JavaScript (ES6), 40
46Éditez 5 + 1 octets enregistrés thx @Arnauld
Trop long comparé aux autres en utilisant le même truc (comme d'habitude)
la source
'$& $& $&'
- j'oublie toujours les caractères spéciaux en dollars. Je vous remercie. Malheureusement maintenant, c'est vraiment un port de réponse de la rétine de Martin.^
est nécessaire dans Retina qui, je pense, recherche tous les matchs par défaut. Mais en avons-nous vraiment besoin ici?x=>(y=/.*?[aeiouy]+/i.exec(x)+' ')+y+x
Retina , 24 octets
Essayez-le en ligne!
la source
Lot, 180 octets
Implémente une machine à états.
g
garde la trace de savoir si nous avons déjà vu une voyelle, donc si la lettre actuelle n'est pas une voyelle, nous savons s'il faut sortir ou continuer avec la lettre suivante.la source
PowerShell ,
4647413938 octetsEssayez-le en ligne!
Merci à Maarten Bamelis pour le correctif
Sauvegardé 6 octets grâce à Rynant
22 octets sauvés grâce à Joeyla source
Rubis,
313230 octetsDeux octets enregistrés grâce à GB et Cyoce.
la source
PHP,
5554 octetsRemarque: la version codée utilise le codage IBM-850.
Courez comme ça:
Explication
Il suffit de remplacer une regex par une correspondance non-désirée n’importe quel caractère au début de la chaîne, suivie de n’importe quelle quantité de voyelles (
i
option d’ utilisation pour l’insensibilité à la casse). Ce groupe de capture est ensuite imprimé deux fois, suivi de la chaîne entière.Tweaks
-R
pour rendre$argn
disponible (Thx Titus)la source
Javascript (ES6), 38 octets
la source
Perl, 25 + 1 (
-p
drapeau)la source
Perl 6 , 30 octets
Essayez-le en ligne!
la source
{S:i/.*?<[aeiouy]>+/$/ $/ $//}
C,
202196195193190180i,j,k,m,n;f(char*a){if((a[i/12]-"AEIOUY"[i++%6])%32==0)k=n=24-(i%12);else if(k&&!n--){m=j=(i-13)/12;for(i=0;i<j*2;)printf("%c%c",a[i%j],(i==j-1)*32),i++;printf(" %s", a);}m?:f(a);}
Essayez-le en ligne!
Ce qu'il reste au golf:
• Réduisez deux printf en un seul.
• L'impression de mon caractère d'espace peut être changée en
%*c
logique, j'en suis sûr.• J'utilise des conditionnels qui peuvent être supprimés en quelque sorte
•
j=(i-13)/12
peut probablement être raccourci.• [AY] vérifie si
==0
ce qui est généralement inutile, bien que je sois actuellement bloqué sur celui-ci (j'essaie de changer si, sinon,==0
mais cela nécessite d'ajouter plus de {parenthèses} et d'augmenter la taille en octets)Trucs que j'ai l'habitude de jouer au golf:
• Combiné une double recherche de chaîne de boucle en utilisant modulo pour l'axe des x et une division entière pour l'axe des y (chaîne d'entrée vs chaîne de voyelles). (L'axe des X est bouclé deux fois avant d'être itéré une fois sur l'axe des y; la première fois avec [AZ] et la deuxième fois avec [az] avec une valeur de caractère 32 différentielle.
• Contourné devant utiliser "[AY] et [ay]" en prenant simplement la distance entre les jeux de caractères et le modulo 32. De cette façon, si la distance est 0 (AA) ou si la distance est 32 (aA)
• Réutiliser des variables entières qui ne sont plus utilisées comme variables booléennes.
• Appel récursif d'une fonction avec la même chaîne pour le traiter et éviter une seconde boucle for.
• Définissez les valeurs BOOL sur la logique de définition d'une autre variable. (par exemple bool = i = 5;) pour assommer les deux avec une pierre.
• Abus d'exploitation ternaire vide-vrai. (GCC)
Format lisible:
Bloqué 10 octets grâce à Keyu Gan (dans les commentaires)
la source
j=(i-13)/12
peut être raccourci.i=j=k=m=n=0;
?i,j,k,m,n;
pour l'initialisation.MATL, 33 octets
Essayez-le sur MATL Online
Explication
la source
'(^.*?[yY%s]+)'13Y2YD'$1 '8:)YX
sauve 2 octets'(^.*?[%s]+)'19Y2YD'$1 '8:)YX
sauve encore 219Y2
n'existait pas quand cette réponse a malheureusement été soumiseV ,
21, 20 octetsEssayez-le en ligne!
Explication:
Hexdump:
Version alternative (21 octets):
Essayez-le en ligne!
Cela utilise une compression regex ridicule, et il parvient toujours à se faire foutre par les autres langues du golf. Pour référence, cela représente environ les deux tiers de la longueur de la version normale "non compressée", à savoir:
Explication:
Voici un hexdump:
la source
Python 3 ,
7568 octetsEssayez-le en ligne!
Explication:
Fonctionne en générant une valeur booléenne pour chaque caractère de la chaîne d'entrée en fonction du statut de voyelle et en recherchant l'index le plus bas de
0
la première non-voyelle (à l'exclusion du premier caractère). Il renvoie la sous-chaîne à cet index deux fois, séparés par des espaces et la chaîne d'origine.la source
Clojure,
192188181 octets-4 octets en ligne
first-sp-pred
(whoops).-7 octets en supprimant certains espaces manquants
C'était beaucoup plus difficile que je ne le pensais! Je suis manuellement analyser la chaîne ... depuis que je n'ai pas encore appris à regex: /
Voir le code pré-golfé pour la ventilation:
la source
Python 3 ,
101 à96 octetsEssayez-le en ligne!
une solution non regex
Commenté:
la source
w=c in a
parw=c in'aAeEiIoOuUyY'
Ohm , 19 octets (CP437), non en compétition
Nouveau langage, et en tant que tel, j'ai dû ajouter de nouvelles fonctionnalités pour rendre ce travail efficace, ce qui le rend malheureusement non compétitif (car des échappatoires).
Explication:
la source
Q
), recherche de sousu
-tableau ( ), chaîne / tableau slicing (├
) et constantes de voyelles (αv
etαy
).PHP,
69 6553 octetsnécessite PHP 5.3 ou une version ultérieure. Exécuter en pipe
-F
ou essayer quelques versions en ligne .Enregistré 4 octets (et fixe le code) avec regex volé de @aross;
10 de plus avec
preg_filter
au lieu depreg_match
et-F
et deux autres avec une regex améliorée.
7581 octets pour une version non regex:nécessite PHP 5 ou une version ultérieure; remplacez
?:
par?1:
pour les anciens PHP. Courir avec-nR
Panne
la source
This isn't a single word
:T T This isn't a single word.
i
modificateur qui rend la regex insensible à la casse. L'autre version ne vérifiait que les minuscules. Fixé.R, 49bytes
sub("(.*?[aeiouy]+)","\\1 \\1 \\1",scan(,""),T,T)
Regex basé remplacer, correspondre à tout jusqu'à pas une voyelle, capturer et le remplacer par lui-même 3 fois.
scan
attendez unedouble
entrée de type, pour lui dire d'utilisercharacter
type, nous devons lui donner deux arguments, la première est la chaîne par défaut, empty pour stdin, et pour la seconde l'évaluation R permet d'utiliser uniquementc
car elle n'est pas ambiguëcharacter
dans ce contexte.T
représenteTRUE
et sauvegarde un caractère en tant que 4ème et 5ème paramètre à indiquer à Sub de lui dire d'ignorer la casse et d'utiliser PCRE (greedyness n'est pas la même chose que la syntaxe regex R)4 octets enregistrés grâce à Sumner18 avec le lien Tio vers le code en cours d'exécution
la source
Java 8,
147140 octetsGolfé:
Ungolfed:
Remarque: le littéral
2
dans le code est la valeur dejava.util.regex.Pattern.CASE_INSENSITIVE
.la source
import java.util.regex.*;
pour sauvegarder des octets.C, 123 octets
Appeler comme:
la source
Pyke , 22 octets
Essayez-le en ligne!
C'est 4 octets de plus que ce qui devrait être réellement si j'avais implémenté un moyen plus rapide d'obtenir des voyelles, y compris
y
.la source
Retina, 24 octets
Essayez-le en ligne
la source
Python 3 ,
130102 octetsEssayez-le en ligne!
N'utilise aucune fonction d'aucune sorte et aucune bibliothèque externe! (À moins que l’impression et la saisie ne comptent comme des fonctions, ce qu’ils font).
Cela fonctionne en vérifiant s’il sort des consonnes du début du titre dans la "zone des voyelles". S'il se trouve dans la "zone des voyelles" et détecte une consonne, le titre est imprimé.
28 octets sauvegardés grâce à @LliwTelracs
la source
MATLAB / Octave,
5851 octets7 octets sauvés grâce à @HughNolan
Crée une fonction anonyme nommée
ans
qui peut être appelée en lui passant une chaîne:ans('Land')
Démo en ligne
Pour la compatibilité MATLAB,
$0
doit être utilisé à la place de$1
la fonction ci-dessus.la source
@(x)regexprep(x,'^.*?[aeiouyAEIOUY]+','$0 $0 $0 ');
- Matlab semble également utiliser 0 $ plutôt que 1 $ étrangementC (gcc) ,
111110 octetsEssayez-le en ligne!
Il utilise simplement des fonctions de bibliothèque
strspn()
etstrcspn()
et exploite l'ordre dans lequel gcc évalue les paramètres de fonction. Un peu moins golféMerci à @gastropner pour -1.
la source
Pyth - 24 octets
Suite de test .
la source
y
?