作为2018年5月每月语言活动的一部分,此挑战与MATL语言的某些功能有关。 相关挑战: 功能剪贴板:复制。
介绍
MATL的功能剪贴板将输入(存储到“副本”)存储到最近四个对常规输入函数的调用中。普通函数是MATL中最常见的函数类型。输入接受是指该功能至少接受一个输入。可以将存储的剪贴板内容推入堆栈(“粘贴”)。
此挑战将剪贴板内容作为输入。将假定所有产生剪贴板状态的函数都将一个或多个正整数作为输入。因此剪贴板状态可以用数字列表来表示。(有关如何实际填充剪贴板的更多信息,请参见相关挑战;但这对于当前挑战不是必需的)。
解释剪贴板内容
例子1
第一个内部列表引用最近的函数调用,依此类推,因此剪贴板状态
[[11, 28], [12, 16], [4], [5, 6]]
表示最后的函数调用了两个输入,即11
,28
; 倒数第二个电话花了投入12
,16
; 等等(此剪贴板状态由相关挑战的第一个示例中的代码产生)。
例子2
如果没有足够的函数调用,剪贴板中的某些尾部内部列表将为空:
[[7, 5], [], [], []]
(这是由一个简单地添加7
和的程序产生的5
)。
例子3
函数调用可以具有任意数量的input,但至少可以是所有输入1
(不接受任何输入的函数不会更改剪贴板状态)。因此,以下也是可能的。
[[3], [2, 40, 34], [7, 8, 15], []]
访问剪贴板内容
使用MATL的功能M
(顺便说一句,它不是普通功能,而是剪贴板功能)将功能剪贴板的内容压入堆栈。此函数将一个正整数作为输入,并将某些剪贴板内容压入堆栈,如下所示。参考示例1中的剪贴板状态:
[[11, 28], [12, 16], [4], [5, 6]]
1M
将所有输入返回到最近的函数调用。因此,对于所讨论的例子,它给11
,28
。- 同样,
2M
,3M
和4M
所有输入返回到第二,第三和第四最近的函数调用。所以2M
给人12
,16
;3M
给4
; 并4M
给出了5
,6
。 - 超越号
4
选择各个输入以占用多个的函数调用。因此,5M
将最后一个输入返回到最近的此类调用。就我们而言,这给出了28
。6M
返回前面的单个输入,即11
。7M
返回倒数第二个调用的最后一个输入,即16
,并8M
给出12
。现在,9M
给出6
。请注意如何4
跳过输入,因为它是函数调用中的唯一输入。最后,10M
给出5
。
对于示例3中的剪贴板状态:
[[3], [2, 40, 34], [7, 8, 15], []]
1M
给3
。2M
给人2
,40
,34
。3M
给人7
,8
,15
。4M
具有不确定的行为(针对此挑战),因为只有三个函数调用。5M
给34
。6M
给40
。7M
给2
。8M
给15
。9M
给8
,10M
给7
。11M
、、12M
...也具有未定义的行为。
挑战
输入:
- 剪贴板状态,列表列表或任何其他合理格式;
- 正整数n。
输出:M
用n调用函数的结果为输入。输出将是带有明确分隔符的一个或多个数字,或采用任何合理的格式(例如列表或数组)。
说明:
- 剪贴板状态由四个数字列表组成。某些尾随列表可能为空,如示例2和3所示。如果需要,您可以输入剪贴板而没有那些尾随空列表。因此,示例3将变为
[[3], [2, 40, 34], [7, 8, 15]]
。 - 剪贴板中的所有数字都是正整数,可能超过一个数字。
- 保证数字n是有效的。因此,例如上面的3,
n
不能是4
或11
。
附加规则:
测试用例
Clipboard state
Number
Output(s)
[[11, 28], [12, 16], [4], []]
2
12, 16
[[11, 28], [12, 16], [4], []]
5
28
[[7, 144], [12], [4, 8], [3, 4, 6]]
1
7, 144
[[7, 144], [12], [4, 8], [3, 4, 6]]
10
4
[[30], [40], [50, 60], [70, 80, 90]]
2
40
[[30], [40], [50, 60], [80, 90]]
7
90
[[15], [30], [2, 3, 5], [4, 5, 10]]
3
2, 3, 5
[[15], [30], [2, 3, 5], [4, 5, 10]]
7
2