Traduttore dall'inglese allo straniero


18

Riunione

Gli alieni si sono stabiliti sulla terra e stranamente, il loro alfabeto è esattamente uguale al nostro. Anche il loro linguaggio è molto simile al nostro con alcune differenze molto distinte e facili da calcolare.

Sfida

Prendi una stringa e genera l'equivalente nella lingua dell'alieno. La traduzione funziona come tale:

Scambia tutte le vocali nella parola con il corrispondente:

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

Puoi anche scrivere un altro traduttore per tradurre Alien> Inglese, tuttavia è facoltativo.

Esempi

Input: Shaun
Output: Shoboikin

Input: Java
Output: Jobovobo

Input: Hello, World!
Output: Hunullapi, Wapirld!

Se la vocale è in maiuscolo, allora si capitalizza la prima lettera.

Input: Alan
Output: Obolobon

Input: Australia
Output: Oboikistroboliniobo

Regole

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

    Capingrobotikilobotiniapins apin wrinitining thunu runuvunursunu trobonslobotapir!


Non sono sicuro di cosa significhi anche scrivere un altro traduttore per tradurre inglese straniero . Possiamo scrivere il traduttore inverso invece di quello normale?
Dennis,

4
Forse sono solo io, ma non è ovvio per me che abbia anche questo significato qui. Ad ogni modo, non sono sicuro di come questa sia una regola se non fa parte del compito effettivo.
Dennis,

@Dennis Stai diventando un po 'punudobontinico, ma l'ho modificato per renderlo più chiaro.
Shaun Wild,

2
Perché il requisito per le nuove linee? Secondo me, questo non è necessario e non aggiunge nulla al punto principale della sfida.
Adnan,

1
L'input può contenere qualsiasi carattere ASCII o solo un sottoinsieme. Ad esempio, ci saranno mai numeri nell'input?
Riley,

Risposte:


14

Haskell, 100 91 byte

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

5
Hoboskunull sicuramente
jk.

12

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

Spero che gli alieni utilizzino i calcolatori TI-83/84;)

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

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


Penso che tu abbia confuso prgmRe prgmQnei titoli dei tuoi codici una volta?
Byte Commander,

Sì, grazie per aver scoperto @ByteCommander :)
Timtech,

8

Perl, 56 byte

Include +1 per -p

Dare 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 le \xXXfughe con il personaggio reale per ottenere il punteggio richiesto


1
+1 potenziato solo per l'avatar alieno. Sto scherzando, anche la soluzione è buona.
Caotico

1
Gesù Cristo .. Perl al suo meglio, signore e signori.
Priidu Neemre,

6

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,

Funziona con input che contengono newline?
Giordania,

@Jordan Lo fa. sed legge "una riga alla volta". Quindi elaborerà tutto fino alla prima nuova riga, la stamperà, la stampa una nuova riga, quindi ricomincerà se c'è più testo.
Riley,

Ah certo. 👍🏻
Giordania,

@Jordan Non è stata una regola quando ho scritto questo, ma alla fine ha funzionato comunque.
Riley,

6

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. Basta prendere l'indice in cui troviamo ciascun personaggio nell'elenco delle vocali e usarlo per estrarre i tre caratteri di cui abbiamo bisogno. Se non viene trovato, .find()restituisce -1quindi attaccare il carattere corrente alla fine della stringa. Gli spazi sono necessari in modo che qualsiasi lettera "a"non includa l'aggiunta c. Le vocali tradotte sono raggruppate per ordine di lettera (la prima lettera di ogni traduzione, quindi la seconda, quindi la terza).


Wow, bel approccio creativo. Sono impressionato :)
Byte Commander il

1
Puoi rimuovere lo spazio in["aeiouAEIOU".find(c)::11] for
acrolith il

6

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

2
Ini lapivunu gapilfining!
Shaun Wild,

@BasicallyAlanTuring: Mi ci è voluto troppo tempo per tradurlo nella mia testa. Penso di aver bisogno di un traduttore inverso: P
Emigna,

2
Provaci, non dovrebbe essere troppo difficile: P
Shaun Wild

Spaventoso, penso che dica che amo il golf.
datagod

Ho modificato la mia domanda che ti rende non valida. Questo deve funzionare con nuove linee
Shaun Wild,

5

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

5

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 quelle { ... }.get(l.lower(), l)che cercano di cercare la lettera memorizzata in lminuscole convertite nel dizionario e restituiscono la versione tradotta (se trovata), oppure la lettera originale,
e [str, str.capitalize][ord(l) < 91]( ... )che controlla se la lettera originale era una lettera maiuscola ( Punto di codice ASCII inferiore a 91) e quindi chiama la str()funzione 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 dell'argomento in maiuscolo).


5

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 solo a @ ASCII

Versione meno giocata a golf

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

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

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]));}
ASCII, solo il

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]);}
ASCII, solo il

4

Lotto, 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. L'elaborazione carattere per carattere ha la comodità di essere sensibile al maiuscolo / minuscolo.


Il batch è solo lo strumento peggiore per tutto, non è vero? (Beh, almeno hai battuto TI-Basic :) Bello vedere un codegolf in Batch, a proposito!
YoYoYonnY,

4

Pyth, 42 byte

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

Un programma che accetta input su STDIN e stampa l'output.

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

4

C, 167 byte

Non volevo davvero rompere l'abitudine di fare sempre le funzioni principali quando codificavo C, ma questo è sostanzialmente più breve della versione con un principale e in questo modo ho avuto un'altra lettera per scrivere ciò 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]));}

Commentate

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 quanto orribile puoi essere con i puntatori e così via.



@ceilingcat Direi di pubblicare la tua risposta da solo. È abbastanza divergente da meritare la propria risposta. :)
algmyr,


3

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

dimostrazione

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 id="i" size=80 oninput="translate()" value="Hello, World!"><br><input id="o" size=80 disabled>


1
Per controllare il valore restituito .indexOfe .searchutilizzare al ~posto di<0
edc65,

1
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é cora è noto per essere una vocale, ora puoi usare searchinvece di indexOfsalvare un byte!
Neil,

@Neil - Nice! Ho provato entrambi, in realtà, ma non ho pensato di combinarli.
Arnauld,

2

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

2

Tcl, 75 byte

La stringa da tradurre si trova 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

2

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 se è possibile ottenere un programma più breve utilizzando IgnoreCase->Trueinsieme a un controllo del caso.


2

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


@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'è l'altro endian per 255 abbiamo 00 00 00 ff e stampiamo la stringa vuota ...
RosLuP,

2

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

mettendo char*t="aeiou";in per loop salva 1 byte
Mukul Kumar


2

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 l'ho completamente dimenticato durante la scrittura di questo ..

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

È possibile utilizzare il Select(char, int)sovraccarico in modo da non dover dichiarare ie mettere tutto in una riga. s=>string.Concat(s.Select((c,i)=>(i="AIUEOaiueo".IndexOf(c))>-1?"OboIniIkiUnuApioboiniikiunuapi".Substring(i*3,3):c+""));
latte

2

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

Uso:

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

Benvenuti in PPCG!
Martin Ender,

@MartinEnder, è inaspettato ... ma grazie :)
Xdevelnet,

(c=getchar())!= EOFpuò diventare~(c=getchar())
Cyoce


1

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

Gli spazi sono var r = [necessari?
Cyoce,

Sì, nell'app dei campi da gioco se non si inserisce uno spazio tra un compito, ti dà 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 provare.
Danwakeem,

Ed è stato interessante che non mi ha dato quell'errore quando stavo assegnando una variabile a una chiusura. Da qui l'uomo che
scrolla

sì, l'ho notato anche io. Ecco perché ero confuso.
Cyoce,

0

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

Allargato:

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

Uso:

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

0

C - 192 byte

(nuove righe aggiunte per maggiore 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 le tabelle e un interruttore booleano.

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



0

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 .

È piuttosto semplice, sostituisci tutte le vocali con una sottostringa basata sull'indice della vocale da sostituire in (b), volte 3 e i successivi 3 caratteri nella stringa di traduzione.


1
Sospetto che le virgolette iniziali e finali (e le escape interne se l'input ha virgolette) nell'output potrebbero squalificare questo. Ad ogni modo, puoi salvare due byte spostando l'assegnazione bin Regexp ( /[#{b=...}/).
Giordania,

1
Penso che lo spazio p $*non sia necessario
Cyoce,

1
Utilizzare il -pflag per salvare byte aggiuntivi. ruby -pe 'gsub(/[#{b="aeiouAEIOU"}]/){"obounuiniapiikiOboUnuIniApiIki"[b.index($&)*3,3]}'
Value Ink

Conto 78 + 2 ( -pe). Come si ottiene 71?
Non che Charles,

@NotthatCharles contano davvero i personaggi necessari per l'esecuzione in questo caso? Non li ho contati.
Biketire,

0

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 avrei trovato un'altra risposta TI-BASIC qui!

Comunque, l'input è una stringa inglese in Ans .
L'output è la stringa tradotta.

Esempi:

"HE
HE
prgmCDGF1A
HUnu
"Hello
Hello
prgmCDGF1A
Hunullapi

Spiegazione:
(Newline aggiunte per leggibilità. Più righe della stessa riga saranno indicate con 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"

Appunti:

  • TI-BASIC è un linguaggio tokenizzato. Il conteggio dei caratteri non equivale al conteggio dei byte.

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.