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 a prgmQ 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) 

Na webu ideone.com …

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™«‡ 

Vyzkoušejte to online!

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

Vyzkoušejte online!

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.

Vyzkoušejte online

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`». 

Vyzkoušejte to online!

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že c je nyní známo, že je samohláska, můžete nyní použít search místo indexOf 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 ‚ deklarovat i 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ý.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *