당신의 작업은 정수 또는 연산자 인 인수 목록을 가져 와서 다음과 같이 구문 분석합니다.
-
현재 연산자가 +로 시작합니다.
-
운영자를 찾을 때마다 현재 운영자가 운영자로 변경됩니다.
-
가능한 연산자는 “+”, “-“, “*”, “/”및 “%”이며 C와 대부분의 언어에서 의미에 해당합니다.
-
0에서 시작하는 실행중인 솔루션이 있습니다.
-
정수가 발견 될 때마다 솔루션은 연산자에 따라 숫자로 수정됩니다. 예를 들어 연산자가 “/”이면 솔루션은 숫자로 나뉩니다.
-
연산 결과 혼합 된 숫자 (즉, 10 진수)가 나오면 정수로 다시 바닥되어야합니다 (즉, 10 진수는 잘 려야합니다).
-
최종 솔루션을 출력하십시오.
예를 들면 다음과 같습니다.
인수 5 8 25 * 9 6 2 - 104 / 4 7 + 6 % 14
결과는 다음과 같습니다.
5 8 25 * 9 6 2 - 104 / 4 7 + 6 % 14
0 5 13 38 342 2052 4104 4000 1000 142 148 8 -> 8
입력은 명령 행 또는 함수 인수 또는 해당 언어에 해당합니다.
최단 코드 승리!
답변
Pyth- 24 23 22 20 바이트
@issacg 덕분에 2 바이트가 절약되고 @orlp 덕분에 1 바이트가 절약되었습니다!
문자열 대 int를 감지하기 위해 recase에 0
있는지 점검 하고 base case와 함께 reduce를 사용합니다 '
.
u.xsv++GbH&=bHG+\+QZ
보안상의 이유로 온라인으로 비활성화 된 전체 평가를 사용하기 때문에 온라인으로 작동하지 않습니다. stdin에서 다음과 같은 목록으로 입력을받습니다 5, 8, 25, "*", 9, 6, 2, "-", 104, "/", 4, 7, "+", 6
.
답변
자바 스크립트 (ES6) 53
배열을 입력으로받는 함수입니다.
Firefox에서 스 니펫을 실행하여 테스트하십시오.
f=a=>a.map(t=>t<'0'?o=t:v=eval(v+o+t)|0,v=0,o='+')&&v
// TEST
out=x=>O.innerHTML=x;
input = [5,8,25,"*",9,6,2,"-",104,"/",4,7,"+",6,"%",14];
out(input.join(' ')+' -> '+f(input));
function go() {
i=I.value.split(/ +/),out(I.value+' -> '+f(i))
}
<pre id=O></pre>
Your test:<input id=I><button onclick='go()'>GO</button>
답변
줄리아, 85 83 바이트
s->(o=0;p="+";for i=split(s) isdigit(i)?o=eval(parse("ifloor($o$p$i)")):(p=i)end;o)
이것은 문자열을 입력으로 받아들이고 정수를 반환하는 명명되지 않은 함수를 만듭니다.
언 골프 드 :
function f(s::String)
# Assign the starting output value o and operator p
o = 0
p = "+"
# Split the input string into an array on spaces
for i = split(s)
if isdigit(i)
# Assign o using string interpolation
o = eval(parse("ifloor($o $p $i)"))
else
# Assign p to the new operator
p = i
end
end
end
Glen O 덕분에 문제가 해결되고 2 바이트가 절약되었습니다.
답변
elisp, 101 바이트
인용 된 목록으로 인수가 전달 된 경우 : 예 (c '(5 5 * 10))
(defun c(a)(let((f 0)(o '+))(dolist(x a)(if(not(integerp x))(setf o x)(setq f (eval(list o f x)))))f))
줄 바꿈이있는 버전 :
(defun c (a)
(let ((f 0)
(o '+))
(dolist (x a)
(if (not (integerp x))
(setf o x)
(setq f (eval (list o f x)))))
f))
답변
CJam, 24 바이트
0'+ea+{_A,s&O{:O;}?S}%s~
입력을 명령 줄 인수로 읽는 전체 프로그램입니다.
온라인 코드를 시도하기 CJam 인터프리터 (명령 줄 인수를 지원하지 않음), 대체 ea
와 lS/
시뮬레이션 STDIN에서 읽을 수 있습니다.
작동 원리
0'+ Push a 0 and the character '+'.
ea Push the array of command-line arguments.
+ Prepend the character to the array.
{ }% For each element:
_ Push a copy.
A,s Push "0123456789".
& Intersect the copy with the string of digits.
{ }? If the intersection is non-empty:
O The element is a number. Push O.
:O; The element is an operator. Save it in O.
S Push a space.
s~ Flatten the array of strings and evaluate it.
답변
자바 스크립트, 85 바이트
r=0;o="+";prompt().split(" ").forEach(t=>+t+1?r=parseInt(eval(r+o+ +t)):o=t);alert(r)
답변
루아, 142 바이트
function f(s)o="+"r=0 for c in s:gmatch"%S+" do if tonumber(c)~=nil then loadstring("r=r"..o..c)() else o=c end r=math.floor(r)end print(r)end
언 골프 드 :
function f(s)
o="+" --original operator
r=0 --return value
for c in s:gmatch"%S+" do --split by spaces
if tonumber(c)~=nil then --check if the current character is a number
loadstring("r=r"..o..c)() --appends the current operator and current character ex "r=r+5" and then evaluates as another Lua script
else
o=c --if the character is not a number, it is the new operator
end
r=math.floor(r) --floor after each operation
end
print(r) --print the result
end