브리핑

외계인들은 지구에 정착했고 이상하게도 그들의 알파벳은 우리와 똑같습니다. 그들의 언어는 또한 우리의 언어와 매우 유사하고 차이를 계산하기가 매우 쉽습니다.

챌린지

문자열을 가져 와서 외계인과 동등한 언어를 출력하십시오. 번역은 그대로 작동합니다. :

단어의 모든 모음을 해당하는 단어로 바꿉니다.

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

외국인을 번역 할 다른 번역기를 작성할 수도 있습니다. -> 영어, 이것은 선택 사항입니다.

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

모음이 대문자이면 첫 번째를 대문자로 표시합니다. letter ..

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

규칙

  • 표준 허점 적용
  • 새로운 내용이 포함 된 텍스트에서 작동해야합니다. lines
  • 함수, 람다 또는 전체 프로그램을 작성할 수 있습니다.

    Capingrobotikilobotiniapins apin wrinitining thunu runuvunursunu trobonslobotapir!

댓글

  • 나는 ‘ 무엇인지 잘 모르겠습니다. 외국인 번역을 위해 다른 번역기를 작성할 수도 있습니다.

    영어 는 의미합니다. 일반 번역기 대신 역 번역기를 쓸 수 있나요?

  • 어쩌면 ‘ 나만 할 수 있지만 ‘ 여기에서 또한 이러한 의미를 전달한다는 것이 분명하지 않습니다. 어쨌든, ‘이 규칙이 ‘ 실제의 일부가 아닌 경우 규칙 인지 잘 모르겠습니다. 작업입니다.
  • @Dennis You ‘ 조금 뻔뻔 스럽지만 ‘ 그것을 만들기 위해 편집했습니다. 더 명확합니다.
  • 왜 줄 바꿈이 필요한가요? 제 생각에는 이것은 불필요하며 ‘ 도전의 요점에 아무것도 추가하지 않습니다.
  • 입력에 ASCII 문자 또는 하위 집합 만 포함될 수 있습니까? . 예 : 입력에 숫자가 있습니까?

답변

Haskell, 100 91 바이트

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

댓글

  • 당연히 Hoboskunull

답변

TI-Basic, 173 + 59 + 148 = 380 바이트

외계인이 TI-를 사용하기를 바랍니다. 83/84 계산기;)

메인 프로그램, 173 바이트

보너스 : 일반 또는 역 번역기를 원하는지 여부에 따라 두 번째 또는 세 번째 줄을 유지합니다.

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

하위 프로그램 (prgmQ), 59 바이트 :

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

하위 프로그램 (prgmR), 148 바이트 :

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 ~0x81 토큰을 나타내고 @는 토큰 0x7F, 여기 에서 자세히 알아보세요.

PPS 이러한 프로그램의 바이트 수가 많은 이유 중 하나는 sub(, inString(, length( 때문입니다. , 모든 소문자는 각각 2 바이트입니다 …

댓글

  • prgmRprgmQ를 코드 헤드 라인에 한 번 입력 하시겠습니까?
  • 예, @ByteCommander를 찾아 주셔서 감사합니다. 🙂

답변

Perl, 56 바이트

-p

에 대한 +1 포함

STDIN 입력

alien.pl :

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

그림과 같이 작동합니다. 하지만 \xXX 이스케이프를 실제 문자로 대체하여 청구 된 점수를 얻습니다.

댓글

  • +1 외계인 아바타에만 찬성했습니다. 농담입니다. 해결책도 좋습니다.
  • 예수 그리스도 .. Perl 최선을 다해, 신사 숙녀 여러분.

답변

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, 

댓글

  • 줄 바꿈이 포함 된 입력을 위해 작동합니까?
  • @Jordan 그렇습니다. sed는 ” 한 번에 한 줄씩 ” 읽습니다. 따라서 첫 번째 줄 바꿈까지 모든 것을 처리하고 인쇄하고 줄 바꿈을 인쇄 한 다음 텍스트가 더 있으면 다시 시작합니다.
  • 물론. 👍🏻
  • @Jordan 내가이 글을 썼을 때 그것은 ‘ 규칙이 아니었지만 어쨌든 작동하게되었습니다.

Answer

Python, 99 95 93 바이트

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

ideone.com …

매우 간단합니다. 모음 목록에서 각 문자를 찾은 색인을 사용하여 필요한 세 문자를 가져옵니다.찾을 수없는 경우 .find()-1를 반환하므로 현재 문자를 문자열 끝에 붙이기 만하면됩니다. 공백이 필요하므로 모든 문자 "a"에는 추가 된 c가 포함되지 않습니다. 번역 된 모음은 문자 순서로 그룹화됩니다 (모든 번역의 첫 번째 글자, 두 번째, 세 번째 글자).

댓글

  • 와, 멋진 창의적인 접근 방식입니다. 저는 ‘ 감동했습니다 🙂
  • ["aeiouAEIOU".find(c)::11] for

에서 공백을 제거 할 수 있습니다.

답변

05AB1E , 28 27 20 바이트

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

온라인으로 사용해보세요!

Unuxplobonobotiniapin

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

댓글

  • Ini lapivunu gapilfining!
  • @BasicallyAlanTuring : 머릿속으로 번역하기에는 너무 오래 걸렸습니다. 역 번역기가 필요한 것 같아요 : P
  • 그렇게하세요. ‘ 너무 힘들지 마세요 : P
  • 무서워요 골프를 좋아한다고 나와 있습니다.
  • ‘ 제 질문을 변경하여 답변이 잘못되었습니다. 새 줄에서 작동해야합니다.

Answer

PHP, 91 바이트

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

답변

Python, 129 바이트

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) 

ideone.com에서 실행중인 것을 확인하세요.

다음은 더 멋진 형식의 버전입니다.

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) 

가장 흥미로운 부분은 { ... }.get(l.lower(), l)로 변환 된 l에 저장된 문자를 조회하려고합니다. 사전에 소문자를 입력하고 번역 된 버전 (있는 경우)을 반환하거나, 그렇지 않으면 원본 문자
[str, str.capitalize][ord(l) < 91]( ... ) 원본 문자가 대문자 ( 91보다 낮은 ASCII 코드 포인트) 그런 다음 문자를 인수로 사용하여 str() 함수를 호출하거나 (대문자가 아닌 경우 아무 작업도 수행하지 않음) str.capitalize() 함수 (인수 문자열의 첫 글자를 대문자).

답변

C (gcc) , 150141136 134 바이트

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

온라인으로 사용해보세요!

@algmyr의 답변 및 @ASCII 전용 덕분에 -8 기반

덜 골프 버전

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

댓글

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

답변

일괄, 215 바이트

@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 

STDIN에 입력합니다. 문자 단위로 처리하면 대소 문자를 구분하는 편리함이 있습니다.

댓글

  • 일괄 처리는 모든 것을위한 최악의 도구 일뿐입니다. ‘ 아니요? (적어도 TI-Basic을 이겼습니다 🙂 그런데 Batch에서 codegolf를 보니 반갑습니다!

Answer

Pyth, 42 바이트

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

STDIN에서 입력을 받아 출력을 인쇄하는 프로그램입니다.

온라인으로 사용해보기

작동 방식

#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 

답변

C, 167 바이트

I C를 코딩 할 때 항상 주 기능을 수행하는 습관을 깨고 싶지는 않았지만 이것은 주 기능이있는 버전보다 훨씬 짧아서 제가 원하는 철자를 한 글자 더 얻었습니다!

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

댓글 작성

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에는 특별한 점이 있으며 얼마나 끔찍한가요? 포인터 등이 있어야합니다.

댓글

  • 151 바이트
  • @ceilingcat I ‘ d는 스스로 답변을 게시합니다. ‘ 자체 답변을받을 자격이있을만큼 분기되었습니다. 🙂

답변

Retina , 60 바이트

바이트 수는 ISO 8859-1 인코딩을 가정합니다.

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

온라인으로 시도하십시오!

답변

Javascript (ES6), 94 93 92 바이트

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

edc65 덕분에 1 바이트 절약
Neil 덕분에 1 바이트 절약

데모

 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> 

댓글

  • .indexOf.search의 반환 값을 확인하려면 iv id 대신 ~를 사용하세요. = “7da1d54fb0”>
  • 모음 만 바꾸면 어떻게되는지 살펴 봤는데 원래는 여전히 93 바이트 인 s=>s.replace(/[aeiou]/gi,c=>"ouiaiOUIAI"[n="aeiouAEIOU".indexOf(c)]+"bnnpk"[n%=5]+"ouiii"[n])를 얻었습니다. . 하지만 이제 c가 모음으로 알려져 있으므로 이제 indexOf div 대신 search를 사용할 수 있습니다. > to save a byte!
  • @Neil-좋아요! 실제로 두 가지를 모두 시도했지만 ‘ 둘을 결합 할 생각은하지 않았습니다.
  • 답변

    Java 8, 172 바이트

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

    고립되지 않음 :

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

    그리고 Alien을 다시 영어로 (171 바이트) :

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

    답변

    Tcl, 75 바이트

    번역 할 문자열이 s.

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

    답변

    Mathematica, 128 바이트

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

    케이스 확인과 함께 IgnoreCase->True를 사용하여 더 짧은 프로그램을 얻을 수 있는지 확실하지 않습니다.

    답변

    C 178 바이트

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

    댓글

    • 153 바이트
    • @ceilingcat & c는 숫자를 byte1 byte2 byte3으로 저장하면 괜찮을 수 있습니다 … 00 00 00 ff가 있고 void 문자열을 인쇄합니다 …

    Answer

    C, 163 162 159 바이트

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

    댓글

    • for 루프에 char*t="aeiou";를 넣으면 1 바이트가 절약됩니다.
    • 144 바이트

    답변

    C #, 133 121 바이트

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

    편집 ()

    감사합니다. 🙂 실제로이 오버로드를 알고 있지만 이것을 작성할 때 완전히 잊어 버렸습니다.

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

    댓글

    • Select(char, int) 오버로드를 사용할 수 있으므로 ‘ i 모든 것을 한 줄에 넣을 수 있습니다. s=>string.Concat(s.Select((c,i)=>(i="AIUEOaiueo".IndexOf(c))>-1?"OboIniIkiUnuApioboiniikiunuapi".Substring(i*3,3):c+""));

    답변

    C, 207 202 바이트 (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) 나는 어떤 종류의 선언 앞에 타입을 생략하는 것을 싫어합니다

    2) 사용할 수없는 코드를 넣는 것을 정말 좋아하지 않습니다 (main () 함수없이)

    사용법 :

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

    댓글

    답변

    Swift 2.2 196 바이트

    ¯ \ _ (ツ) _ / ¯

    골프

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

    댓글

    • var r = [ 필요하십니까?
    • 예, 놀이터 앱에서 과제 사이에 공백을 삽입하지 않으면 ‘ 오류가 발생하고 공백을 추가하라는 메시지가 표시됩니다. . Swift는 아마도 골프에 가장 나쁜 언어 중 하나 일 것입니다.하지만 시도해 보는 것이 재미있을 것이라고 생각했습니다.
    • 그리고 흥미로 웠습니다. ‘ 클로저에 변수를 할당 할 때 오류가 발생했습니다. 그래서 어깨를 으쓱하는 남자
    • 네 저도 알아 차 렸습니다. 그래서 ‘ 혼란 스러웠습니다.

    답변

    Perl 6 , 84 82 바이트

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

    확장 :

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

    사용법 :

     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  

    답변

    C-192 바이트

    (명확성을 위해 줄 바꿈 추가)

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

    조회 테이블과 부울 스위치 만 있으면됩니다.

    모음 표 (문자열)에서 각 문자를 찾습니다. 발견되면 s 표의 규칙에 따라 수정합니다. 각 문자 다음에 문자열을 인쇄합니다. 모음이 발견되면 s의 값으로 수정 된 문자와 ; 모음을 찾지 못한 경우 원래 문자와 빈 문자열을 인쇄합니다.

    설명

    답변

    Ruby, 102 93 91 88 78 바이트

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

    설명 :

    ruby -pe "gsub(/[#{b="aeiouAEIOU"}]/){"obounuiniapiikiOboUnuIniApiIki"[b.index($&)*3,3]}"와 같은 줄을 실행하고 다음 유형 (예 : Australia)을 실행하면 다음과 같이 출력됩니다. Oboikistroboliniobo.

    매우 간단합니다. (b)에서 교체 할 모음의 색인에 따라 모든 모음을 하위 문자열로 교체하고 번역 문자열의 다음 3 자.

    코멘트

    • 앞뒤 따옴표가 의심됩니다 (입력에 따옴표가있는 경우 내부 이스케이프 ) 출력에서이를 실격시킬 수 있습니다. 어쨌든 b를 Regexp (/[#{b=...}/)로 변환합니다.
    • p $* 공간이 불필요하다고 생각합니다.
    • -p 플래그를 사용하여 추가 바이트를 저장합니다. ruby -pe 'gsub(/[#{b="aeiouAEIOU"}]/){"obounuiniapiikiOboUnuIniApiIki"[b.index($&)*3,3]}'
    • 78 + 2를 계산합니다 (-pe). 71은 어떻게 얻나요?
    • @NotthatCharles는이 경우 실행에 필요한 문자가 정말 중요합니까? 방금 ‘ 세지 않았습니다.

    답변

    TI-BASIC, 201 197 195 바이트

    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 

    다른 TI를 찾을 것이라고 생각하기 위해 -BASIC 대답은 여기에 있습니다!

    어쨌든 입력은 Ans의 영어 문자열입니다.
    출력은 번역 된 문자열입니다.

    예 :

    "HE HE prgmCDGF1A HUnu "Hello Hello prgmCDGF1A Hunullapi 

    설명 :
    (가독성을 위해 줄 바꿈이 추가되었습니다. 같은 줄의 여러 줄은 : 다음 코드 블록에 있습니다.)

    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" 

    참고 :

    • TI-BASIC은 토큰 화 된 언어입니다. 문자 수는 가 아닙니다. / em> 동일한 바이트 수

    • TI-BASIC의 소문자는 2 바이트입니다. 각각.

    답글 남기기

    이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다