作为2018年5月每月语言活动的一部分,此挑战与MATL语言的某些功能有关。 相关挑战:功能剪贴板:粘贴。
介绍
MATL有几个剪贴板,您可以在其中存储值(副本)以供以后检索(粘贴)。某些剪贴板是自动的,这意味着某些事件会自动触发复制。这项挑战着眼于自动剪裁工具之一,称为功能输入剪贴板,或简称为功能剪贴板。
该剪贴板将输入存储到最近四个对常规输入函数的调用。普通函数是MATL中最常见的函数类型。输入接受意味着该功能至少接受一个输入(功能剪贴板不考虑不接受任何输入的功能)。
最好使用以下示例解释这些示例,这些示例使用两个常规函数:
+
,这会从堆栈中弹出两个数字并压入它们的和。U
,它会弹出一个数字并按其平方。
范例1:
3 2 + 6 + 12 4 U + +
产生结果39
。该代码解释如下:
- 数字文字,例如
3
或被12
压入堆栈 - 诸如此类的功能会
+
弹出其输入,并将其输出推入堆栈。
按时间顺序排列的函数调用为:
3 2 +
给5
5 6 +
给11
4 U
给16
12 16 +
28
11 28 +
给39
。
剪贴板可以视为四个列表的列表。每个内部列表都包含函数调用的输入,最近的调用在前。在每个内部列表中,输入均按其原始顺序。
因此,在运行代码之后,剪贴板的内容是(用Python表示法):
[[11, 28], [12, 16], [4], [5, 6]]
范例2:
10 20 U 30 +
留下数字10
并430
放在堆栈上。在程序结束时,堆栈从下至上显示。
函数调用是
20 U
给400
400 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]]
第一个示例是否有效?