Briefing
Mimozemšťané se usadili na Zemi a kupodivu je jejich abeceda přesně stejná jako ta naše. Jejich jazyk je také velmi podobný našemu s několika velmi odlišnými a snadno vypočítatelnými rozdíly.
Výzva
Vezměte řetězec a vydejte cizí jazykový ekvivalent. Překlad funguje jako takový :
Zaměňte všechny samohlásky ve slově s odpovídajícími:
Vowel | With --------+-------- a | obo e | unu i | ini o | api u | iki
Můžete také napsat jiného překladatele, který přeloží mimozemšťana -> Angličtina, toto je však volitelné.
Příklady
Input: Shaun Output: Shoboikin Input: Java Output: Jobovobo Input: Hello, World! Output: Hunullapi, Wapirld!
Pokud je samohláska velká, pak první písmeno ..
Input: Alan Output: Obolobon Input: Australia Output: Oboikistroboliniobo
Pravidla
- Platí standardní mezery
- Musí fungovat pro text, který obsahuje nové řádky
-
Můžete napsat buď funkci, lambdu nebo celý program.
Capingrobotikilobotiniapins apin wrinitining thunu runuvunursunu trobonslobotapir!
Komentáře
- I ‚ si nejsem jistý, co Můžete také napsat dalšího překladatele, který přeloží Alien- > angličtina má znamenat. Můžeme napsat normální překladač místo běžného?
- Možná to ‚ je jen pro mě, ale ‚ div Není mi zřejmé, že také zde má tento význam. Každopádně si ‚ nejsem si jistý, jak se jedná o pravidlo , pokud ‚ není součástí skutečného úkol.
- @Dennis Jste ‚ trochu punudobontinický, ale ‚ jsem to upravil, aby to bylo jasnější.
- Proč požadavek na nové řádky? Podle mého názoru je to zbytečné a nepřidává ‚ k hlavnímu bodu výzvy nic.
- Může vstup obsahovat jakýkoli znak ASCII nebo pouze podmnožinu . Např. Budou ve vstupu někdy čísla?
Odpovědět
Haskell, 100 91 bajtů
(>>= \x->last$[x]:[y|(z:y)<-words"aobo eunu iini oapi uiki AObo EUnu IIni OApi UIki",z==x])
Komentáře
- Hoboskunull určitě
Odpověď
TI-Basic, 173 + 59 + 148 = 380 bajtů
Doufejme, že mimozemšťané používají TI- 83/84 kalkulačky;)
Hlavní program, 173 bajtů
BONUS: Druhý nebo třetí řádek ponechejte podle toho, zda chcete běžného nebo reverzního překladače.
"("+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
podprogram (prgmQ
), 59 bajtů:
Ans→Str9 inString(Ans,"~ sub(Str9,Ans,length(Str9)-Ans+1→Str8 Str9 prgmR Repeat Str9=Ans+Str8 Ans+Str8→Str9 prgmR End
podprogram (prgmR
), 148 bajtů:
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 ~
představuje token 0x81
a @
představuje token 0x7F
, další informace zde .
PPS Část důvodů, proč mají tyto programy vysoký počet bajtů, je sub(
, inString(
, length(
a všechna malá písmena mají každý dva bajty …
Komentáře
- Myslím, že jste to spletli
prgmR
aprgmQ
jednou v nadpisech kódu? - Ano, děkujeme, že jste chytili @ByteCommander 🙂
Odpověď
Perl, 56 bajtů
Zahrnuje +1 pro -p
Zadejte vstup na STDIN
alien.pl
:
#!/usr/bin/perl -p s%\w%"`"&$&|("A\x0fboE\x15nuI\x09niO\x01piU\x09ki"=~/\u$&\K.../,$&)%eg
Funguje tak, jak je znázorněno, ale nahraďte \xXX
úniky skutečným znakem, abyste získali nárokované skóre
Komentáře
- +1 Hlasovalo pouze pro mimozemského avatara. Dělám si srandu, řešení je také pěkné.
- Ježíši Kriste .. Perl v nejlepším případě, dámy a pánové.
Odpověď
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,
Komentáře
- Znamená to pracovat pro vstup, který obsahuje nové řádky?
- @Jordan ano. sed čte “ jeden řádek po druhém „. Takže vše zpracuje až po první nový řádek, vytiskne to, vytiskne nový řádek a poté začne znovu, pokud bude více textu.
- Samozřejmě. 👍🏻
- @Jordan To nebylo ‚ ta pravidlo, když jsem to psal, ale stejně to skončilo.
Odpověď
Python, 99 95 93 bajtů
lambda s:"".join(("ouiaiOUIAI bnnpkbnnpk ouiiiouiii"+c)["aeiouAEIOU".find(c)::11] for c in s)
Docela jednoduché. Stačí si vzít index, ve kterém najdeme každý znak v seznamu samohlásek, a použít ho k vytáhnutí tří znaků, které potřebujeme.Pokud není nalezen, .find()
vrátí -1
, takže na konec řetězce stačí nalepit aktuální znak. Mezery jsou nutné, takže žádné písmeno "a"
nezahrnuje přidané c
. Přeložené samohlásky jsou seskupeny podle pořadí písmen (první písmeno každého překladu, poté druhé a potom třetí).
Komentáře
- Páni, pěkný kreativní přístup. I ‚ m dojem 🙂
- Mezeru můžete odstranit v
["aeiouAEIOU".find(c)::11] for
Odpověď
05AB1E , 28 27 20 bajtů
žÀ.•₅%~≠#ùÛãú•3ôD™«‡
Unuxplobonobotiniapin
žÀ # the string "aeiouAEIOU" .•₅%~≠#ùÛãú• # the string "obounuiniapiiki" 3ô # split in pieces of 3 D™« # concatenate with a title-case copy ‡ # transliterate
komentáře
- Ini lapivunu gapilfining!
- @BasicallyAlanTuring: Trvalo mi to příliš dlouho na to, abych si to přeložil do mé hlavy. Myslím, že potřebuji reverzní překladač: P
- Jdi na to, neměl by být ‚ příliš tvrdý: P
- Děsivé, myslím říká, že miluji golf.
- Změnil jsem svou otázku, kvůli které jsi odpověděl neplatným. ‚ To musí fungovat s novými řádky
Odpověď
PHP, 91 bajtů
<?=strtr($argv[1],[A=>Obo,E=>Unu,I=>Ini,O=>Api,U=>Iki,a=>obo,e=>unu,i=>ini,o=>api,u=>iki]);
Odpověď
Python, 129 bajtů
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)
Podívejte se, jak běží na ideone.com
Tady je pěkně formátovaná verze:
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)
Nejzajímavější části jsou { ... }.get(l.lower(), l)
, které se snaží vyhledat písmeno uložené v l
převedené na malá písmena ve slovníku a buď vrátí přeloženou verzi (je-li nalezena), nebo původní písmeno,
a [str, str.capitalize][ord(l) < 91]( ... )
, které kontroluje, zda původní písmeno bylo velké písmeno ( Bod kódu ASCII nižší než 91) a pak buď zavolá funkci str()
s písmenem jako argumentem (pokud to nebylo velké písmeno, nic nedělá) nebo str.capitalize()
funkce (převede první písmeno řetězce argumentu na velká písmena).
Odpověď
C (gcc) , 150 141 136 134 bajtů
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;}
Na základě odpovědí @algmyr a -8 díky @ ASCII-only
Méně golfová verze
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; }
Komentáře
- 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;}
- možná také 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]);}
Odpověď
Dávka, 215 bajtů
@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
Převezme vstup na STDIN. Při zpracování znak po znaku je výhodné rozlišovat velká a malá písmena.
Komentáře
- Dávka je jen nejhorší nástroj na všechno, není ‚ t? (No, alespoň jste porazili TI-Basic 🙂 Mimochodem, hezké vidět codegolf v Batchu!
Odpovědět
Pyth, 42 bajtů
#sXw"aeiouAEIOU"+Jc"obounuiniapiiki"3mrd3J
Program, který převezme vstup na STDIN a vytiskne výstup.
Jak to funguje
#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
Odpověď
C, 167 bajtů
I Opravdu jsem nechtěl porušit svůj zvyk pořád dělat hlavní funkce při kódování C, ale toto je podstatně kratší než verze s hlavním a tímto způsobem jsem dostal další dopis, který by vysvětlil, co jsem chtěl!
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]));}
Komentováno
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 */ }
Na C je něco zvláštního a jak hrozný můžete být být s ukazateli a podobně.
Komentáře
- 151 bajtů
- @ceilingcat I ‚ řekněme, že odpověď zveřejníte sama. ‚ se rozcházelo natolik, že si zasloužilo vlastní odpověď. 🙂
Odpověď
Retina , 60 bajtů
Počet bajtů předpokládá kódování ISO 8859-1.
[A-Z] »$& T`L`l i ini u iki e unu a ·b· o api · o T`»l`_L`».
Odpověď
Javascript (ES6), 94 93 92 bajtů
s=>s.replace(/[aeiou]/gi,c=>"OUIAIouiai"[n="AEIOUaeiou".search(c)]+"bnnpk"[n%=5]+"ouiii"[n])
Uloženo 1 bajt díky edc65
Uloženo 1 bajt díky Neilovi
Ukázka
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>
Komentáře
- Chcete-li zkontrolovat návratovou hodnotu
.indexOf
a.search
použijte~
namísto<0
- Podíval jsem se, co by se stalo, kdybyste vyměnili pouze samohlásky, a původně jsem dostal
s=>s.replace(/[aeiou]/gi,c=>"ouiaiOUIAI"[n="aeiouAEIOU".indexOf(c)]+"bnnpk"[n%=5]+"ouiii"[n])
což je stále 93 bajtů . Ale protožec
je nyní známo, že je samohláska, můžete nyní použítsearch
místoindexOf
pro uložení bajtu! - @Neil – hezké! Vlastně jsem zkusil obojí, ale ‚ nepřemýšlel o jejich kombinaci.
Odpovědět
Java 8, 172 bajtů
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; }
A mimozemšťan zpět do angličtiny (171 bajtů):
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;}
Neoprávněný:
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; }
Odpověď
Tcl, 75 bajtů
Řetězec, který má být přeložen, je v proměnné s
.
string map {A Obo a obo E Unu e unu I Ini i ini O Api o api U Iki u iki} $s
odpověď
Mathematica, 128 bajtů
#~StringReplace~{"a"->"obo","A"->"Obo","e"->"unu","E"->"Unu","i"->"ini","I"->"Ini","o"->"api","O"->"Api","u"->"iki","U"->"Iki"}&
Nejste si jisti, zda lze získat kratší program pomocí IgnoreCase->True
společně s kontrolou malých a velkých písmen.
Odpověď
C 178 bajtů
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);}
Komentáře
- 153 bajtů
- @ceilingcat & c může být v pořádku, pokud uloží číslo jako byte1 byte2 byte3 … Například 255 v paměti jako ff 00 00 00, ale pokud existuje druhý endian pro 255 máme 00 00 00 ff a vytiskneme prázdný řetězec …
odpověď
C, 163 162 159 bajtů
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;}
Komentáře
- vložení
char*t="aeiou";
do smyčky for uloží 1 bajt - 144 bajtů
Odpověď
C #, 133 stávka> 121 bajtů
s=>{int i;return string.Concat(s.Select(c=>(i ="AIUEOaiueo".IndexOf(c))>-1?"OboIniIkiUnuApioboiniikiunuapi".Substring(i*3,3):c+""));}
Upravit (díky milk
)
děkuji 🙂 Vlastně toto přetížení znám, ale nějak jsem na něj při psaní úplně zapomněl.
s=>string.Concat(s.Select((c,i)=>(i="AIUEOaiueo".IndexOf(c))>-1?"OboIniIkiUnuApioboiniikiunuapi".Substring(i*3,3):c+""));
Komentáře
- Můžete použít
Select(char, int)
přetížení, takže nemusíte ‚ deklarovati
a může dát vše do jednoho řádku.s=>string.Concat(s.Select((c,i)=>(i="AIUEOaiueo".IndexOf(c))>-1?"OboIniIkiUnuApioboiniikiunuapi".Substring(i*3,3):c+""));
odpověď
C, 207 202 bajtů (díky 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) Nerad vynechávám typ před jakýmkoli druhem deklarací.
2) Nemám opravdu rád nepoužitelný kód (bez funkce main ())
Použití:
c89 cg.c -o cg; echo "Testing" | ./cg
Komentáře
- Vítejte v PPCG!
- @MartinEnder, to je ‚ neočekávané … ale děkuji 🙂
-
(c=getchar())!= EOF
se může stát~(c=getchar())
- 143 bajtů
Odpověď
Swift 2,2 196 bajtů
¯ \ _ (ツ) _ / ¯
golfové
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) }
Komentáře
- Jsou mezery v
var r = [
nutné? - Ano, v aplikaci pro hřiště, pokud nedáte ‚ mezeru mezi úkoly, uděláte chybu a řekne vám, abyste přidali mezery . Swift je pravděpodobně jeden z nejhorších jazyků pro golf, ale myslel jsem, že by bylo zábavné to zkusit.
- A bylo zajímavé, že mi to nedalo ‚ Chyba, když jsem přiřadil proměnnou uzávěru. Z tohoto důvodu pokrčil rameny
- ano, všiml jsem si toho také. Proto jsem byl ‚ zmaten.
Odpověď
Perl 6 , 84 82 bajtů
{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")}
Rozšířeno:
# 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" ) }
Použití:
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
Odpověď
C – 192 bajtů
(pro přehlednost přidány nové řádky)
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]);}}
Pouze vyhledávací tabulky a logický přepínač.
Vyhledejte každé písmeno v tabulce (řetězci) samohlásek; pokud je nalezen, upravte jej podle pravidla v tabulce s
. Vytiskněte každý znak následovaný řetězcem: pokud byla nalezena samohláska, vytiskněte znak upravený hodnotou v s
následovanou zbytkem slabiky uložené v tabulce f
; pokud nebyla nalezena samohláska, vytiskněte původní znak a prázdný řetězec.
Komentáře
Odpověď
Ruby, 102 93 91 88 78 bytů
gsub(/[#{b="aeiouAEIOU"}]/){"obounuiniapiikiOboUnuIniApiIki"[b.index($&)*3,3]}
Vysvětlení:
Proveďte řádek jako ruby -pe "gsub(/[#{b="aeiouAEIOU"}]/){"obounuiniapiikiOboUnuIniApiIki"[b.index($&)*3,3]}"
, další typ, například Australia
měl by vypsat: Oboikistroboliniobo
.
Je to docela jednoduché, nahraďte všechny samohlásky podřetězcem založeným na indexu samohlásky, která má být nahrazena v (b), krát 3 a další 3 znaky v překladatelském řetězci.
Komentáře
- Mám podezření na úvodní a koncové uvozovky (a vnitřní únik, pokud má vstup uvozovky) ) na výstupu by to mohlo diskvalifikovat. Každopádně můžete uložit dva bajty přesunutím přiřazení
b
do Regexp (/[#{b=...}/
). - Myslím, že prostor
p $*
je zbytečný - Použijte příznak
-p
k uložení dalších bajtů.ruby -pe 'gsub(/[#{b="aeiouAEIOU"}]/){"obounuiniapiikiOboUnuIniApiIki"[b.index($&)*3,3]}'
- Počítám 78 + 2 (
-pe
). Jak získáte 71? - @NotthatCharles, v tomto případě skutečně záleží na postavách potřebných k provedení? Jen jsem je ‚ nepočítal.
Odpovědět
TI-BASIC, 201 197 195 bajtů
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
Myslet si, že najdu další TI -ZÁKLADNÍ odpověď zde!
Každopádně je vstupem anglický řetězec v Ans
.
Výstupem je přeložený řetězec.
Příklady:
"HE HE prgmCDGF1A HUnu "Hello Hello prgmCDGF1A Hunullapi
Vysvětlení:
(Nové řádky byly přidány kvůli čitelnosti. Více řádků ze stejného řádku bude označeno :
v následujícím bloku kódu.)
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"
Poznámky:
-
TI-BASIC je tokenizovaný jazyk. Počet znaků ne stejný počet bajtů.
-
Malá písmena v TI-BASIC jsou dvě byt es každý.