Covfefify une chaîne

371

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 ( yest 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 , alors veuillez rendre votre programme aussi court que possible!

Citron destructible
la source
7
"x" devrait techniquement mapper sur "gz". "qu" devrait correspondre à "gw".
Steve Bennett
2
Ceci spécifie un concept de covféfification, mais je continue de penser qu'une référence au travail de Douglas Hofstadter (et de Melanie Mitchell) sur les analogies de conversion de cordes, par exemple dans Fluid Concepts, semble appropriée.
Mars
60
Les réponses à plus de 140 caractères doivent être disqualifiées
Sandy Gifford
12
Malheureusement, il est impossible de faire cela dans TrumpScript :(
4
@ThePlasmaRailgun C'était une blague, car les tweets ne doivent pas dépasser 140 caractères.
Esolanging Fruit

Réponses:

91

Gelée ,  58  57 octets

<TḢị
e€Øyµ¬TĖEÐḟḢṪ;ç¥T
ḣÇḢ⁸ÇịµḢØYiị“ßȷ%Hẹrȧq’œ?ØY¤⁾cgy;ẋ2

Un programme complet qui accepte une liste de caractères minuscules et imprime le résultat.

Essayez-le en ligne!

Comment?

<TḢị - Link 1, extract first value from y not less than x: number, x; list of numbers, y
     -                                                     e.g. 5, [3,4,7]
<    - x less than vectorised across y                             [0,0,1]
 T   - truthy indices                                              [    3]
  Ḣ  - head                                                             3
   ị - index into y                                                     7

e€Øyµ¬TĖEÐḟḢṪ;ç¥T - Link 2, indices of the letters to manipulate: list of characters, w
  Øy              - vowel+ yield = "AEIOUYaeiouy"                 e.g.  "smouching" 
e€                - exists in for €ach letter in w                       001100100
    µ             - monadic chain separation, call that v
     ¬            - not vectorised across v                              110011011
      T           - truthy indices                                       12  56 89
       Ė          - enumerate                      [[1,1],[2,2],[3,5],[4,6],[5,8],[6,9]]
         Ðḟ       - filter discard if:
        E         -   elements are equal                       [[3,5],[4,6],[5,8],[6,9]]
           Ḣ      - head                                        [3,5]
            Ṫ     - tail                                           5
                T - truthy indices of v                                    34  7
               ¥  - last 2 links as a dyad
              ç   -   call last link (1) as a dyad                         7
             ;    -   concatenate                                     5,7
                  -                                    ...i.e the indexes of 'c' and 'i'

ḣÇḢ⁸ÇịµḢØYiị“ßȷ%Hẹrȧq’œ?ØY¤⁾cgy;ẋ2 - Main link: list of characters, w
                                   -                             e.g.  "smouching"
 Ç                                 - call the last link (2) as a monad    [5,7]
ḣ                                  - head to index (vectorises)      ["smouc","smouchi"]
  Ḣ                                - head                             "smouc"
                                   -   implicit print due to below leading constant chain
   ⁸                               - link's left argument, w
    Ç                              - call the last link (2) as a monad    [5,7]
     ị                             - index into w                         "ci"
      µ                            - monadic chain separation, call that p
       Ḣ                           - head p                               'c'
        ØY                         - consonant- yield = "BCDFGHJKLMNPQRSTVWXZbcdfghjklmnpqrstvwxz"
          i                        - first index                          22
                          ¤        - nilad followed by link(s) as a nilad:
            “ßȷ%Hẹrȧq’             -   base 250 number = 1349402632272870364
                        ØY         -   consonant- yield = "BCDFGHJKLMNPQRSTVWXZbcdfghjklmnpqrstvwxz"
                      œ?           -   nth permutation  = "BCDFGHJKLMNPQRSTVWXZpctvkhjglmnbqrzdfwxs"
           ị                       - index into         (special case ->) 'c'
                           ⁾cg     - literal ['c','g']
                              y    - translate (change 'c's to 'g's)      'g'
                               ;   - concatenate with the headed p        "gi"
                                ẋ2 - repeat list twice                    "gigi"
                                   - implicit print ...along with earlier = smoucgigi
Jonathan Allan
la source
13
C'est incroyable ...
Klangen
Travail incroyable.
JF-ce
9
Je suis gelée. Upvote.
DeepS1X
6
C'est le langage de programmation le plus étrange que j'ai jamais vu.
Ryan
@ Ryan est destiné au golf.
Esolanging Fruit
61

JavaScript (ES6), 107 103 octets

4 octets sauvés grâce à GOTO 0

s=>([,a,b,c]=s.match`(.*?[aeiouy]+(.)).*?([aeiouy])`,a+(b=(a="bcdfgszkvtgp")[11-a.search(b)]||b)+c+b+c)

Cas de test

Arnauld
la source
6
Vous pouvez économiser quelques octets comme ceci:s=>([,a,b,c]=s.match`(.*?[aeiouy]+(.)).*?([aeiouy])`,a+(b=(a="bcdfgszkvtgp")[11-a.search(b)]||b)+c+b+c)
GOTO 0
@ GOTO0 Merci, mis à jour.
Arnauld
49

Gelée , 45 39 octets

Øa“œṣ$b|0Ḃ’ṃ,Ṛ$yṫµfØyḢṭḢẋ2
e€ØyIi-‘ɓḣ;ç

Essayez-le en ligne!

Comment ça fonctionne

e€ØyIi-‘ɓḣ;ç                Main link. Argument: s (string)

  Øy                        Vowels with y; yield "AEIOUYaeiouy".
e€                          Test each character in s for membership.
    I                       Increments; compute the forward differences of the
                            resulting array of Booleans.
     i-                     Find the first index of -1.
       ‘                    Increment this index to find the index of the first
                            consonant that follows a vowel.
                            Let's call this index j.
        ɓ                   Begin a new chain. Left argument: s. Right argument: j
         ḣ                  Head; yield the first j characters of s.
           ç                Call the helper link with arguments s and j.
          ;                 Concatenate the results to both sides.
Øa“œṣ$b|0Ḃ’ṃ,Ṛ$yṫµfØyḢṭḢẋ2  Helper link. Left argument: s. Right argument: j

Øa                          Alphabet; set the return value to “abc...xyz”.
  “œṣ$b|0Ḃ’                 Yield 7787255460949942. This is a numeric literal in
                            bijective base 250. The value of each digit matches its
                            1-based index in Jelly's code page.
           ṃ                Convert 7787255460949942 to base 26, using the digts
                            a = 0, b = 1, ..., z = 25.
                            This yields "bcdfkszgvtgp".
            ,Ṛ$             Pair the result with its reverse, yielding
                            ["bcdfkszgvtgp", "pgtvgzskfdcb"].
                ṫ           Call tail with arguments s and j, yielding the j-th and
                            all following characters of s.
               y            Translate the result to the right according to the
                            mapping to the left, i.e., replace 'b' with 'p', 'c'
                            with 'g', etc. 'g' appears twice in the first string
                            of the mapping; only the first occurrence counts.
                            Let's call the resulting string r.
                 µ          Begin a new chain. Argument: r
                  fØy       Filter; remove non-vowels from r.
                     Ḣ      Head; take the first vowel.
                       Ḣ    Head; take the first character/consonant of r.
                      ṭ     Tack; append vowel to the consonant.
                        ẋ2  Repeat the resulting string twice.
Dennis
la source
4
désolé, mon pote, on dirait que vous avez manqué le représentant de la méga gelée
Citron destructible
tfw une réponse a l'air trop simpliste, mais est en fait vraiment magnifique ... simple est magnifique
Erik the Outgolfer
31

CJam , 59 58 57 56 octets

q_{"aeiouy":V&,_T|:T^}#)/(_W>"cbdfkszgvtpg"_W%er@sV&0=+_

Essayez-le en ligne!

Explication

q_                   e# Read the input and copy it.
{                    e# Find the index of the first char for which the following is true:
 "aeiouy":V          e#  Push "aeiouy" and store it in V.
 &,                  e#  Check if the current char is in the vowel string (0 or 1).
 _T|:T               e#  Copy the result and OR with T (T is initially 0), storing back in T.
 ^                   e#  XOR with the original result. This will be 1 for the first 
                     e#  consonant appearing after a vowel.
}#                   e# (end find)
)/                   e# Increment the index and split the string into chunks of that size.
(                    e# Pull out the first chunk.
_W>                  e# Copy it and get the last character (the consonant).
"cbdfkszgvtpg"_W%er  e# Transliterate the consonant to voiced/voiceless alternative.
@s                   e# Bring all the other split chunks to the top and join them together.
V&0=                 e# First char of the set intersection of that and the vowels.
                     e# (i.e. the first vowel in the second half)
+                    e# Concatenate the new consonant and the vowel.
_                    e# Duplicate the result of that.
                     e# Implicit output of stack contents.
Chat d'affaires
la source
2
CJam bat Jelly? : O (Au moins, ça bat la réponse de la gelée tout le monde semble être en hausse de vote.)
Esolanging Fruit
29

C, 219 213 206 179 175 octets

#define p putchar
#define q(a)for(;a strchr("aeiouy",*s);p(*s++));
f(s,c,h)char*s;{q(!)q()p(*s);p(c="pgt vkh jglmn bqrzd fwx s"[*s-98]);p(h=s[strcspn(s,"aeiouy")]);p(c);p(h);}

Essayez-le en ligne!

Betseg
la source
Est-ce que * p = putchar fonctionne en première ligne?
k_g
4
Désolé disqualifié. Ne peut pas tenir dans un tweet.
Caird coinheringaahing
@ cairdcoinheringaahing vous monsieur sont incorrects (je sais que c'était 140 quand vous avez écrit cela)
Stan Strum
1
171 octets
ceilingcat
1
Vous pouvez supprimer environ 12 octets en remplaçant #defines et la fonction par des indicateurs de préprocesseur ( -D...).
23

Perl 5 , 81 72 octets

s![aeiouy]+(.)\K.*!($1=~y/bcdfgkpstvz/pgtvkgbzdfs/r.$&x/[aeiouy]/g)x2!ge

Essayez-le en ligne!

Crasseux
la source
Vous et moi avions la même idée avec \K, mais vous l'avez fait 9 octets mieux que moi. Bonne réponse!
Silvio Mayolo
18

PHP, 121 octets

$v=aeiouy;preg_match("#(.*?[$v]+([^$v])).*?([$v])#",$argn,$t);echo$t[1],$z=strtr($t[2].$t[3],bcdfgkpstvz,pgtvkgbzdfs),$z;

Essayez-le en ligne!

Jörg Hülsermann
la source
3
-2 octets:echo$t[1],$z=strtr($t[2].$t[3],bcdfgkpstvz,pgtvkgbzdfs),$z;
Titus
@ Titus, je n'ai pas pensé à ça. Merci
Jörg Hülsermann
pourquoi ne pas renommer $argnquelque chose de plus court? $a, par exemple - c'est -3 octets
Tyler Sebastian
@TylerSebastian Je dois avoir une variable d'entrée qui existe. Oui, je peux créer une fonction, mais si je le fais, le nombre d'octets augmente davantage car les trois octets sont utilisés
Jörg Hülsermann
ah ok désolé j'ai oublié comment PHP utilise les arguments en ligne de commande - je viens de voir que vous l'aviez défini dans la section d'en-tête mais que vous n'avez pas compris qu'il s'agissait d'une variable réservée.
Tyler Sebastian
15

Pyth, 54 octets

L+hb?>F}RJ"aeiouy"<b2+hKtb*2+XhK"cgdsfbpvztkg")h@JKytb

Cela définit une fonction yqui attend une chaîne. Essayez-le en ligne: Test Suite

Jakube
la source
14

Python 3, 155 139 octets

import re
def f(x,k='aeiouy])'):b,c,v=re.findall(f'(.*?[{k}([^{k}.*?([{k}',x)[0];return b+c+(('bcdfgkpstvz'+c)['pgtvkgbzdfs'.find(c)]+v)*2

supprimé 16 octets grâce à @ovs

supprimé 1 octet grâce à Gábor Fekete

L3viathan
la source
2
Vous pouvez créer une variable qui a la valeur 'aeiouy]', cela économisera peut-être quelques octets. En outre, vous pouvez supprimer certains caractères des chaînes de remplacement car ils sont identiques.
Gábor Fekete
2
Je ne peux pas supprimer les caractères identiques de la chaîne de remplacement, car il s'agirait d'un IndexError, et l'enregistrement aeiouy])n'enregistre aucun octet.
L3viathan
2
si vous sortez quelque chose comme s='aeiouy])', vous pourriez utiliser b,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.
Jeremy Weirich
3
Utiliser des f-strings économisera 1 octet: k='aeiouy])'etf'(.*?[{k}([^{k}.*?([{k}'
Gábor Fekete
14

Java 8, 243 236 222 octets

s->{String q="[a-z&&[^aeiouy]]",a=s.replaceAll("(^"+q+"*[aeiouy]+"+q+").*","$1"),b="pgtvkhjglmnbqrzdfwxs".charAt("bcdfghjklmnpqrstvwxz".indexOf(a.charAt(a.length()-1)))+s.replaceAll(a+q+"*([aeiouy]).*","$1");return a+b+b;}

Utilise des .replaceAllexpressions rationnelles avec des groupes de capture pour filtrer les parties que nous ne voulons pas.

Explication:

Essayez ici.

s->{ // Method with String parameter and String return-type
  // Temp String we use multiple times:
  String q="[a-z&&[^aeiouy]]",
   // Regex to get the first part (i.e. `creation` -> `creat` / `example` -> `ex`)
   a=s.replaceAll("(^"+q+"*[aeiouy]+"+q+").*","$1"), 
   // Get the trailing consonant and convert it
   b="pgtvkhjglmnbqrzdfwxs".charAt("bcdfghjklmnpqrstvwxz".indexOf(a.charAt(a.length()-1)))
   // Get the next vowel after the previous consonant from the input-String
    +s.replaceAll(a+q+"*([aeiouy]).*","$1");
  // Return the result:
  return a+b+b;
} // End of method
Kevin Cruijssen
la source
13

Haskell , 143 141 138 137 136 octets

z h=elem h"aeiouy"
f i|(s,(m,c:x))<-span z<$>break z i,j:_<-filter z x,d<-"pgt.vkh.jglmn.bqrzd.fwx.s"!!(fromEnum c-98)=s++m++[c,d,j,d,j]

Essayez-le en ligne!

Bartavelle
la source
1
Impressionnant! Le remplacement nxpar quelque chose d'une lettre permettra d'économiser 2 octets.
tomsmeding
Déclarer en zdehors de fet basculer vers des gardes au lieu de un letenregistre deux octets supplémentaires: essayez-le en ligne!
Laikoni
2
Et deux autres en combinant (s,v)<-break z i,(m,c:x)<-span z vdans (s,(m,c:x))<-span z<$>break z i.
Laikoni
Pourrait en raser un de plus en plaçant la parenthèse d'ouverture à côté du let, merci!
bartavelle
@ Laikoni Je ne comprends pas la partie sur le déménagement zde f?
Bartavelle
10

Python, 261 260 octets

def c(s,t='bpcgdtfvgksz'):
 q,r,t='aeiouy',range(len(s)),t+t[::-1]
 c=[i for i in r if i>[j for j in r if s[j]in q][0]and s[i]not in q][0]
 C=([t[2*i+1]for i in range(12)if s[c]==t[i*2]]or s[c])[0]
 return s[:c+1]+(C+s[[i for i in r if i>c and s[i]in q][0]])*2

Une 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)

Sagiksp
la source
8

Ruby , 90 octets

->x{x[/(.*?#{$v='[aeiouy]'}+.).*?(#$v)/];$1+($1[-1].tr('bcdfgkpstvz','pgtvkgbzdfs')+$2)*2}

Essayez-le en ligne!

Ungolfing un peu, nous avons quelque chose d'équivalent à:

def covfefefify(x)
  v = '[aeiouy]'
  # Match x to a regular expression capturing:
  # Group 1:
  #  some characters (non-greedy)
  #  followed by some (greedy) non-zero number of vowels
  #  followed by exactly one character
  # Ungrouped:
  #  Some more (non-greedy) characters
  # Group 2
  #  Exactly one other vowel
  # By switching between greedy and non-greedy matches, we can capture longest and shortest vowel/consonant sequences without writing out all the consonants
  x[/(.*?#{v}+.).*?(#{v})/]
  # Glue it back together, replace the necessary consonants, duplicate where needed
  $1+($1[-1].tr('bcdfgkpstvz','pgtvkgbzdfs')+$2)*2
end
Ymbirtt
la source
8

Python 2, 251 246 245 239 237 234 229 211 octets

Première soumission ici.

def f(s):
  r=c='';n=0;w='aeiouy';a='bcdfghjklmnpqrstvwxz'
  for i in s:
    if n<2:r+=i
    if n<1and i in w:n=1
    if n==1and i in a:c='pgtvkhjglmnbqrzdfwxs'[a.index(i)];n=2
    if n==2and i in w:r+=c+i+c+i;break
  return r

Essayez-le en ligne!

Compagnons de golf qui m'ont aidé:

 Destructible Lemon / Wheat Wizard - 5 bytes
 Hubert Grzeskowiak - 1 byte
 musicman523 - 16 bytes
WaitndSee
la source
2
Bienvenue sur le site! Je vois que vous avez essayé d'utiliser des tabulations pour l'indentation. Si vous remplacez chaque onglet par un seul espace, il est identique sur le plan fonctionnel et s'affiche correctement, au lieu d'octets supplémentaires.
Destructible Lemon
4
Si Destructionable Lemon est correct, vous pouvez enregistrer encore plus d'octets dans votre source en mettant en retrait le premier niveau de votre code avec un seul espace et le deuxième niveau avec un seul onglet, ce qui le rendra un peu difficile à afficher. économisez 5 octets.
Sriotchilism O'Zaic
1
Le point-virgule à la fin de la ligne 4 est-il nécessaire?
Hubert Grzeskowiak le
1
@WaitndSee Je pense que vous pouvez raccourcir certaines de vos conditions. Tout d' abord: vous pouvez changer not nà n<12 octets, puisque vous savez nne sera jamais négatif. Aussi, vous pouvez changer n==3à n>2puisque vous savez nne sera jamais plus grand que 3. 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]
musicman523
1
Vous pouvez changer r,v,c=('',)*3en r=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 message
musicman523
7

Ruby , 175 141 110 octets

->s{s=~/(.*?#{v='[aeiouy]'}+(#{c='[^aeiouy]'}))#{c}*(#{v})/;"#$1#{($2.tr('bcdfgkpstvz','pgtvkgbzdfs')+$3)*2}"}

Essayez-le en ligne!

  • Épargné 34 octets grâce à Eric Duminil
  • Sauvegardé 31 octets grâce à Value Ink + trarguments suggérés optimisés

Ungolfed

covfefify = -> (s) {
    from = 'bcdfgkpstvz'
    to   = 'pgtvkgbzdfs'

    vowels = "[aeiouy]"
    consonants = "[^aeiouy]"

    s.match(/(.*?#{vowels}+(#{consonants}))#{consonants}*(#{vowels})/)
    d = ($2.tr(from, to) + $3) * 2
    "#$1#{d}"
}
sudee
la source
4
-34 octets avecHash[*"bpcgdtfvgkkgpbsztdvfzs".chars]
Eric Duminil
1
Étant donné que l’entrée semble être constituée de tous les caractères alphabétiques, elle 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.
Valeur d'encre
Vous pouvez enregistrer 14 octets en utilisant des sous - expressions ( \g<n>) au lieu d'interpolation, plus un autre 14 en utilisant @ ValueInk de [^aeiou]la suggestion: s=~/^(.*?([aeiouy])+([^aeiou]))\g<3>*(\g<2>)/.
Jordanie
En fait, cela a un bug avec programming-> progkaka, que je n'arrive pas à comprendre.
Jordanie
@ Jordan malheureusement, l'appel de sous-expression \g<3>met à jour la valeur de $ 3, nous ne pouvons donc pas utiliser ce raccourci.
Sudee
6

Crystal, 203 194 187 186 184 163 octets

o=""
ARGV[v=c=0].each_char{|a|r=/#{a}/
"aeiouy"=~r&&(v=x=1)||(c=v)
o+=a if c<2||x
c>0&&(x&&break||(o+=(i="pgtvkgbqrzdfs"=~r)?"bcdfgkpqrstvz"[i]: a))}
p o+o[-2..-1]
reitermarkus
la source
Je pense que vous pouvez perdre le parens autour de c=veto+=<...>
Cyoce
5

MATLAB / Octave - 159 158 octets

Ce qui suit fonctionne en supposant que la chaîne d'entrée est en minuscule.

a=input('','s');m=ismember(a,'aeiouy');s='pgt vkh jglmn bqrzd fwx s';m(1:find(m,1))=1;i=find(~m,1);f=a(1:i);d=s(f(end)-97);m(1:i)=0;v=a(find(m,1));[f d v d v]

Explication

  1. a = input('','s');: Obtient une chaîne de STDIN et la stocke dans la variable a.
  2. m=ismember(a,'aeiouy');: Retourne un tableau booléen de la même taille que la chaîne adéterminant l'emplacement des voyelles
  3. s='pgt vkh jglmn bqrzd fwx s';La covfefecartographie 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.
  4. 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.
  5. i=find(~m,1);: Trouve la première position de la chaîne qui est une consonne après la première voyelle.
  6. 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.
  7. 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 par b(98), nous soustrayons par, acar MATLAB commence à indexer par 1 au lieu de 0. 'a'Le code ASCII est 97.
  8. 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.
  9. v=a(find(m,1));: Trouve la prochaine voyelle qui suit la première consonne de la chaîne d'entrée.
  10. [f d v d v]: covfefeAffiche notre chaîne ied.

Exemple de courses

>> a=input('','s');m=ismember(a,'aeiouy');s='pgt vkh jglmn bqrzd fwx s';m(1:find(m,1))=1;i=find(~m,1);f=a(1:i);d=s(f(end)-97);m(1:i)=0;v=a(find(m,1));[f d v d v]
coverage

ans =

covfefe

>> a=input('','s');m=ismember(a,'aeiouy');s='pgt vkh jglmn bqrzd fwx s';m(1:find(m,1))=1;i=find(~m,1);f=a(1:i);d=s(f(end)-97);m(1:i)=0;v=a(find(m,1));[f d v d v]
example

ans =

exxaxa

>> a=input('','s');m=ismember(a,'aeiouy');s='pgt vkh jglmn bqrzd fwx s';m(1:find(m,1))=1;i=find(~m,1);f=a(1:i);d=s(f(end)-97);m(1:i)=0;v=a(find(m,1));[f d v d v]
programming

ans =

progkaka

>> a=input('','s');m=ismember(a,'aeiouy');s='pgt vkh jglmn bqrzd fwx s';m(1:find(m,1))=1;i=find(~m,1);f=a(1:i);d=s(f(end)-97);m(1:i)=0;v=a(find(m,1));[f d v d v]
code

ans =

codtete

>> a=input('','s');m=ismember(a,'aeiouy');s='pgt vkh jglmn bqrzd fwx s';m(1:find(m,1))=1;i=find(~m,1);f=a(1:i);d=s(f(end)-97);m(1:i)=0;v=a(find(m,1));[f d v d v]
president

ans =

preszizi

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.

Rayryeng
la source
5

Clojure, 182 156 caractères

#(let[v #{\a\e\i\o\u\y}p(partition-by v %)[s m[c][n]](if(v(first %))(cons[]p)p)z[(or((zipmap"bcdfgkpstvz""pgtvkgbzdfs")c)c)n]](apply str(concat s m[c]z z)))

Comment ça fonctionne

(partition-by v "president")

Retourne un seq de ((\p \r) (\e) (\s) (\i) (\d) (\e) (\n \t))

[s m [c] [n]] (if (v (first x)) (cons [] p) p)

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.

(apply str (concat s m [c] [(l c) n] [(l c) n]))

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é:

(defn covfefify [x]
  (let [vowel? #{\a\e\i\o\u\y}
        parts (partition-by vowel? x)
        [start mid [consonant] [last-vowel]] (if (vowel? (first x)) (cons [] parts) parts)
        lookup #(or ((zipmap "bcdfgkpstvz" "pgtvkgbzdfs") %) %)]
    (apply str (concat start mid [consonant] [(lookup consonant) last-vowel] [(lookup consonant) last-vowel]))))
Brian Baritonehands Gregg
la source
Bienvenue sur PPCG, et bonne première réponse! Nous espérons que vous resterez et aurez du plaisir à participer à plus de défis. :-)
ETHproductions
Si vous définissez une fonction, son nom devrait probablement être aussi court que possible. Vous pouvez simplement appeler la fonction principale 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.
5

R, 341 caractères

f=function(x){g=function(x,y)el(strsplit(x,y));a=g(x,'');v=g('aeiouy','');n=letters[-c(1,5,9,15,21,25)];l=data.frame(n,g('pgtvkhjglmnbqrzdfwxs',''));y=min(match(n,a)[which(match(n,a)>min(match(v,a),na.rm=T))]);m=l[which(l$n==a[y]),2];e<-a[-c(1:y)][min(match(v,a[-c(1:y)]),na.rm=T)];paste0(paste0(a[c(1:y)],collapse=''),m,e,m,e,collapse="")}

Tentative R effroyable, pourquoi les cordes sont si difficiles

Version lisible:

f = function(x) {
  g = function(x, y)el(strsplit(x, y))
  a = g(x, '')
  v = g('aeiouy', '')
  n = letters[-c(1, 5, 9, 15, 21, 25)]
  l = data.frame(n, g('pgtvkhjglmnbqrzdfwxs', ''))
  y = min(match(n, a)[which(match(n, a) > min(match(v, a), na.rm = T))])
  m = l[which(l$n == a[y]), 2]
  e <-a[-c(1:y)][min(match(v, a[-c(1:y)]), na.rm = T)]
  paste0(paste0(a[c(1:y)], collapse = ''), m, e, m, e, collapse = "")
}
Andrew Haynes
la source
Je crois que votre compte est éteint - je compte 340 octets
Taylor Scott
4

BlitzMax, 190 octets

s$=Input()For i=1To s.Length
f="aeiouy".Contains(s[i-1..i])If f v=i If c Exit
If v And c|f=0c=i
Next
t$="bpdtfvgkcgsz"x$=s[c-1..c]r=t.Find(x)~1If r>=0x=t[r..r+1]
x:+s[v-1..v]Print s[..c]+x+x

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:

SuperStrict
Framework BRL.StandardIO

Local s:String = Input()
Local v:Int
Local c:Int

For Local i:Int = 1 To s.Length
    Local f:Int = "aeiouy".Contains(s[i - 1..i])
    If f Then
        v = i
        If c Then Exit
    End If
    If v And c | f = 0 Then c = i
Next

Local t:String = "bpdtfvgkcgsz"
Local x:String = s[c-1..c]
Local r:Int = t.Find(x) ~ 1
If r >= 0 Then x = t[r..r + 1]
x :+ s[v - 1..v]
Print s[..c] + x + x

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:

couverture de couverture

création creatdidi

programmation progkaka

stupidité stupbibi

blah blahhaha

Étoile de boule de feu
la source
lien vers blitzmax repo?
Citron destructible
@DestructibleLemon BlitzMax a été créé en tant que langage principalement pour le développement de jeux amateurs et avec un compilateur exclusif vendu pour de l'argent. Bien qu'il soit maintenant gratuit et disponible à partir d' ici , je pense que le compilateur n'est pas encore open source. Il existe une implémentation alternative (repo ici , construit ici ), qui n'exécutera cependant que la version non golfée du code ci-dessus en raison de l'absence d'un paramètre "non strict" autorisant l'omission des déclarations de variable.
FireballStarfish
Utilisation intelligente de XOR sur index - je l'utiliserai probablement un jour. Je vous remercie.
AI Breveleri
4

Perl, 71 octets

s#[aeiouy]+(.)\K.*?([aeiouy]).*#"$1$2"=~y/bcdfgkpstvz/pgtvkgbzdfs/rx2#e

Courez aussi avec perl -pe. Quelques octets de moins que la solution Perl précédente. Certes, je suis également inspiré par là.

SomeDude
la source
4

05AB1E , 101 104 88 octets

-16 octets grâce à Okx

J'espère en quelque sorte que cela peut être fait de manière plus efficace.

žOÃćIsk>[DIs£¤žPså#\>]s[DIsèDžOså#\>]ŠŠ"bpcgdtfvgkhhjjkgllmmnnpbqqrrsztdvfwwxxzs"S2ôDí«ø`Šs¤sŠksŠèsŠì2׫

Essayez-le en ligne!

Explication

                  Argument: s
žOÃ0èk            Get index of first vowel in s
>[DIs£¤žPså#\>]   Increment index and split s until last character of substring is a consonant
s[DIsèDžOså#\>]   Increment index an get character at index in s until character is a vowel
ŠŠ                Rearrange stack
.•7¶ëÒ—Öb´ƒ≠Ä“šʒƵJ^ÝV“Îpи•S2ôDí«ø`   Prepare character substitution map
Šs                Rearrange stack
¤                 Last character of substring
sŠ                Rearrange stack (yes, again)
k                 Index of last character in substitution key list
sŠ                Rearrange stack (it won't stop)
è                 Character at index in character substitution value list
sŠ                Rearrange stack (ONE LAST TIME)
ì2׫              Prepend substitution consonant before vowel, duplcicate and concatenate with the substring from the very beginning
Kalsowerus
la source
Vous pouvez remplacer "bpcgdtfvgkhhjjkgllmmnnpbqqrrsztdvfwwxxzs"par .•7¶ëÒ—Öb´ƒ≠Ä“šʒƵJ^ÝV“Îpи•pour économiser 15 octets
Okx le
Vous pouvez également remplacer žOÃćIskpar žOÃ0èkpour enregistrer un autre octet.
Okx
@Okx Je pense avoir vraiment besoin d'apprendre quelques techniques de compression de chaînes. Merci!
kalsowerus
@ kalsowerus Je sais que cela fait longtemps, mais vous pouvez jouer au golf 8 octets comme suit: ž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. Et peut être н, et j'ai remplacé 2׫par DJpour 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)
Kevin Cruijssen
3

Cristal, 130 octets

c=/[aeiouy]/
x,y,z=ARGV[0].partition /[^aeiouy]*#{c}*/
k=z[0]
b=((i="pgtvkgbqrzdfs"=~/#{k}/)?"bcdfgkpqrstvz"[i]: k)+z[c]
p y+k+b*2

Comment ça fonctionne

c = /[aeiouy]/

stocke une expression rationnelle pour la recherche de la première voyelle c.

x, y, z = ARGV[0].partition /[^aeiouy]*#{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.

k = z[0]

obtenir le premier caractère, la consonne pertinente.

i = "pgtvkgbqrzdfs" =~ /#{k}/

obtenir l'index de la consonne à l'intérieur de la chaîne de gauche ou nil.

b = ((i = ...) ? "bcdfgkpqrstvz"[i] : k) + z[c]

Si in'est pas nil, utilisez cet index pour la deuxième chaîne (sorte de hachage golfée).

Si ic'est le cas nil, utilisez le caractère original.

ensuite, ajoutez la première voyelle de z.

p y + k + (b * 2)

enfin, affiche la première partie de la première expression rationnelle y, la première consonne ket deux fois la chaîne calculée précédemment b.

Essayez-le en ligne .

Domii
la source
2

Lua, 164 157 octets

w=arg[1]
i,j,a,b=w:find('[aeiouy]+([^aeiouy]+)(.)')
print(w:sub(1,j-#a)..(('pgtvkhjglmnbqrzdfwxs'):sub(('bcdfghjklmnpqrstvwxz'):find(a:sub(1,1)))..b):rep(2))

Edition 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!):

function covfefy(word)
  i, j, a, b = word:find('[aeiouy]+([^aeiouy]+)(.)')

  -- 'a' is one or several consonants following the first vowel, b is the first vowel after that
  -- 'i' is the index of the beginning of 'a', 'j' the index of 'b'

  cov = word:sub(1, j - #a)

  -- Look for the first letter of 'a' in the voiced/voiceless table
  f = ('pgtvkhjglmnbqrzdfwxs'):sub(('bcdfghjklmnpqrstvwxz'):find(a:sub(1, 1)))

  return cov .. (f .. b):rep(2)
end

N'hésitez pas à donner des commentaires :)

Remarque: Si vous vous le demandez, utilisez MoonScript avec 149 octets de long!

Kyrio
la source
2

JavaScript (ES5), 237 229 octets

function(s){r=['aeiouy','bcdfgkpstvz','pgtvkgbzdfs']i=0,p=''while(p+=s[i],r[0].indexOf(s[i++])<0);while(p+=s[i],~r[0].indexOf(s[i++]));b=s[i-1];while(r[0].indexOf(s[i++])<0);c=r[1].indexOf(b)d=((~c)?r[2][c]:b)+s[i-1]return p+d+d}

Essayez-le en ligne!

Probablement pas le plus risqué, mais c’est l’ES5.

Récemment corrigé un bug. Exemple de sortie:

creation->creatdidi
coverage->covfefe
example->exxaxa
programming->progkaka
code->codtete
president->preszizi
Poulpe
la source
2

sed, 106 (105 + 1) octets

C'est sed avec le -Edrapeau, qui compte apparemment pour un octet.

s/([aoeuiy][^aoeuiy])[^aoeuiy]*(.).*/\1\2/
h
s/.*(..)/\1\1/
y/bcdfgkpstvz/pgtvkgbzdfs/
x
s/.$//
G
s/\n//g

Essayez-le en ligne!

zgrep
la source
2

C #, 584 581 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:

namespace System{class B{static void Main(string[]args){var s="creation";var t="aeiou";int i=0,j=0,l=s.Length;char c=' ',f=' ';for(int x=0;x++<l;){if(t.IndexOf(s[x])>=0){i=x;break;}}for(int x=i;x++<l;){if(!(t.IndexOf(s[x])>=0)){j=x;c=s[x];for(int y=x;y++<l;){if (t.IndexOf(s[y])>=0){f=s[y];goto W;}}}}W:switch(c){case'b':c='p';break;case'c':c='g';break;case'd':c='t';break;case'f':c='v';break;case'g':c='k';break;case'k':c='j';break;case'p':c='b';break;case's':c='z';break;case't':c='d';break;case'v':c='f';break;case'z':c='s';break;}Console.Write(s.Substring(0,l-i-1)+c+f+c+f);}}}

Version lisible:

namespace System
{
    class B
    {
        static void Main(string[] args)
        {
            var s = "creation";
            var t = "aeiou";
            int i = 0, j = 0, l = s.Length;
            char c = ' ', f = ' ';
            for (int x = 0; x++ < l; )
            {
                if (t.IndexOf(s[x]) >= 0)
                {
                    i = x; break;
                }
            }
            for (int x = i; x++ < l;)
            {
                if (!(t.IndexOf(s[x]) >= 0))
                {
                    j = x; c = s[x];
                    for (int y = x; y++ < l;)
                    {
                        if (t.IndexOf(s[y]) >= 0)
                        {
                            f = s[y];
                            break;
                        }
                    }
                }
            }
            switch (c)
            {
                case 'b': c = 'p';
                    break;
                case 'c': c = 'g';
                    break;
                case 'd': c = 't';
                    break;
                case 'f': c = 'v';
                    break;
                case 'g': c = 'k';
                    break;
                case 'k': c = 'j';
                    break;
                case 'p': c = 'b';
                    break;
                case 's': c = 'z';
                    break;
                case 't': c = 'd';
                    break;
                case 'v': c = 'f';
                    break;
                case 'z': c = 's';
                    break;
            }
            Console.Write(s.Substring(0, l - i - 1) + c + f + c + f);
        }
    }
}
Brandon Hao
la source
1
Je ne suis pas un expert, mais je pense que vous pouvez ajouter l’incrémentation au comparateur dans la boucle for, c’est-à-dire x++ < l, ou quelque chose du genre (peut l > x++- être si le premier ne fonctionne pas). pas sûr cependant
Citron destructible
@DestructibleLemon Merci pour le tuyau!
Brandon Hao
2

SmileBASIC 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.

V$="AEIOUY
LINPUT W$REPEAT I=I+1UNTIL.<=INSTR(V$,W$[I-1])&&.>INSTR(V$,W$[I])J=I
WHILE.>INSTR(V$,W$[J])J=J+1WEND?LEFT$(W$,I+1)+("PGTVKHJGLMNBQRZDFWXS"[INSTR("BCDFGHJKLMNPQRSTVWXZ",W$[I])]+W$[J])*2

Explication détaillée ici!

escargot_
la source
2

05AB1E , 55 octets

η.ΔžOSåàyžPSÅ¿à*}ÐIsKžOÃнsθU.•gÍĆdQ¸G•SDXåiÂXQÏθë\X}ìDJ

Essayez-le en ligne ou vérifiez tous les cas de test .

Explication:

η                        # Suffixes of the (implicit) input
                         #  i.e. "creation" → ["c","cr","cre","crea","creat","creati","creato","creatio","creation"]
        }              # Find the first for which the following is truthy:
   žO                    #  Push vowels (including y): "aeiouy"
     S                   #  Convert it to a list of characters: ["a","e","i","o","u","y"]
      å                  #  Check for each if they're in the current (implicit) suffix
                         #   i.e. "creat" → [1,1,0,0,0,0]
       à                 #  Pop and push the max (basically check if any are truthy)
                         #   i.e. [1,1,0,0,0,0] → 1
   y                     #  Push the suffix again
    žP                   #  Push the consonants (excluding y): "bcdfghjklmnpqrstvwxz"
      S                  #  Convert to a list of characters: ["b","c","d","f","g","h","j","k","l","m","n","p","q","r","s","t","v","w","x","z"]
       Å¿                #  Check for each if the suffix ends with it
                         #   i.e. "creat" → [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0]
         à               #  Pop and push the max (basically check if any are truthy)
                         #   i.e. [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0] → 1
   *                     #  Check if both are truthy
                         #   i.e. 1 and 1 → 1
           Ð             # Triplicate the found suffix
            I            # Push the input
             s           # Swap the top two items on the stack
                         #  i.e. stack contains now: "creat","creat","creation","creat"
K                        # Remove the suffix from the input
                         #  i.e. "creation" and "creat" → "ion"
 žOÃ                     # Only leave the vowels
                         #  i.e. "ion" → "io"
    н                    # Pop and push the first character
                         #  i.e. "io" → "i"
s                        # Swap again so the prefix is a the top of the stack again
 θ                       # Pop and push the last character
                         #  i.e. "creat" → "t"
  U                      # Pop and store it in variable `X`
   .•gÍĆdQ¸G            # Push string "bcdfkszgvtgp"
             S           # Convert to list of characters: ["b","c","d","f","k","s","z","g","v","t","g","p"]
              D          # Duplicate it
               Xåi       # If `X` is in this string:
                  Â      #  Bifurcate the list (short for Duplicate & Reverse copy)
                         #   i.e. ["b","c","d","f","k","s","z","g","v","t","g","p"]
                         #   → ["p","g","t","v","g","z","s","k","f","d","c","b"]
                   XQ    #  Check if they're equal to variable `X`
                         #   i.e. `X` = "t" → [0,0,1,0,0,0,0,0,0,0,0,0]
                     Ï   #  Only keep the truthy values
                         #   i.e. ["b","c",...,"g","p"] and [0,0,1,0,0,0,0,0,0,0,0,0]
                         #    → ["d"]
                      θ  #  Pop and push the last one
                         #   i.e. ["d"] → "d"
                 ë       # Else:
                  \      #  Discard the duplicate list from the stack
                   X     #  And push variable `X` again
                 }       # Close the if-else
                  ì      # Prepend the second character in front of the first
                         #  i.e. "d" and "i" → "di"
                   D     # Duplicate it
J                        # Join the stack together (and output implicitly)
                         #  i.e. "creat" and "di" and "di" → "creatdidi"

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".

Kevin Cruijssen
la source