도전:
당신의 임무는 간단한 골프 언어를위한 간단한 통역사를 만드는 것입니다.
입력:
입력은 공백으로 구분 된 문자열 형식입니다.
공간 분리를 원하는 것으로 바꿀 수 있습니다
산출:
모든 작업을 수행 한 후 얻은 결과 (숫자 또는 문자열)를 출력합니다. 둘 이상의 출력이있는 경우 함께 결합하여 단일 결과를 제공합니다 (구분자 없음). 변수의 초기 값은 항상 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
변경하고 dn
dc에서 줄 바꿈없이 출력과 동일하게 변경하십시오.
이제 이것은 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)]