외국어 번역기 영어


18

요약 보고

외계인이 지구에 정착하고 이상하게도 그들의 알파벳은 우리와 동일합니다. 그들의 언어는 우리의 언어와 매우 유사하고 계산하기 쉬운 차이점이 있습니다.

도전

문자열을 가지고 외계인의 언어와 동등한 것을 출력하십시오. 번역은 다음과 같이 작동합니다.

단어의 모든 모음을 해당하는 것으로 바꾸십시오.

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

Alien-> English를 번역하기 위해 다른 번역기를 작성할 수도 있지만 이것은 선택 사항입니다.

Input: Shaun
Output: Shoboikin

Input: Java
Output: Jobovobo

Input: Hello, World!
Output: Hunullapi, Wapirld!

모음이 대문자이면 첫 글자는 대문자입니다.

Input: Alan
Output: Obolobon

Input: Australia
Output: Oboikistroboliniobo

규칙

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

    튜누 런 누브 누스 누 트로 본 슬로 보타 피르를 빙글 빙글 아 프린 카 보트 로보 티코로 보니아 니아!


나는 당신이 Alien-> English를 번역하기 위해 또 다른 번역기를 어떻게 쓸지 잘 모르겠습니다 . 정규 번역기 대신 역 번역기를 작성할 수 있습니까?
Dennis

4
아마 나를 그냥, 그러나 그것은 나에게 분명 아니다 또한 여기이 의미를 전달한다. 어쨌든 이것이 실제 작업의 일부가 아닌 경우 이것이 어떻게 규칙 인지 잘 모르겠습니다 .
Dennis

@Dennis 약간 punudobontinic하고 있지만 명확하게하기 위해 편집했습니다.
Shaun Wild

2
개행이 필요한 이유는 무엇입니까? 제 생각에는 이것은 불필요하며 도전의 요점에 아무것도 추가하지 않습니다.
Adnan

1
입력에 ASCII 문자 또는 서브 세트 만 포함 할 수 있습니다. 예를 들어, 입력에 숫자가 있습니까?
라일리

답변:


14

하스켈, 100 91 바이트

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

5
확실히 Hoboskunull
jk.

12

TI 기본, 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(, 모든 소문자 문자는 각 바이트 두 가지 ...


난 당신이 혼합 생각 prgmR하고 prgmQ한 번 코드를 헤드 라인에?
바이트 사령관

예, @ByteCommander를 찾아 주셔서 감사합니다. :)
Timtech

8

펄, 56 바이트

에 +1 포함 -p

STDIN에 입력하십시오

alien.pl:

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

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


1
+1 외계인 아바타에게만 공개되었습니다. 농담, 솔루션도 좋습니다.
Chaotic

1
예수 그리스도. 최선을 다해 여자들과 신사들.
Priidu Neemre

6

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

@Jordan 그것은 않습니다. sed는 "한 번에 한 줄"을 읽습니다. 따라서 첫 번째 줄 바꿈까지 모든 것을 처리하고 인쇄하고 줄 바꿈을 인쇄 한 다음 더 많은 텍스트가 있으면 다시 시작합니다.
라일리

아 물론 이죠 👍🏻
Jordan

@Jordan 이것은 이것을 쓸 때 규칙이 아니었지만 어쨌든 효과가있었습니다.
라일리

6

파이썬, 99 95 93 바이트

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

ideone.com에서 ...

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


와우, 좋은 창의적 접근. 감동합니다 :)
바이트 사령관

1
["aeiouAEIOU".find(c)::11] for
acrolith

6

05AB1E , 28 27 20 바이트

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

온라인으로 사용해보십시오!

유닉스 플로 보노보 티 니아 핀

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

2
이니 lapivunu gapilfining!
Shaun Wild

@BasicallyAlanTuring : 머릿속에서 번역하기에는 너무 오래 걸렸습니다. 역 번역기가 필요하다고 생각합니다 : P
Emigna

2
너무 힘들어서는 안됩니다 : P
Shaun Wild

무서운, 나는 골프를 좋아한다고 생각합니다.
datagod

내 질문을 변경하여 유효하지 않은 답변을합니다. 이것은 새로운 라인과 함께 작동해야합니다
Shaun Wild

5

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

5

파이썬, 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]( ... )(이 원래 문자가 대문자인지 확인 ASCII 코드 포인트 91보다 작음)str() 문자를 인수로 사용 함수를 (대문자가 아닌 경우 아무 것도 수행하지 않음) str.capitalize()함수 (인수 문자열의 첫 번째 문자를 대문자로 변환)를 호출합니다.


5

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

온라인으로 사용해보십시오!

@ASCII 전용으로 @algmyr의 답변과 -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;}
ASCII 전용

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

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

4

배치, 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를 보는 것이 좋습니다!
YoYoYonnY

4

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

4

C, 167 바이트

나는 C를 코딩 할 때 항상 주요 기능을 수행하는 습관을 깨뜨리고 싶지 않았지만 이것은 메인 버전보다 상당히 짧아서 원하는 글자를 철자하는 다른 편지를 얻었습니다!

골프

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에는 특별한 점이 있으며 포인터 등으로 얼마나 끔찍한 지 알 수 있습니다.



@ceilingcat 나는 당신의 답변을 스스로 게시한다고 말하고 싶습니다. 자체 답변을받을만큼 충분히 다양합니다. :)
algmyr


3

자바 스크립트 (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 id="i" size=80 oninput="translate()" value="Hello, World!"><br><input id="o" size=80 disabled>


1
의 반환 값을 확인하려면 .indexOf.search사용 ~대신에<0
edc65

1
모음 만 바꾸면 어떤 일이 일어날 지 보려고 s=>s.replace(/[aeiou]/gi,c=>"ouiaiOUIAI"[n="aeiouAEIOU".indexOf(c)]+"bnnpk"[n%=5]+"ouiii"[n])했는데 원래 93 바이트에 달했습니다. 그러나 c이제 모음으로 알려져 있으므로 바이트를 저장하는 search대신 사용할 수 있습니다 indexOf!
Neil

@ 닐-니스! 실제로 두 가지를 모두 시도했지만 결합에 대해서는 생각하지 않았습니다.
Arnauld

2

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

그리고 외계인은 영어 (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;}

언 골프 드 :

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

2

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

2

수학, 128 바이트

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

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


2

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


@ceilingcat & c는 byte1 byte2 byte3로 숫자를 저장하면 괜찮을 수 있습니다 ... 예 : ff 00 00 00과 같은 메모리에 255이지만 255에 대한 다른 엔디안이 있으면 00 00 00 ff가 있고 void 문자열을 인쇄합니다 ...
RosLuP

2

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

퍼팅 char*t="aeiou";루프로하는 1 바이트 저장
Mukul을 쿠마


2

씨#, 133121 바이트

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

편집 (감사합니다 milk )

고맙습니다 :) 나는 실제로이 과부하를 알고 있지만 이것을 쓸 때 어떻게 든 완전히 잊어 버렸습니다.

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+""));
우유

2

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

PPCG에 오신 것을 환영합니다!
Martin Ender

@MartinEnder, 그건 예상치 못한 일이지만 ... 감사합니다 :)
Xdevelnet

(c=getchar())!= EOF될 수 있습니다~(c=getchar())
Cyoce


1

스위프트 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);}

언 골프

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 = [필요합니까?
Cyoce

예, 놀이터 앱에서 과제 사이에 공백을 넣지 않으면 오류가 발생하고 공백을 추가하라는 메시지가 표시됩니다. 스위프트는 아마도 골프를하기에 최악의 언어 중 하나 일 것입니다.하지만 시도하는 것이 재미있을 것이라고 생각했습니다.
Danwakeem

그리고 변수를 클로저에 할당 할 때 오류가 발생하지 않았다는 것이 흥미 롭습니다. 따라서
어깨를 으

그래 나도 알아 그래서 혼란 스러웠습니다.
Cyoce

0

펄 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

0

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

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

모음의 테이블 (문자열)에서 각 문자를 찾습니다. 발견되면 table의 규칙에 따라 수정하십시오 s. 각 문자 다음에 문자열을 인쇄하십시오. 모음이 발견되면, 값에 의해 수정 된 문자 s다음에 표에 저장된 나머지 음절을 인쇄하십시오 f. 모음을 찾을 수 없으면 원래 문자와 빈 문자열을 인쇄하십시오.



0

루비, 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 및 번역 문자열의 다음 3 자 색인을 기준으로 하위 문자열로 대체하십시오.


1
출력에서 선행 및 후행 따옴표 (및 입력에 따옴표가있는 경우 내부 이스케이프) 가이 자격을 박탈 할 수 있다고 생각합니다. 어쨌든, 할당을 bRegexp ( /[#{b=...}/) 로 이동하여 2 바이트를 절약 할 수 있습니다 .
Jordan

1
공간 p $*이 불필요 하다고 생각합니다
Cyoce

1
-p추가 바이트를 저장 하려면 플래그를 사용하십시오 . ruby -pe 'gsub(/[#{b="aeiouAEIOU"}]/){"obounuiniapiikiOboUnuIniApiIki"[b.index($&)*3,3]}'
Value Ink

78 + 2 ( -pe)로 계산 합니다. 71은 어떻게 받습니까?
찰스

@NotthatCharles는이 경우 실행에 필요한 문자가 실제로 중요합니까? 나는 단지 그들을 세지 않았다.
자전거 타이어

0

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은 토큰 화 된 언어입니다. 문자 수는 바이트 수와 같지 않습니다 .

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.