Briefing

Străinii s-au stabilit pe pământ și destul de ciudat, alfabetul lor este exact același cu al nostru. Limbajul lor este, de asemenea, foarte asemănător cu al nostru, cu diferențe foarte distincte și ușor de calculat.

Provocare

Luați un șir și scoateți echivalentul în limbaj al extraterestrului. :

Schimbați toate vocalele din cuvânt cu cele corespunzătoare:

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

De asemenea, puteți scrie un alt traducător pentru a traduce Alien -> Engleză, acest lucru este opțional totuși.

Exemple

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

Dacă vocala este cu majuscule, atunci cu majuscule prima scrisoare ..

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

Reguli

  • Se aplică lacune standard
  • Trebuie să funcționeze pentru textul care conține noi liniile
  • Puteți scrie o funcție, lambda sau un program complet

    Capingrobotikilobotiniapins apin wrinitining thunu runuvunursunu trobonslobotapir!

Comentarii

  • Nu ‘ nu sunt sigur ce Puteți scrie și un alt traducător pentru a traduce Alien- > Engleza ar trebui să însemne. Putem scrie traducătorul invers în locul celui obișnuit?
  • Poate că ‘ sunt doar eu, dar ‘ nu este evident pentru mine că și poartă acest sens aici. Oricum, nu ‘ nu sunt sigur cum este o regulă dacă ‘ nu face parte din actualul sarcină.
  • @Dennis ‘ ești un pic punudobontinic, dar ‘ l-am editat pentru a-l face mai clar.
  • De ce cerința pentru linii noi? În opinia mea, acest lucru nu este necesar și nu ‘ nu adaugă nimic la punctul principal al provocării.
  • Poate intrarea să conțină orice caracter ASCII sau doar un subset . De exemplu, vor exista vreodată numere în intrare?

Răspuns

Haskell, 100 91 octeți

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

Comentarii

  • Cu siguranță Hoboskunull

Răspuns

TI-Basic, 173 + 59 + 148 = 380 octeți

Sperăm că extratereștrii folosesc TI- Calculatoare 83/84;)

Programul principal, 173 octeți

BONUS: Păstrați a doua sau a treia linie, în funcție de faptul dacă doriți un traducător normal sau invers.

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

Subprogram (prgmQ), 59 octeți:

Ans→Str9 inString(Ans,"~ sub(Str9,Ans,length(Str9)-Ans+1→Str8 Str9 prgmR Repeat Str9=Ans+Str8 Ans+Str8→Str9 prgmR End 

Subprogram (prgmR), 148 octeți:

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 ~ reprezintă simbolul 0x81 și @ reprezintă simbolul 0x7F, aflați mai multe aici .

PPS O parte din motivele pentru care aceste programe au un număr mare de octeți este că sub(, inString(, length( și toate literele mici sunt câte doi octeți …

Comentarii

  • Cred că ați amestecat prgmR și prgmQ în titlurile codului dvs. o dată?
  • Da, mulțumesc că ați prins acel @ByteCommander 🙂

Răspuns

Perl, 56 octeți

Include +1 pentru -p

Oferiți informații despre STDIN

alien.pl:

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

Funcționează așa cum se arată, dar înlocuiți \xXX evadările cu caracterul real pentru a obține scorul revendicat

Comentarii

  • +1 Votat doar pentru avatarul Alien. Glumesc, soluția este, de asemenea, frumoasă.
  • Iisuse Hristos .. Perl în cele mai bune condiții, doamnelor și domnilor.

Răspuns

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, 

Comentarii

  • Face acest lucru funcționează pentru intrări care conțin linii noi?
  • @Jordan Da. sed citește ” câte o linie la rând „. Deci, va procesa totul până la prima linie nouă, o va imprima, o va imprima, apoi o va relua dacă există mai mult text.
  • Ah, desigur. 👍🏻
  • @Jordan Aceasta nu era regula ‘ ta când am scris aceasta, dar a ajuns să funcționeze oricum.

Răspuns

Python, 99 95 93 octeți

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

Pe ideone.com …

Destul de simplu. Luați doar indexul la care găsim fiecare caracter în lista vocală și folosiți-l pentru a trage cele trei caractere de care avem nevoie.Dacă nu este găsit, .find() returnează -1 deci lipiți caracterul curent la capătul șirului. Spațiile sunt necesare orice literă "a" nu include adăugată c. Vocalele traduse sunt grupate după ordinea literelor (prima literă a fiecărei traduceri, apoi a doua, apoi a treia).

Comentarii

  • Uau, abordare creativă frumoasă. ‘ sunt impresionat 🙂
  • Puteți elimina spațiul din ["aeiouAEIOU".find(c)::11] for

Răspuns

05AB1E , 28 27 20 octeți

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

Încercați online!

Unuxplobonobotiniapin

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

Comentarii

  • Ini lapivunu gapilfining!
  • @BasicallyAlanTuring: Mi-a luat prea mult timp pentru a traduce asta în capul meu. Cred că am nevoie de un traducător invers: P
  • Mergeți pentru el, nu ar trebui să ‘ să fie prea greu: P
  • Înfricoșător, cred se spune că îmi place golful.
  • Am ‘ mi-am schimbat întrebarea, ceea ce te face să răspunzi nevalid. Aceasta trebuie să funcționeze cu linii noi

Răspuns

PHP, 91 octeți

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

Răspuns

Python, 129 octeți

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) 

Vedeți-l rulând pe ideone.com

Aici este o versiune mai bine formatată:

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) 

Cele mai interesante părți sunt { ... }.get(l.lower(), l) care încearcă să caute litera stocată în l convertită în litere mici în dicționar și fie returnează versiunea tradusă (dacă este găsită), fie litera originală,
și [str, str.capitalize][ord(l) < 91]( ... ) care verifică dacă litera originală a fost o literă mare ( Cod ASCII punct mai mic decât 91) și apoi fie apelează funcția str() cu litera ca argument (dacă nu era „o majusculă, nu face nimic), fie (convertește prima literă a șirului de argumente cu majuscule).

Răspuns

C (gcc) , 150 141 136 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;}  

Încercați-l online!

Pe baza răspunsului de @algmyr și -8 datorită @ ASCII-only

Versiune mai puțin jucată

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

Comentarii

  • 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;}
  • poate și 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]);}

Răspuns

Lot, 215 octeți

@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 

Preține informații despre STDIN. Prelucrarea caracter cu caracter are comoditatea de a fi sensibil la majuscule și minuscule.

Comentarii

  • Lotul este doar cel mai prost instrument pentru toate, nu este ‘ nu? (Ei bine, măcar ați învins TI-Basic 🙂 Apropo, a văzut un codegolf în Batch, apropo!

Răspunde

Pyth, 42 octeți

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

Un program care preia intrarea pe STDIN și imprimă ieșirea.

Încercați online

Cum funcționează

#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 

Răspuns

C, 167 octeți

I Chiar nu am vrut să-mi încetez obiceiul de a face întotdeauna funcții principale atunci când codez C, dar acest lucru este substanțial mai scurt decât versiunea cu un principal și în acest fel am primit o altă literă pentru a scrie ceea ce doream!

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

Comentat

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

Există ceva special în C și cât de oribil poți fii cu indicii și altele.

Comentarii

  • 151 octeți
  • @ceilingcat I ‘ ar spune că postează-ți singur răspunsul. ‘ s-a divergut suficient pentru a merita propriul răspuns. 🙂

Răspuns

Retina , 60 de octeți

Numărul de octeți presupune codificarea ISO 8859-1.

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

Încercați-l online!

Răspuns

Javascript (ES6), 94 93 92 octeți

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

Salvat 1 octet datorită edc65
Salvat 1 octet datorită 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> 

Comentarii

  • Pentru a verifica valoarea returnată a .indexOf și .search utilizați ~ în loc de <0
  • Am căutat să văd ce se va întâmpla dacă înlocuiți doar vocalele și am primit inițial s=>s.replace(/[aeiou]/gi,c=>"ouiaiOUIAI"[n="aeiouAEIOU".indexOf(c)]+"bnnpk"[n%=5]+"ouiii"[n]), care este încă 93 de octeți . Dar, din moment ce c este acum cunoscut a fi o vocală, puteți folosi acum search în loc de indexOf pentru a salva un octet!
  • @Neil – Frumos! Am încercat ambele, de fapt, dar nu ‘ m-am gândit să le combin.

Răspunde

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

Și Alien înapoi în engleză (171 octeți):

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

Răspuns

Tcl, 75 octeți

Șirul de tradus se află în variabila s.

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

Răspuns

Mathematica, 128 octeți

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

Nu sunt sigur dacă un program mai scurt poate fi obținut utilizând IgnoreCase->True împreună cu o verificare a cazurilor.

Răspuns

C 178 octeți

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

Comentarii

  • 153 octeți
  • @ceilingcat & c poate fi ok dacă salvează numărul ca octet1 octet2 octet3 … De exemplu 255 în memorie ca ff 00 00 00 dar dacă există celălalt endian pentru 255 avem 00 00 00 ff și imprimăm șirul gol …

Răspuns

C, 163 162 159 octeți

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

Comentarii

  • introducerea char*t="aeiou"; în buclă salvează 1 octet
  • 144 octeți

Răspuns

C #, 133 121 bytes

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

Editați (datorită milk)

mulțumesc 🙂 De fapt, știu această suprasarcină, dar cumva a uitat-o complet când scriu asta ..

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

Comentarii

  • Puteți utiliza suprasarcina Select(char, int), astfel încât să nu ‘ nu trebuie să declarați i și poate pune totul într-un singur rând. s=>string.Concat(s.Select((c,i)=>(i="AIUEOaiueo".IndexOf(c))>-1?"OboIniIkiUnuApioboiniikiunuapi".Substring(i*3,3):c+""));

Răspuns

C, 207 202 octeți (datorită 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) Urăsc să omit tipul înainte de orice fel de declarații

2) Nu-mi place să pun cod inutilizabil (fără funcția main ())

Utilizare:

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

Comentarii

  • Bine ați venit la PPCG!
  • @MartinEnder, ‘ este neașteptat … dar vă mulțumesc 🙂
  • (c=getchar())!= EOF poate deveni ~(c=getchar())
  • 143 octeți

Răspuns

Swift 2.2 196 bytes

¯ \ _ (ツ) _ / ¯

Golf

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

Comentarii

  • Sunt spațiile din var r = [ necesar?
  • Da, în aplicația pentru locuri de joacă, dacă nu ‘ nu puneți un spațiu între o sarcină, vă va da o eroare și vă va spune să adăugați spații . Swift este probabil una dintre cele mai proaste limbi pentru golf, dar m-am gândit că ar fi distractiv să încerc.
  • Și a fost interesant că nu mi-a dat asta ‘ eroare când atribuiam o variabilă unei închideri. Prin urmare, omul care ridică din umeri
  • da, am observat și eu asta. De aceea ‘ este motivul pentru care am fost confuz.

Răspuns

Perl 6 , 84 82 octeți

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

Expanded:

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

Utilizare:

 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  

Răspuns

C – 192 octeți

(linii noi adăugate pentru claritate)

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

Doar tabele de căutare și un comutator boolean.

Căutați fiecare literă în tabel (șir) de vocale; dacă este găsit, modificați-l în conformitate cu regula din tabelul s. Imprimați fiecare caracter urmat de un șir: dacă a fost găsită o vocală, imprimați caracterul modificat de valoarea din s urmată de restul silabei stocate în tabel f; dacă nu a fost găsită o vocală, tipăriți caracterul original și un șir gol.

Comentarii

Răspuns

Ruby, 102 93 91 88 78 octeți

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

Explicație:

Executați linia ca ruby -pe "gsub(/[#{b="aeiouAEIOU"}]/){"obounuiniapiikiOboUnuIniApiIki"[b.index($&)*3,3]}", tipul următor, de exemplu, Australia ar trebui să afișeze: Oboikistroboliniobo.

Este destul de simplu, înlocuiți toate vocalele cu un șir bazat pe indicele vocalei care urmează să fie înlocuite în (b), ori 3 și următoarele 3 caractere din șirul de traducere.

Comentarii

  • Bănuiesc că ghilimelele de bază și cele finale (și scăpările interne dacă intrarea are ghilimele) ) în ieșire ar putea descalifica acest lucru. Oricum, puteți salva doi octeți mutând atribuirea b în Regexp (/[#{b=...}/).
  • Cred că spațiul p $* nu este necesar
  • Utilizați semnalizatorul -p pentru a salva octeți suplimentari. ruby -pe 'gsub(/[#{b="aeiouAEIOU"}]/){"obounuiniapiikiOboUnuIniApiIki"[b.index($&)*3,3]}'
  • Număr 78 + 2 (-pe). Cum obțineți 71?
  • @NotthatCharles contează cu adevărat caracterele necesare pentru execuție în acest caz? Tocmai nu le-am numărat pe ‘.

Răspuns

TI-BASIC, 201 197 195 octeți

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 

Să cred că aș găsi un alt TI -Răspuns BAZIC aici!

Oricum, intrarea este un șir englezesc în Ans.
Ieșirea este șirul tradus.

Exemple:

"HE HE prgmCDGF1A HUnu "Hello Hello prgmCDGF1A Hunullapi 

Explicație:
(Linii noi adăugate pentru lizibilitate. Mai multe linii din aceeași linie vor fi notate cu un : în următorul bloc de cod.)

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" 

Note:

  • TI-BASIC este un limbaj simbolizat. Numărul de caractere nu nu număr de octeți egal.

  • Literele mici din TI-BASIC sunt de doi octeți este fiecare.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *