Briefing

Romvesener har bosatt seg på jorden og merkelig nok er alfabetet deres nøyaktig det samme som vårt. Språket deres er også veldig likt vårt med noen veldig forskjellige og enkle å beregne forskjeller.

Utfordring

Ta en streng og send ut aliens språkekvivalent. Oversettelsen fungerer som sådan :

Bytt alle vokalene i ordet med det tilsvarende:

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

Du kan også skrive en annen oversetter for å oversette Alien -> Engelsk, dette er imidlertid valgfritt.

Eksempler

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

Hvis vokalen er stort, så bruker du den første bokstav ..

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

Regler

  • Standard smutthull gjelder
  • Må fungere for tekst som inneholder ny linjer
  • Du kan enten skrive en funksjon, lambda eller et fullt program

    Capingrobotikilobotiniapins apin wrinitining thunu runuvunursunu trobonslobotapir!

Kommentarer

  • Jeg ‘ Jeg er ikke sikker på hva Du kan også skrive en annen oversetter for å oversette Alien- > Engelsk skal bety. Kan vi skrive omvendt oversetter i stedet for den vanlige?
  • Kanskje det ‘ bare er meg, men det ‘ er ikke opplagt for meg at også bærer denne betydningen her. Uansett, jeg ‘ er ikke sikker på hvordan dette er en regel hvis den ‘ ikke er en del av den faktiske oppgave.
  • @Dennis Du ‘ er litt punudobontinisk, men jeg ‘ har redigert den for å gjøre det klarere.
  • Hvorfor kravet til nye linjer? Etter min mening er dette unødvendig og legger ikke ‘ noe til hovedpoenget med utfordringen.
  • Kan inngangen inneholde noe ASCII-tegn eller bare et delsett . Vil det f.eks. Være tall i inngangen?

Svar

Haskell, 100 91 byte

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

Kommentarer

  • Hoboskunull sikkert

Svar

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

Forhåpentligvis bruker romvesenene TI- 83/84 kalkulatorer;)

Hovedprogram, 173 byte

BONUS: Hold andre eller tredje linje avhengig av om du vil ha en normal eller omvendt oversetter.

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

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

Underprogram (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 ~ representerer token 0x81 og @ representerer token 0x7F, lær mer her .

PPS En del av hvorfor disse programmene har et høyt antall byte, er fordi sub(, inString(, length( , og alle små bokstaver er to byte hver …

Kommentarer

  • Jeg tror du blandet sammen prgmR og prgmQ i kodeoverskriftene dine en gang?
  • Ja, takk for at du fikk med deg @ByteCommander 🙂

Svar

Perl, 56 byte

Inkluderer +1 for -p

Gi innspill på STDIN

alien.pl:

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

Fungerer som vist, men erstatt \xXX rømmer med det faktiske tegnet for å få den påståtte poengsummen

Kommentarer

  • +1 Oppstemt bare for den fremmede avataren. Bare tuller, løsningen er også fin.
  • Jesus christ .. Perl på sitt beste, damer og herrer.

Svar

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, 

Kommentarer

  • Gjør dette jobbe for innspill som inneholder nye linjer?
  • @Jordan Det gjør det. sed leser » en linje om gangen «. Så den vil behandle alt opp til den første nye linjen, skrive ut den, skrive ut en ny linje og deretter starte på nytt hvis det er mer tekst.
  • Ah, selvfølgelig. 👍🏻
  • @Jordan Det var ikke ‘ ta-regel da jeg skrev dette, men det endte opp med å fungere uansett.

Svar

Python, 99 95 93 byte

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

På ideone.com …

Ganske enkelt. Bare ta indeksen vi finner hvert tegn på i vokalisten, og bruk den til å trekke de tre tegnene vi trenger.Hvis det ikke er funnet, returnerer .find() -1, så det er bare å feste det gjeldende tegnet på enden av strengen. Mellomromene er nødvendige så hvilken som helst bokstav "a" inkluderer ikke den tilføyde c. De oversatte vokalene er gruppert etter bokstavrekkefølge (den første bokstaven i hver oversettelse, deretter den andre og deretter den tredje).

Kommentarer

  • Wow, fin kreativ tilnærming. Jeg ‘ er imponert 🙂
  • Du kan fjerne plassen i ["aeiouAEIOU".find(c)::11] for

Svar

05AB1E , 28 27 20 byte

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

Prøv det online!

Unuxplobonobotiniapin

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

Kommentarer

  • Ini lapivunu gapilfining!
  • @BasicallyAlanTuring: Tok meg altfor lang tid å oversette det i hodet. Jeg tror jeg trenger en omvendt oversetter: P
  • Gå for det, skal ikke ‘ ikke være for vanskelig: P
  • Skummelt, tror jeg det står at jeg elsker golf.
  • Jeg ‘ har endret spørsmålet mitt som får deg til å svare ugyldig. Dette må fungere med nye linjer

Svar

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

Svar

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) 

Se at den kjører på ideone.com

Her «er en finere formatert versjon:

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) 

De mest interessante delene er { ... }.get(l.lower(), l) som prøver å slå opp bokstaven som er lagret i l konvertert til små bokstaver i ordboken og returnerer enten den oversatte versjonen (hvis funnet), eller ellers originalbokstaven,
og [str, str.capitalize][ord(l) < 91]( ... ) som sjekker om originalbrevet var stor bokstav ( ASCII-kodepunkt lavere enn 91) og kaller deretter enten str() -funksjonen med bokstaven som argument (hvis den ikke var «en stor bokstav, gjør ingenting) eller str.capitalize() -funksjon (konverterer første bokstav i argumentstrengen til store bokstaver).

Svar

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

Prøv det online!

Basert på svaret fra @algmyr og -8 takk til bare @ ASCII

Mindre golfversjon

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

Kommentarer

  • 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;}
  • kanskje også 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]);}

Svar

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 

Tar input på STDIN. Behandling av tegn for tegn har fordelene med å være store og små bokstaver.

Kommentarer

  • Batch er bare det verste verktøyet for alt, er ikke ‘ t det? (Vel, i det minste slo du TI-Basic 🙂 Fint å se en kodegolf i Batch, forresten!

Svar

Pyth, 42 byte

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

Et program som tar input på STDIN og skriver ut utdata.

Prøv det online

Slik fungerer det

#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 

Svar

C, 167 byte

I ønsket virkelig ikke å bryte min vane med å alltid gjøre hovedfunksjoner når jeg kodet C, men dette er vesentlig kortere enn versjonen med en hoved, og på denne måten fikk jeg et nytt brev til å stave det jeg ville!

Golfet

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

Kommenterte

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

Det er noe spesielt med C og hvor forferdelig du kan være med pekere og slikt.

Kommentarer

  • 151 bytes
  • @ceilingcat I ‘ si at legg inn svaret ditt alene. Det ‘ avviker nok til å fortjene sitt eget svar. 🙂

Svar

Retina , 60 byte

Antall byte antar ISO 8859-1-koding.

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

Prøv det online!

Svar

Javascript (ES6), 94 93 92 byte

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

Lagret 1 byte takket være edc65
Lagret 1 byte takket være 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> 

Kommentarer

  • For å sjekke returverdien av .indexOf og .search bruk ~ i stedet for <0
  • Jeg så for å se hva som ville skje hvis du bare byttet ut vokaler, og jeg fikk opprinnelig s=>s.replace(/[aeiou]/gi,c=>"ouiaiOUIAI"[n="aeiouAEIOU".indexOf(c)]+"bnnpk"[n%=5]+"ouiii"[n]) som fortsatt er 93 byte . Men siden c nå er kjent for å være vokal, kan du nå bruke search i stedet for indexOf for å spare en byte!
  • @Neil – Fint! Jeg prøvde begge, faktisk, men tenkte ikke ‘ på å kombinere dem.

Svar

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

ugolfet:

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

And Alien back to English (171 bytes):

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

Svar

Tcl, 75 byte

Strengen som skal oversettes, er i variabelen s.

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

Svar

Mathematica, 128 byte

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

Ikke sikker på om et kortere program kan oppnås ved å bruke IgnoreCase->True sammen med en sakssjekk.

Svar

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

Kommentarer

  • 153 byte
  • @ceilingcat & c kan være ok hvis det lagrer nummer som byte1 byte2 byte3 … For eksempel 255 i minnet som ff 00 00 00, men hvis det er den andre endianen for 255 vi har 00 00 00 ff og skriver ut tomstrengen …

Svar

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

Kommentarer

  • å sette char*t="aeiou"; i for loop sparer 1 byte
  • 144 byte

Svar

C #, 133 121 byte

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

Edit (takk til milk)

takk 🙂 Jeg kjenner faktisk denne overbelastningen, men glemte det på en eller annen måte helt når jeg skrev dette ..

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

Kommentarer

  • Du kan bruke Select(char, int) overbelastning slik at du ikke ‘ ikke trenger å erklære i og kan sette det hele på en linje. s=>string.Concat(s.Select((c,i)=>(i="AIUEOaiueo".IndexOf(c))>-1?"OboIniIkiUnuApioboiniikiunuapi".Substring(i*3,3):c+""));

Svar

C, 207 202 byte (takket være 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) Jeg hater å utelate typen før noen form for erklæringer

2) Jeg liker ikke å sette ubrukelig kode (uten hovedfunksjon ())

Bruk:

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

Kommentarer

  • Velkommen til PPCG!
  • @MartinEnder, at ‘ er uventet … men takk 🙂
  • (c=getchar())!= EOF kan bli ~(c=getchar())
  • 143 byte

Svar

Swift 2.2 196 byte

¯ \ _ (ツ) _ / ¯

Golfet

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

Kommentarer

  • Er mellomromene i var r = [ nødvendig?
  • Ja, i lekeplass-appen hvis du ikke ‘ ikke legger mellomrom mellom en oppgave, gir det deg en feil og forteller deg at du skal legge til mellomrom . Swift er sannsynligvis et av de verste språkene å spille golf med, men jeg trodde det ville være morsomt å prøve.
  • Og det var interessant at det ikke ‘ ga meg det feil da jeg tilordnet en variabel til en nedleggelse. Derav den skuldertrekkende mannen
  • ja, jeg la merke til det også. Det var ‘ hvorfor jeg var forvirret.

Svar

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

Utvidet:

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

Bruk:

 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  

Svar

C – 192 byte

(nye linjer lagt til for klarhet)

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

Bare slå opp tabeller og en boolsk bryter.

Slå opp hver bokstav i tabellen (streng) av vokaler; hvis funnet, så modifiser det i henhold til regelen i tabell s. Skriv ut hvert tegn etterfulgt av en streng: hvis det ble funnet en vokal, skriv ut tegnet endret med verdien i s etterfulgt av resten av stavelsen som er lagret i tabell f; hvis en vokal ikke ble funnet, kan du skrive ut det originale tegnet og en tom streng.

Kommentarer

Svar

Ruby, 102 93 91 88 78 byte

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

Forklaring:

Utfør linjen som ruby -pe "gsub(/[#{b="aeiouAEIOU"}]/){"obounuiniapiikiOboUnuIniApiIki"[b.index($&)*3,3]}", neste type, for eksempel, Australia den skal sendes ut: Oboikistroboliniobo.

Det er ganske greit, erstatt alle vokaler med et underlag basert på indeksen til den skal erstattes vokalen i (b), ganger 3 og de neste 3 tegnene i oversettelsesstrengen.

Kommentarer

  • Jeg mistenker de ledende og etterfølgende anførselstegn (og interne rømmer hvis inngangen har anførselstegn ) i utgangen kan diskvalifisere dette. Uansett kan du lagre to byte ved å flytte tildelingen av b inn i Regexp (/[#{b=...}/).
  • Jeg synes at plassen p $* er unødvendig
  • Bruk -p -flagget for å lagre ekstra byte. ruby -pe 'gsub(/[#{b="aeiouAEIOU"}]/){"obounuiniapiikiOboUnuIniApiIki"[b.index($&)*3,3]}'
  • Jeg teller 78 + 2 (-pe). Hvordan får du 71?
  • @NotthatCharles har karakterene som trengs for utføring virkelig betydning i dette tilfellet? Jeg telte bare ikke ‘.

Svar

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 

Å tro at jeg ville funnet en annen TI -Grunnleggende svar her!

Uansett er inngangen en engelsk streng i Ans.
Utgangen er den oversatte strengen.

Eksempler:

"HE HE prgmCDGF1A HUnu "Hello Hello prgmCDGF1A Hunullapi 

Forklaring:
(Newlines lagt til for lesbarhet. Flere linjer fra samme linje blir betegnet med en : i følgende kodeblokk.)

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" 

Merknader:

  • TI-BASIC er et tokenisert språk. Antall tegn betyr ikke antall byte.

  • Små bokstaver i TI-BASIC er to byte hver.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *