Briefing

Les extraterrestres se sont installés sur terre et, curieusement, leur alphabet est exactement le même que le nôtre. Leur langage est également très similaire au nôtre avec des différences très distinctes et faciles à calculer.

Défi

Prenez une chaîne et affichez léquivalent linguistique de lalien. 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 -> Anglais, cest facultatif cependant.

Exemples

Input: Shaun Output: Shoboikin Input: Java Output: Jobovobo Input: Hello, World! Output: Hunullapi, Wapirld! 

Si la voyelle est en majuscule, vous mettez la première en majuscule lettre ..

Input: Alan Output: Obolobon Input: Australia Output: Oboikistroboliniobo 

Règles

  • Des échappatoires standard sappliquent
  • Doit fonctionner pour le texte qui en contient lignes
  • Vous pouvez écrire une fonction, un lambda ou un programme complet

    Capingrobotikilobotiniapins apin wrinitining thunu runuvunursunu trobonslobotapir!

Commentaires

  • Je ‘ ne sais pas quoi Vous pouvez également écrire un autre traducteur pour traduire Alien-

    Anglais est censé signifier. Pouvons-nous écrire le traducteur inversé au lieu du traducteur normal?

  • Peut-être que ‘ est juste moi, mais il ‘ Il nest pas évident pour moi que aussi porte ici ce sens. Quoi quil en soit, je ‘ ne sais pas en quoi il sagit dune règle si ‘ ne fait pas partie du réel tâche.
  • @Dennis Vous ‘ êtes un peu punudobontinic, mais je ‘ lai modifié pour le rendre plus clair.
  • Pourquoi lexigence de nouvelles lignes? À mon avis, cela nest pas nécessaire et ‘ najoute rien au point principal du défi.
  • Lentrée peut-elle contenir un caractère ASCII ou seulement un sous-ensemble . Par exemple, y aura-t-il jamais des nombres dans lentrée?

Réponse

Haskell, 100 91 octets

(>>= \x->last$[x]:[y|(z:y)<-words"aobo eunu iini oapi uiki AObo EUnu IIni OApi UIki",z==x]) 

Commentaires

  • Hoboskunull sûrement

Réponse

TI-Basic, 173 + 59 + 148 = 380 octets

Espérons que les extraterrestres utilisent TI- 83/84 calculatrices;)

Programme principal, 173 octets

BONUS: Conservez la deuxième ou la troisième ligne selon que vous voulez un traducteur normal ou inversé.

"("+Ans+")→Str1 "@a~obo@A~Obo@e~unu@E~Unu@i~ini@I~Ini@o~api@O~Api@u~iki@U~Iki@→Str2 <-- English to Alien "@obo~a@Obo~A@unu~e@Unu~E@ini~i@Ini~I@api~o@Api~O@iki~u@Iki~U@→Str2 <-- Alien to English For(I,2,length(Ans If "@"=sub(Str2,I-1,1 Then Str1+"~"+sub(Str2,I,inString(Str2,"@",I)-I prgmQ Ans→Str1 End End 

Sous-programme (prgmQ), 59 octets:

Ans→Str9 inString(Ans,"~ sub(Str9,Ans,length(Str9)-Ans+1→Str8 Str9 prgmR Repeat Str9=Ans+Str8 Ans+Str8→Str9 prgmR End 

Sous-programme (prgmR), 148 octets:

Ans→Str0 inString(Ans,"~→Z inString(Str0,"~",Ans+1→Y inString(sub(Str0,1,Z-1),sub(Str0,Z+1,Ans-Z-1→X sub(Str0,1,-1+inString(Str0,"~ If X sub(Str0,1,X-1)+sub(Str0,Y+1,length(Str0)-Y)+sub(Str0,X+length(sub(Str0,Z+1,Y-Z-1)),Z-X-length(sub(Str0,Z+1,Y-Z-1 

PS ~ représente le jeton 0x81 et @ représente le jeton 0x7F, en savoir plus ici .

PPS Une partie de la raison pour laquelle ces programmes ont un nombre doctets élevé est que sub(, inString(, length( , et toutes les lettres minuscules sont de deux octets chacune …

Commentaires

  • Je pense que vous avez mélangé prgmR et prgmQ dans vos titres de code une fois?
  • Oui, merci davoir attrapé ça @ByteCommander 🙂

Réponse

Perl, 56 octets

Inclut +1 pour -p

Donner une entrée sur STDIN

alien.pl:

#!/usr/bin/perl -p s%\w%"`"&$&|("A\x0fboE\x15nuI\x09niO\x01piU\x09ki"=~/\u$&\K.../,$&)%eg 

Fonctionne comme indiqué, mais remplacez les échappements \xXX par le caractère réel pour obtenir le score réclamé

Commentaires

  • +1 Voté uniquement pour lavatar Alien. Je plaisante, la solution est bien aussi.
  • Jésus-Christ .. Perl à son meilleur, mesdames et messieurs.

Réponse

sed 89

s,a,&b\n,gi s,i,&n\r,gi s,o,&p\r,gi s,u,&k\r,gi s,e,&n\f,gi y,aeouAEOU\n\r\f,ouaiOUAIoiu, 

Commentaires

  • Est-ce fonctionne pour une entrée qui contient des nouvelles lignes?
  • @Jordan Oui. sed lit  » une ligne à la fois « . Donc, il va tout traiter jusquà la première nouvelle ligne, limprimer, imprimer une nouvelle ligne, puis recommencer sil y a plus de texte.
  • Ah, bien sûr. 👍🏻
  • @Jordan Ce nétait pas ‘ une règle quand jai écrit ceci, mais cela a quand même fonctionné.

Réponse

Python, 99 95 93 octets

lambda s:"".join(("ouiaiOUIAI bnnpkbnnpk ouiiiouiii"+c)["aeiouAEIOU".find(c)::11] for c in s) 

Sur ideone.com …

Assez simple. Prenez simplement lindex 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.Sil « nest pas trouvé, .find() renvoie -1 donc il suffit de coller le caractère courant à la fin de la chaîne. Les espaces sont donc nécessaires toute lettre "a" ninclut pas le c ajouté. Les voyelles traduites sont regroupées par ordre alphabétique (la première lettre de chaque traduction, puis la deuxième, puis la troisième).

Commentaires

  • Wow, belle approche créative. Je ‘ suis impressionné 🙂
  • Vous pouvez supprimer lespace dans ["aeiouAEIOU".find(c)::11] for

Réponse

05AB1E , 28 27 20 octets

žÀ.•₅%~≠#ùÛãú•3ôD™«‡ 

Essayez-le en ligne!

Unuxplobonobotiniapin

žÀ # the string "aeiouAEIOU" .•₅%~≠#ùÛãú• # the string "obounuiniapiiki" 3ô # split in pieces of 3 D™« # concatenate with a title-case copy ‡ # transliterate 

Commentaires

  • Ini lapivunu gapilfining!
  • @BasicallyAlanTuring: Il ma fallu beaucoup trop de temps pour traduire cela dans ma tête. Je pense que jai besoin dun traducteur inversé: P
  • Allez-y, ne devrait ‘ pas être trop difficile: P
  • Effrayant, je pense il dit que jaime le golf.
  • Jai ‘ changé ma question, ce qui rend votre réponse invalide. Cela doit fonctionner avec de nouvelles lignes

Answer

PHP, 91 octets

<?=strtr($argv[1],[A=>Obo,E=>Unu,I=>Ini,O=>Api,U=>Iki,a=>obo,e=>unu,i=>ini,o=>api,u=>iki]); 

Réponse

Python, 129 octets

lambda s:"".join([str,str.capitalize][ord(l)<91]({"a":"obo","e":"unu","i":"ini","o":"api","u":"iki"}.get(l.lower(),l))for l in s) 

Voir le fonctionnement sur ideone.com

Voici « une version plus joliment formatée:

lambda s: \ "".join( [str, str.capitalize][ord(l) < 91]( {"a":"obo", "e":"unu", "i":"ini", "o":"api", "u":"iki"} .get(l.lower(), l) ) for l in s) 

Les parties les plus intéressantes sont { ... }.get(l.lower(), l) qui essaie de rechercher la lettre stockée dans l convertie en minuscules dans le dictionnaire et renvoie soit la version traduite (si trouvée), soit la lettre originale,
et [str, str.capitalize][ord(l) < 91]( ... ) qui vérifie si la lettre originale était une majuscule ( Point de code ASCII inférieur à 91), puis appelle la fonction str() avec la lettre comme argument (si elle nétait pas « ta majuscule, ne fait rien) ou str.capitalize() (convertit la première lettre de la chaîne dargument en majuscules).

Réponse

C (gcc) , 150 141 136 134 octets

 a;i;e(char*n){for(char*v=" AEIOUIAI",*t;i=*n++;printf(&a))t=index(v,i-i/96*32),a=t?t-v:0,a=a?v[a+3]|L" 潢畮楮楰楫"[a]<<8|i&32:i;}  

Essayez-le en ligne!

Basé sur la réponse de @algmyr et -8 grâce à @ ASCII uniquement

Version moins golfée

 a;i; e(char*n){ for(char*v=" AEIOUIAI",*t;i=*n++;printf(&a)) t=index(v,i-i/96*32), a=t?t-v:0, a=a?v[a+3]|L" 潢畮楮楰楫"[a]<<8|i&32:i; }  

Commentaires

  • 149? 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;}
  • peut-être aussi 149: 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]));}
  • 144: 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]);}

Réponse

Lot, 215 octets

@echo off set/pt= set s= :l if "%t%"=="" echo(%s%&exit/b set c=%t:~0,1% for %%a in (obo.a unu.e ini.i api.o iki.u Obo.A Unu.E Ini.I Api.O Iki.U)do if .%c%==%%~xa set c=%%~na set s=%s%%c% set t=%t:~1% goto l 

Prend une entrée sur STDIN. Le traitement caractère par caractère a lavantage dêtre sensible à la casse.

Commentaires

  • Batch est juste le pire outil pour tout, isn ‘ t-il? (Au moins tu as battu TI-Basic 🙂 Au fait, cest bien de voir un codegolf dans Batch!

Answer

Pyth, 42 octets

#sXw"aeiouAEIOU"+Jc"obounuiniapiiki"3mrd3J 

Un programme qui prend lentrée sur STDIN et imprime la sortie.

Essayez-le en ligne

Comment ça marche

#sXw"aeiouAEIOU"+Jc"obounuiniapiiki"3mrd3J Program. # Loop until error statement: w Get w, the next line of the input "obounuiniapiiki" Yield string literal "obounuiniapiiki" c 3 Split that into groups of three characters J Assign that to J and yield J mrd3J Map title case over J + Merge the lower and title groups "aeiouAEIOU" Yield string literal "aeiouAEIOU" X Translate w from that to the three-character groups s Concatenate that Implicitly print 

Réponse

C, 167 octets

I Je ne voulais vraiment pas briser mon habitude de toujours faire les fonctions principales lors du codage en C, mais cest nettement plus court que la version avec un main et de cette façon jai reçu une autre lettre pour épeler ce que je voulais!

Golfed

a;l;i;e(char*n){for(;i=*n++;l=i>90,i-=32*l,a=!(i-65)+2*!(i-69)+3*!(i-73)+4*!(i-79)+5*!(i-85),printf(a?"%c%c%c":"%c",(a?"HOUIAI"[a]:i)+l*32,"ibnnpk"[a],"!ouiii"[a]));} 

Commenté

a;l;i; e(char*n) { for(; i = *n++; /* Get char and advance */ l = i>90, /* Is lowercase? */ i -= 32*l, /* Make uppercase */ /* Is 1,2,3,4,5 depeding on the vowel and 0 for no vowel */ a = !(i-65) + 2*!(i-69) + 3*!(i-73) + 4*!(i-79) + 5*!(i-85), printf(a?"%c%c%c":"%c", /* Print 1 or 3 chars? */ (a?"HOUIAI"[a]:i)+l*32, /* Print appropriate char+case */ "ibnnpk"[a], /* Print appropriate char */ "!ouiii"[a])); /* Print appropriate char */ } 

Il y a quelque chose de spécial à propos de C et à quel point vous pouvez être avec des pointeurs et autres.

Commentaires

  • 151 octets
  • @ceilingcat I ‘ dis postez votre réponse seule. Il ‘ a suffisamment divergé pour mériter sa propre réponse. 🙂

Réponse

Retina , 60 octets

Le nombre doctets suppose le codage ISO 8859-1.

[A-Z] »$& T`L`l i ini u iki e unu a ·b· o api · o T`»l`_L`». 

Essayez-le en ligne!

Réponse

Javascript (ES6), 94 93 92 octets

s=>s.replace(/[aeiou]/gi,c=>"OUIAIouiai"[n="AEIOUaeiou".search(c)]+"bnnpk"[n%=5]+"ouiii"[n]) 

Sauvé 1 octet grâce à edc65
Sauvé 1 octet grâce à Neil

Démo

 let f = s=>s.replace(/[aeiou]/gi,c=>"OUIAIouiai"[n="AEIOUaeiou".search(c)]+"bnnpk"[n%=5]+"ouiii"[n]) function translate() { document.getElementById("o").value = f(document.getElementById("i").value); } translate(); 
 <input size=80 oninput="translate()" value="Hello, World!"><br><input size=80 disabled> 

Commentaires

  • Pour vérifier la valeur de retour de .indexOf et .search utilisez ~ au lieu de <0
  • Jai regardé pour voir ce qui se passerait si vous ne remplaçiez que les voyelles, et jai initialement eu s=>s.replace(/[aeiou]/gi,c=>"ouiaiOUIAI"[n="aeiouAEIOU".indexOf(c)]+"bnnpk"[n%=5]+"ouiii"[n]) qui fait toujours 93 octets . Mais comme c est désormais connu pour être une voyelle, vous pouvez désormais utiliser search au lieu de indexOf pour sauver un octet!
  • @Neil – Bien! Jai essayé les deux, en fait, mais je nai ‘ pas pensé à les combiner.

Réponse

Java 8, 172 octets

String f(String s){String v="AEIOUaeiou",r="OboUnuIniApiIkiobounuiniapiiki",o="";for(char c:s.toCharArray()){int n=v.indexOf(c);o+=n>-1?r.substring(n*3,n*3+3):c;}return o;} 

non golfé:

String f(String s){ String v="AEIOUaeiou",r="OboUnuIniApiIkiobounuiniapiiki",o=""; for(char c:s.toCharArray()){ int n=v.indexOf(c); o+=n>-1?r.substring(n*3,n*3+3):c; } return o; } 

Et Alien de retour en anglais (171 octets):

String g(String s){String[] v="AEIOUaeiou".split(""),r="Obo Unu Ini Api Iki obo unu ini api iki".split(" ");for(int i=0;i<v.length;i++)s=s.replaceAll(r[i],v[i]);return s;} 

Ungolfed:

String g(String s){ String[] v="AEIOUaeiou".split(""),r="Obo Unu Ini Api Iki obo unu ini api iki".split(" "); for(int i=0;i<v.length;i++)s=s.replaceAll(r[i],v[i]); return s; } 

Réponse

Tcl, 75 octets

La chaîne à traduire se trouve dans la variable s.

string map {A Obo a obo E Unu e unu I Ini i ini O Api o api U Iki u iki} $s 

Réponse

Mathematica, 128 octets

#~StringReplace~{"a"->"obo","A"->"Obo","e"->"unu","E"->"Unu","i"->"ini","I"->"Ini","o"->"api","O"->"Api","u"->"iki","U"->"Iki"}& 

Je ne sais pas si un programme plus court peut être obtenu en utilisant IgnoreCase->True avec une vérification de casse.

Réponse

C 178 octets

char*p[256],*a="obo\0unu\0ini\0api\0iki\0Obo\0Unu\0Ini\0Api\0Iki",*b="aeiouAEIOU";main(c){for(c=0;b[c];++c)p[b[c]]=a+4*c;for(;(c=getchar())>0;)p[c]?printf("%s",p[c]):putchar(c);} 

Commentaires

  • 153 octets
  • @ceilingcat & c peut être ok sil enregistre le numéro sous octet1 octet2 octet3 … Par exemple 255 en mémoire sous la forme ff 00 00 00 mais sil y a lautre extrémité pour 255 nous avons 00 00 00 ff et imprimons la chaîne vide …

Answer

C, 163 162 159 octets

 char*t="aeiou";n,k;q(char*x){for(;*x;n<0||(*x=t[n>1?n%2?0:2:n+3])&&k>90||(*x-=32),printf("%c%.2s",*x++,n<0?"":&"bonunipiki"[2*n]))n=strchr(t,tolower(k=*x))-t;}  

Commentaires

  • placer char*t="aeiou"; dans la boucle for enregistre 1 octet
  • 144 octets

Réponse

C #, 133 121 octets

 s=>{int i;return string.Concat(s.Select(c=>(i ="AIUEOaiueo".IndexOf(c))>-1?"OboIniIkiUnuApioboiniikiunuapi".Substring(i*3,3):c+""));}  

Modifier (grâce à milk)

merci 🙂 En fait, je connais cette surcharge mais je lai complètement oubliée en écrivant ceci ..

 s=>string.Concat(s.Select((c,i)=>(i="AIUEOaiueo".IndexOf(c))>-1?"OboIniIkiUnuApioboiniikiunuapi".Substring(i*3,3):c+""));  

Commentaires

  • Vous pouvez utiliser la surcharge Select(char, int) pour ne pas ‘ déclarer i et peut tout mettre sur une seule ligne. s=>string.Concat(s.Select((c,i)=>(i="AIUEOaiueo".IndexOf(c))>-1?"OboIniIkiUnuApioboiniikiunuapi".Substring(i*3,3):c+""));

Réponse

C, 207 202 octets (merci à Cyoce)

#include <stdio.h> #define r(c,t) case c:printf(t);continue; int main(){int c;while(~(c=getchar())){switch(c){r("a","obo")r("e","unu")r("i","ini")r("o","api")r("u","iki")default:putchar(c);}}return 0;} 

1) Je déteste omettre le type avant tout type de déclaration

2) Je naime pas vraiment mettre du code inutilisable (sans fonction main ())

Utilisation:

c89 cg.c -o cg; echo "Testing" | ./cg 

Commentaires

  • Bienvenue dans PPCG!
  • @MartinEnder, ce ‘ est inattendu … mais merci 🙂
  • (c=getchar())!= EOF peut devenir ~(c=getchar())
  • 143 octets

Réponse

Swift 2.2 196 octets

¯ \ _ (ツ) _ / ¯

Golfé

var r = ["a":"obo","e":"unu","i":"ini","o":"api","u":"iki"];var q={(s:String) in var o = "";for var i in s.lowercaseString.characters{o += r[String(i)] != nil ? r[String(i)]!:String(i)};print(o);} 

non Golfé

var r = ["a":"obo","e":"unu","i":"ini","o":"api","u":"iki"] var q={(s:String) in var o = "" for var i in s.lowercaseString.characters { o += r[String(i)] != nil ? r[String(i)]!:String(i) } print(o) } 

Commentaires

  • Les espaces dans var r = [ nécessaire?
  • Ouais dans lapplication Playgrounds si vous ‘ t mettez un espace entre une affectation, cela vous donne une erreur et vous dit dajouter des espaces . Swift est probablement lune des pires langues pour jouer au golf, mais jai pensé que ce serait amusant dessayer.
  • Et cétait intéressant de ne pas ‘ me donner ça erreur lorsque jattribuais une variable à une fermeture. Doù lhomme haussant les épaules
  • ouais je lai remarqué aussi. Cest ‘ pourquoi jétais confus.

Réponse

Perl 6 , 84 82 octets

 {my%o=<a obo e unu i ini o api u iki>;S:i:g[<{%o.keys}>]=%o{$/.lc}.samecase($/~"a")}  
 {my%o=<a obo e unu i ini o api u iki>;S:i:g[<[aeiou]>]=%o{$/.lc}.samecase($/~"a")}  

Développé:

 # bare block lambda with implicit parameter 「$_」 { # create the mapping my %v = <a obo e unu i ini o api u iki>; # replace vowels in 「$_」 S :ignorecase :global [ <[aeiou]> ] = # replace them with: %v{ $/.lc } # change it to be the same case as what was matched, and a lowercase letter .samecase( $/ ~ "a" ) }  

Utilisation:

 my &english-to-alien = {my%o=<a obo e unu i ini o api u iki>;S:i:g[<[aeiou]>]=%o{$/.lc}.samecase($/~"a")} say english-to-alien "Australia"; # Oboikistroboliniobo  

Réponse

C – 192 octets

(nouvelles lignes ajoutées pour plus de clarté)

 int c,j,b;main(){ char*f[]={"bo","nu","ni","pi","ki",""}, s[]={14,16,0,-14,-12}; while(c=getchar()){for(b=j=0;j<10;++j) {if(c=="aeiouAEIOU"[j]){c+=s[j%=5];b=1;break;}} printf("%c%s",c,f[b?j:5]);}}  

Il suffit de rechercher des tables et un commutateur booléen.

Recherche chaque lettre dans le tableau (chaîne) de voyelles; sil est trouvé, modifiez-le selon la règle du tableau s. Imprimer chaque caractère suivi dune chaîne: si une voyelle a été trouvée, imprimer le caractère modifié par la valeur dans s suivi du reste de la syllabe stockée dans la table f; si aucune voyelle na été trouvée, imprimez le caractère original et une chaîne vide.

Commentaires

Réponse

Ruby, 102 93 91 88 78 octets

gsub(/[#{b="aeiouAEIOU"}]/){"obounuiniapiikiOboUnuIniApiIki"[b.index($&)*3,3]} 

Explication:

Exécutez la ligne comme ruby -pe "gsub(/[#{b="aeiouAEIOU"}]/){"obounuiniapiikiOboUnuIniApiIki"[b.index($&)*3,3]}", type suivant, par exemple, Australia il devrait afficher: Oboikistroboliniobo.

Cest assez simple, remplacez toutes les voyelles par une sous-chaîne basée sur lindex de la voyelle à remplacer en (b), multiplié par 3 et les 3 caractères suivants dans la chaîne de traduction.

Commentaires

  • Je soupçonne les guillemets de début et de fin (et les échappements internes si lentrée a des guillemets ) dans la sortie pourrait disqualifier cela. Quoi quil en soit, vous pouvez enregistrer deux octets en déplaçant laffectation de b dans lexpression rationnelle (/[#{b=...}/).
  • Je pense que lespace p $* est inutile
  • Utilisez lindicateur -p pour enregistrer des octets supplémentaires. ruby -pe 'gsub(/[#{b="aeiouAEIOU"}]/){"obounuiniapiikiOboUnuIniApiIki"[b.index($&)*3,3]}'
  • Je compte 78 + 2 (-pe). Comment obtenez-vous 71?
  • @NotthatCharles est-ce que les caractères nécessaires à lexécution comptent vraiment dans ce cas? Je viens de ‘ t les compter.

Réponse

TI-BASIC, 201 197 195 octets

Ans+" →Str1:"AEIOUaeiou→Str2:"OUIAIouiai→Str3:"bonunipiki→Str4:1→X:While X<length(Str1:inString(Str2,sub(Str1,X,1→A:5fPart(.2A→B:If A:sub(Str1,1,X-1)+sub(Str3,A,1)+sub(Str4,2B-1,2)+sub(Str1,X+1,length(Str1)-X→Str1:X+1+2(A>0→X:End:sub(Str1,1,length(Str1)-1 

Penser que je « trouverais un autre TI -BASIC answer here!

Quoi quil en soit, lentrée est une chaîne anglaise dans Ans.
La sortie est la chaîne traduite.

Exemples:

"HE HE prgmCDGF1A HUnu "Hello Hello prgmCDGF1A Hunullapi 

Explication:
(Nouvelles lignes ajoutées pour plus de lisibilité. Plusieurs lignes de la même ligne seront signalées par : dans le bloc de code suivant.)

Ans+" →Str1 ;append a space to the input string and store the result ; in "Str1" "AEIOUaeiou→Str2 ;store the upper- and lowercase vowels in "Str2" "OUIAIouiai→Str3 ;store the beginning letter of each corresponding translated ; vowel in "Str3" "bonunipiki→Str4 ;store the remaining letters of each translated vowel ; in "Str4" 1→X ;store 1 in "X" While X<length(Str1 ;loop until all English letters have been checked inString(Str2,sub(Str1,X,1→A ;get the current letter and store its index in "Str2" ; into "A" 5fPart(.2A→B ;get which translated vowel end should be used ; B ranges from 1 to 5 If A ;if the current letter is a vowel sub(Str1,1,X-1) ;extract the substring of the input before the ; current letter : +sub(Str3,A,1) ;append the translated vowel start : +sub(Str4,2B-1,2) ;append the translated vowel end : +sub(Str1,X+1,length(Str1)-X ;append the remaining substring of the input : →Str1 ;store the result of these concatenations into "Str1" X+1+2(A>0→X ;check if A>0 (if the current letter was a vowel) ; if true, increment "X" by three ; if false, increment "X" by one End sub(Str1,1,length(Str1)-1 ;remove the trailing space and store the result in "Ans" ;implicit print of "Ans" 

Remarques:

  • TI-BASIC est une langue à jetons. Le nombre de caractères ne pas nombre doctets égal.

  • Les lettres minuscules dans TI-BASIC sont de deux octets es chacun.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *