Briefing

Gli alieni si sono stabiliti sulla terra e, stranamente, il loro alfabeto è esattamente lo stesso del nostro. La loro lingua è anche molto simile alla nostra con alcune differenze molto distinte e facili da calcolare.

Sfida

Prendi una stringa e visualizza lequivalente della lingua dellalieno. La traduzione funziona come tale :

Scambia tutte le vocali nella parola con le corrispondenti:

 Vowel | With --------+-------- a | obo e | unu i | ini o | api u | iki 

Puoi anche scrivere un altro traduttore per tradurre Alien -> Inglese, questo è comunque facoltativo.

Esempi

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

Se la vocale è in maiuscolo, la prima viene maiuscola letter ..

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

Regole

  • Si applicano scappatoie standard
  • Deve funzionare per il testo che contiene nuovo righe
  • Puoi scrivere una funzione, lambda o un programma completo

    Capingrobotikilobotiniapins apin wrinitining thunu runuvunursunu trobonslobotapir!

Commenti

  • Non ‘ non sono sicuro di cosa Puoi anche scrivere un altro traduttore per tradurre Alien- > inglese dovrebbe significare. Possiamo scrivere il traduttore inverso invece di quello normale?
  • Forse ‘ sono solo io, ma ‘ non è ovvio per me che anche abbia questo significato qui. In ogni caso, ‘ non sono sicuro di come questa sia una regola se ‘ non fa parte del compito.
  • @Dennis Tu ‘ sei un po punudobontinico, ma io ‘ lho modificato per farlo più chiaro.
  • Perché il requisito per le nuove righe? A mio parere, questo non è necessario e ‘ non aggiunge nulla al punto principale della sfida.
  • Linput può contenere caratteri ASCII o solo un sottoinsieme . Ad esempio, ci saranno mai dei numeri nellinput?

Answer

Haskell, 100 91 byte

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

Commenti

  • Hoboskunull sicuramente

Risposta

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

Si spera che gli alieni usino TI- 83/84 calcolatrici;)

Programma principale, 173 byte

BONUS: Mantieni la seconda o la terza riga a seconda che tu voglia un traduttore normale o inverso.

"("+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 

Sottoprogramma (prgmQ), 59 byte:

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

Sottoprogramma (prgmR), 148 byte:

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 ~ rappresenta il token 0x81 e @ rappresenta il token 0x7F, ulteriori informazioni qui .

PPS Parte del motivo per cui questi programmi hanno un numero elevato di byte è perché sub(, inString(, length( e tutte le lettere minuscole sono due byte ciascuna …

Commenti

  • Penso che tu abbia confuso prgmR e prgmQ nei titoli del codice una volta?
  • Sì, grazie per aver notato che @ByteCommander 🙂

Risposta

Perl, 56 byte

Include +1 per -p

Fornisci input su STDIN

alien.pl:

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

Funziona come mostrato, ma sostituisci gli \xXX sfugge al carattere effettivo per ottenere il punteggio richiesto

Commenti

  • +1 Votato solo per lavatar alieno. Sto scherzando, anche la soluzione è carina.
  • Gesù cristo .. Perl al suo meglio, signore e signori.

Risposta

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, 

Commenti

  • Esegue questo funziona per linput che contiene nuove righe?
  • @Jordan Lo fa. sed legge ” una riga alla volta “. Quindi elaborerà tutto fino alla prima nuova riga, la stamperà, stamperà una nuova riga, quindi ricomincerà se cè più testo.
  • Ah, ovviamente. 👍🏻
  • @Jordan Non era ‘ una regola quando ho scritto questo, ma ha funzionato comunque.

Risposta

Python, 99 95 93 byte

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

Su ideone.com …

Abbastanza semplice. Prendi lindice in cui troviamo ogni carattere nellelenco delle vocali e usalo per estrarre i tre caratteri di cui abbiamo bisogno.Se “non viene trovato, .find() restituisce -1 quindi incolla il carattere corrente alla fine della stringa. Gli spazi sono necessari quindi qualsiasi lettera "a" non “include il c aggiunto. Le vocali tradotte sono raggruppate in ordine alfabetico (la prima lettera di ogni traduzione, poi la seconda, poi la terza).

Commenti

  • Wow, bel approccio creativo. ‘ sono impressionato 🙂
  • Puoi rimuovere lo spazio in ["aeiouAEIOU".find(c)::11] for

Risposta

05AB1E , 28 27 20 byte

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

Provalo online!

Unuxplobonobotiniapin

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

Commenti

  • Ini lapivunu gapilfining!
  • @BasicallyAlanTuring: Mi ci è voluto troppo tempo per tradurlo nella mia testa. Penso di aver bisogno di un traduttore inverso: P
  • Provaci, non dovrebbe ‘ essere troppo difficile: P
  • Spaventoso, penso dice che amo il golf.
  • ‘ ho cambiato la mia domanda e la tua risposta non è valida. Deve funzionare con le nuove righe

Answer

PHP, 91 byte

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

Risposta

Python, 129 byte

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) 

Guardalo in esecuzione su ideone.com

Ecco “una versione più ben formattata:

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) 

Le parti più interessanti sono { ... }.get(l.lower(), l) che cerca di cercare la lettera memorizzata in l convertita in minuscolo nel dizionario e restituisce la versione tradotta (se trovata) oppure la lettera originale,
e [str, str.capitalize][ord(l) < 91]( ... ) che controlla se la lettera originale era maiuscola ( Punto di codice ASCII inferiore a 91) e quindi chiama la funzione str() con la lettera come argomento (se non era “una lettera maiuscola, non fa nulla) o la str.capitalize() funzione (converte la prima lettera della stringa dellargomento in maiuscolo).

Risposta

C (gcc) , 150 141 136 134 byte

 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;}  

Provalo online!

Basato sulla risposta di @algmyr e -8 grazie a @ ASCII-only

Versione meno golfista

 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; }  

Commenti

  • 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;}
  • forse anche 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]);}

Risposta

Batch, 215 byte

@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 

Accetta input su STDIN. Lelaborazione carattere per carattere ha la comodità di distinguere tra maiuscole e minuscole.

Commenti

  • Batch è solo lo strumento peggiore per tutto, non è ‘ vero? (Beh, almeno hai battuto TI-Basic 🙂 Bello vedere un codegolf in Batch, a proposito!

Answer

Pyth, 42 byte

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

Un programma che riceve linput su STDIN e stampa loutput.

Provalo online

Come funziona

#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 

Risposta

C, 167 byte

I Non volevo davvero rompere la mia abitudine di eseguire sempre le funzioni principali quando codificavo C, ma questo è sostanzialmente più breve della versione con un principale e in questo modo ho ricevuto unaltra lettera per scrivere quello che volevo!

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]));} 

Commentato

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 */ } 

Cè qualcosa di speciale in C e in che modo orribile puoi essere con puntatori e simili.

Commenti

  • 151 byte
  • @ceilingcat I ‘ direi di pubblicare la tua risposta da solo. ‘ è abbastanza divergente da meritare una risposta a sé stante. 🙂

Risposta

Retina , 60 byte

Il conteggio dei byte presuppone la codifica ISO 8859-1.

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

Provalo online!

Risposta

Javascript (ES6), 94 93 92 byte

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

Salvato 1 byte grazie a edc65
Salvato 1 byte grazie a Neil

Demo

 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> 

Commenti

  • Per controllare il valore di ritorno di .indexOf e .search utilizza ~ invece di <0
  • Ho cercato di vedere cosa sarebbe successo se avessi sostituito solo le vocali e in origine ho ottenuto s=>s.replace(/[aeiou]/gi,c=>"ouiaiOUIAI"[n="aeiouAEIOU".indexOf(c)]+"bnnpk"[n%=5]+"ouiii"[n]) che è ancora 93 byte . Ma poiché c è ora noto per essere una vocale, ora puoi utilizzare search invece di indexOf per salvare un byte!
  • @Neil – Bello! In realtà ho provato entrambi, ma ‘ non pensavo di combinarli.

Risposta

Java 8, 172 byte

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;} 

ungolfed:

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; } 

E Alien torna in inglese (171 byte):

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; } 

Risposta

Tcl, 75 byte

La stringa da tradurre è nella variabile s.

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

Risposta

Mathematica, 128 byte

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

Non sono sicuro che sia possibile ottenere un programma più breve utilizzando IgnoreCase->True insieme a un controllo del caso.

Risposta

C 178 byte

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);} 

Commenti

  • 153 byte
  • @ceilingcat & c può essere ok se salva il numero come byte1 byte2 byte3 … Ad esempio 255 in memoria come ff 00 00 00 ma se cè laltro endian per 255 abbiamo 00 00 00 ff e stampiamo la stringa void …

Answer

C, 163 162 159 byte

 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;}  

Commenti

  • linserimento di char*t="aeiou"; nel ciclo for salva 1 byte
  • 144 byte

