젤리 , 126 바이트
"운영자 우선 순위? 괄호? Pah, 누가 필요합니까?" -운영자 우선 순위 도전에 젤리를 사용하는 문제.
⁾[]i$€Ḥæ%3+\¬œp¹Ḋ€
ǵḟØDO%9µÐṀṪɓœṣ⁹,ṚÑj@¥/
ǵVṾµ1ĿFḟØDḟ”-Lµ?ÐL
5Ḷx@€“]“[”ż⁸j/€,@y³Fɓ³i@€Ṁ’x@“[“]”jÇ
“+_×:%”Œ!Ç€µṾL_L’ỊµÐfV€ṢIS
온라인으로 사용해보십시오!
입력은 문자열로 간주됩니다 (예 : "1 + 2_3 × 4 : 5 % 6"). 곱셈은 "*"대신 "×"를 사용하고 나누기는 "/"대신 ":"을 사용하고 빼기는 "-"대신 "_"를 사용합니다.
작동 원리
프로그램은 서로 다른 연산자 우선 순위의 모든 표현식 생성, 평가 및 최대 값과 최소값의 차이를 리턴하는 세 부분으로 나뉩니다.
모든 표현식은 다음 코드로 생성됩니다.
5Ḷx@€“]“[”ż⁸j/€,@y³Fɓ³i@€Ṁ’x@“[“]”jÇ (4) helper link: returns all outputs given a permutation. Input e.g. "_+:×%"
5Ḷx@€“]“[” - repeat outer brackets to get ["",""],["]","["],["]]","[["],["]]]","[[["],["]]]]","[[[["]
ż⁸j/€ - insert the operations in to get "_","]+[","]]:[[","]]]×[[[","]]]]%[[[["
,@ - turn this into a mapping equivalent to "_"↦"_","+"↦"]+[",":"↦"]]:[[","×"↦"]]]×[[[","%"↦"]]]]%[[[["
y³F - use this mapping to get the right number of outward brackets on each operation. e.g. "1]+[3]]]×[[[4"
ɓ³i@€Ṁ’x@“[“]”j - add the right number of brackets to the end to get e.g."[[[1]+[3]]]×[[[4]]]"
Ç - this calls the link which evaluates the expression
“+_×:%”Œ!Ç€ (5a) main link. Input e.g. "1+3×4"
“+_×:%” - the string "+_×:%"
Œ! - all permutations
Ç€ - apply link (4) to each permutation
링크는 이것으로 평가됩니다 (아마 다른 구조로 향상시킬 수 있습니다).
⁾[]i$€Ḥæ%3+\¬œp¹Ḋ€ (1) Helper link: Outputs a list of expressions within brackets, e.g. "[[[1]+[3]]]×[[[4]]]"↦"[[1]+[3]]","[[4]]"
⁾[]i$€Ḥæ%3 - map "[" to 2, "]" to -2, and any other character to 0.
+\¬ - cumulative sum negated: 1s at characters not in brackets (includes opening brackets), 0s otherwise (includes closing brackets)
œp¹ - partition the input, not including borders, based on the sum to get "[[[1]+[3]]","[[[4]]"
Ḋ€ - remove opening brackets
ǵḟØDO%9µÐṀṪɓœṣ⁹,ṚÑj@¥/ (2) Return the input to this link with one of the expressions from (1) evaluated
ǵVṾµ1ĿFḟØDḟ”-Lµ?ÐL (3) link called from part 1: Evaluates expressions
µ µ µ? - if:
1ĿFḟØDḟ”-L - the input contains no operators within brackets:
VṾ - evaluate this one expression with normal Jelly calculation and return to string
- otherwise:
Ç - evaluate one subexpression using link (2)
ÐL - repeat this until a single output is determined
최대 값과 최소값의 차이는 링크 (5)의 코드로 계산됩니다.
µṾL_L’ỊµÐfV€ṢIS (5b) determine difference between minimum and maximum
µ µÐf - filter out outputs involving division or modulo by 0. Determined with:
ṾL_L’Ị - actual numbers have their unevaled form Ṿ no more than one byte longer than the non-unevaled form.
V€ - evaluate each of these valid numbers to get integers from strings
Ṣ - sort
IS - return the sum of all difference between consecutive elements.
%
두 번째 예제에서 두 가지 우선 순위를 갖는 것으로 간주됩니다.