이 과제는 2018 년 5 월 Language of the Month 이벤트 의 일부로 일부 MATL 언어 기능과 관련이 있습니다 . 관련 도전 : 기능 클립 보드 : paste .
소개
MATL에는 여러 개의 클립 보드 가 있으며 , 여기에서 나중에 검색 (붙여 넣기) 할 값 (복사)을 저장할 수 있습니다. 일부 클립 보드는 자동 이므로 특정 이벤트에 의해 복사가 자동으로 시작됩니다. 이 과제는 함수 입력 클립 보드 또는 단순히 함수 클립 보드 라고하는 자동 클립 바 중 하나에 중점을 둡니다 .
이 클립 보드는 일반적인 입력 기능에 대한 최근 4 개의 호출에 대한 입력을 저장합니다. 정규 함수는 MATL에서 가장 일반적인 함수 유형입니다. 입력 은 기능이 최소한 하나의 입력 을 받는다는 것을 의미합니다 (입력을하지 않는 기능은 기능 클립 보드에서 고려하지 않음).
이것은 두 가지 일반 기능을 사용하는 다음 예제에서 가장 잘 설명됩니다.
+스택에서 두 숫자를 표시하고 합계를 푸시합니다.U하나의 숫자가 나오고 제곱이됩니다.
예 1 :
3 2 + 6 + 12 4 U + +
결과를 생성 합니다 39. 코드는 다음과 같이 해석됩니다.
- 같은 번호 리터럴
3또는12스택에 푸시 얻을 +입력 을 팝하고 출력을 스택으로 푸시하는 등의 기능 .
시간순으로 함수 호출은 다음과 같습니다.
3 2 +준다55 6 +준다114 U준다1612 16 +2811 28 +제공합니다39.
클립 보드는 네 개의 목록으로 볼 수 있습니다. 각 내부 목록에는 함수 호출에 대한 입력이 포함되어 있으며 가장 최근 호출이 먼저 있습니다. 각 내부 목록 내에서 입력은 원래 순서대로되어 있습니다.
따라서 코드를 실행 한 후 클립 보드 내용은 (파이썬 표기법으로 표시됨)입니다.
[[11, 28], [12, 16], [4], [5, 6]]
예 2 :
10 20 U 30 +
숫자 10와 430스택에 나뭇잎 . 스택은 프로그램 끝에서 아래에서 위로 표시됩니다.
함수 호출은
20 U준다400400 30 +준다430
두 개의 함수 호출 만 있었으므로 클립 보드를 정의하는 내부 목록 중 일부는 비어 있습니다. 10함수에 대한 입력으로 사용되지 않는 방법도 참고하십시오 .
따라서 코드를 실행 한 후 클립 보드 내용은 다음과 같습니다.
[[400, 30], [20], [], []]
예 3 (잘못된) :
10 20 + +
두 번째에 대한 입력이 없기 때문에 유효하지 않은 것으로 간주됩니다 +(MATL에서는 사용자 입력을 암시 적으로 트리거합니다).
도전
입력 : 문자열 S 번호 리터럴, +및 U공백으로 분리된다.
출력 : 문자열 평가 한 후 함수 클립 보드의 내용 S를 .
설명 :
- 두 가지 일관된 기호를 사용하여 숫자 이외의 해당 기능을 나타낼 수 있습니다. 또한 공백 대신 일관된 기호를 구분 기호로 사용할 수 있습니다.
- 표시된 두 기능 만 고려됩니다.
- 입력 문자열에는 하나 이상의 숫자 리터럴과 하나 이상의 함수가 포함됩니다.
- 모든 숫자는 양의 정수이며 두 자리 이상의 숫자 일 수 있습니다.
- 예제 2에서와 같이 일부 숫자 리터럴은 어떤 함수에서도 사용되지 않을 수 있습니다.
- 입력은 추가 번호없이 유효한 코드로 보장됩니다. 따라서 예제 3과 같은 문자열은 절대 발생하지 않습니다.
- 출력에서 후행 빈 내부 목록을 생략 할 수 있습니다. 따라서 예제 2의 결과는
[[400, 30], [20]] - 합리적이고 명확한 출력 형식이 허용됩니다. 예를 들어 내부 구분 기호로 쉼표를 사용하고 외부 구분 기호로 세미콜론을 사용하는 문자열 :
400,30;20;;.
추가 규칙 :
입력 및 출력은 합리적인 방법 으로 수행 할 수 있습니다 .
모든 프로그래밍 언어의 프로그램 또는 기능이 허용 됩니다 . 표준 허점은 금지되어 있습니다.
바이트 단위의 최단 코드가 이깁니다.
테스트 사례
Input
Output
3 2 + 6 + 12 4 U + +
[[11, 28], [12, 16], [4], [5, 6]]
15 3 4 + 2 U 8 + U +
[[7, 144], [12], [4, 8], [2]]
3 6 9 12 + + 10 8 U 6
[[8], [6, 21], [9, 12], []]
8 41 12 25 4 5 33 7 9 10 + + + + + + + +
[[41, 105], [12, 93], [25, 68], [4, 64]]
10 1 1 + U U U U U
[[65536], [256], [16], [4]]
M입니까?
M. 나는 "붙여 넣기"도전에서 그것을 할 것입니다
[[28, 11], [16, 12], [4], [6, 5]]첫 번째 예를 들어 유효 출력은?