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
ogprgmQ
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)
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™«‡
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)
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;}
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.
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`».
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 dac
nu er kendt for at være vokal, kan du nu brugesearch
i stedet forindexOf
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ærei
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.