Briefing
Străinii s-au stabilit pe pământ și destul de ciudat, alfabetul lor este exact același cu al nostru. Limbajul lor este, de asemenea, foarte asemănător cu al nostru, cu diferențe foarte distincte și ușor de calculat.
Provocare
Luați un șir și scoateți echivalentul în limbaj al extraterestrului. :
Schimbați toate vocalele din cuvânt cu cele corespunzătoare:
Vowel | With --------+-------- a | obo e | unu i | ini o | api u | iki
De asemenea, puteți scrie un alt traducător pentru a traduce Alien -> Engleză, acest lucru este opțional totuși.
Exemple
Input: Shaun Output: Shoboikin Input: Java Output: Jobovobo Input: Hello, World! Output: Hunullapi, Wapirld!
Dacă vocala este cu majuscule, atunci cu majuscule prima scrisoare ..
Input: Alan Output: Obolobon Input: Australia Output: Oboikistroboliniobo
Reguli
- Se aplică lacune standard
- Trebuie să funcționeze pentru textul care conține noi liniile
-
Puteți scrie o funcție, lambda sau un program complet
Capingrobotikilobotiniapins apin wrinitining thunu runuvunursunu trobonslobotapir!
Comentarii
- Nu ‘ nu sunt sigur ce Puteți scrie și un alt traducător pentru a traduce Alien- > Engleza ar trebui să însemne. Putem scrie traducătorul invers în locul celui obișnuit?
- Poate că ‘ sunt doar eu, dar ‘ nu este evident pentru mine că și poartă acest sens aici. Oricum, nu ‘ nu sunt sigur cum este o regulă dacă ‘ nu face parte din actualul sarcină.
- @Dennis ‘ ești un pic punudobontinic, dar ‘ l-am editat pentru a-l face mai clar.
- De ce cerința pentru linii noi? În opinia mea, acest lucru nu este necesar și nu ‘ nu adaugă nimic la punctul principal al provocării.
- Poate intrarea să conțină orice caracter ASCII sau doar un subset . De exemplu, vor exista vreodată numere în intrare?
Răspuns
Haskell, 100 91 octeți
(>>= \x->last$[x]:[y|(z:y)<-words"aobo eunu iini oapi uiki AObo EUnu IIni OApi UIki",z==x])
Comentarii
- Cu siguranță Hoboskunull
Răspuns
TI-Basic, 173 + 59 + 148 = 380 octeți
Sperăm că extratereștrii folosesc TI- Calculatoare 83/84;)
Programul principal, 173 octeți
BONUS: Păstrați a doua sau a treia linie, în funcție de faptul dacă doriți un traducător normal sau 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
Subprogram (prgmQ
), 59 octeți:
Ans→Str9 inString(Ans,"~ sub(Str9,Ans,length(Str9)-Ans+1→Str8 Str9 prgmR Repeat Str9=Ans+Str8 Ans+Str8→Str9 prgmR End
Subprogram (prgmR
), 148 octeți:
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 ~
reprezintă simbolul 0x81
și @
reprezintă simbolul 0x7F
, aflați mai multe aici .
PPS O parte din motivele pentru care aceste programe au un număr mare de octeți este că sub(
, inString(
, length(
și toate literele mici sunt câte doi octeți …
Comentarii
- Cred că ați amestecat
prgmR
șiprgmQ
în titlurile codului dvs. o dată? - Da, mulțumesc că ați prins acel @ByteCommander 🙂
Răspuns
Perl, 56 octeți
Include +1 pentru -p
Oferiți informații despre STDIN
alien.pl
:
#!/usr/bin/perl -p s%\w%"`"&$&|("A\x0fboE\x15nuI\x09niO\x01piU\x09ki"=~/\u$&\K.../,$&)%eg
Funcționează așa cum se arată, dar înlocuiți \xXX
evadările cu caracterul real pentru a obține scorul revendicat
Comentarii
- +1 Votat doar pentru avatarul Alien. Glumesc, soluția este, de asemenea, frumoasă.
- Iisuse Hristos .. Perl în cele mai bune condiții, doamnelor și domnilor.
Răspuns
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,
Comentarii
- Face acest lucru funcționează pentru intrări care conțin linii noi?
- @Jordan Da. sed citește ” câte o linie la rând „. Deci, va procesa totul până la prima linie nouă, o va imprima, o va imprima, apoi o va relua dacă există mai mult text.
- Ah, desigur. 👍🏻
- @Jordan Aceasta nu era regula ‘ ta când am scris aceasta, dar a ajuns să funcționeze oricum.
Răspuns
Python, 99 95 93 octeți
lambda s:"".join(("ouiaiOUIAI bnnpkbnnpk ouiiiouiii"+c)["aeiouAEIOU".find(c)::11] for c in s)
Destul de simplu. Luați doar indexul la care găsim fiecare caracter în lista vocală și folosiți-l pentru a trage cele trei caractere de care avem nevoie.Dacă nu este găsit, .find()
returnează -1
deci lipiți caracterul curent la capătul șirului. Spațiile sunt necesare orice literă "a"
nu include adăugată c
. Vocalele traduse sunt grupate după ordinea literelor (prima literă a fiecărei traduceri, apoi a doua, apoi a treia).
Comentarii
- Uau, abordare creativă frumoasă. ‘ sunt impresionat 🙂
- Puteți elimina spațiul din
["aeiouAEIOU".find(c)::11] for
Răspuns
05AB1E , 28 27 20 octeți
žÀ.•₅%~≠#ùÛãú•3ôD™«‡
Unuxplobonobotiniapin
žÀ # the string "aeiouAEIOU" .•₅%~≠#ùÛãú• # the string "obounuiniapiiki" 3ô # split in pieces of 3 D™« # concatenate with a title-case copy ‡ # transliterate
Comentarii
- Ini lapivunu gapilfining!
- @BasicallyAlanTuring: Mi-a luat prea mult timp pentru a traduce asta în capul meu. Cred că am nevoie de un traducător invers: P
- Mergeți pentru el, nu ar trebui să ‘ să fie prea greu: P
- Înfricoșător, cred se spune că îmi place golful.
- Am ‘ mi-am schimbat întrebarea, ceea ce te face să răspunzi nevalid. Aceasta trebuie să funcționeze cu linii noi
Răspuns
PHP, 91 octeți
<?=strtr($argv[1],[A=>Obo,E=>Unu,I=>Ini,O=>Api,U=>Iki,a=>obo,e=>unu,i=>ini,o=>api,u=>iki]);
Răspuns
Python, 129 octeți
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)
Aici este o versiune mai bine formatată:
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)
Cele mai interesante părți sunt { ... }.get(l.lower(), l)
care încearcă să caute litera stocată în l
convertită în litere mici în dicționar și fie returnează versiunea tradusă (dacă este găsită), fie litera originală,
și [str, str.capitalize][ord(l) < 91]( ... )
care verifică dacă litera originală a fost o literă mare ( Cod ASCII punct mai mic decât 91) și apoi fie apelează funcția str()
cu litera ca argument (dacă nu era „o majusculă, nu face nimic), fie (convertește prima literă a șirului de argumente cu majuscule).
Răspuns
C (gcc) , 150 141 136 134 bytes
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;}
Pe baza răspunsului de @algmyr și -8 datorită @ ASCII-only
Versiune mai puțin jucată
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; }
Comentarii
- 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;}
- poate ș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&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ăspuns
Lot, 215 octeți
@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
Preține informații despre STDIN. Prelucrarea caracter cu caracter are comoditatea de a fi sensibil la majuscule și minuscule.
Comentarii
- Lotul este doar cel mai prost instrument pentru toate, nu este ‘ nu? (Ei bine, măcar ați învins TI-Basic 🙂 Apropo, a văzut un codegolf în Batch, apropo!
Răspunde
Pyth, 42 octeți
#sXw"aeiouAEIOU"+Jc"obounuiniapiiki"3mrd3J
Un program care preia intrarea pe STDIN și imprimă ieșirea.
Cum funcționează
#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ăspuns
C, 167 octeți
I Chiar nu am vrut să-mi încetez obiceiul de a face întotdeauna funcții principale atunci când codez C, dar acest lucru este substanțial mai scurt decât versiunea cu un principal și în acest fel am primit o altă literă pentru a scrie ceea ce doream!
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]));}
Comentat
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 */ }
Există ceva special în C și cât de oribil poți fii cu indicii și altele.
Comentarii
- 151 octeți
- @ceilingcat I ‘ ar spune că postează-ți singur răspunsul. ‘ s-a divergut suficient pentru a merita propriul răspuns. 🙂
Răspuns
Retina , 60 de octeți
Numărul de octeți presupune codificarea ISO 8859-1.
[A-Z] »$& T`L`l i ini u iki e unu a ·b· o api · o T`»l`_L`».
Răspuns
Javascript (ES6), 94 93 92 octeți
s=>s.replace(/[aeiou]/gi,c=>"OUIAIouiai"[n="AEIOUaeiou".search(c)]+"bnnpk"[n%=5]+"ouiii"[n])
Salvat 1 octet datorită edc65
Salvat 1 octet datorită 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>
Comentarii
- Pentru a verifica valoarea returnată a
.indexOf
și.search
utilizați~
în loc de<0
- Am căutat să văd ce se va întâmpla dacă înlocuiți doar vocalele și am primit inițial
s=>s.replace(/[aeiou]/gi,c=>"ouiaiOUIAI"[n="aeiouAEIOU".indexOf(c)]+"bnnpk"[n%=5]+"ouiii"[n])
, care este încă 93 de octeți . Dar, din moment cec
este acum cunoscut a fi o vocală, puteți folosi acumsearch
în loc deindexOf
pentru a salva un octet! - @Neil – Frumos! Am încercat ambele, de fapt, dar nu ‘ m-am gândit să le combin.
Răspunde
Java 8, 172 bytes
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; }
Și Alien înapoi în engleză (171 octeți):
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ăspuns
Tcl, 75 octeți
Șirul de tradus se află în variabila 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ăspuns
Mathematica, 128 octeți
#~StringReplace~{"a"->"obo","A"->"Obo","e"->"unu","E"->"Unu","i"->"ini","I"->"Ini","o"->"api","O"->"Api","u"->"iki","U"->"Iki"}&
Nu sunt sigur dacă un program mai scurt poate fi obținut utilizând IgnoreCase->True
împreună cu o verificare a cazurilor.
Răspuns
C 178 octeți
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);}
Comentarii
- 153 octeți
- @ceilingcat & c poate fi ok dacă salvează numărul ca octet1 octet2 octet3 … De exemplu 255 în memorie ca ff 00 00 00 dar dacă există celălalt endian pentru 255 avem 00 00 00 ff și imprimăm șirul gol …
Răspuns
C, 163 162 159 octeți
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;}
Comentarii
- introducerea
char*t="aeiou";
în buclă salvează 1 octet - 144 octeți
Răspuns
C #, 133 121 bytes
s=>{int i;return string.Concat(s.Select(c=>(i ="AIUEOaiueo".IndexOf(c))>-1?"OboIniIkiUnuApioboiniikiunuapi".Substring(i*3,3):c+""));}
Editați (datorită milk
)
mulțumesc 🙂 De fapt, știu această suprasarcină, dar cumva a uitat-o complet când scriu asta ..
s=>string.Concat(s.Select((c,i)=>(i="AIUEOaiueo".IndexOf(c))>-1?"OboIniIkiUnuApioboiniikiunuapi".Substring(i*3,3):c+""));
Comentarii
- Puteți utiliza suprasarcina
Select(char, int)
, astfel încât să nu ‘ nu trebuie să declarații
și poate pune totul într-un singur rând.s=>string.Concat(s.Select((c,i)=>(i="AIUEOaiueo".IndexOf(c))>-1?"OboIniIkiUnuApioboiniikiunuapi".Substring(i*3,3):c+""));
Răspuns
C, 207 202 octeți (datorită 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) Urăsc să omit tipul înainte de orice fel de declarații
2) Nu-mi place să pun cod inutilizabil (fără funcția main ())
Utilizare:
c89 cg.c -o cg; echo "Testing" | ./cg
Comentarii
- Bine ați venit la PPCG!
- @MartinEnder, ‘ este neașteptat … dar vă mulțumesc 🙂
-
(c=getchar())!= EOF
poate deveni~(c=getchar())
- 143 octeți
Răspuns
Swift 2.2 196 bytes
¯ \ _ (ツ) _ / ¯
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);}
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) }
Comentarii
- Sunt spațiile din
var r = [
necesar? - Da, în aplicația pentru locuri de joacă, dacă nu ‘ nu puneți un spațiu între o sarcină, vă va da o eroare și vă va spune să adăugați spații . Swift este probabil una dintre cele mai proaste limbi pentru golf, dar m-am gândit că ar fi distractiv să încerc.
- Și a fost interesant că nu mi-a dat asta ‘ eroare când atribuiam o variabilă unei închideri. Prin urmare, omul care ridică din umeri
- da, am observat și eu asta. De aceea ‘ este motivul pentru care am fost confuz.
Răspuns
Perl 6 , 84 82 octeți
{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")}
Expanded:
# 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" ) }
Utilizare:
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ăspuns
C – 192 octeți
(linii noi adăugate pentru claritate)
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]);}}
Doar tabele de căutare și un comutator boolean.
Căutați fiecare literă în tabel (șir) de vocale; dacă este găsit, modificați-l în conformitate cu regula din tabelul s
. Imprimați fiecare caracter urmat de un șir: dacă a fost găsită o vocală, imprimați caracterul modificat de valoarea din s
urmată de restul silabei stocate în tabel f
; dacă nu a fost găsită o vocală, tipăriți caracterul original și un șir gol.
Comentarii
Răspuns
Ruby, 102 93 91 88 78 octeți
gsub(/[#{b="aeiouAEIOU"}]/){"obounuiniapiikiOboUnuIniApiIki"[b.index($&)*3,3]}
Explicație:
Executați linia ca ruby -pe "gsub(/[#{b="aeiouAEIOU"}]/){"obounuiniapiikiOboUnuIniApiIki"[b.index($&)*3,3]}"
, tipul următor, de exemplu, Australia
ar trebui să afișeze: Oboikistroboliniobo
.
Este destul de simplu, înlocuiți toate vocalele cu un șir bazat pe indicele vocalei care urmează să fie înlocuite în (b), ori 3 și următoarele 3 caractere din șirul de traducere.
Comentarii
- Bănuiesc că ghilimelele de bază și cele finale (și scăpările interne dacă intrarea are ghilimele) ) în ieșire ar putea descalifica acest lucru. Oricum, puteți salva doi octeți mutând atribuirea
b
în Regexp (/[#{b=...}/
). - Cred că spațiul
p $*
nu este necesar - Utilizați semnalizatorul
-p
pentru a salva octeți suplimentari.ruby -pe 'gsub(/[#{b="aeiouAEIOU"}]/){"obounuiniapiikiOboUnuIniApiIki"[b.index($&)*3,3]}'
- Număr 78 + 2 (
-pe
). Cum obțineți 71? - @NotthatCharles contează cu adevărat caracterele necesare pentru execuție în acest caz? Tocmai nu le-am numărat pe ‘.
Răspuns
TI-BASIC, 201 197 195 octeți
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
Să cred că aș găsi un alt TI -Răspuns BAZIC aici!
Oricum, intrarea este un șir englezesc în Ans
.
Ieșirea este șirul tradus.
Exemple:
"HE HE prgmCDGF1A HUnu "Hello Hello prgmCDGF1A Hunullapi
Explicație:
(Linii noi adăugate pentru lizibilitate. Mai multe linii din aceeași linie vor fi notate cu un :
în următorul bloc de cod.)
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 este un limbaj simbolizat. Numărul de caractere nu nu număr de octeți egal.
-
Literele mici din TI-BASIC sunt de doi octeți este fiecare.