Compte rendu
Les extraterrestres se sont installés sur terre et étrangement, leur alphabet est exactement le même que le nôtre. Leur langage est également très similaire au nôtre avec quelques différences très distinctes et faciles à calculer.
Défi
Prenez une chaîne et sortez l'équivalent de la langue de l'étranger. La traduction fonctionne comme telle:
Échangez toutes les voyelles du mot avec le correspondant:
Vowel | With
--------+--------
a | obo
e | unu
i | ini
o | api
u | iki
Vous pouvez également écrire un autre traducteur pour traduire Alien-> English, ceci est cependant facultatif.
Exemples
Input: Shaun
Output: Shoboikin
Input: Java
Output: Jobovobo
Input: Hello, World!
Output: Hunullapi, Wapirld!
Si la voyelle est en majuscule, vous mettez en majuscule la première lettre.
Input: Alan
Output: Obolobon
Input: Australia
Output: Oboikistroboliniobo
Règles
- Des échappatoires standard s'appliquent
- Doit fonctionner pour le texte qui contient de nouvelles lignes
Vous pouvez soit écrire une fonction, lambda ou un programme complet
Capingrobotikilobotiniapins apin wrinitining thunu runuvunursunu trobonslobotapir!
Réponses:
Haskell,
10091 octetsla source
TI-Basic, 173 + 59 + 148 = 380 octets
Espérons que les extraterrestres utilisent des calculatrices TI-83/84;)
Programme principal, 173 octets
BONUS: Gardez la deuxième ou la troisième ligne selon que vous souhaitez un traducteur normal ou inversé.
Sous-programme (
prgmQ
), 59 octets:Sous-programme (
prgmR
), 148 octets:PS
~
représente un jeton0x81
et@
représente un jeton0x7F
, en savoir plus ici .Une partie de comptage PPS pourquoi ces programmes ont un octet de poids fort est dû au fait
sub(
,inString(
,length(
et toutes les lettres minuscules sont deux octets chacun ...la source
prgmR
etprgmQ
dans vos titres de code une fois?Perl, 56 octets
Comprend +1 pour
-p
Donnez votre avis sur STDIN
alien.pl
:Fonctionne comme indiqué, mais remplacez les
\xXX
échappements par le personnage réel pour obtenir le score réclaméla source
sed 89
la source
Python,
999593 octetsSur ideone.com ...
Assez simple. Prenez simplement l'index dans lequel nous trouvons chaque caractère dans la liste des voyelles et utilisez-le pour extraire les trois caractères dont nous avons besoin. S'il n'est pas trouvé,
.find()
renvoie-1
donc simplement coller le caractère actuel à la fin de la chaîne. Les espaces sont nécessaires pour que toute lettre"a"
n'inclue pas l'ajoutc
. Les voyelles traduites sont regroupées par ordre alphabétique (la première lettre de chaque traduction, puis la seconde, puis la troisième).la source
["aeiouAEIOU".find(c)::11] for
05AB1E ,
282720 octetsEssayez-le en ligne!
Unuxplobonobotiniapin
la source
PHP, 91 octets
la source
Python, 129 octets
Découvrez-le sur ideone.com
Voici une version plus joliment formatée:
Les parties les plus intéressantes sont celles
{ ... }.get(l.lower(), l)
qui essaient de rechercher la lettre stockéel
convertie en minuscules dans le dictionnaire et retournent soit la version traduite (si trouvée), soit la lettre d'origine,et
[str, str.capitalize][ord(l) < 91]( ... )
qui vérifie si la lettre d'origine était une majuscule ( Point de code ASCII inférieur à 91), puis appelle lastr()
fonction avec la lettre comme argument (si ce n'était pas une majuscule, ne fait rien) ou lastr.capitalize()
fonction (convertit la première lettre de la chaîne d'argument en majuscule).la source
C (gcc) ,
150 141 136134 octetsEssayez-le en ligne!
Basé sur la réponse de @algmyr et -8 grâce à @ ASCII uniquement
Version moins golfée
la source
a;l;i;e(char*n){for(char*v=" AEIOU",*t;i=*n++;printf("%c%c%c"+4*!a,(a?" OUIAI"[a]:i)|i&32," bnnpk"[a]," ouiii"[t=index(v,i-32*l),a=t?t-v:0]))l=i>96;}
a;l;i;e(char*n){for(char*v="AEIOU",*t;i=*n++;printf("%c%c%c"+4*!a,(a?" OUIAI"[a]:i)|i&32," bnnpk"[a]," ouiii"[t=index(v,i&95),a=t&&t-v<5?t-v+1:0]));}
a;l;i;e(char*n){for(char*v=" AEIOU",*t;i=*n++;)printf("%c%c%c"+4*!a,a?" OUIAI"[a]|i&32:i," bnnpk"[a]," ouiii"[t=index(v,i-i/96*32),a=t?t-v:0]);}
Lot, 215 octets
Prend entrée sur STDIN. Le traitement caractère par caractère a l'avantage d'être sensible à la casse.
la source
Pyth, 42 octets
Un programme qui prend l'entrée sur STDIN et imprime la sortie.
Essayez-le en ligne
Comment ça fonctionne
la source
C, 167 octets
Je ne voulais vraiment pas rompre avec mon habitude de toujours faire les fonctions principales lors du codage C, mais c'est beaucoup plus court que la version avec un principal et de cette façon j'ai reçu une autre lettre pour épeler ce que je voulais!
Golfé
Commenté
Il y a quelque chose de spécial à propos de C et à quel point vous pouvez être horrible avec des pointeurs et autres.
la source
Rétine , 60 octets
Le nombre d'octets suppose un codage ISO 8859-1.
Essayez-le en ligne!
la source
Javascript (ES6),
949392 octets1 octet enregistré grâce à edc65
1 octet enregistré grâce à Neil
Démo
la source
.indexOf
et.search
utiliser à la~
place de<0
s=>s.replace(/[aeiou]/gi,c=>"ouiaiOUIAI"[n="aeiouAEIOU".indexOf(c)]+"bnnpk"[n%=5]+"ouiii"[n])
qui est toujours de 93 octets. Mais comme ilc
est désormais connu que c'est une voyelle, vous pouvez désormais l'utilisersearch
au lieu d'indexOf
enregistrer un octet!Java 8, 172 octets
non golfé:
Et Alien revient à l'anglais (171 octets):
Non golfé:
la source
Tcl, 75 octets
La chaîne à traduire se trouve dans la variable
s
.la source
Mathematica, 128 octets
Je ne sais pas si un programme plus court peut être obtenu en utilisant
IgnoreCase->True
une vérification de cas.la source
C 178 octets
la source
C,
163162159 octetsla source
char*t="aeiou";
en boucle enregistre 1 octetC #,
133121 octetsModifier (grâce à
milk
)merci :) Je connais cette surcharge mais je l'ai complètement oubliée en écrivant ceci ..
la source
Select(char, int)
surcharge afin de ne pas avoir à déclareri
et pouvez tout mettre sur une seule ligne.s=>string.Concat(s.Select((c,i)=>(i="AIUEOaiueo".IndexOf(c))>-1?"OboIniIkiUnuApioboiniikiunuapi".Substring(i*3,3):c+""));
C,
207202 octets (merci à Cyoce)1) Je déteste omettre le type avant tout type de déclarations
2) Je n'aime pas vraiment mettre du code inutilisable (sans fonction main ())
Usage:
la source
(c=getchar())!= EOF
peut devenir~(c=getchar())
Swift 2.2 196 octets
¯ \ _ (ツ) _ / ¯
Golfé
non golfé
la source
var r = [
nécessaires?Perl 6 ,
8482 octetsÉtendu:
Usage:
la source
C - 192 octets
(ajout de nouvelles lignes pour plus de clarté)
Recherchez simplement des tables et un commutateur booléen.
Recherchez chaque lettre dans le tableau (chaîne) de voyelles; s'il est trouvé, modifiez-le selon la règle du tableau
s
. Imprime chaque caractère suivi d'une chaîne: si une voyelle a été trouvée, imprime le caractère modifié par la valeur ens
suivi du reste de la syllabe stockée dans le tableauf
; si aucune voyelle n'a été trouvée, imprimez le caractère original et une chaîne vide.la source
Rubis,
10293918878 octetsExplication:
Exécutez la ligne comme
ruby -pe "gsub(/[#{b='aeiouAEIOU'}]/){'obounuiniapiikiOboUnuIniApiIki'[b.index($&)*3,3]}"
, le type suivant, par exemple,Australia
elle devrait sortir:Oboikistroboliniobo
.C'est assez simple, remplacez toutes les voyelles par une sous-chaîne basée sur l'index de la voyelle à remplacer en (b), 3 fois et les 3 caractères suivants dans la chaîne de traduction.
la source
b
dans le Regexp (/[#{b=...}/
).p $*
n'est pas nécessaire-p
indicateur pour enregistrer des octets supplémentaires.ruby -pe 'gsub(/[#{b="aeiouAEIOU"}]/){"obounuiniapiikiOboUnuIniApiIki"[b.index($&)*3,3]}'
-pe
). Comment obtenez-vous 71?TI-BASIC,
201197195 octetsDire que je trouverais ici une autre réponse TI-BASIC!
Quoi qu'il en soit, l'entrée est une chaîne anglaise
Ans
.La sortie est la chaîne traduite.
Exemples:
Explication:
(Ajout de nouvelles lignes pour plus de lisibilité. Plusieurs lignes de la même ligne seront signalées par un
:
dans le bloc de code suivant.)Remarques:
TI-BASIC est un langage tokenisé. Le nombre de caractères n'est pas égal au nombre d'octets.
Les lettres minuscules de TI-BASIC ont chacune deux octets.
la source