태그 보관물: interpreter

interpreter

간단한 골프 통역 has) exit —>

도전:

당신의 임무는 간단한 골프 언어를위한 간단한 통역사를 만드는 것입니다.


입력:

입력은 공백으로 구분 된 문자열 형식입니다.

공간 분리를 원하는 것으로 바꿀 수 있습니다


산출:

모든 작업을 수행 한 후 얻은 결과 (숫자 또는 문자열)를 출력합니다. 둘 이상의 출력이있는 경우 함께 결합하여 단일 결과를 제공합니다 (구분자 없음). 변수의 초기 값은 항상 0입니다. 즉 : 그것은 시작0


언어 구문 :

이 언어에는 다음과 같은 연산자가 있습니다.

inc  ---> add one to variable
dec  ---> remove one from variable
mult ---> multiply variable by 2
half ---> divide the variable by 2
Pri  ---> print the variable to console (or whatever your language has)
exit ---> end the program (anything after this is ignored)

예 :

inc inc inc dec Pri exit                 ---> 2
dec inc mult inc inc Pri                 ---> 2
inc inc inc mult half Pri exit inc       ---> 3
inc Pri inc Pri inc Pri exit half mult   ---> 123
Pri exit                                 ---> 0
inc half Pri exit                        ---> 0.5

제한:

이것은 코드 골프이므로 각 언어마다 가장 짧은 바이트 코드가 이길 것입니다.


노트 :

  • 입력은 항상 유효합니다. (공백으로 구분 된 연산자 문자열)
  • 소수점 이하 자릿수를 원하지 않으면 가장 가까운 정수로 내림 할 수 있습니다.


답변

배쉬 , 61 바이트

sed '1i0
s/.//2g;y"idmhe"+-*/q";/+\|-/i1
/*\|\//i2
/P/cdn'|dc

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

프로그램을 dc 프로그램으로 변환 한 다음 dc 코드로 평가합니다. 이것은 개행으로 구분 된 입력을받습니다. dc는 스택 기반이며 역 광택 표기법을 사용합니다.

입력은 먼저 sed로 파이프됩니다

1i0 입력의 첫 번째 줄에서 0을 삽입 (앞에 추가)하면 누산기가됩니다.

s/.//2g 각 줄의 첫 번째 문자를 제외한 모든 것을 제거하십시오.

y"idmhe"+-*/q"음역 idmhe+-*/q각각 + – * / 산술 명령은 q는 프로그램 종료

/+\|-/+ 또는-를 포함하는 모든 행 i1에 1을 삽입하십시오.

/*\|\//* 또는 /를 포함하는 모든 행 i2에 2를 삽입하십시오.

/P/P를 포함하는 모든 행에서로 cdn변경하고 dndc에서 줄 바꿈없이 출력과 동일하게 변경하십시오.

이제 이것은 dc 표현식으로 평가됩니다.


답변

젤리 , 21 바이트

ḲḢ€O%11ị⁾’‘j“IȮḤH”¤VI

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


첫 문자 ( idmhPe) 모듈로 11 의 ASCII 값 은 고유 모듈로 6입니다.


모듈로 16 사용 :

젤리 , 21 바이트

ḲḢ€O%⁴ị“ḢwġḞkz’ṃØJ¤VI

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

ḤH‘’IȮ이 경우 색인에 사용되는 문자열 이 있습니다. 는 ‘’더 이상 경계에 없습니다.


답변

R , 128 , 125 바이트

Reduce(function(x,y)switch(y,i=x+1,d=x-1,m=x*2,h=x/2,P={cat(x);x}),substr(el(strsplit(gsub("e.*$","",scan(,""))," ")),1,1),0)

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

source(echo=FALSE)반환 값이 자동으로 인쇄되지 않도록하려면 호출해야합니다 . 대안은 모든 것을 감싸는invisible 것이지만 훨씬 덜 골프입니다 (그리고 여전히 멋진 바이트 수를 망칩니다).


답변

05AB1E , 25 바이트

΀¬"idmhPe"S"><·;=q"S‡J.V

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

각 언어 함수를 해당 05AB1E 함수와 맵핑하고 (각 함수의 첫 번째 문자 사용) 결과 문자열을 05AB1E 코드로 실행합니다.


답변

빨강 , 121 바이트

func[s][v: 0 parse s[any[["i"(v: v + 1)|"d"(v: v - 1)|"m"(v: v * 2)|"h"(v: v / 2.0)|"P"(prin v)|"e"(exit)]thru" "| end]]]

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

읽을 수있는 :

f: func [s] [
    v: 0
    parse s [
        any [
            [ "i" (v: v + 1)
            | "d" (v: v - 1)
            | "m" (v: v * 2)
            | "h" (v: v / 2.0)
            | "P" (prin v)
            | "e" (exit)]
            thru [" " | end]
        ]
    ]
]

답변

파이썬 (2) , 131 (125) 122 121 118 117 115 바이트

v=0;o=""
for x in input().split("x")[0].split():
 if"Q">x:o+=`v`
 else:v+=(1,-1,v,-v/2.)['idmh'.find(x[0])]
print o

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

@Rod 덕분에 -6과 -3

@etene 덕분에 -3과 -2

로 교체 "Pri"==x하여 -1"P"in x


답변

파이썬 3 , 110 91 82 바이트

exit 프로그램이 오류와 함께 종료됩니다.

x=0
for c in input():c=='P'==print(x,end='');x+=(1,-1,x,-x/2,c,0)['ndmhx'.find(c)]

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