Briefing

Buitenaardse wezens hebben zich op aarde gevestigd en vreemd genoeg is hun alfabet exact hetzelfde als het onze. Hun taal lijkt ook erg op de onze, met enkele zeer duidelijke en gemakkelijk te berekenen verschillen.

Uitdaging

Neem een string en voer het equivalent van de alien taal uit. De vertaling werkt als zodanig :

Verwissel alle klinkers in het woord met de overeenkomstige:

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

Je mag ook een andere vertaler schrijven om Alien te vertalen -> Engels, dit is echter optioneel.

Voorbeelden

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

Als de klinker een hoofdletter heeft, dan moet je de eerste hoofdletter geven letter ..

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

Regels

  • Standaard mazen zijn van toepassing
  • Moet werken voor tekst die nieuwe regels
  • Je kunt een functie, lambda of volledig programma schrijven.

    Capingrobotikilobotiniapins apin wrinitining thunu runuvunursunu trobonslobotapir!

Reacties

  • Ik ‘ m niet zeker wat Je kunt ook een andere vertaler schrijven om Alien- > Engels zou moeten betekenen. Kunnen we de omgekeerde vertaler schrijven in plaats van de gewone?
  • Misschien is het ‘ alleen mij, maar het is ‘ is mij niet duidelijk dat ook hier deze betekenis heeft. Hoe dan ook, ik ‘ m niet zeker hoe dit een regel is als deze ‘ geen deel uitmaakt van de werkelijke taak.
  • @Dennis Je ‘ bent een beetje punudobontinisch, maar ik ‘ heb het bewerkt om het te maken duidelijker.
  • Waarom zijn er nieuwe regels nodig? Naar mijn mening is dit niet nodig en voegt ‘ niets toe aan het hoofdpunt van de uitdaging.
  • Mag de invoer een ASCII-teken bevatten of alleen een subset . Zullen er bijvoorbeeld ooit cijfers in de invoer staan?

Answer

Haskell, 100 91 bytes

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

Reacties

  • Hoboskunull zeker

Answer

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

Hopelijk gebruiken de aliens TI- 83/84 rekenmachines;)

Hoofdprogramma, 173 bytes

BONUS: Behoud de tweede of derde regel, afhankelijk van of je een normale of omgekeerde vertaler wilt.

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

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

Subprogramma (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 ~ vertegenwoordigt token 0x81 en @ vertegenwoordigt token 0x7F, lees meer hier .

PPS Een deel van de reden waarom deze programmas een hoog aantal bytes hebben, is omdat sub(, inString(, length( , en alle kleine letters zijn elk twee bytes …

Opmerkingen

  • Ik denk dat je prgmR en prgmQ één keer in je codekoppen?
  • Ja, bedankt voor het vangen van die @ByteCommander 🙂

Antwoord

Perl, 56 bytes

Inclusief +1 voor -p

Geef input op STDIN

alien.pl:

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

Werkt zoals weergegeven, maar vervang de \xXX ontsnappingen door het eigenlijke teken om de geclaimde score te krijgen

Opmerkingen

  • +1 Alleen voor de Alien-avatar gestemd. Grapje, de oplossing is ook leuk.
  • Jezus christus .. Perl op zijn best, dames en heren.

Antwoord

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, 

Reacties

  • Doet dit werk voor invoer die nieuwe regels bevat?
  • @Jordan Dat doet het. sed leest ” regel voor regel “. Het zal dus alles tot aan de eerste nieuwe regel verwerken, die afdrukken, een nieuwe regel afdrukken en dan opnieuw beginnen als er meer tekst is.
  • Ah, natuurlijk. 👍🏻
  • @Jordan Dat was geen ‘ regel toen ik dit schreef, maar het werkte toch.

Antwoord

Python, 99 95 93 bytes

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

Op ideone.com …

Vrij eenvoudig. Neem gewoon de index waarin we elk teken in de klinkerlijst vinden en gebruik deze om de drie tekens te trekken die we nodig hebben.Als het “niet wordt gevonden, geeft .find() terug -1, dus plak gewoon het huidige teken aan het einde van de string. De spaties zijn nodig elke letter "a" bevat niet “de toegevoegde c. De vertaalde klinkers zijn gegroepeerd op lettervolgorde (de eerste letter van elke vertaling, dan de tweede, dan de derde).

Opmerkingen

  • Wauw, leuke creatieve aanpak. Ik ‘ ben onder de indruk 🙂
  • Je kunt de spatie verwijderen in ["aeiouAEIOU".find(c)::11] for

Antwoord

05AB1E , 28 27 20 bytes

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

Probeer het online!

Unuxplobonobotiniapin

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

Reacties

  • Ini lapivunu gapilfining!
  • @BasicallyAlanTuring: Het kostte me veel te lang om dat in mijn hoofd te vertalen. Ik denk dat ik een omgekeerde vertaler nodig heb: P
  • Ga ervoor, mocht ‘ niet te moeilijk zijn: P
  • Eng, denk ik er staat dat ik van golf hou.
  • Ik ‘ heb mijn vraag gewijzigd waardoor je een ongeldig antwoord krijgt. Dit moet werken met nieuwe regels

Answer

PHP, 91 bytes

<?=strtr($argv[1],[A=>Obo,E=>Unu,I=>Ini,O=>Api,U=>Iki,a=>obo,e=>unu,i=>ini,o=>api,u=>iki]); 

Antwoord

Python, 129 bytes

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) 

Zie het draaien op ideone.com

Hier “een mooiere opgemaakte versie:

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 meest interessante delen zijn { ... }.get(l.lower(), l) die de letter probeert op te zoeken die is opgeslagen in l geconverteerd naar kleine letters in het woordenboek en geeft ofwel de vertaalde versie terug (indien gevonden), of anders de originele letter,
en [str, str.capitalize][ord(l) < 91]( ... ) die controleert of de originele letter een hoofdletter was ( ASCII-codepunt lager dan 91) en roept vervolgens de functie str() aan met de letter als argument (als het geen hoofdletter was, doet niets) of de str.capitalize() functie (converteert de eerste letter van de argumentstring in hoofdletters).

Answer

C (gcc) , 150141136 134 bytes

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

Probeer het online!

Gebaseerd op het antwoord van @algmyr en -8 dankzij @ ASCII-only

Minder golfversie

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

Reacties

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

Antwoord

Batch, 215 bytes

@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 

Neemt input op STDIN. De verwerking van teken voor teken heeft het gemak hoofdlettergevoelig te zijn.

Opmerkingen

  • Batch is gewoon de slechtste tool voor alles, isn ‘ niet? (Nou, je hebt in ieder geval TI-Basic verslagen 🙂 Leuk om een codegolf in Batch te zien trouwens!

Antwoord

Pyth, 42 bytes

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

Een programma dat input op STDIN neemt en de output afdrukt.

Probeer het online

Hoe het werkt

#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 

Antwoord

C, 167 bytes

I Ik wilde echt niet breken met mijn gewoonte om altijd hoofdfuncties uit te voeren bij het coderen van C, maar dit is aanzienlijk korter dan de versie met een main en op deze manier kreeg ik nog een letter om te spellen wat ik wilde!

Golfed

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

Gereageerd

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

Er is iets speciaals aan C en hoe vreselijk je kunt wees met verwijzingen en dergelijke.

Opmerkingen

  • 151 bytes
  • @ceilingcat I ‘ d zeg post uw antwoord op zichzelf. Het ‘ s liep voldoende uiteen om zijn eigen antwoord te verdienen. 🙂

Antwoord

Retina , 60 bytes

Byte-telling gaat uit van ISO 8859-1-codering.

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

Probeer het online!

Antwoord

Javascript (ES6), 94 93 92 bytes

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

1 byte opgeslagen dankzij edc65
1 byte opgeslagen dankzij 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> 

Reacties

  • Om de geretourneerde waarde van .indexOf en .search te controleren, gebruikt u ~ in plaats van <0
  • Ik heb gekeken wat er zou gebeuren als je alleen klinkers zou vervangen, en ik kreeg oorspronkelijk s=>s.replace(/[aeiou]/gi,c=>"ouiaiOUIAI"[n="aeiouAEIOU".indexOf(c)]+"bnnpk"[n%=5]+"ouiii"[n]) wat nog steeds 93 bytes is . Maar aangezien c nu bekend staat als een klinker, kunt u nu search gebruiken in plaats van indexOf om een byte op te slaan!
  • @Neil – Leuk! Ik heb eigenlijk allebei geprobeerd, maar ‘ dacht er niet over om ze te combineren.

Antwoord

Java 8, 172 bytes

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

ungolfed:

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

En Alien terug naar het Engels (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; } 

Answer

Tcl, 75 bytes

Te vertalen string bevindt zich in de variabele s.

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

Antwoord

Mathematica, 128 bytes

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

Weet niet zeker of een korter programma kan worden verkregen door IgnoreCase->True samen met een case check te gebruiken.

Antwoord

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

Reacties

  • 153 bytes
  • @ceilingcat & c kan ok zijn als het nummer opslaat als byte1 byte2 byte3 … Bijvoorbeeld 255 in het geheugen als ff 00 00 00 maar als er de andere endian is voor 255 we hebben 00 00 00 ff en printen de lege string …

Answer

C, 163 162 159 bytes

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

Opmerkingen

  • door char*t="aeiou"; in de for-lus te plaatsen, wordt 1 byte opgeslagen
  • 144 bytes

Antwoord

C #, 133 121 bytes

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

Bewerken (met dank aan milk)

dankjewel 🙂 Ik ken deze overdaad eigenlijk maar ben het op de een of andere manier helemaal vergeten toen ik dit schreef.

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

Reacties

  • U kunt de Select(char, int) overbelasting gebruiken, zodat u ‘ t i en kan het allemaal op één regel plaatsen. s=>string.Concat(s.Select((c,i)=>(i="AIUEOaiueo".IndexOf(c))>-1?"OboIniIkiUnuApioboiniikiunuapi".Substring(i*3,3):c+""));

Antwoord

C, 207 202 bytes (met dank aan 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) Ik haat het om type weg te laten voor elke vorm van aangifte

2) Ik hou er niet echt van om onbruikbare code te plaatsen (zonder main () functie)

Gebruik:

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

Reacties

  • Welkom bij PPCG!
  • @MartinEnder, dat ‘ is onverwacht … maar bedankt 🙂
  • (c=getchar())!= EOF kan ~(c=getchar()) worden
  • 143 bytes

Antwoord

Swift 2.2 196 bytes

¯ \ _ (ツ) _ / ¯

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

Opmerkingen

  • Zijn de spaties in var r = [ nodig?
  • Ja in de playgrounds-app als je geen ‘ een spatie tussen een opdracht plaatst, krijg je een foutmelding en moet je spaties toevoegen . Swift is waarschijnlijk een van de slechtste talen om mee te golfen, maar ik dacht dat het leuk zou zijn om het te proberen.
  • En het was interessant dat ‘ me dat niet gaf fout bij het toewijzen van een variabele aan een afsluiting. Vandaar de schouderophalende man.
  • ja, dat merkte ik ook. Dat ‘ is waarom ik in de war was.

Antwoord

Perl 6 , 84 82 bytes

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

Uitgebreid:

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

Gebruik:

 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  

Answer

C – 192 bytes

(nieuwe regels toegevoegd voor de duidelijkheid)

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

Zoek gewoon tabellen op en een booleaanse schakelaar.

Zoek elke letter op in de tabel (string) met klinkers; indien gevonden, pas het dan aan volgens de regel in tabel s. Druk elk teken af gevolgd door een string: als er een klinker is gevonden, druk dan het teken af dat is gewijzigd door de waarde in s gevolgd door de rest van de lettergreep die is opgeslagen in tabel f; als er geen klinker is gevonden, print dan het originele karakter en een lege string.

Reacties

Antwoord

Ruby, 102 93 91 88 78 bytes

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

Uitleg:

Voer de regel uit zoals ruby -pe "gsub(/[#{b="aeiouAEIOU"}]/){"obounuiniapiikiOboUnuIniApiIki"[b.index($&)*3,3]}", het volgende type, bijvoorbeeld Australia, het zou moeten uitvoeren: Oboikistroboliniobo.

Het is vrij eenvoudig, vervang alle klinkers door een substring op basis van de index van de te vervangen klinker in (b), maal 3 en de volgende 3 tekens in de vertaaltekenreeks.

Opmerkingen

  • Ik vermoed dat de voor- en achterliggende aanhalingstekens (en interne ontsnappingen als de invoer aanhalingstekens bevat ) in de uitvoer kan dit diskwalificeren. Hoe dan ook, je kunt twee bytes besparen door de toewijzing van b in de Regexp (/[#{b=...}/).
  • Ik denk dat de spatie p $* niet nodig is
  • Gebruik de vlag -p om extra bytes op te slaan. ruby -pe 'gsub(/[#{b="aeiouAEIOU"}]/){"obounuiniapiikiOboUnuIniApiIki"[b.index($&)*3,3]}'
  • Ik tel 78 + 2 (-pe). Hoe kom je aan 71?
  • @NotthatCharles doen de tekens die nodig zijn voor de uitvoering er in dit geval echt toe? Ik heb ze net niet ‘ geteld.

Antwoord

TI-BASIC, 201 197 195 bytes

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 

Te denken dat ik een andere TI zou vinden -BASIC antwoord hier!

Hoe dan ook, de invoer is een Engelse string in Ans.
De uitvoer is de vertaalde string.

Voorbeelden:

"HE HE prgmCDGF1A HUnu "Hello Hello prgmCDGF1A Hunullapi 

Uitleg:
(Nieuwe regels toegevoegd voor leesbaarheid. Meerdere regels van dezelfde regel worden aangeduid met een : in het volgende codeblok.)

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" 

Opmerkingen:

  • TI-BASIC is een tokenized taal. Het aantal tekens is niet aantal gelijke bytes.

  • Kleine letters in TI-BASIC zijn twee byt elk.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *