Eligazítás

Az idegenek letelepedtek a földön, és furcsa módon ábécéjük pontosan megegyezik a miénkkel. Nyelvük szintén nagyon hasonlít a miénkre, nagyon különböző és könnyen kiszámítható különbségek vannak.

Kihívás

Vegyünk egy karakterláncot, és adjuk ki az idegen nyelv megfelelőjét. A fordítás önmagában működik :

Cserélje ki a szó összes magánhangzóját a megfelelővel:

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

Írhat másik fordítót is az Alien fordítására -> angol, ez azonban nem kötelező.

Példák

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

Ha a magánhangzó nagybetűs, akkor az elsőt nagybetűvel írja betű ..

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

Szabályok

  • A szokásos kiskapuk érvényesek
  • Új szöveget kell használniuk sorok
  • Írhatunk függvényt, lambda-t vagy teljes programot.

    Capingrobotikilobotiniapins apin írja a thunu runuvunursunu trobonslobotapir!

Megjegyzések

  • I ‘ nem tudom, mi Írhat másik fordítót is az Alien- > Az angol állítólag azt jelenti. Írhatunk fordított fordítót a szokásos helyett?
  • Lehet, hogy ‘ csak én vagyok, de ‘ számomra nem nyilvánvaló, hogy is itt hordozza ezt a jelentést. Egyébként ‘ nem vagyok biztos benne, hogy ez egy szabály , ha ‘ nem része a ténylegesnek feladat.
  • @Dennis ‘ kissé punudobontinikus vagy, de én ‘ szerkesztettem világosabb.
  • Miért van szükség az új vonalakra? Véleményem szerint ez felesleges, és nem tesz hozzá ‘ semmit a kihívás fő pontjához.
  • Tartalmazhat-e a bemenet bármilyen ASCII karaktert, vagy csak egy részhalmazot . Pl. Lesznek valaha számok a bemenetben?

Válasz

Haskell, 100 91 bájt

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

Megjegyzések

  • Hoboskunull biztosan

Válasz

TI-Basic, 173 + 59 + 148 = 380 bájt

Remélhetőleg az idegenek a TI- 83/84 számológépek;)

Főprogram, 173 bájt

BÓNUSZ: Tartsa a második vagy a harmadik sort attól függően, hogy normál vagy fordított fordítót szeretne-e.

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

Alprogram (prgmQ), 59 bájt:

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

Alprogram (prgmR), 148 bájt:

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 A ~ a tokent 0x81 és a @ tokent jelöli. 0x7F, tudjon meg többet itt .

PPS Ennek oka, hogy ezeknek a programoknak magas a bájtja, mert sub(, inString(, length( , és az összes kisbetű egyenként két bájtos …

Megjegyzések

  • Azt hiszem, összekeverted prgmR és prgmQ egyszer a kód címsoraiban?
  • Igen, köszönöm, hogy elkapta azt a @ByteCommander 🙂

Válasz

Perl, 56 bájt

Tartalmazza a +1 értéket a -p

Adja meg az STDIN-t

alien.pl:

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

Az ábra szerint működik, de cserélje le a \xXX menekülést az aktuális karakterre, hogy megkapja az igényelt pontszámot

Megjegyzések

  • +1 Csak az Alien avatárra szavazott. Csak vicceltem, a megoldás is jó.
  • Jézus Krisztus .. Perl a legjobbjaiban, hölgyeim és uraim.

Válasz

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, 

Megjegyzések

  • új sorokat tartalmazó beviteli munka?
  • @Jordan Megteszi. A sed

sort egyenként olvassa “. Tehát mindent feldolgoz az első új sorig, kinyomtatja, új sort nyomtat, majd elölről kezdi, ha több szöveg van.

  • Természetesen. 👍🏻
  • @Jordan Ez nem volt ‘ ta szabály, amikor ezt írtam, de végül is működött.
  • Válasz

    Python, 99 95 93 bájt

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

    Az ideone.com webhelyen …

    Nagyon egyszerű. Csak vegye be azt az indexet, amelyen az egyes karaktereket megtaláljuk a magánhangzók listájában, és használjuk a három szükséges karakter megszerzéséhez.Ha nem található, akkor a .find() visszaadja az -1 szót, ezért csak ragassza az aktuális karaktert a karakterlánc végére. bármely "a" betű nem tartalmazza a hozzáadott c betűt. A lefordított magánhangzók betűrend szerint vannak csoportosítva (minden fordítás első betűje, majd a második, majd a harmadik).

    Megjegyzések

    • Wow, szép kreatív megközelítés. Lenyűgöztem ‘ 🙂
    • Eltávolíthatja a helyet a ["aeiouAEIOU".find(c)::11] for

    Válasz

    05AB1E , 28 27 20 bájt

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

    Próbálja ki online!

    Unuxplobonobotiniapin

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

    megjegyzések

    • Ini lapivunu gapilfining!
    • @BasicallyAlanTuring: Túl sokáig tartott, hogy ezt a fejembe fordítsam. Szerintem fordított fordítóra van szükségem: P
    • Menj, ne legyen ‘ túl nehéz: P
    • szerintem ijesztő azt mondja, hogy szeretem a golfot.
    • Megváltoztattam a kérdésemet, ami érvénytelenné teszi a választ. Ennek új sorokkal kell működnie

    Válasz

    PHP, 91 bájt

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

    Válasz

    Python, 129 bájt

    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) 

    Nézze meg, hogy az ideone.com webhelyen fut-e

    Itt van egy szépen formázott verzió:

    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) 

    A legérdekesebb részek a { ... }.get(l.lower(), l) részek, amelyek megpróbálják megkeresni a l tárolt betűt. kisbetű a szótárban, és vagy a lefordított változatot adja vissza (ha megtalálható), vagy pedig az eredeti betűt,
    és [str, str.capitalize][ord(l) < 91]( ... ), amelyek ellenőrzik, hogy az eredeti betű nagybetű volt-e ( Az ASCII kódpont 91-nél alacsonyabb), majd vagy meghívja a str() függvényt argumentumként a betűvel (ha nem volt “nagy betű, nem csinál semmit”), vagy az str.capitalize() function (konvertálja az argumentum karakterláncának első betűjét nagybetűkhöz).

    Válasz

    C (gcc) , 150 141 136 134 bájt

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

    Próbálja ki online!

    A @algmyr válasza és a -8 a @ ASCII-only jóvoltából

    Kevésbé golfozott verzió

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

    Megjegyzések

    • 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;}
    • talán 149 is: 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]);}

    Válasz

    Köteg, 215 bájt

    @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 

    Beviteli az STDIN-t. A karakterenkénti feldolgozás megkönnyíti a kis- és nagybetűk megkülönböztetését.

    Megjegyzések

    • A köteg mindenben a legrosszabb eszköz, nem is ‘ ez? (Nos, legalább legyőzted a TI-Basicet 🙂 Egyébként nagyon jó látni egy codegolfot a Batch-ben!

    Válasz

    Pyth, 42 bájt

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

    Olyan program, amely beviszi az STDIN-t és kinyomtatja a kimenetet.

    Próbálja ki online

    Hogyan működik

    #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 

    Válasz

    C, 167 bájt

    I valójában nem akartam eltörölni azt a szokásomat, hogy a C kódolásakor mindig a fő funkciókat látom el, de ez lényegesen rövidebb, mint a fővel rendelkező verzió, és így kaptam egy újabb levelet, hogy elírjam, amit akarok!

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

    Hozzászólt

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

    Van valami különleges a C-ben, és milyen szörnyű tudsz lenni legyél mutatókkal és ilyenekkel.

    Megjegyzések

    • 151 bájt
    • @ceilingcat I ‘ d azt mondja, önállóan tegye közzé válaszát. ‘ annyira elvált egymástól, hogy megérdemelje saját válaszát. 🙂

    Válasz

    Retina , 60 bájt

    A bájtok száma ISO 8859-1 kódolást feltételez.

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

    Próbálja ki online!

    Válasz

    Javascript (ES6), 94 93 92 bájt

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

    1 bájt mentve az edc65-nek köszönhetően
    1 bájt mentve a Neilnek köszönhetően

    Demó

     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> 

    Megjegyzések

    • A .indexOf és a .search visszatérési értékének ellenőrzéséhez használja a ~ elemet a <0
    • Megnéztem, mi történne, ha csak magánhangzókat cserélnél, és eredetileg s=>s.replace(/[aeiou]/gi,c=>"ouiaiOUIAI"[n="aeiouAEIOU".indexOf(c)]+"bnnpk"[n%=5]+"ouiii"[n]) -et kaptam, ami még mindig 93 bájt . De mivel a c ma már magánhangzó, ezért a search szót használhatja a indexOf bájt mentéséhez!
    • @Neil – Szép! Kipróbáltam tulajdonképpen mindkettőt, de nem gondoltam ‘ ezek kombinációjára.

    Válasz

    Java 8, 172 bájt

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

    És idegen az angolhoz (171 bájt):

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

    Válasz

    Tcl, 75 bájt

    A lefordítandó karakterlánc a s.

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

    Válasz

    Mathematica, 128 bájt

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

    Nem biztos abban, hogy rövidebb programot lehet-e beszerezni a IgnoreCase->True és az esetellenőrzés mellett.

    Válasz

    C 178 bájt

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

    Megjegyzések

    • 153 bájt
    • @ceilingcat & c rendben lehet, ha a számot byte1 byte2 byte3 bájton menti … Például 255 a memóriában, mint ff 00 00 00, de ha van egy másik endian 255-re van 00 00 00 ff és kinyomtatjuk a void karakterláncot …

    Válasz

    C, 163 162 159 bájt

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

    Megjegyzések

    • char*t="aeiou"; beillesztése a ciklushoz 1 bájtot ment meg
    • 144 bájt

    Válasz

    C #, 133 sztrájk> 121 bájt

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

    Szerkesztés (a )

    köszönöm 🙂 Valójában ismerem ezt a túlterhelést, de valahogy teljesen megfeledkeztem ennek írásakor.

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

    megjegyzések

    • Használhatja a Select(char, int) túlterhelést, így nem kell ‘ nyilatkoznia i és mindent egy sorba foglalhat. s=>string.Concat(s.Select((c,i)=>(i="AIUEOaiueo".IndexOf(c))>-1?"OboIniIkiUnuApioboiniikiunuapi".Substring(i*3,3):c+""));

    Válasz

    C, 207 202 bájt (hála a Cyoce-nak)

    #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) Utálom bármilyen típusú deklaráció előtt kihagyni a típust.

    2) Nem igazán szeretnék használhatatlan kódot elhelyezni (main () függvény nélkül)

    Használat:

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

    Megjegyzések

    • Üdvözöljük a PPCG-ben!
    • @MartinEnder, ez ‘ váratlan … de köszönöm 🙂
    • (c=getchar())!= EOF ~(c=getchar())
    • 143 bájt lehet

    Válasz

    Swift 2,2 196 bájt

    ¯ \ _ (ツ) _ / ¯

    Golfozott

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

    Megjegyzések

    • A var r = [ szükséges?
    • Igen, a játszóterek alkalmazásban, ha nem ‘ nem tesz szóközt egy feladat közé, akkor hibaüzenetet kap, és azt mondja, hogy tegyen szóközt . A Swift valószínűleg az egyik legrosszabb nyelv a golfozáshoz, de úgy gondoltam, hogy jó lenne kipróbálni.
    • És érdekes volt, hogy nem ezt adta ‘ hiba, amikor változót rendeltem egy lezáráshoz. Ezért a vállvonogató férfi
    • igen, ezt én is észrevettem. Ezért ‘ zavart.

    Válasz

    Perl 6 , 84 82 bájt

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

    Kiterjesztett:

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

    Használat:

     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  

    Válasz

    C – 192 bájt

    (új sorok hozzáadva az érthetőség érdekében)

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

    Csak táblák és logikai kapcsoló keresése.

    Keresse meg az egyes betűket a magánhangzók táblázatában (karakterláncában); ha megtalálta, akkor módosítsa a s táblázat szabályának megfelelően. Nyomtassa ki az egyes karaktereket, majd egy karakterláncot: ha magánhangzót találtak, nyomtassa ki az s értékkel módosított karaktert, amelyet a ; ha nem található magánhangzó, nyomtassa ki az eredeti karaktert és egy üres karakterláncot.

    Megjegyzések

    Válasz

    Rubin, 102 93 91 88 78 bájt

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

    Magyarázat:

    Hajtsa végre a következő sort: ruby -pe "gsub(/[#{b="aeiouAEIOU"}]/){"obounuiniapiikiOboUnuIniApiIki"[b.index($&)*3,3]}", következő típus, például Australia, amelyet ki kell adnia: Oboikistroboliniobo.

    Ez elég egyszerű, cserélje ki az összes magánhangzót egy alszövegre a (b) -ban kicserélendő magánhangzó indexe alapján, a 3. és a a következő 3 karakter a fordítási sztringben.

    Megjegyzések

    • Gyanítom, hogy a vezető és a záró idézőjelek (és a belső menekülési lehetőségek vannak, ha a bemenetben idézőjelek vannak) ) a kimenetben ezt diszkvalifikálhatja. Mindenesetre két bájtot elmenthet az b a Regexp-be (/[#{b=...}/).
    • Úgy gondolom, hogy a p $* szóköz felesleges
    • További bájtok mentéséhez használja a -p jelzőt. ruby -pe 'gsub(/[#{b="aeiouAEIOU"}]/){"obounuiniapiikiOboUnuIniApiIki"[b.index($&)*3,3]}'
    • 78 + 2-et számlálok (-pe). Hogyan szerezhet 71-et?
    • @NotthatCharles ebben az esetben valóban számítanak a végrehajtáshoz szükséges karakterek? Csak nem ‘ nem számoltam meg őket.

    Válasz

    TI-BASIC, 201 197 195 bájt

    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 

    Ha azt gondolnám, hogy találnék másik TI-t -IGAZ válasz itt!

    A bemenet egyébként egy angol karakterlánc a Ans fájlban.
    A kimenet a lefordított karakterlánc.

    Példák:

    "HE HE prgmCDGF1A HUnu "Hello Hello prgmCDGF1A Hunullapi 

    Magyarázat:
    (Új sorok hozzáadva az olvashatóság érdekében. Több sort ugyanabból a sorból : a következő kódblokkban.)

    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" 

    Megjegyzések:

    • A TI-BASIC tokenizált nyelv. A karakterek száma nem egyenlő bájtok száma.

    • A TI-BASIC kisbetűi két bájtosak mindegyik.

    Vélemény, hozzászólás?

    Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük