Tiedotus
Ulkomaalaiset ovat asettuneet maan päälle ja kummallisella tavalla, heidän aakkoset ovat täsmälleen samat kuin meidän. Heidän kielensä on myös hyvin samanlainen kuin meidän kielemme, ja siinä on joitain hyvin selkeitä ja helposti laskettavia eroja.
Haaste
Ota merkkijono ja tulosta ulkomaalaisen kielen vastine. Käännös toimii sellaisenaan :
Vaihda kaikki sanan vokaalit vastaavilla:
Vowel | With --------+-------- a | obo e | unu i | ini o | api u | iki
Voit myös kirjoittaa toisen kääntäjän kääntämään Alienin -> englanti, tämä on kuitenkin valinnainen.
Esimerkkejä
Input: Shaun Output: Shoboikin Input: Java Output: Jobovobo Input: Hello, World! Output: Hunullapi, Wapirld!
Jos vokaali on iso, niin isot kirjaimet isot kirjain.
Input: Alan Output: Obolobon Input: Australia Output: Oboikistroboliniobo
Säännöt
- Tavalliset porsaanreiät ovat voimassa
- On toimittava tekstissä, joka sisältää uutta rivit
-
Voit joko kirjoittaa funktion, lambdan tai koko ohjelman
Capingrobotikilobotiniapins apin kirjoitti thunu runuvunursunu trobonslobotapir!
Kommentit
- En ’ en ole varma mitä Voit myös kirjoittaa toisen kääntäjän kääntämään Alien- > englannin oletetaan tarkoittavan. Voimmeko kirjoittaa kääntäjän normaalin sijaan?
- Ehkä se ’ on vain minä, mutta se ’ ei ole minulle selvää, että myös kantaa tätä merkitystä täällä. Joka tapauksessa ’ en ole varma, miten tämä on sääntö , jos se ’ ei ole osa todellista tehtävä.
- @Dennis Sinä ’ olet hieman punudobontininen, mutta olen ’ muokannut sitä tekemään siitä selkeämpi.
- Miksi vaatimus uudelle riville? Mielestäni tämä on tarpeetonta, eikä se ’ t lisää mitään haasteen pääkohteeseen.
- Voiko tulo sisältää mitä tahansa ASCII-merkkiä vai vain osajoukon . Esimerkiksi onko syötteessä koskaan numeroita?
Vastaa
Haskell, 100 91 tavua
(>>= \x->last$[x]:[y|(z:y)<-words"aobo eunu iini oapi uiki AObo EUnu IIni OApi UIki",z==x])
Kommentit
- Hoboskunull varmasti
vastaus
TI-Basic, 173 + 59 + 148 = 380 tavua
Toivottavasti ulkomaalaiset käyttävät TI- 83/84 laskimet;)
Pääohjelma, 173 tavua
BONUS: Pidä toinen tai kolmas rivi riippuen siitä, haluatko normaalin vai kääntäjän kääntäjän.
"("+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
Aliohjelma (prgmQ
), 59 tavua:
Ans→Str9 inString(Ans,"~ sub(Str9,Ans,length(Str9)-Ans+1→Str8 Str9 prgmR Repeat Str9=Ans+Str8 Ans+Str8→Str9 prgmR End
Aliohjelma (prgmR
), 148 tavua:
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 ~
edustaa tunnusta 0x81
ja @
edustaa tunnusta 0x7F
, lue lisää täältä .
PPS Osa siitä, miksi näillä ohjelmilla on suuri tavumäärä, johtuu siitä, että sub(
, inString(
, length(
ja kaikki pienet kirjaimet ovat kaksi tavua kukin …
Kommentit
- Luulen, että sekoitit
prgmR
japrgmQ
koodin otsikoissasi kerran? - Kyllä, kiitos, että sait @ByteCommanderin 🙂
Vastaus
Perl, 56 tavua
Sisältää +1 kohteelle -p
Anna syöte STDIN-tunnukselle
alien.pl
:
#!/usr/bin/perl -p s%\w%"`"&$&|("A\x0fboE\x15nuI\x09niO\x01piU\x09ki"=~/\u$&\K.../,$&)%eg
Toimii kuten kuvassa, mutta korvaa \xXX
-pakot todellisella merkillä saadaksesi vaaditut pisteet
Kommentit
- +1 Myönnetty vain Alien-avatarille. Vielä hauskaa, ratkaisu on myös mukava.
- Jeesus Kristus .. Perl parhaimmillaan, hyvät naiset ja herrat.
Vastaa
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,
kommentit
- Onko tämä työskenteletkö syötteenä, joka sisältää uusia rivejä?
- @Jordan Se tekee. sed lukee ” yhden rivin kerrallaan ”. Joten se käsittelee kaiken ensimmäiseen uuteen riviin asti, tulostaa sen, tulostaa uuden rivin ja aloittaa sitten alusta, jos tekstiä on enemmän.
- Ah, tietysti. 👍🏻
- @Jordan Se ei ollut ’ ta sääntö, kun kirjoitin tämän, mutta se päätyi silti toimimaan.
vastaus
Python, 99 95 93 tavua
lambda s:"".join(("ouiaiOUIAI bnnpkbnnpk ouiiiouiii"+c)["aeiouAEIOU".find(c)::11] for c in s)
Melko yksinkertainen. Ota vain hakemisto, josta löydämme jokaisen merkin vokaaliluettelosta, ja käytä sitä vetämään tarvitsemamme kolme merkkiä.Jos sitä ei löydy, .find()
palauttaa -1
, joten kiinnitä vain nykyinen merkki merkkijonon päähän. Välilyönnit ovat välttämättömiä kaikki kirjaimet "a"
eivät sisällä lisättyä c
. Käännetyt vokaalit ryhmitellään kirjainjärjestyksessä (jokaisen käännöksen ensimmäinen kirjain, sitten toinen, sitten kolmas).
Kommentit
- Vau, mukava luova lähestymistapa. Olen ’ m vaikuttunut 🙂
- Voit poistaa tilan kohdasta
["aeiouAEIOU".find(c)::11] for
vastaus
05AB1E , 28 27 20 tavua
žÀ.•₅%~≠#ùÛãú•3ôD™«‡
Unuxplobonobotiniapin
žÀ # the string "aeiouAEIOU" .•₅%~≠#ùÛãú• # the string "obounuiniapiiki" 3ô # split in pieces of 3 D™« # concatenate with a title-case copy ‡ # transliterate
kommentit
- Ini lapivunu gapilfining!
- @BasicallyAlanTuring: Kesti minua liian kauan kääntääksesi sen päähäni. Luulen, että tarvitsen kääntäjän: P
- Mene, ei pitäisi ’ olla liian kovaa: P
- Pelottava, mielestäni siinä sanotaan rakastan golfia.
- Olen ’ muuttanut kysymystäni, mikä tekee sinusta vastaamattoman. Tämän täytyy toimia uusilla riveillä
Vastaus
PHP, 91 tavua
<?=strtr($argv[1],[A=>Obo,E=>Unu,I=>Ini,O=>Api,U=>Iki,a=>obo,e=>unu,i=>ini,o=>api,u=>iki]);
vastaus
Python, 129 tavua
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)
Katso se käynnissä ideone.com-sivustossa
Tässä on kauniimmin muotoiltu versio:
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)
Mielenkiintoisimmat osat ovat { ... }.get(l.lower(), l)
, joka yrittää etsiä kirjaimeen l
muunnetun kirjaimen. pienet kirjaimet sanakirjassa ja joko palauttaa käännetyn version (jos löytyy) tai alkuperäisen kirjaimen,
ja [str, str.capitalize][ord(l) < 91]( ... )
, jotka tarkistavat, oliko alkuperäinen kirjain iso kirjain ( ASCII-koodipiste on pienempi kuin 91) ja kutsuu sitten joko str()
-funktion, jossa argumentti on kirjain (jos se ei ollut ”ta” -kirjainta, ei tee mitään) tai str.capitalize()
-funktio (muuntaa argumenttimerkkijonon ensimmäisen kirjaimen isoihin kirjaimiin).
Vastaa
C (gcc) , 150141 136 134 tavua
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;}
Perustuu vastaukseen, jonka esitti @algmyr ja -8, kiitos vain @ ASCII-
Vähemmän golfattu versio
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; }
Kommentit
- 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;}
- ehkä myös 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]);}
vastaus
erä, 215 tavua
@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
Syöttää STDIN-tiedostoa. Merkkikohtainen käsittely on mukavaa, kun kirjainkoko on merkitsevä.
Kommentit
- Erä on vain pahin työkalu kaikkeen, isn ’ onko se? (No, ainakin voitit TI-Basicin 🙂 Kiva nähdä koodegolfia erässä, muuten!
Vastaa
Pyth, 42 tavua
#sXw"aeiouAEIOU"+Jc"obounuiniapiiki"3mrd3J
Ohjelma, joka ottaa syötteen STDIN-tunnukseen ja tulostaa tuloksen.
Kuinka se toimii
#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
vastaus
C, 167 tavua
I en todellakaan halunnut rikkoa tapaani tehdä aina päätoimintoja koodatessasi C: tä, mutta tämä on huomattavasti lyhyempi kuin versio, jossa on pää, ja näin sain toisen kirjeen kirjoittaaksesi mitä halusin!
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]));}
Kommentoi
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 */ }
C: ssä on jotain erityistä ja kuinka kauheaa voit ole viitteiden ja vastaavien kanssa.
Kommentit
- 151 tavua
- @kattokissa I ’ d sano, että vastauksesi lähetetään yksin. Se ’ erosi tarpeeksi ansaitsemaan oman vastauksensa. 🙂
vastaus
verkkokalvo , 60 tavua
Tavujen määrä edellyttää ISO 8859-1 -koodausta.
[A-Z] »$& T`L`l i ini u iki e unu a ·b· o api · o T`»l`_L`».
Vastaa
Javascript (ES6), 94 93 92 tavua
s=>s.replace(/[aeiou]/gi,c=>"OUIAIouiai"[n="AEIOUaeiou".search(c)]+"bnnpk"[n%=5]+"ouiii"[n])
Tallennettu 1 tavu edc65: n ansiosta
Tallennettu 1 tavu Neilin ansiosta
Esittely
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>
kommentit
- Voit tarkistaa
.indexOf
– ja.search
-palautusarvon käyttämällä~
-näppäintä<0
- Etsin, mitä tapahtuisi, jos korvaat vain vokaalit, ja sain alun perin
s=>s.replace(/[aeiou]/gi,c=>"ouiaiOUIAI"[n="aeiouAEIOU".indexOf(c)]+"bnnpk"[n%=5]+"ouiii"[n])
, joka on edelleen 93 tavua. . Mutta koskac
tiedetään nyt olevan vokaali, voit nyt käyttääsearch
indexOf
tavun tallentamiseksi! - @Neil – Hienoa! Yritin itse asiassa molempia, mutta en ’ ajattele niiden yhdistämistä.
Vastaa
Java 8, 172 tavua
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;}
golfaamaton:
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; }
Ja ulkomaalainen takaisin englantiin (171 tavua):
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;}
Unkari:
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; }
vastaus
Tcl, 75 tavua
Käännettävä merkkijono on muuttujassa s
.
string map {A Obo a obo E Unu e unu I Ini i ini O Api o api U Iki u iki} $s
Vastaa
Mathematica, 128 tavua
#~StringReplace~{"a"->"obo","A"->"Obo","e"->"unu","E"->"Unu","i"->"ini","I"->"Ini","o"->"api","O"->"Api","u"->"iki","U"->"Iki"}&
Etkö ole varma, voidaanko lyhyempi ohjelma saada käyttämällä IgnoreCase->True
-tapahtumaa yhdessä tapaustarkistuksen kanssa. / div>
vastaus
C 178 tavua
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);}
Kommentit
- 153 tavua
- @ceilingcat & c voi olla ok, jos se tallentaa numeron tavu1 tavu2 tavu3 … esimerkiksi 255 muistissa muodossa ff 00 00 00, mutta jos 255: lle on toinen endiani meillä on 00 00 00 ff ja tulostamme void-merkkijonon …
Vastaa
C, 163 162 159 tavua
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;}
Kommentit
-
char*t="aeiou";
-silmukan asettaminen silmukalle säästää yhden tavun - 144 tavua
vastaus
C #, 133 121 tavua
s=>{int i;return string.Concat(s.Select(c=>(i ="AIUEOaiueo".IndexOf(c))>-1?"OboIniIkiUnuApioboiniikiunuapi".Substring(i*3,3):c+""));}
Muokkaa (kiitos milk
)
kiitos 🙂 Tiedän itse asiassa tämän ylikuormituksen, mutta unohdin sen jotenkin kokonaan kirjoittaessani tätä.
s=>string.Concat(s.Select((c,i)=>(i="AIUEOaiueo".IndexOf(c))>-1?"OboIniIkiUnuApioboiniikiunuapi".Substring(i*3,3):c+""));
kommentit
- Voit käyttää
Select(char, int)
ylikuormitusta, joten sinun ’ ei tarvitse ilmoittaai
ja voi laittaa kaiken yhdelle riville.s=>string.Concat(s.Select((c,i)=>(i="AIUEOaiueo".IndexOf(c))>-1?"OboIniIkiUnuApioboiniikiunuapi".Substring(i*3,3):c+""));
vastaus
C, 207 202 tavua (kiitos 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) Vihaan jättää kirjoittamatta tyypit ennen minkäänlaisia ilmoituksia
2) En todellakaan halua laittaa käyttökelvottomia koodeja (ilman main () -funktiota)
Käyttö:
c89 cg.c -o cg; echo "Testing" | ./cg
kommentit
- Tervetuloa PPCG: hen!
- @MartinEnder, että ’ on odottamatonta … mutta kiitos 🙂
-
(c=getchar())!= EOF
voi tulla~(c=getchar())
- 143 tavua
vastaus
Swift 2,2 196 tavua
¯ \ _ (ツ) _ / ¯
Golfi
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) }
Kommentit
- Ovatko välilyönnit
var r = [
välttämätön? - Joo leikkikenttien sovelluksessa, jos et ’ aseta tilaa tehtävän väliin, se antaa sinulle virheen ja kehottaa sinua lisäämään välilyöntejä . Swift on luultavasti yksi golfin huonoimmista kielistä, mutta ajattelin, että olisi hauskaa kokeilla.
- Ja se oli mielenkiintoista, se ei antanut minulle ’ virhe, kun määritin muuttujaa sulkemiseen. Tästä syystä olkapäitä kohottava mies
- joo huomasin myös sen. Siksi olin hämmentynyt ’.
vastaus
Perl 6 , 84 82 tavua
{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")}
Laajennettu:
# 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" ) }
Käyttö:
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
vastaus
C – 192 tavua
(selkeyttä varten lisätään uusia rivejä)
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]);}}
Vain hakutaulukot ja looginen kytkin.
Etsi jokainen kirjain vokaalien taulukosta (merkkijonosta); jos se löytyy, muokkaa sitä taulukon s
säännön mukaan. Tulosta kukin merkki ja sen jälkeen merkkijono: jos vokaali löydettiin, tulosta merkki, jota on muokattu arvolla s
, jota seuraa taulukossa ; jos vokaalia ei löytynyt, tulosta alkuperäinen merkki ja tyhjä merkkijono.
Kommentit
vastaus
rubiini, 102 93 91 88 78 tavua
gsub(/[#{b="aeiouAEIOU"}]/){"obounuiniapiikiOboUnuIniApiIki"[b.index($&)*3,3]}
Selitys:
Suorita rivi kuten ruby -pe "gsub(/[#{b="aeiouAEIOU"}]/){"obounuiniapiikiOboUnuIniApiIki"[b.index($&)*3,3]}"
, seuraava tyyppi, esimerkiksi Australia
, jonka sen pitäisi antaa: Oboikistroboliniobo
.
Se on melko suoraviivaista, korvaa kaikki vokaalit alaosalla, joka perustuu korvattavan vokaalin hakemistoon kohdassa (b), kertaa 3 ja käännösmerkkijonon 3 seuraavaa merkkiä.
Kommentit
- Epäilen etu- ja loppupään lainausmerkit (ja sisäiset pakot, jos syötteessä on lainausmerkkejä ) saattaa hylätä tämän. Joka tapauksessa voit tallentaa kaksi tavua siirtämällä osoitetta
b
osaksi Regexp (/[#{b=...}/
). - Minusta välilyönti
p $*
on tarpeeton - Tallenna lisää tavuja
-p
-lipulla.ruby -pe 'gsub(/[#{b="aeiouAEIOU"}]/){"obounuiniapiikiOboUnuIniApiIki"[b.index($&)*3,3]}'
- Lasken 78 + 2 (
-pe
). Kuinka saat 71? - @NotthatCharles onko suorituksessa tarvittavilla hahmoilla merkitystä tässä tapauksessa? En vain ’ laskenut niitä.
Vastaa
TI-BASIC, 201 197 195 tavua
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
Luulen, että löydän toisen TI -PERUSTA vastaus tähän!
Tulos on joka tapauksessa englanninkielinen merkkijono Ans
.
Tulos on käännetty merkkijono.
Esimerkkejä:
"HE HE prgmCDGF1A HUnu "Hello Hello prgmCDGF1A Hunullapi
Selitys:
(Uudet rivit lisättiin luettavuuden vuoksi. Useita rivejä samalta riviltä merkitään :
seuraavassa koodilohkossa.)
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"
Huomautuksia:
-
TI-BASIC on koodattu kieli. Merkkien lukumäärä ei ei yhtä tavuinen määrä.
-
TI-BASICin pienet kirjaimet ovat kaksi tavua kukin.