Ce que tu veux dire


36

J'adore ce simple chiffre, c'est tellement amusant de lire des mots qui ne sont pas tout à fait lisibles par l'homme et de combler les lacunes ...

Ot wes thi bist uf tomis, ot wes thi wurst uf tomis, 
ot wes thi egi uf wosdum, ot wes thi egi uf fuuloshniss, 
ot wes thi ipuch uf biloif, ot wes thi ipuch uf oncridaloty, 
ot wes thi siesun uf loght, ot wes thi siesun uf derkniss, 
ot wes thi sprong uf hupi, ot wes thi wontir uf dispeor, 
wi hed ivirythong bifuri as, wi hed nuthong bifuri as, 
wi wiri ell guong dorict tu hievin, wi wiri ell guong dorict thi uthir wey – 
on shurt, thi piroud wes su fer loki thi prisint piroud, 
thet sumi uf ots nuosoist eathurotois onsostid un ots biong riciovid, 
fur guud ur fur ivol, on thi sapirletovi digrii uf cumperosun unly.

Les règles sont super simples:

  • Accepter du texte comme saisie (caractères ascii, lettres majuscules / minuscules et signes de ponctuation).
  • Pour chaque voyelle, tournez-la à la voyelle suivante ou revenez au début.
    • a => e
    • e => i
    • i => o
    • o => u
    • u => a
  • Les voyelles majuscules restent majuscules, les minuscules restent minuscules.
  • Afficher le texte après ces conversions.
  • Pas besoin de supporter les accents.
  • Tous les autres caractères doivent rester inchangés.
  • Essayez de le faire dans le plus petit nombre d'octets.
  • N'importe quelle vieille langue que tu aimes.

Cas de test

It was the best of times, it was the worst of times,
it was the age of wisdom, it was the age of foolishness,
it was the epoch of belief, it was the epoch of incredulity,
it was the season of light, it was the season of darkness,
it was the spring of hope, it was the winter of despair,
we had everything before us, we had nothing before us,
we were all going direct to heaven, we were all going direct the other way –
in short, the period was so far like the present period,
that some of its noisiest authorities insisted on its being received,
for good or for evil, in the superlative degree of comparison only.

En dehors:

Ot wes thi bist uf tomis, ot wes thi wurst uf tomis, 
ot wes thi egi uf wosdum, ot wes thi egi uf fuuloshniss, 
ot wes thi ipuch uf biloif, ot wes thi ipuch uf oncridaloty, 
ot wes thi siesun uf loght, ot wes thi siesun uf derkniss, 
ot wes thi sprong uf hupi, ot wes thi wontir uf dispeor, 
wi hed ivirythong bifuri as, wi hed nuthong bifuri as, 
wi wiri ell guong dorict tu hievin, wi wiri ell guong dorict thi uthir wey – 
on shurt, thi piroud wes su fer loki thi prisint piroud, 
thet sumi uf ots nuosoist eathurotois onsostid un ots biong riciovid, 
fur guud ur fur ivol, on thi sapirletovi digrii uf cumperosun unly.

Dans:

The quick brown fox jumps over the lazy dog.

En dehors:

Thi qaock bruwn fux jamps uvir thi lezy dug.

Dans:

Home is where the heart is.

En dehors:

Humi os whiri thi hiert os.

Dans:

Boaty McBoatface

En dehors:

Buety McBuetfeci

Dans:

AEIOUaeiou

En dehors:

EIOUAeioua

Dans:

Programming Puzzles And Code Golf

En dehors:

Prugremmong Pazzlis End Cudi Gulf


4
Hmm. Olde anglais?
iammax

10
Encore une lecture plus facile que Beowulf.
Smeato

4
On dirait un traducteur de kiwi pour moi.
Magoo

1
J'aime la façon dont le «mal» quand on chiffre «ivol» est effectivement prononcé de la même manière.
Enrico Borba

Réponses:



22

MS-SQL, 51 octets

Fonctionne sur SQL 2017 ou supérieur:

SELECT TRANSLATE(v,'AEIOUaeiou','EIOUAeioua')FROM t

La nouvelle fonction TRANSLATEeffectue un remplacement de caractère individuel, elle est donc parfaitement adaptée à ce défi.

La saisie s'effectue via une table préexistante t avec varchar colonne v , conformément à nos règles IO .

Dans ce cas, la table doit être créée à l'aide d'un classement sensible à la casse , soit en s'exécutant sur un serveur sensible à la casse, soit en utilisant le COLLATEmot clé (non comptabilisé dans le total des caractères):

CREATE TABLE t(v varchar(max) COLLATE Latin1_General_CS_AS)

EDIT : SSMS peut couper la longue citation ci-dessus lors du renvoi du résultat dans une fenêtre "résultats en texte". Il s'agit d'un paramètre client et non d'un bogue dans mon programme .

Pour résoudre ce problème, allez à Tools > Options > Query Results > SQL Server > Results to Textet augmentez le "Nombre maximal de caractères affichés dans chaque colonne".


1
Je suis vraiment choqué que SQL soit même proche de la concurrence pour cela. En outre, c'est une fonction cool! Merci de nous l'avoir dit :)
La poursuite de Monica

@NicHartley Oui, ils semblent ajouter quelques fonctions utiles à chaque version. Vous pouvez aussi l'imbriquer avec REPLACEquelques astuces: REPLACE(TRANSLATE(v,'1234567890','xxxxxxxxxx'),'x','')éliminer tous les chiffres d'une chaîne, par exemple. Encore long, mais beaucoup plus court que 10 imbriqués REPLACE.
BradC


14

Haskell , 52 octets

(a:b)!c|a/=c=b!c|1>0=b!!0
a!b=b
map("aeiouaAEIOUA"!)

Essayez-le en ligne!

Lynn m'a sauvé deux octets en soulignant qu'il !!0est plus court que head.

Explication

Si vous n'avez jamais codé en Haskell, cela ressemblera probablement à un tas de charabia. Alors commençons par ungolf, puis décomposons-le:

(a:b)!c
 |   a/=c   = b!c
 |otherwise = b!!0
a!b=b
map("aeiouaAEIOUA"!)

D'abord nous avons une fonction ! qui prend une chaîne set un caractère c. Notre première correspondance de modèle accepte les entrées si la chaîne n'est pas vide. Si la chaîne n'est pas vide, nous comparons son premier caractère à c. Si le premier caractère n'est pas égal à, cnous le lançons et l'appelons à !nouveau avec le reste de la chaîne et c. S'il est égal, nous retournons le deuxième caractère de la chaîne.

Notre correspondance de modèle suivante intercepte la chaîne dans tous les autres cas, c'est-à-dire si la chaîne est vide. Dans ce cas, nous venons de revenir c.

Dans l’ensemble, cette fonction prend un caractère cet une chaîne set renvoie le caractère après la première occurrence de cin s. Si on passe ça avecaeiouaAEIOUA cela effectuera notre chiffrement sur un seul caractère. Pour rendre notre fonction entière, nous devons mapper cela à travers la chaîne.


12

La rétine ,dix 9 8 octets

T`uo`vVA

Essayez-le en ligne!

Sauvé 1 octet grâce à Neil! Et un autre octet grâce à Martin!

La nouvelle version de rétine a des classes de voyelles, ce qui rend le résultat un peu plus court. La translittération utilise également la classe "autre". Donc, la toclasse ressemble à "aeiouAEIOUA" tandis que la fromclasse ressemble à "uaeiouAEIOUA"

Cela ne pose aucun problème, car le deuxième umappage Ane sera jamais effectué car il uétait déjà mappé sur a.


9 octets: T`_o`uvUV.
Neil

C'est une réponse remarquablement courte!
AJFaraday

@ Neil intelligent, merci! Je pensais que le fait de placer un point _de départ le traiterait au pied de la lettre, mais il semblerait que ce ne soit pas le cas.
FryAmTheEggman le

3
Vous pouvez en enlever un de plus, mais je n'arrive pas à lier Stax, malheureusement: tio.run/##HYnBDoIwEAXv/…
Martin Ender

@MartinEnder Merci! C'est une configuration intelligente, mélangeant les deux. Je n'ai pas Yencore beaucoup utilisé , je vais donc tenter le coup demain.
FryAmTheEggman le


6

Python 3, 62 octets

lambda x:x.translate(str.maketrans('aeiouAEIOU','eiouaEIOUA'))

Créez une table de traduction (dictionnaire) avec strla str.maketransméthode statique de . Traduisez les caractères pertinents en leur caractère de destination.


Où cela effectue-t-il I / O?
reinierpost

@reinierpost C'est une fonction. L'entrée se fait via le xparamètre. En python, les fonctions lambda n'ont pas besoin d'une instruction return.
mypetlion

6

C, 85 76 67 65 64 octets

f(char*c){for(;*c;)putchar(1[index("AEIOUAaeioua",*c++)?:c-2]);}

Port de Kevin Cruijssen est Java réponse . Essayez-le en ligne ici .

Merci à Kevin Cruijssen pour avoir joué au golf 9 octets, à Christoph pour avoir joué au golf 11 octets et à ceilingcat pour avoir joué au golf 1 octet.

Version non-golfée:

f(char* c) { // function taking a char array as parameter and implicitly returning an unused int
    for(; *c ;) // loop over the input
        putchar(1 [index("AEIOUAaeioua", * c++) ?: c-2]); // find the first pointer to the current char in the vowels string, NULL if not present; if it's not NULL, print the next vowel, otherwise just print the char
}

1
Semble être une extension non standard de gcc. Je l'ai su de php et l'ai simplement essayé.
Christoph

1
@Christoph J'aime votre utilisation de la récursivité, mais je ne suis pas sûr que nous puissions produire une fin \0. De plus, cela ne fonctionne pas quand il est compilé avec clang: tio.run/##S9ZNzknMS///…
OOBalance

1
@Christoph: J'étais curieux de savoir où se trouvait le comportement indéfini, alors j'ai débogué la version clang, après l'avoir ungolfée un peu plus. const char *res = strchr("AEIOU...", 0)renvoie un pointeur sur le terminateur dans le littéral de chaîne. putchar(res[1])lit la fin de la chaîne littérale. Avec gcc, il arrive apparemment de trouver un autre octet zéro et cela fonctionne, mais avec clang, cela donne un 73 'I'(probablement mainle littéral de chaîne de, "C'était ...", mais je n'ai pas vérifié l'ASM). Donc, putcharne retourne pas 0, et nous finissons par commettre *c++une erreur de segmentation quand nous lisons une page non mappée.
Peter Cordes

2
@PeterCordes ouais je l'ai découvert ici après avoir eu un soupçon. Quoi qu'il en soit, voici encore 2 octets enregistrés f(char*c){for(;*c;)putchar(1[strchr("AEIOUAaeioua",*c++)?:c-2]);}. C'est tout pour le moment je suppose.
Christoph

1
@Rogem En raison de la commutativité de l' addition, a[b]==*(a+b)==*(b+a)==b[a]. Donc1[...]==(...)[1]
ceilingcat



5

Python 2 , 79 68 67 octets

-1 octet grâce à @ArnoldPalmer

V='uaeiouAEIOUA'
print''.join((V[1:]+c)[V.find(c)]for c in input())

Essayez-le en ligne!


67 octets . Aussi, désolé si vous avez été inondé de notifications, je n'ai pas posté de commentaire depuis un moment et j'ai oublié comment le faire.
Arnold Palmer

@ArnoldPalmer Merci! C'est bon, j'étais absent et ils m'ont tous manqué: D
Dead Possum le



4

Pyth, 17 octets

em=.rQdrB"aeiou"1

Essayez-le ici

em=.rQdrB"aeiou"1
 m                  For each string...
       rB"aeiou"1   ... in ['aeiou', 'AEIOU']...
  =.rQd             ... cyclically rotate the characters in the input.
e                   Take the last.


4

Java 10, 97 87 octets

s->{for(var c:s){var t="AEIOUAaeioua"+c+c;System.out.print(t.charAt(t.indexOf(c)+1));}}

-10 octets après avoir été inspirés par la réponse JavaScript de @Arnauld (sa version de 60 octets) .

Essayez-le en ligne.

Explication:

s->{                         // Method with character-array parameter and no return-type
  for(var c:s){              //  Loop over the input characters
    var t="AEIOUAaeioua"     //  Temp-String containing the order of vowels 
                             //  (including additional 'A' and 'a'),
          +c+c;              //  appended with two times the current character
    System.out.print(        //  Print:
      t.charAt(              //   The character in String `t` at index:
         t.indexOf(c)+1));}} //    The (first) index of the current character in `t` + 1

4

05AB1E , 14 13 11 octets

žMDÀ‡žMuDÀ‡

Essayez-le en ligne!


1
Vous pouvez sauvegarder deux octets en prenant simplement l’entrée comme une chaîne multiligne, vous n’avez donc pas besoin de |et »: Essayez-le en ligne: 11 octets .
Kevin Cruijssen

@KevinCruijssen Merci! N'est-ce pas quelque chose qui a été corrigé dans une version récente de 05AB1E?
Kaldo

Aucune idée tbh. Seulement commencé 05AB1E depuis environ le début de cette année. Vous pouvez demander à @Adnan dans le chat 05AB1E quand la fonctionnalité a été ajoutée si vous voulez savoir.
Kevin Cruijssen


3

APL + WIN, 55 octets

Invites pour la chaîne d'entrée:

i←(10≥n←'AEIOUaeiou'⍳s)/⍳⍴s←⎕⋄s[i]←'EIOUAeioua'[n~11]⋄s

3

Oreillons, 38 octets

R T W $TR(T,"AEIOUaeiou","EIOUAeioua")

Normalement, Mumps n'ajoute pas de retour à la ligne car je ne voyais pas l'exigence de séparer l'entrée de la sortie. Cela semblait un peu bizarre au premier passage. Par exemple, la sortie du dernier cas de test ressemble à ceci:

Programming Puzzles And Code GolfPrugremmong Pazzlis End Cudi Gulf

Si vous voulez ajouter un retour chariot, ajoutez deux octets ainsi:

R T W !,$TR(T,"AEIOUaeiou","EIOUAeioua")

3

Vim + tpope / vim-abolish , 30 octets

:%S/{a,e,i,o,u}/{e,i,o,u,a}/g<cr>

Solution alternative, également 30 octets:

Oe,i,o,u<esc>|D:%s/{a,<C-r>"}/{<C-r>",a}/g

Selon la méta , les réponses de vim peuvent utiliser des plugins sans pénalité d'octet. Ce n'est pas une réponse vim, mais un vim + abol réponse .


Abolish est un plugin extrêmement utile. Cette section du fichier README décrit joliment le fonctionnement de cette commande (la Subvertcommande).


3

CJam , 29 19 octets

q"aeioua"_eu+_1m<er

Essayez-le en ligne!

-10 octets grâce à @Peter Taylor

Explication:

q                       # take all input
 "aeioua"               # push vowel pairs
         _eu            # duplicate, uppercase
            +_          # concatenate, duplicate again
              1m<       # rotate left by 1
                 er     # transliterate

Bien que la question ne soit pas spécifique au sujet de l'entrée, je pense que vous devriez probablement utiliser qplutôt que lde prendre l'entrée. Le premier cas de test semble être multiligne. Aussi, vous pouvez raccourcir "eioua"à _1m<. En fait, vous pouvez aller plus loin et jouer au golfq"aeioua"_eu+_1m<er
Peter Taylor

3

AutoHotkey , 24 octets

AuotHotkey remplace automatiquement les lettres de manière sensible à la casse.

a::e
e::i
i::o
o::u
u::a

2

PHP, 90 octets

Essayez-le en ligne

Code

function f($s){echo strtr($s,array_combine(str_split(UuAaEeIiOo),str_split(AaEeIiOoUu)));}

Explication

function f($s){
 echo strtr(
       $s,                          #The string to operate
       array_combine(               #combining arrays
            str_split(UuAaEeIiOo),  #splitting this strings
            str_split(AaEeIiOoUu))
              # With array combine php creates an array like
              # ["U"=>"A", "a"=>"e"....and so on]
              # strtr can replace strings in a string, using an array with 
              # the values to replace and with what replace each value.
 );
}

75 octets si exécuté avec php -rusing$argv

<?=strtr($argv,array_combine(str_split(UuAaEeIiOo),str_split(AaEeIiOoUu)));


2

str , 18 octets

[aeiouaAEIOUA]#D#U

Essayez-le en ligne!

Explication

                       implicit: over each character of the input:
[aeiouaAEIOUA]#D#U
[            ]         push this string
              #D       set this to the operation domain
                #U     set the charcter to the next character in the domain

2

PHP, 38 octets

Assez simple, pas très créatif, utilise strtrpour remplacer les voyelles:

<?=strtr($argn,aeiouAEIOU,eiouaEIOUA);

Courez avec echo '<input>' | php -nF <filename>ou essayez-le en ligne .


Cela ne suppose-t-il pas que l'entrée est affectée à la variable prédéfinie argn? Si c'est le cas, ce n'est pas valable. vous auriez besoin de passer la chaîne en tant qu'argument et de l'utiliser à la $argv1]place.
Shaggy

2
@Shaggy Non, si vous l'exécutez avec l' -Findicateur, cela fonctionne avec une entrée sur la ligne de commande. D'après la documentation PHP sur les options : -F --process-file PHP file to execute for every input line. Added in PHP 5.La définition de la variable d'essayer en ligne est simplement due au fait que certaines personnes n'ont pas installé PHP localement, et que je ne pouvais pas activer le -Fdrapeau dans TIO.
Davіd

1
Merci, @ David - c'est mon "quelque chose de nouveau" pour PHP aujourd'hui :)
Shaggy

2

q / kdb +, 36 33 octets

Solution:

{(v,2#x)1+(v:"aeiouaAEIOUA")?x}@'

Exemples:

q){(v,2#x)1+(v:"aeiouaAEIOUA")?x}@'"AEIOUaeiou"
"EIOUAeioua
q){(v,2#x)1+(v:"aeiouaAEIOUA")?x}@'"Programming Puzzles And Code Golf"
"Prugremmong Pazzlis End Cudi Gulf"

Explication:

Déterminez un index des voyelles, ajoutez-en un pour passer au suivant et indexez-le. Pensez-vous que cette approche peut être améliorée de manière significative ...

{(v,2#x)1+(v:"aeiouaAEIOUA")?x}@' / the solution
{                             }@' / apply lambda to each character of input
                            ?x    / look up x in...
          (                )      / do together
             "aeiouaAEIOUA"       / lookup list
           v:                     / save as v
        1+                        / add one
 (     )                          / do together
    2#x                           / take 2 copies of x
  v,                              / prepend v

Prime:

Mon ancienne solution ** de 36 octets (()) qui, à mon avis, est plutôt cool, mais il est nécessaire d’avancer sur les listes pour la rendre compétitive:

ssr/[;"uoiea%UOIEA%";"%uoiea%UOIEA"]

2

Charbon de bois , 35 octets

UT≔AUOIEAauoieaσF¹¹⊞υ➙§σ⊕ι§σι▷SR⟦Sυ

Essayez-le en ligne!

Méthode naïve.

Explication:

UT                                         Set trim option to on, so output won't be a rectangle
    ≔AUOIEAauoieaσ                          Assign "AUIOEAauioea" to s
                   F¹¹                      For i (ι) from 0 to 10
                       ⊞υ                   Push to u (initially empty list)
                          ➙                 Rule of:
                            §σ⊕ι            S[i + 1]
                                 §σι         to S[i]. This is so a->A gets overwriteen by a->e
                                    ▷SR⟦Sυ  Replace input as string using u (now a list of rules)

2

PHP , 76 octets.

$s=strtr($s,array_combine(str_split("aeiouAEIOU"),str_split("eiouaEIOUA")));

Vérifiez-le!

C'était le plus court que j'ai pu faire cela en PHP.

$s = //overwrite $s variable ($s should be a defined string or input)
    strtr(  //strtr replaces key => value pairs from arrays in a string
        $s, //the string we are converting
        array_combine( //create an array with key value pairs, key should be original vowel letter and value should be it's replacement
            str_split("aeiouAEIOU") //turn vowels (lower and upper) into an array
            ,str_split("eiouaEIOUA") //turn vowel replacements into an array
        )
    );
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.