Briefing
Utlänningar har bosatt sig på jorden och konstigt nog är deras alfabet exakt detsamma som vårt. Deras språk liknar mycket vårt språk med några mycket tydliga och lätt att beräkna skillnader.
Utmaning
Ta en sträng och mata ut främmande språkekvivalenter. Översättningen fungerar som sådan :
Byt alla vokaler i ordet med motsvarande:
Vowel | With --------+-------- a | obo e | unu i | ini o | api u | iki
Du kan också skriva en annan översättare för att översätta Alien -> Engelska, detta är dock frivilligt.
Exempel
Input: Shaun Output: Shoboikin Input: Java Output: Jobovobo Input: Hello, World! Output: Hunullapi, Wapirld!
Om vokalen är versalerad, aktiverar du den första bokstav ..
Input: Alan Output: Obolobon Input: Australia Output: Oboikistroboliniobo
Regler
- Standard kryphål gäller
- Måste fungera för text som innehåller ny rader
-
Du kan antingen skriva en funktion, lambda eller ett fullständigt program
Capingrobotikilobotiniapins apin wrinitining thunu runuvunursunu trobonslobotapir!
Kommentarer
- Jag ’ jag är inte säker på vad Du kan också skriva en annan översättare för att översätta Alien- > Engelska ska betyda. Kan vi skriva omvänd översättare istället för den vanliga?
- Kanske är det ’ bara jag, men det ’ är inte uppenbart för mig att också bär denna betydelse här. Hur som helst, jag ’ jag är inte säker på hur detta är en regel om det ’ inte är en del av den faktiska uppgift.
- @Dennis Du ’ Jag är lite punudobontinic, men jag ’ har redigerat den för att göra det tydligare.
- Varför kravet på nya linjer? Enligt min mening är detta onödigt och lägger inte till ’ till utmaningens huvudpunkt.
- Kan ingången innehålla något ASCII-tecken eller bara en delmängd . Kommer det t ex att finnas siffror i inmatningen?
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 säkert
Svar
TI-Basic, 173 + 59 + 148 = 380 byte
Förhoppningsvis använder utlänningarna TI- 83/84 miniräknare;)
Huvudprogram, 173 byte
BONUS: Håll andra eller tredje raden beroende på om du vill ha en normal eller omvänd översättare.
"("+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 ~
representerar token 0x81
och @
representerar token 0x7F
, läs mer här .
PPS En del av varför dessa program har ett högt byteantal beror på att sub(
, inString(
, length(
, och alla små bokstäver är två byte vardera …
Kommentarer
- Jag tror att du blandade
prgmR
ochprgmQ
i dina kodrubriker en gång? - Ja, tack för att du har fått den @ByteCommander 🙂
Svar
Perl, 56 byte
Inkluderar +1 för -p
Ge input på STDIN
alien.pl
:
#!/usr/bin/perl -p s%\w%"`"&$&|("A\x0fboE\x15nuI\x09niO\x01piU\x09ki"=~/\u$&\K.../,$&)%eg
Fungerar som visas, men ersätt \xXX
flyr med det faktiska tecknet för att få den anspråksfulla poängen
Kommentarer
- +1 Upprövades bara för Alien-avataren. Bara skojar, lösningen är också trevlig.
- Jesus Kristus … Perl som bäst, mina damer och herrar.
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 detta jobbar du för input som innehåller nya rader?
- @Jordan Det gör det. sed läser ” en rad i taget ”. Så det kommer att bearbeta allt fram till den första nya raden, skriva ut det, skriva ut en ny rad och sedan börja om om det finns mer text.
- Ah, naturligtvis. 👍🏻
- @Jordan Det var inte ’ en regel när jag skrev detta, men det slutade fungera ändå.
Svar
Python, 99 95 93 byte
lambda s:"".join(("ouiaiOUIAI bnnpkbnnpk ouiiiouiii"+c)["aeiouAEIOU".find(c)::11] for c in s)
Ganska enkelt. Ta bara det index vi hittar varje tecken i vokallistan och använd det för att dra de tre tecknen vi behöver.Om det ”inte hittas, returnerar .find()
-1
så bara stick det aktuella tecknet i slutet av strängen. Mellanslagen är nödvändiga så valfri bokstav "a"
innehåller inte den tillagda c
. De översatta vokalerna är grupperade efter bokstavsordning (första bokstaven i varje översättning, sedan den andra och sedan den tredje).
Kommentarer
- Wow, trevligt kreativt tillvägagångssätt. Jag ’ är imponerad 🙂
- Du kan ta bort mellanslag 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: Det tog mig alldeles för lång tid att översätta det i mitt huvud. Jag tror att jag behöver en omvänd översättare: P
- Gå för det, borde ’ inte vara för svårt: P
- Skrämmande, tror jag det står att jag älskar golf.
- Jag ’ har ändrat min fråga som får dig att svara ogiltigt. Detta måste fungera med nya rader
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)
Här ”är en snyggare formaterad 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 intressanta delarna är { ... }.get(l.lower(), l)
som försöker slå upp bokstaven som är lagrad i l
konverterad till små bokstäver i ordboken och antingen returnerar den översatta versionen (om den hittas), eller också originalbokstaven,
och [str, str.capitalize][ord(l) < 91]( ... )
som kontrollerar om originalbokstaven var en stor bokstav ( ASCII-kodpunkt lägre än 91) och anropar antingen str()
-funktionen med bokstaven som argument (om den inte var ”en stor bokstav, gör ingenting) eller str.capitalize()
-funktion (omvandlar den första bokstaven i argumentsträngen till versaler).
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;}
Baserat på svaret från @algmyr och -8 tack vare @ ASCII-enbart
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;}
- kanske också 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
Parti, 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 inmatning på STDIN. Bearbetning av tecken för tecken har bekvämligheten att vara skiftlägeskänslig.
Kommentarer
- Batch är bara det värsta verktyget för allt, är inte ’ t det? (Tja, du slog åtminstone TI-Basic 🙂 Trevligt att se en kodgolf i Batch, förresten!
Svar
Pyth, 42 byte
#sXw"aeiouAEIOU"+Jc"obounuiniapiiki"3mrd3J
Ett program som tar in input på STDIN och skriver ut utdata.
Så fungerar 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 ville verkligen inte bryta min vana att alltid göra huvudfunktioner när jag kodade C, men det här är väsentligt kortare än versionen med ett huvud och på det här sättet fick jag ytterligare ett brev för att stava vad jag ville!
Golfat
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]));}
Kommenterade
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 finns något speciellt med C och hur hemskt du kan vara med pekare och sådant.
Kommentarer
- 151 byte
- @ceilingcat I ’ säg skicka ditt svar på egen hand. Den ’ skiljer sig tillräckligt för att förtjäna sitt eget svar. 🙂
Svar
Retina , 60 byte
Antal byte förutsätter 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])
Sparade 1 byte tack vare edc65
Sparade 1 byte tack vare 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
- För att kontrollera returvärdet för
.indexOf
och.search
använd~
istället för<0
- Jag såg för att se vad som skulle hända om du bara bytte ut vokaler och jag fick ursprungligen
s=>s.replace(/[aeiou]/gi,c=>"ouiaiOUIAI"[n="aeiouAEIOU".indexOf(c)]+"bnnpk"[n%=5]+"ouiii"[n])
vilket fortfarande är 93 byte . Men eftersomc
nu är känt för att vara en vokal kan du nu användasearch
istället förindexOf
för att spara en byte! - @Neil – Trevligt! Jag försökte båda faktiskt, men tänkte inte ’ att kombinera 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;}
ogolfold:
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; }
Och Alien tillbaka till engelska (171 byte):
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
Sträng som ska översättas finns i variabeln 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"}&
Inte säker på om ett kortare program kan erhållas genom att använda IgnoreCase->True
tillsammans med en fallkontroll.
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 vara ok om det sparar nummer som byte1 byte2 byte3 … Till exempel 255 i minnet som ff 00 00 00 men om det finns den andra endianen för 255 vi har 00 00 00 ff och skriver ut tomsträngen …
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
- att
char*t="aeiou";
sparas 1 byte - 144 byte
Svar
C #, 133 slå> 121 byte
s=>{int i;return string.Concat(s.Select(c=>(i ="AIUEOaiueo".IndexOf(c))>-1?"OboIniIkiUnuApioboiniikiunuapi".Substring(i*3,3):c+""));}
Redigera (tack vare milk
)
tack 🙂 Jag vet faktiskt den här överbelastningen men glömde det på något sätt helt när jag skrev det här.
s=>string.Concat(s.Select((c,i)=>(i="AIUEOaiueo".IndexOf(c))>-1?"OboIniIkiUnuApioboiniikiunuapi".Substring(i*3,3):c+""));
Kommentarer
- Du kan använda
Select(char, int)
överbelastning så att du inte ’ inte behöver deklarerai
och kan lägga allt på en rad.s=>string.Concat(s.Select((c,i)=>(i="AIUEOaiueo".IndexOf(c))>-1?"OboIniIkiUnuApioboiniikiunuapi".Substring(i*3,3):c+""));
Svar
C, 207 202 byte (tack vare 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) Jag hatar att utelämna typ före någon form av deklarationer
2) Jag gillar inte riktigt att sätta oanvändbar kod (utan huvudfunktion ())
Användning:
c89 cg.c -o cg; echo "Testing" | ./cg
Kommentarer
- Välkommen till PPCG!
- @MartinEnder, att ’ är oväntat … men tack 🙂
-
(c=getchar())!= EOF
kan bli~(c=getchar())
- 143 byte
Svar
Swift 2.2 196 byte
¯ \ _ (ツ) _ / ¯
Golfed
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
- Finns mellanslag i
var r = [
nödvändigt? - Ja i lekplatsappen om du inte ’ inte placerar ett mellanslag mellan en uppgift, det ger dig ett fel och säger att du ska lägga till mellanslag . Swift är förmodligen ett av de värsta språken att spela golf med men jag tyckte att det skulle vara kul att prova.
- Och det var intressant att det inte ’ gav mig det fel när jag tilldelade en variabel till en stängning. Därav den ryckande mannen
- ja jag märkte det också. Det var därför ’ som jag var förvirrad.
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")}
Utökat:
# 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" ) }
Användning:
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
(nya rader läggs till för tydlighetens skull)
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]);}}
Bara leta upp tabeller och en boolesk switch.
Leta upp varje bokstav i vokalerna (sträng); om det finns, ändra det enligt regeln i tabell s
. Skriv ut varje tecken följt av en sträng: om en vokal hittades, skriv ut tecknet som ändrats med värdet i s
följt av resten av stavelsen lagrad i tabell f
; om en vokal inte hittades, skriv ut det ursprungliga tecknet och en tom sträng.
Kommentarer
Svar
Ruby, 102 93 91 88 78 byte
gsub(/[#{b="aeiouAEIOU"}]/){"obounuiniapiikiOboUnuIniApiIki"[b.index($&)*3,3]}
Förklaring:
Kör raden som ruby -pe "gsub(/[#{b="aeiouAEIOU"}]/){"obounuiniapiikiOboUnuIniApiIki"[b.index($&)*3,3]}"
, nästa typ, till exempel Australia
den ska matas ut: Oboikistroboliniobo
.
Det är ganska enkelt, byt ut alla vokaler med ett underlag baserat på indexet för den som ska bytas ut vokal i (b), gånger 3 och de kommande tre tecknen i översättningssträngen.
Kommentarer
- Jag misstänker att de ledande och efterföljande citattecknen (och interna undgår om ingången har citattecken ) i utgången kan diskvalificera detta. Hur som helst kan du spara två byte genom att flytta tilldelningen av
b
in i Regexp (/[#{b=...}/
). - Jag tycker att utrymmet
p $*
är onödigt - Använd flaggan
-p
för att spara ytterligare byte.ruby -pe 'gsub(/[#{b="aeiouAEIOU"}]/){"obounuiniapiikiOboUnuIniApiIki"[b.index($&)*3,3]}'
- Jag räknar 78 + 2 (
-pe
). Hur får du 71? - @NotthatCharles betyder tecknen som behövs för utförande verkligen i det här fallet? Jag räknade bara inte ’.
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
Att tro att jag skulle hitta en annan TI -Grundläggande svar här!
Hur som helst, ingången är en engelsk sträng i Ans
.
Utgången är den översatta strängen.
Exempel:
"HE HE prgmCDGF1A HUnu "Hello Hello prgmCDGF1A Hunullapi
Förklaring:
(Nya rader läggs till för läsbarhet. Flera rader från samma rad kommer att betecknas med en :
i följande kodblock.)
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"
Anmärkningar:
-
TI-BASIC är ett tokeniserat språk. Teckenantalet inte lika byteantal.
-
Små bokstäver i TI-BASIC är två byte är vardera.