外壳,12个字节
根据规则澄清,可以是11个字节或13个字节。
±Λ=;1Ẋ×≈mηfT
在线尝试!
输入是仅包含空格和0的行的列表;如果需要单个字符串,¶
请在程序前添加成几行。为了清楚起见,TIO链接已执行此操作。输出为0或1;如果任何错误和真实的值都可以,则±
可以将其删除。
说明
±Λ=;1Ẋ×≈mηfT Implicit input: a list of lines.
T Transpose into list of columns.
m For each column,
ηf get list of indices of truthy elements.
In Husk, whitespace characters are falsy and other are truthy,
so this gets us the indices of 0s on each column.
Ẋ For each adjacent pair of these index lists,
× for all pairs drawn from the two lists,
≈ give 1 if they differ by at most 1, otherwise 0.
For each adjacent pair, this produces a list of 1s and 0s.
Λ Do all of these lists
=;1 equal [1]? Return either 0 or 30 (length of the outer list + 1).
± Signum; convert to 0 or 1.
这个想法是用来×≈
保证(a)所有列正好包含一个0,并且(b)它们的位置相差最多1。例如,考虑8列输入
0 0 0
000 0
00 0
首先,mηfT
将其转换为索引列表的列表
[[1],[2],[2,3],[1,2,3],[],[2],[1],[3]]
然后Ẋ×≈
给
[[1],[1,1],[1,1,0,1,1,1],[],[],[1],[0]]
每个1
对应于一对最多相差1的索引,每个对应于一对相差0
不大的索引。[1]
当两个列表都有一个索引时,每个结果精确相等,并且索引相差最多1。