Briefing

Aliens har bosat sig på jorden og underligt nok er deres alfabet nøjagtigt det samme som vores. Deres sprog er også meget lig vores med nogle meget forskellige og lette at beregne forskelle.

Udfordring

Tag en streng, og send udlændingens sprogækvivalent. Oversættelsen fungerer som sådan :

Skift alle vokaler i ordet med det tilsvarende:

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

Du kan også skrive en anden oversætter for at oversætte Alien -> Engelsk, dette er dog valgfrit.

Eksempler

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

Hvis vokalen er stort, så aktiverer du den første bogstav ..

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

Regler

  • Standard smuthuller gælder
  • Skal fungere for tekst, der indeholder nyt linjer
  • Du kan enten skrive en funktion, lambda eller et komplet program

    Capingrobotikilobotiniapins apin wrinitining thunu runuvunursunu trobonslobotapir!

Kommentarer

  • Jeg ‘ Jeg er ikke sikker på hvad Du kan også skrive en anden oversætter for at oversætte Alien- > Engelsk formodes at betyde. Kan vi skrive den omvendte oversætter i stedet for den almindelige?
  • Måske er det ‘ bare mig, men det ‘ er ikke indlysende for mig, at også bærer denne betydning her. Alligevel er jeg ‘ ikke sikker på, hvordan dette er en regel , hvis det ‘ ikke er en del af den faktiske opgave.
  • @Dennis Du ‘ er lidt punudobontinisk, men jeg ‘ har redigeret det for at gøre det klarere.
  • Hvorfor kravet om nye linjer? Efter min mening er dette unødvendigt og tilføjer ikke ‘ noget til hovedpunktet i udfordringen.
  • Kan input indeholde et hvilket som helst ASCII-tegn eller kun et undersæt . F.eks. Vil der nogensinde være tal i input?

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 helt sikkert

Svar

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

Forhåbentlig bruger udlændinge TI- 83/84 regnemaskiner;)

Hovedprogram, 173 byte

BONUS: Hold anden eller tredje linje afhængigt af om du vil have en normal eller omvendt oversætter.

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

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 bytes:

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 ~ repræsenterer token 0x81 og @ repræsenterer token 0x7F, lær mere her .

PPS En del af, hvorfor disse programmer har et højt antal byte, er fordi sub(, inString(, length( , og alle små bogstaver er to byte hver …

Kommentarer

  • Jeg tror, du blandede prgmR og prgmQ i dine kodeoverskrifter en gang?
  • Ja tak, fordi du har fanget den @ByteCommander 🙂

Svar

Perl, 56 byte

Omfatter +1 til -p

Giv input på STDIN

alien.pl:

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

Fungerer som vist, men erstat \xXX undslipper med det faktiske tegn for at få den hævdede score

Kommentarer

  • +1 Opstemt bare til Alien-avataren. Bare sjov, løsningen er også god.
  • Jesus christ .. Perl når det er bedst, 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

  • Gør dette arbejde for input, der indeholder nye linjer?
  • @Jordan Det gør det. sed læser ” en linje ad gangen “. Så det vil behandle alt op til den første nye linje, udskrive det, udskrive en ny linje og derefter starte forfra, hvis der er mere tekst.
  • Ah, selvfølgelig. 👍🏻
  • @Jordan Det var ikke ‘ en regel, da jeg skrev dette, men det endte med at fungere alligevel.

Svar

Python, 99 95 93 byte

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

På ideone.com …

Ret simpelt. Bare tag det indeks, vi finder hvert tegn på, i vokalisten, og brug det til at trække de tre tegn, vi har brug for.Hvis det “ikke findes, returnerer .find() -1, så bare hold det aktuelle tegn i slutningen af strengen. Mellemrumene er nødvendige så ethvert bogstav "a" inkluderer ikke det tilføjede c. De oversatte vokaler er grupperet efter rækkefølge (det første bogstav i hver oversættelse, derefter det andet og derefter det tredje).

Kommentarer

  • Wow, flot kreativ tilgang. Jeg ‘ er imponeret 🙂
  • Du kan fjerne mellemrummet 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: Tog mig alt for lang tid til at oversætte det i mit hoved. Jeg tror, jeg har brug for en omvendt oversætter: P
  • Gå efter det, skal ‘ ikke være for hårdt: P
  • Jeg synes der står, at jeg elsker golf.
  • Jeg ‘ har ændret mit spørgsmål, som får dig til at svare ugyldigt. Dette skal 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 det køre på ideone.com

Her “er en mere pæn formateret version:

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 dele er { ... }.get(l.lower(), l) som forsøger at slå op på det bogstav, der er gemt i l konverteret til små bogstaver i ordbogen og returnerer enten den oversatte version (hvis den findes) eller ellers det oprindelige bogstav,
og [str, str.capitalize][ord(l) < 91]( ... ) som kontrollerer, om det oprindelige bogstav var et stort bogstav ( ASCII-kodepunkt lavere end 91) og kalder derefter enten str() -funktionen med brevet som argument (hvis det ikke var “ta stort bogstav, gør intet) eller str.capitalize() -funktion (konverterer det første bogstav i argumentstrengen til store bogstaver).

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!

Baseret på svaret fra @algmyr og -8 takket være kun @ ASCII

Mindre golfversion

 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;}
  • måske 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 

Tager input på STDIN. Behandling af tegn for tegn har den bekvemmelighed, at det er store og små bogstaver.

Kommentarer

  • Batch er bare det værste værktøj til alt, er ikke ‘ t det? (Nå, i det mindste slog du TI-Basic 🙂 Rart at se en codegolf i batch, forresten!

Svar

Pyth, 42 byte

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

Et program, der tager input på STDIN og udskriver output.

Prøv det online

Sådan 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 bytes

I ville virkelig ikke bryde min vane med altid at udføre hovedfunktioner, når jeg kodede C, men dette er væsentligt kortere end versionen med et hoved, og på denne måde fik jeg endnu et brev til at stave, hvad jeg ville!

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

Kommenterede

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

Der er noget specielt ved C, og hvor forfærdeligt du kan være med markører og sådan.

Kommentarer

  • 151 bytes
  • @ceilingcat I ‘ sige, skriv dit svar alene. Det ‘ er divergeret nok til at fortjene sit eget svar. 🙂

Svar

Retina , 60 byte

Antal byte antager ISO 8859-1-kodning.

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

Gemt 1 byte takket være edc65
Gemt 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 at kontrollere returværdien af .indexOf og .search skal du bruge ~ i stedet for <0
  • Jeg kiggede efter, hvad der ville ske, hvis du kun udskiftede vokaler, og jeg fik oprindeligt s=>s.replace(/[aeiou]/gi,c=>"ouiaiOUIAI"[n="aeiouAEIOU".indexOf(c)]+"bnnpk"[n%=5]+"ouiii"[n]), som stadig er 93 byte . Men da c nu er kendt for at være vokal, kan du nu bruge search i stedet for indexOf for at gemme en byte!
  • @Neil – Dejligt! Jeg prøvede begge begge, men tænkte ikke ‘ på at 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

Den streng, der skal oversættes, er i variablen 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 bytes

#~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 opnås ved at bruge IgnoreCase->True sammen med en sagsundersøgelse.

Svar

C 178 bytes

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 gemmer nummer som byte1 byte2 byte3 … For eksempel 255 i hukommelsen som ff 00 00 00, men hvis der er den anden endian til 255 vi har 00 00 00 ff og udskriver ugyldig streng …

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

  • at sætte char*t="aeiou"; i til loop gemmer 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+""));}  

Rediger (takket være milk)

tak 🙂 Jeg kender faktisk denne overbelastning, men glemte det på en eller anden måde 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 bruge Select(char, int) overbelastning, så du ikke ‘ ikke behøver at erklære i og kan sætte det hele på én linje. s=>string.Concat(s.Select((c,i)=>(i="AIUEOaiueo".IndexOf(c))>-1?"OboIniIkiUnuApioboiniikiunuapi".Substring(i*3,3):c+""));

Svar

C, 207 202 bytes (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 hader at udelade typen før nogen form for erklæringer

2) Jeg kan ikke godt lide at sætte ubrugelig kode (uden hovedfunktion ())

Anvendelse:

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

Kommentarer

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

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 mellemrummene i var r = [ nødvendigt?
  • Ja i legeplads-appen, hvis du ikke ‘ ikke placerer et mellemrum mellem en opgave, det giver dig en fejl og fortæller dig at tilføje mellemrum . Swift er sandsynligvis et af de værste sprog at spille golf med, men jeg syntes, det ville være sjovt at prøve.
  • Og det var interessant, at det ikke ‘ ikke gav mig det fejl, da jeg tildelte en variabel til en lukning. Derfor trækker man på skuldrene
  • Ja, det bemærkede jeg 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")}  

Udvidet:

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

Anvendelse:

 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 linier tilføjet for klarhedens skyld)

 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 opslagstabeller og en boolsk switch.

Slå hvert bogstav op i vokalens tabel (streng); hvis fundet, skal du ændre det i henhold til reglen i tabel s. Udskriv hvert tegn efterfulgt af en streng: Hvis der blev fundet en vokal, skal du udskrive det tegn, der er ændret med værdien i s efterfulgt af resten af stavelsen, der er gemt i tabel f; hvis der ikke blev fundet en vokal, skal du udskrive det originale tegn og en tom streng.

Kommentarer

Svar

Ruby, 102 93 91 88 78 byte

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

Forklaring:

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

Det er ret ligetil, udskift alle vokaler med et underlag baseret på indekset for den til at udskifte vokal i (b), gange 3 og de næste 3 tegn i oversættelsesstrengen.

Kommentarer

  • Jeg formoder, at de førende og efterfølgende anførselstegn (og interne undslipper, hvis input har anførselstegn ) i output kan diskvalificere dette. Under alle omstændigheder kan du gemme to byte ved at flytte tildelingen af b i Regexp (/[#{b=...}/).
  • Jeg synes, at mellemrummet p $* er unødvendigt
  • Brug -p flag for at gemme yderligere byte. ruby -pe 'gsub(/[#{b="aeiouAEIOU"}]/){"obounuiniapiikiOboUnuIniApiIki"[b.index($&)*3,3]}'
  • Jeg tæller 78 + 2 (-pe). Hvordan får du 71?
  • @NotthatCharles betyder de tegn, der er nødvendige for udførelse, virkelig noget i dette tilfælde? Jeg tællede bare ikke ‘ dem.

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 

At tro, at jeg ville finde en anden TI -BASIC svar her!

Under alle omstændigheder er input en engelsk streng i Ans.
Outputtet er den oversatte streng.

Eksempler:

"HE HE prgmCDGF1A HUnu "Hello Hello prgmCDGF1A Hunullapi 

Forklaring:
(Nye linjer tilføjet for læsbarhed. Flere linjer fra samme linje betegnes med en : i følgende kodeblok.)

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" 

Bemærkninger:

  • TI-BASIC er et tokeniseret sprog. Tegnantal betyder ikke antal byte.

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

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *