+\µi©⁵+Ị$ḂḤị;®×Ị¤¡-
;0Ç3ƤFṣ-m€2Fḣ⁵S
接受整数列表并返回整数的单子链接。
在线尝试!
怎么样?
计算三个碗的每一次重叠运行的得分,就好像它是从一帧的开始处开始的,并可选地附加一个罢工标识符(-1
),展平此结果列表,将其拆分为罢工标识符,然后丢弃第二个结果每个块(删除那些并非真正从帧的开头开始的跑步得分)。
为了满足最后一帧的要求,首先将零添加到输入中(以允许进行3向切片,以使帧可以从倒数第二个碗开始),然后将所得的分数截断为前十个(删除当前的分数)。可能会在第11帧之前伪造)。
+\µi©⁵+Ị$ḂḤị;®×Ị¤¡- - Link 1, threeBowlEvaluate: list, bowlScores
- e.g. [0,4,6] [9,1,10] [0,4,4] [10,7,9]
\ - cumulative reduce with:
+ - addition [0,4,10] [9,10,20] [0,4,8] [10,17,26]
µ - monadic chain separation, call that "left"
⁵ - literal ten 10 10 10 10
i - first index in left 3 2 (spare) 0 1 (strike)
© - (copy to register for later reuse)
$ - last two links as a monad (f(x)):
Ị - abs(x) <= 1 0 0 1 1
+ - add x 3 2 1 2
Ḃ - modulo by 2 1 0 1 0
Ḥ - double 2 0 2 0
ị - index into left (both 1-indexed and modular)
- ... 4 20 4 26
- - literal -1 -1 -1 -1 -1
¡ - repeat:
; - ...action: concatenate
¤ - ...number of times: nilad followed by link(s) as a nilad:
® - z from register 3 2 0 1
Ị - abs(z) <= 1 0 0 1 1
× - multiply 0 0 0 1 (strike)
- ...yielding: 4 20 4 [26,-1]
;0Ç3ƤFṣ-m€2Fḣ⁵S - Main link: list bowlValues
- e.g. [4,3,8,2,7,1,10,7,3,0,10,2,2,10,10,5,4]
0 - literal zero 0
; - concatenate [4,3,8,2,7,1,10,7,3,0,10,2,2,10,10,5,4,0]
3Ƥ - for infixes of length 3:
Ç - last link (1) as a monad
- [7,11,17,9,8,11,[20,-1],10,3,12,[14,-1],4,12,[25,-1],[19,-1],9]
F - flatten [7,11,17,9,8,11,20,-1,10,3,12,14,-1,4,12,25,-1,19,-1,9]
- - literal -1 -1
ṣ - split at [[7,11,17,9,8,11,20],[10,3,12,14],[4,12,25],[19],[9]]
2 - literal two 2
m€ - modulo slice for €ach [[7,17,8,20],[10,12],[4,25],[19],[9]]
F - flatten [7,17,8,20,10,12,4,25,19,9]
⁵ - literal ten 10
ḣ - head to index [7,17,8,20,10,12,4,25,19,9] (no effect this time)
S - sum 131