Quylthulg 는 Chris Pressey가 panfix 라고 부르는 것을 사용하여 접두사 표기법의 문제를 해결하려고 시도하는 언어입니다 .
postfix와 같이 panfix는 기본 연산자 우선 순위를 무시하기 위해 괄호와 같은 비전 개념을 배치 할 필요가 없습니다. 동시에 panfix를 사용하면 용어를 접두사와 같은 순서와 방식으로 지정할 수 있습니다.
접두사 또는 접미사의 모호함과 함께 접두사 표기법의 편의성을 어떻게 얻습니까? 물론 세 가지를 모두 사용하십시오!
=y=+*3*x*+1+=
더 공식적으로하자 +
운영자, 그리고 a
및 b
표현합니다. 그런 다음 (a+b)
유효한 (괄호로 묶은) 접두어 표현식입니다. 해당 표현식의 panfix 표현은입니다 +a+b+
. 여기서 juxtaposition은 연결을 나타냅니다.
목표는 panfix 문자열을 가져 와서 완전히 괄호로 묶은 infix로 변환하는 것입니다.
(y=((3*x)+1))
간단하게하기 위해 다음과 같이 변경합니다.
- 운영자는 두 개의 고유 한 문자 (당신이 중 하나를 선택할 수 있지만 여기에 내가 사용합니다 구성 될 수
*
과+
). - 다른 고유 문자로 구성된 하나의 리터럴 만 있습니다 (여러 가지 중에서 선택할 수 있지만 여기서는을 사용합니다
_
). - 입력은 올바른 형식의 팬픽 스 표현입니다.
들어 복잡성 , 우리는 다음과 같이 변경을 할 수 있습니다 :
- 연산자는 문자가 아닌 양 의 문자 로 구성 될 수 있습니다 .
문자열의 나머지 부분을 보지 않고 주어진 연산자 문자열의 하위 문자열이 어떻게 분할되는지를 결정할 수 없기 때문에 도전이 더 까다로워집니다.
다음은 @ user202729가 제공 한 챌린지에 대한 참조 구현 입니다.
테스트 사례
format: input -> output
+*+_*+_*+++_+*+_*+_*+++ -> ((_*+_)+(_+(_*+_)))
**++*+***++_+_++_+*++*+***_*++*+*****_**_*_*** -> ((((_+_)+_)*++*+***_)*(_*(_*_)))
***_**_***_* -> ((_**_)*_)
+_+_+ -> (_+_)
*+*+++**+***+++++_*+*+++**+***+++++_*+*+++**+***+++++ -> (_*+*+++**+***+++++_)
*++++*+*_*_*+*+++****+_++****+_++****++*+*+++_*+++ -> (((_*_)+*+(_++****+_))*+++_)
+**+_*+_*+*_*+*_*+*_+*_+**+ -> (((_*+_)*_)+(_*(_+*_)))
+**+++++_+++++_+++++*_*+*+_++++++_+++++_+++++++* -> (((_+++++_)*_)+*(_+(_+++++_)))
+*+*+_+*+_+*+*_*+*_*+*+_+*+_+*+*+ -> (((_+*+_)*_)+(_*(_+*+_)))
**_**_**_*_****_* -> ((_*(_*(_*_)))*_)
이 프로그램 을 사용 하여이 과제에 대한 문자열을 생성했습니다 (panfix로 변환하는 것은 쉽지 않지만 반전은 아닙니다)
**_**_**_*_****_*
. 내가 테스트 한 답변이 모두 실패했습니다.
(_ + _)
있습니까?