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

På ideone.com …

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

Prova 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: 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) 

Se det på ideone.com

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

Prova online!

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.

Prova online

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

Prova online!

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 eftersom c nu är känt för att vara en vokal kan du nu använda search istället för indexOf 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

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 deklarera i 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.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *