Code 2021的出现事件的一部分。有关详细信息,请参阅链接的元帖子。
与天2017第6天有关。
这里有一个调试器程序有一个问题:它试图修复一个内存重新分配例程,但是它一直被困在一个无限循环中。
在这方面,有n内存库;每个内存库可以容纳任意数量的块。重新分配例程的目标是平衡内存组之间的块。
重新分配例程在循环中运行。在每一个周期中,它都会找到拥有最多块的内存库(由编号最低的内存库赢得的领带),并将这些块重新分配到银行中。为此,它从选定的银行中移除所有块,然后移动到下一个(按索引)内存库,并插入其中一个块。它继续这样做,直到块用完为止;如果它到达最后一个内存库,它将被包装到第一个内存库。
例如,如果最初有四个具有[0, 2, 7, 0]内存块的银行:
[2, 4, 1, 2]:0 2 0 0 +1 +1 +1 +1 +1[3, 1, 2, 3]。[0, 2, 3, 4]。[1, 3, 4, 1],然后是[2, 4, 1, 2],其中序列形成一个循环。您的工作是模拟内存重新分配的一个周期。
适用标准的密码-高尔夫规则。以字节为单位的最短代码获胜。
[0, 2, 7, 0] -> [2, 4, 1, 2] -> [3, 1, 2, 3] -> [0, 2, 3, 4]
-> [1, 3, 4, 1] -> [2, 4, 1, 2]
[3, 1, 4, 1, 5, 9, 2] -> [5, 2, 5, 2, 6, 1, 4]
-> [6, 3, 6, 3, 0, 2, 5] -> [0, 4, 7, 4, 1, 3, 6]
-> [1, 5, 1, 5, 2, 4, 7] -> [2, 6, 2, 6, 3, 5, 1]
-> [3, 0, 3, 7, 4, 6, 2] -> [4, 1, 4, 1, 5, 7, 3]
-> [5, 2, 5, 2, 6, 1, 4]发布于 2021-12-10 08:50:21
{+˝↑‿(≠)⥊∾(⥊⟜0∾(-∾⥊⟜1)∘⊑⟜)⊑⍒}{+˝↑‿(≠)⥊∾(⥊⟜0∾(-∾⥊⟜1)∘⊑⟜)⊑⍒} # Example input: = 0 2 7 0
⊑⍒ # The first index of the maximum value 2
⊑⟜ # The value at that index 7
-∾⥊⟜1 # negative value, value many 1's
# ¯7 1 1 1 1 1 1 1
⥊⟜0∾ # Prepend index many 0's
# 0 0 ¯7 1 1 1 1 1 1 1
∾ # 0 2 7 0 0 0 ¯7 1 1 1 1 1 1 1
↑‿(≠)⥊ # Reshape into a matrix with length() columns, padding the last row with 0's
+˝ # sum the columns发布于 2021-12-10 04:12:17
(0:`]`[}+/@,-@#@[]\0,0 1#~],{~)]i.>./考虑输入0 2 7 0:
(...)]i.>./整动词是一个钩子,它将原来的输入作为左arg,最大值的索引i.>/.作为右。其计算值为:0 2 7 0(.)2 NB。2是7的指数。(0 1#~],{~)将最大索引追加到最大],{~,并多次复制0 1元素:0 0 1 1 10,准备另一个0: 0 0 1 1 1-@#@[]\将其折叠为原始输入大小的块,用0: 0 0 0 1 1 1 0 0填充最后一行的空槽。0:`]`[}...,准备,最大值为零:0 2 0 0 0 1 1 1 0 0+/@和行之和:2 4 1 2https://codegolf.stackexchange.com/questions/238301
复制相似问题