作为2018年5月事件的一部分,这个挑战与MATL语言的一些特性有关。相关挑战:功能剪贴板:复制。
MATL的功能剪贴板存储(“副本”)输入的四个最近调用正常的,输入-接受功能。正规函数是MATL中最常见的函数类型。输入-接受意味着该函数至少接受一个输入。存储的剪贴板内容可以推送到堆栈上(“粘贴”)。
此挑战将以剪贴板内容作为输入。假设所有产生剪贴板状态的函数都以一个或多个正整数作为输入。所以剪贴板状态可以用一个数字列表来表示。(有关剪贴板实际填充的更多信息,请参见相关的挑战;但这对于当前的挑战并不是必要的)。
第一个内部列表引用最近的函数调用,等等,因此是剪贴板状态。
[[11, 28], [12, 16], [4], [5, 6]]
指示最后一个函数调用接受两个输入,即11
、28
;第二次-最后一次调用接受输入12
、16
;等等(此剪贴板状态由相关挑战的第一个示例中的代码生成)。
如果没有足够的函数调用,剪贴板中的一些跟踪内部列表将为空:
[[7, 5], [], [], []]
(这是由一个简单添加7
和5
的程序产生的)。
函数调用可以有任意数量的输入,但至少始终是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
的结果。输出将是一个或多个带有明确分隔符的数字,或以任何合理的格式(如列表或数组)。
澄清:
[[3], [2, 40, 34], [7, 8, 15]]
。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
发布于 2018-05-20 18:13:45
发布于 2018-05-20 19:26:39
a=>n=>a.map(e=>e[1]&&a.push(...[...e].reverse()))&&a[n-1]
这是一个匿名的咖喱功能。用( function code )(clipboard)(n)
运行它
a=>n=>{
// The strategy is to append the individual clipboard inputs to the end of a,
// after the function calls (lists). We then return a[n-1] to offset JavaScript's
// zero indexing.
a.map(e=>{
e[1]&& // if this list has more than one element...
a.push(...[...e].reverse()) // add each element to a, in reverse order.
// reverse() modifies the original array, so we have to use [...e] to "clone" e
})
return a[n-1]
}
https://codegolf.stackexchange.com/questions/165144
复制相似问题