Risposta

C #, 133 121 byte

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

Modifica (grazie a milk)

grazie 🙂 In realtà conosco questo sovraccarico ma in qualche modo lho completamente dimenticato mentre scrivevo questo ..

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

Commenti

  • Puoi utilizzare Select(char, int) sovraccarico in modo da non ‘ dover dichiarare i e puoi mettere tutto in una riga. s=>string.Concat(s.Select((c,i)=>(i="AIUEOaiueo".IndexOf(c))>-1?"OboIniIkiUnuApioboiniikiunuapi".Substring(i*3,3):c+""));

Risposta

C, 207 202 byte (grazie a 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) Odio omettere il tipo prima di qualsiasi tipo di dichiarazione

2) Non mi piace molto inserire codice inutilizzabile (senza funzione main ())

Utilizzo:

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

Commenti

  • Benvenuto in PPCG!
  • @MartinEnder, questo ‘ è inaspettato … ma grazie 🙂
  • (c=getchar())!= EOF può diventare ~(c=getchar())
  • 143 byte

Risposta

Swift 2.2 196 byte

¯ \ _ (ツ) _ / ¯

Golfed

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);} 

unGolfed

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

Commenti

  • Gli spazi sono var r = [ necessario?
  • Sì nellapp playground se non ‘ metti uno spazio tra un compito ti viene dato un errore e ti dice di aggiungere spazi . Swift è probabilmente una delle peggiori lingue con cui giocare a golf, ma ho pensato che sarebbe stato divertente provarci.
  • Ed è stato interessante che ‘ non me lo ha fornito errore quando stavo assegnando una variabile a una chiusura. Da qui luomo che scrolla le spalle
  • sì, lho notato anchio. Questo è il motivo per cui ‘ ero confuso.

Risposta

Perl 6 , 84 82 byte

 {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")}  

Espanso:

 # 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" ) }  

Utilizzo:

 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  

Risposta

C – 192 byte

(nuove righe aggiunte per chiarezza)

 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]);}}  

Basta cercare tabelle e un interruttore booleano.

Cerca ogni lettera nella tabella (stringa) di vocali; se trovato, modificalo secondo la regola nella tabella s. Stampa ogni carattere seguito da una stringa: se è stata trovata una vocale, stampa il carattere modificato dal valore in s seguito dal resto della sillaba memorizzata nella tabella f; se una vocale non è stata trovata, stampa il carattere originale e una stringa vuota.

Commenti

Risposta

Ruby, 102 93 91 88 78 byte

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

Spiegazione:

Esegui la riga come ruby -pe "gsub(/[#{b="aeiouAEIOU"}]/){"obounuiniapiikiOboUnuIniApiIki"[b.index($&)*3,3]}", tipo successivo, ad esempio Australia dovrebbe produrre: Oboikistroboliniobo.

È abbastanza semplice, sostituire tutte le vocali con una sottostringa basata sullindice della vocale da sostituire in (b), per 3 e i successivi 3 caratteri nella stringa di traduzione.

Commenti

  • Sospetto che le virgolette iniziali e finali (e gli escape interni se linput ha virgolette ) nelloutput potrebbe squalificarlo. In ogni caso, puoi salvare due byte spostando lassegnazione di b nel Regexp (/[#{b=...}/).
  • Penso che lo spazio p $* non sia necessario
  • Utilizza il flag -p per salvare byte aggiuntivi. ruby -pe 'gsub(/[#{b="aeiouAEIOU"}]/){"obounuiniapiikiOboUnuIniApiIki"[b.index($&)*3,3]}'
  • Conto 78 + 2 (-pe). Come si ottiene 71?
  • @NotthatCharles i caratteri necessari per lesecuzione contano davvero in questo caso? Non li ho ‘ contati.

Risposta

TI-BASIC, 201 197 195 byte

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 

Pensare che “troverei un altro TI -Risposta BASE qui!

Comunque, linput è una stringa inglese in Ans.
Loutput è la stringa tradotta.

Esempi:

"HE HE prgmCDGF1A HUnu "Hello Hello prgmCDGF1A Hunullapi 

Spiegazione:
(Le nuove righe aggiunte per la leggibilità. Più righe della stessa riga saranno contrassegnate da un : nel seguente blocco di codice.)

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" 

Note:

  • TI-BASIC è un linguaggio tokenizzato. Il conteggio dei caratteri no uguale numero di byte.

  • Le lettere minuscole in TI-BASIC sono due byte es ciascuno.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *