En anglais, il y a la différence amusante et simple entre an
et a
: vous utilisez an
lorsque vous faites précéder un mot commençant par un son de voyelle, et a
lorsque le mot commence par un son de consonne.
Par souci de simplicité dans ce défi, an
précède un mot qui commence par une voyelle ( aeiou
), et a
précède un mot qui commence par une consonne.
Contribution
Chaîne comprenant uniquement des caractères ASCII imprimables, [?]
apparaissant aux endroits où vous devez choisir d'insérer an
ou a
. [?]
apparaîtra toujours avant un mot. Vous pouvez supposer que la phrase sera grammaticalement correcte et formatée comme d'habitude.
Production
La chaîne d'entrée est [?]
remplacée par le mot approprié ( an
ou a
). Vous devez vous soucier de la capitalisation!
Quand capitaliser
Mettez un mot en majuscule s'il n'est précédé d'aucun caractère (est le premier dans l'entrée) ou s'il est précédé d'un ou .?!
suivi d'un espace.
Exemples
Input: Hello, this is [?] world!
Output: Hello, this is a world!
Input: How about we build [?] big building. It will have [?] orange banana hanging out of [?] window.
Output: How about we build a big building. It will have an orange banana hanging out of a window.
Input: [?] giant en le sky.
Output: A giant en le sky.
Input: [?] yarn ball? [?] big one!
Output: A yarn ball? A big one!
Input: [?] hour ago I met [?] European.
Output: A hour ago I met an European.
Input: Hey sir [Richard], how 'bout [?] cat?
Output: Hey sir [Richard], how 'bout a cat?
C'est le code-golf , donc le code le plus court en octets gagne!
la source
[?]
et le mot?[?] hour ago I met [?] European.
juste pour faire grincer des dents tout le monde.[?] hour ago I met [?] horse.
Réponses:
V , 41 octets
Essayez-le en ligne! , qui peut également être utilisé pour vérifier tous les cas de test sans nombre d'octets supplémentaire.
Cela profite de la «compression regex» de V. Il utilise beaucoup de caractères non imprimables, voici donc un hexdump:
la source
Perl, 48 octets
1 octet enregistré en raison de Ton Hospel .
En comptant le shebang comme un, l'entrée provient de stdin.
Explication
Exemple d'utilisation
la source
/[.?!]/
suivi de l'espace manque\G
pour faire du backwarsds. PPS, un peu plus court:s;\[\?];A.n x$'=~/^ [aeiou]/^$"x/[^.?!] \G/;eg
Rubis,
7872 octetsNon golfé
la source
"anAn"[...]
est vraiment intelligent. 👍🏻 Vous pouvez économiser quelques octets en sautant l'intérieursub
:s.gsub(/(^|\. )?\K\[\?\] ([aeiou])?/i){"anAn"[$1?2:0,$2?2:1]+" #$2"}
PHP, 207 octets
J'aime de temps en temps des solutions plus complètes ...
mais je dois admettre que c'est un peu exagéré, même si ce n'est pas du tout fini.
Enregistrer dans un fichier, exécuter
php <filename>
avec l'entrée de STDIN.cas de test
panne
la source
[?][?][?]s [?]lert!
Minkolang 0,15 , 75 octets
Essayez-le ici!
Explication
Notez que parce que Minkolang est toroïdal, lorsque le compteur de programmes se déplace hors du bord droit, il réapparaît sur la gauche. Certes golfable, mais parce que j'ai dû ajouter 21 octets à cause de la spécification, je ne peux pas essayer.
la source
JavaScript (ES6), 90
86 87 85Modifiez une fois de plus car la spécification pour la capitalisation a changé (plus sensible maintenant)
Modifier à nouveau 1 octet enregistrer thx @Huntro
Modifiez 2 octets supplémentaires pour gérer les citations et autres, comme l'a souligné IsmaelMiguel (même si je ne sais pas si c'est demandé par op). Notez qu'auparavant j'avais compté 86 octets mais ils étaient 85
Essayer de suivre la règle de capitalisation énoncée dans l'événement de commentaires si elle est incomplète (au moins)Tester
la source
[?][?]
donnerAna
? Et ne devrait pas[?][?] a.
produireAna a.
?[?] will always appear before a word. You can assume that the sentence will be grammatically correct and formatted like normal.
[?] "[?]".
(An "A"
, les guillemets ne sont pas pertinents) et pour[?] "A".
(cela fonctionne très bien pour[?] A.
).[?] "[?]"
n'est pas une entrée valide.[?] will always appear before a word
et "[?]" n'est pas un mot.]
n'est pas nécessaire./(\w )?\[\?](\W*.)/g
Lot, 136 octets
Prend une ligne d'entrée sur STDIN.
la source
PHP,
10092 octetsIl était possible d'approfondir le golf sur les expressions régulières.
Donne un avis sur une constante indéfinie mais fonctionne toujours.
Edit: 8 octets enregistrés grâce à primo
la source
[n,A,a]
aide d'assertions de recherche (\K
et(?= )
).Python 3.5.1,
153147124octetsContribution :
[?] apple [?] day keeps the doctor away. [?] lie.
Production :
An apple a day keeps the doctor away. A lie.
Version 123 octets - Cela ne gère pas la règle de capitalisation.
Ideone it!
la source
;
et jouer au golf.m.start() for
devrait êtrem.start()for
,s[i+2] in 'aeiouAEIOU'
devrait êtres[i+2]in'aeiouAEIOU'
. Un rasage facile de 3 octets grâce à l'espace blanc.('an','a')[s[i+2]in'aeiouAEIOU']
est inversé, vous pouvez utiliser'a'+'n'*(s[i+2]in'aeiouAEIOU')
pour corriger cela et enregistrer 2 octets. Vous trouverez ici de nombreux conseils pour jouer au golf .enumerate()
c'est cool. Merci @chepner.Java,
180178 octetsMon premier post ici, j'ai utilisé une partie du post de Kevin Cruijssen mais avec une approche différente, il m'a aidé à réduire un peu plus grâce à lui!
Ici, il n'est pas golfé:
Et le résultat
Une explication simple, j'utilise une approche récursive pour trouver tout
[?]
.Je n'ai pas trouvé de moyen d'utiliser les correspondances avec une casse insensible (pas sûr que ce soit possible).
178 octets: Merci à Martin Ender!
la source
]
dans votre expression régulière.05AB1E ,
383635 octetsEssayez-le en ligne ou vérifiez tous les cas de test .
Explication:
la source
]
après le::
}
plus tard parce que je pensais que cela économiserait un octet, mais vous avez en effet raison que cela échoue pour les[?] vowel
cas .. Merci de me le faire savoir!C #,
204235 octetsProgramme complet non golfé:
Je suis sûr que cela pourrait être amélioré, en particulier la partie Regex, mais je ne pense à rien pour le moment.
la source
Java 7,
239214213 octetsCas non testés et testés:
Essayez-le ici.
Production:
la source
isEmpty
utiliser l'expression régulière^$
. Je crois que je me retrouve avec 202;)String c(String s){String x[]=s.split("\\[\\?\\]",2),r=x[0];return x.length>1?r+(r.matches("(.+[.!?] )|(^)$")?"A":"a")+("aeiouAEIOU".contains(""+x[1].charAt(1))?"n":"")+c(x[1]):r;}
donc certainement plus court que ma boucle de réponse. :)Raquette 451 octets (sans regex)
C'est évidemment une longue réponse mais elle remplace aussi un et un avec une majuscule:
Essai:
Production:
Version détaillée:
la source
J , 113 octets
Essayez-le en ligne!
Honte honte!
la source
Rétine ,
6660 octetsEssayez-le en ligne.
Explication:
Effectuez une recherche insensible à la casse
[?]
suivie d'une voyelle ou d'une consonne, où la voyelle facultative est enregistrée dans le groupe de capture 2 et la correspondance entière dans le groupe de capture 1:Remplacez-le par un
a
, suivi de la longueur du deuxième groupen
(donc soit 0 ou 1n
), suivi des lettres du groupe de capture 1:Faites ensuite correspondre un
a
au début de la chaîne ou après l'un des.?!
plus un espace:Et en majuscule que A, sans supprimer les autres caractères du groupe de capture 1:
la source
Java (JDK) , 154 octets
Essayez-le en ligne!
Explication:
la source
C (gcc) ,
225207202201 octetsMerci à plafondcat pour -24 octets
Essayez-le en ligne!
la source
Groovy,
73162 octetsedit: putain, la capitalisation a totalement compliqué tout ici
la source
C # 209 octets
string A(string b){var s=b.Split(new[]{"[?]"},0);return s.Skip(1).Aggregate(s[0],(x,y)=>x+(x==""||(x.Last()==' '&&".?!".Contains(x.Trim().Last()))?"A":"a")+("AEIOUaeiou".Contains(y.Trim().First())?"n":"")+y);}
Formaté
la source
Perl 6 , 78 octets
Explication:
Tester:
la source
} $1
à la fin (en le faisant}$1
)?{S:i:g/(^|<[.?!]>' ')?'[?]'(' '<[aeiou]>?)/{<a A>[?$0]~('n'x?~$1.substr(1))}$1/}
Lua, 131 octets.
Bien que lua soit une langue terrible pour le golf, je pense que j'ai assez bien réussi.
la source
Pip ,
62555450 octetsPrend la chaîne comme argument de ligne de commande.
Essayez-le en ligne!
Explication:
la source
Raquette (avec regex) 228 octets
Essai:
Production:
la source
Python 3 ,
104103 octets-1 octets, sans échappement
]
Essayez-le en ligne!
Commence par remplacer toutes les occurrences de
[?]
aveca
,puis remplace tout
a
suivi d'une voyelle, avecan
.Remplace ensuite tout
a
au début de l'entrée ou une phrase parA
.Suppose que
[?]
cela ne touchera jamais un autre mot et que les minusculesa
ne doivent jamais commencer une phrase.la source
PowerShell , 124 octets
inspiré par la réponse d'Avi pour Java .
Essayez-le en ligne!
la source