Dans ce défi, vous devez prendre une chaîne correspondant à la regex ^[a-zA-Z]+$
ou à ce qui est raisonnable (vous n'avez pas à tenir compte des lettres majuscules ou minuscules si vous le souhaitez) (vous pouvez supposer que la chaîne est suffisamment longue et qu'elle a la bonne structure pour tous les éléments). opérations), et génère une autre chaîne, produite de la même manière que word à la fin d’un tweet dadaïste récent du POTUS ( "Despite the constant negative press covfefe"
).
Comment reconfigurer une chaîne:
Tout d’abord, obtenez le premier groupe de sons (terminologie composée).
Comment est-ce que tu fais ça? Bien:
Trouver la première voyelle (
y
est aussi une voyelle)v creation
Trouvez la première consonne après ça
v creation
Enlevez le reste de la ficelle
creat
C'est votre premier groupe de sons.
L'étape suivante:
Récupère la dernière consonne du groupe de sons
t
et remplacez-le par la version vocale ou sans voix. Pour ce faire, trouvez la lettre dans ce tableau. Remplacez par la lettre donnée (qui peut être la même lettre)
b: p
c: g
d: t
f: v
g: k
h: h
j: j
k: g
l: l
m: m
n: n
p: b
q: q
r: r
s: z
t: d
v: f
w: w
x: x
z: s
alors on a
d
Ensuite, prenez la voyelle suivante après cette consonne. Vous pouvez supposer que cette consonne n'est pas à la fin de la chaîne. Joignez ces deux ensemble, puis répétez-le deux fois:
didi
Concaténer ceci au premier groupe de sons:
creatdidi
Vous avez terminé: la chaîne est covfefified et vous pouvez maintenant la sortir.
Cas de test:
coverage: covfefe
example: exxaxa
programming: progkaka (the a is the first vowel after the g, even though it is not immediately after)
code: codtete
president: preszizi
C'est du code-golf , alors veuillez rendre votre programme aussi court que possible!
Réponses:
Gelée ,
5857 octetsUn programme complet qui accepte une liste de caractères minuscules et imprime le résultat.
Essayez-le en ligne!
Comment?
la source
JavaScript (ES6),
107103 octets4 octets sauvés grâce à GOTO 0
Cas de test
Afficher l'extrait de code
la source
s=>([,a,b,c]=s.match`(.*?[aeiouy]+(.)).*?([aeiouy])`,a+(b=(a="bcdfgszkvtgp")[11-a.search(b)]||b)+c+b+c)
Gelée ,
4539 octetsEssayez-le en ligne!
Comment ça fonctionne
la source
CJam ,
59585756 octetsEssayez-le en ligne!
Explication
la source
C,
219213206179175 octetsEssayez-le en ligne!
la source
#define
s et la fonction par des indicateurs de préprocesseur (-D...
).Perl 5 ,
8172 octetsEssayez-le en ligne!
la source
\K
, mais vous l'avez fait 9 octets mieux que moi. Bonne réponse!PHP, 121 octets
Essayez-le en ligne!
la source
echo$t[1],$z=strtr($t[2].$t[3],bcdfgkpstvz,pgtvkgbzdfs),$z;
$argn
quelque chose de plus court?$a
, par exemple - c'est -3 octetsPyth, 54 octets
Cela définit une fonction
y
qui attend une chaîne. Essayez-le en ligne: Test Suitela source
Python 3,
155139 octetssupprimé 16 octets grâce à @ovs
supprimé 1 octet grâce à Gábor Fekete
la source
'aeiouy]'
, cela économisera peut-être quelques octets. En outre, vous pouvez supprimer certains caractères des chaînes de remplacement car ils sont identiques.IndexError
, et l'enregistrementaeiouy])
n'enregistre aucun octet.s='aeiouy])'
, vous pourriez utiliserb,c,v=re.findall('(.*?[%s([^%s.*?([%s'%(s,s,s)
. Ce n'est pas plus court, mais pourrait conduire à un moyen de le raccourcir globalement.k='aeiouy])'
etf'(.*?[{k}([^{k}.*?([{k}'
Java 8,
243236222 octetsUtilise des
.replaceAll
expressions rationnelles avec des groupes de capture pour filtrer les parties que nous ne voulons pas.Explication:
Essayez ici.
la source
Haskell ,
143141138137136 octetsEssayez-le en ligne!
la source
nx
par quelque chose d'une lettre permettra d'économiser 2 octets.z
dehors def
et basculer vers des gardes au lieu de unlet
enregistre deux octets supplémentaires: essayez-le en ligne!(s,v)<-break z i,(m,c:x)<-span z v
dans(s,(m,c:x))<-span z<$>break z i
.let
, merci!z
def
?Python,
261260 octetsUne solution non regex, pas ésotérique. A pris environ 20 minutes pour faire, et une heure de plus pour jouer au golf.
Il a probablement une meilleure compréhension de la liste que toute la bibliothèque standard Python, principalement parce que je ne connais pas les expressions rationnelles ...
Essayez-le en ligne! (Avec des cas de test)
la source
Ruby , 90 octets
Essayez-le en ligne!
Ungolfing un peu, nous avons quelque chose d'équivalent à:
la source
Python 2,
251246245239237234229211 octetsPremière soumission ici.
Essayez-le en ligne!
Compagnons de golf qui m'ont aidé:
la source
not n
àn<1
2 octets, puisque vous savezn
ne sera jamais négatif. Aussi, vous pouvez changern==3
àn>2
puisque vous savezn
ne sera jamais plus grand que3
. Vous pouvez également utiliser les astuces Python pour conditionals de raccourcir la première et la deuxième dernière encore:n=[n,1][i in w and n<1]
;r+=[0,r][n<2]
r,v,c=('',)*3
enr=v=c=''
, puisque les chaînes sont immuables. J'ai essayé plusieurs autres astuces astucieuses, mais frustrantes, elles sont exactement aussi longues. En outre, il peut être intéressant d’ajouter un Essayez-le en ligne! lien vers votre messageRuby ,
175141110 octetsEssayez-le en ligne!
tr
arguments suggérés optimisésUngolfed
la source
Hash[*"bpcgdtfvgkkgpbsztdvfzs".chars]
c=[^aeiou]
est plus courte. Ont la première interpolation pour chaque variable assigner simultanément -2 octets:/^(.*?${v='[aeiou]'}+(#{c='[^aeiou]})).../
. Enfin,$2.tr("b-z","pgtevkhijgl-obqrzdufwxys")
au lieu de la solution de hachage.\g<n>
) au lieu d'interpolation, plus un autre 14 en utilisant @ ValueInk de[^aeiou]
la suggestion:s=~/^(.*?([aeiouy])+([^aeiou]))\g<3>*(\g<2>)/
.programming
->progkaka
, que je n'arrive pas à comprendre.\g<3>
met à jour la valeur de $ 3, nous ne pouvons donc pas utiliser ce raccourci.Crystal,
203194187186184163 octetsla source
c=v
eto+=<...>
MATLAB / Octave -
159158 octetsCe qui suit fonctionne en supposant que la chaîne d'entrée est en minuscule.
Explication
a = input('','s');
: Obtient une chaîne de STDIN et la stocke dans la variablea
.m=ismember(a,'aeiouy');
: Retourne un tableau booléen de la même taille que la chaînea
déterminant l'emplacement des voyelless='pgt vkh jglmn bqrzd fwx s';
Lacovfefe
cartographie des consonnes sous forme de chaîne. Cette chaîne est longue de 25 caractères et omet les voyelles. La première position où la voyelle'a'
est supposée être est supprimée, tandis que les autres positions où se trouvent les voyelles sont placées avec un caractère d'espace factice. C'est ainsi que lorsque nous déterminerons la première consonne apparaissant après la voyelle, nous convertirons la consonne en une position permettant d'accéder à un caractère de cette chaîne afin de déterminer le premier composant du mot converti.m(1:find(m,1))=1
: Définit la première position du tableau booléen jusqu'à l'endroit où nous avons trouvé la première voyelle comme toutes les voyelles. Ainsi, lorsque nous rechercherons la prochaine consonne qui suivra la première voyelle, nous ignorerons ces caractères.i=find(~m,1);
: Trouve la première position de la chaîne qui est une consonne après la première voyelle.f=a(1:i)
: Supprime la chaîne après la première consonne qui suit la voyelle. Nous échantillonnons simplement de la première position de la chaîne jusqu'à ce point.d=s(f(end)-97);
: Prend le dernier caractère de la chaîne restante et trouve où il faut échantillonner à partir de la chaîne de recherche et obtient ce caractère. La soustraction d'un caractère et d'un nombre dans MATLAB ou Octave est fusionnée pour former un entier en convertissant le caractère en son code ASCII. Dans ce cas, on soustrait le dernier caractère du dernier caractère de l'alphabet pour nous donner la position par rapport au début. Cependant, au lieu de soustraire parb
(98), nous soustrayons par,a
car MATLAB commence à indexer par 1 au lieu de 0.'a'
Le code ASCII est 97.m(1:i)=0;
: Prend le masque booléen et définit tous les caractères de la chaîne d'entrée de la première position à la première consonne suivant une voyelle à faux.v=a(find(m,1));
: Trouve la prochaine voyelle qui suit la première consonne de la chaîne d'entrée.[f d v d v]
:covfefe
Affiche notre chaîne ied.Exemple de courses
Essayez-le en ligne!
http://www.tutorialspoint.com/execute_octave_online.php?PID=0Bw_CjBb95KQMdjROYVR0aFNrWXM
Lorsque vous appuyez sur le bouton Exécuter en haut, attendez quelques instants, puis entrez la chaîne souhaitée. Entrez la chaîne lentement car il semble y avoir un délai lors de la saisie de texte.
la source
Clojure,
182156 caractèresComment ça fonctionne
Retourne un seq de
((\p \r) (\e) (\s) (\i) (\d) (\e) (\n \t))
Déstructure les suivants dans
s=(\p \r)
,m=(\e)
,c=\s
,n=\i
.Ou pour « exemple » il est
s=[]
,m=(\e)
,c=\x
,n=\a
.Retourne la chaîne de sortie en concaténant les morceaux ensemble et en le chaînant.
Et puis je viens de supprimer autant d’espace que possible tout en le compilant.
Dé-uglifié:
la source
c
, par exemple. (Nous autorisons également les fonctions anonymes, qui sont plus courtes dans de nombreuses langues; je ne sais pas si elles sont dans Clojure). Je vois que vous avez déjà apporté cette amélioration à l’intérieur de votre code, alors il n’ya probablement pas grand-chose à changer ici.R, 341 caractères
Tentative R effroyable, pourquoi les cordes sont si difficiles
Version lisible:
la source
BlitzMax, 190 octets
Prend un mot de stdin et imprime le résultat sur stdout. Le mot d'entrée est supposé être en minuscule et contenir au moins une voyelle suivie d'une consonne.
Une version plus lisible du programme avec le formatage et les déclarations de variables:
Comment ça fonctionne:
BlitzMax n'a pas de fonctionnalité regex intégrée ou similaire, donc une boucle est utilisée pour parcourir les caractères du mot d'entrée jusqu'à ce qu'elle trouve une voyelle suivie d'une chaîne d'au moins une consonne. La variable c stocke la position de la dernière de ces consonnes, v celle de la voyelle. La boucle continue de voir s'il y a une autre voyelle après la chaîne et si c'est le cas, v est mis à jour en conséquence. Ensuite, la consonne en c est recherchée dans la chaîne "bpdtfvgkcgsz", qui sert de table de remplacement. Si la consonne se trouve dans la table à une position quelconque, cette position est alors marquée par XOR avec 1 et le caractère à la position résultante est utilisé pour la remplacer. L'opération XOR transforme 0 en 1, 2 en 3, 4 en 5, etc., et inversement, de sorte que b soit échangé avec p, d avec t, etc. Enfin, la chaîne d'origine jusqu'à c,
Exemple de résultats:
la source
Perl, 71 octets
Courez aussi avec
perl -pe
. Quelques octets de moins que la solution Perl précédente. Certes, je suis également inspiré par là.la source
05AB1E ,
10110488 octets-16 octets grâce à Okx
J'espère en quelque sorte que cela peut être fait de manière plus efficace.
Essayez-le en ligne!
Explication
la source
"bpcgdtfvgkhhjjkgllmmnnpbqqrrsztdvfwwxxzs"
par.•7¶ëÒ—Öb´ƒ≠Ä“šʒƵJ^ÝV“Îpи•
pour économiser 15 octetsžOÃćIsk
paržOÃ0èk
pour enregistrer un autre octet.žOÃнk>[DIs£¤žPså#\>]©s[DIsèDžOså#\>]s\.•7¶ëÒ—Öb´ƒ≠Ä“šʒƵJ^ÝV“Îpи•S2ôDí«ø`®θkèìDJ
essayez-le en ligne. Je me suis principalement débarrassé de tous les swaps et triples swaps en utilisant une variable. Et0è
peut êtreн
, et j'ai remplacé2׫
parDJ
pour joindre la pile entière ensemble. PS: J'ai également posté une réponse 05AB1E de 55 octets en utilisant une technique différente. (Ce qui inclut également un lien pour mieux comprendre la compression dans 05AB1E.: D)Cristal, 130 octets
Comment ça fonctionne
stocke une expression rationnelle pour la recherche de la première voyelle
c
.divise le premier argument en trois parties {"", Chaîne jusqu'à un caractère avant la première consonne après la première voyelle, reste de la chaîne} et stocke chacun des éléments dans x, y et z.
obtenir le premier caractère, la consonne pertinente.
obtenir l'index de la consonne à l'intérieur de la chaîne de gauche ou
nil
.Si
i
n'est pasnil
, utilisez cet index pour la deuxième chaîne (sorte de hachage golfée).Si
i
c'est le casnil
, utilisez le caractère original.ensuite, ajoutez la première voyelle de
z
.enfin, affiche la première partie de la première expression rationnelle
y
, la première consonnek
et deux fois la chaîne calculée précédemmentb
.Essayez-le en ligne .
la source
Retina , 68 octets
Essayez-le en ligne!
la source
Lua,
164157 octetsEdition 1: Suppression de 7 octets en recherchant un caractère après les consonnes (voir regex)
Essayez-le en ligne!
Ce programme prend une chaîne en argument CLI et affiche sa version covfefied.
Ceci est ma première soumission à un code golf! Je n'ai pas vérifié les autres en détail, alors j'ai peut-être manqué certaines optimisations courantes (et je suis tombé dans des pièges). J'ai utilisé Lua parce que je commençais à aimer cette petite langue et j'ai essayé de trouver une expression rationnelle qui corresponde à mes besoins.
Voici une version plus propre, utilisant une fonction (j'avais l'intention d'en utiliser une, mais les mots-clés dans Lua sont trop longs!):
N'hésitez pas à donner des commentaires :)
Remarque: Si vous vous le demandez, utilisez MoonScript avec 149 octets de long!
la source
JavaScript (ES5),
237229 octetsEssayez-le en ligne!
Probablement pas le plus risqué, mais c’est l’ES5.
Récemment corrigé un bug. Exemple de sortie:
la source
sed, 106 (105 + 1) octets
C'est sed avec le
-E
drapeau, qui compte apparemment pour un octet.Essayez-le en ligne!
la source
C #,
584581 octets-3 octets grâce au citron destructible
Ceci est ma première soumission sur Code Golf et sur Stack Exchange en général. Je sais que le C # n’est pas une excellente langue de golf et que ce n’est probablement pas complètement optimisé, mais j’ai voulu tenter ma chance: p. Tous les conseils sont les bienvenus!
Version Golfée:
Version lisible:
la source
x++ < l
, ou quelque chose du genre (peutl > x++
- être si le premier ne fonctionne pas). pas sûr cependantSmileBASIC 3, 195 octets
Très tard pour cette question, mais comment pourrais-je résister à un bon défi pour SmileBASIC 3? Des fonctionnalités telles que les itérations sur une séquence ou la manipulation d'une chaîne ne sont pas aussi robustes que d'autres langages. Il est donc difficile de le faire le plus petit possible. Suppose que les mots sont en majuscules.
Explication détaillée ici!
la source
05AB1E , 55 octets
Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
Voir ce 05AB1E conseils de mes (section Comment compresser les chaînes ne font pas partie du dictionnaire? ) Pour comprendre pourquoi
.•gÍĆdQ¸G•
est"bcdfkszgvtgp"
.la source