Answers:
Œc>/€;TSḂ
一个Monadic链接,它接受一个以行优先顺序读取的整数列表,在左右和左右之间交替,0
如果可溶和1
不可溶,则产生(将其反¬
加到代码的右边)。
在线尝试!(此示例是一个仅需滑入12个位置的板)
与John Dvorak的答案类似,我们计算奇偶校验并利用类似蛇的输入顺序来简化棋盘格奇偶校验,尽管不是检查奇偶校验是否相等,而是将无序计数与非零索引求和,并测试是否奇:
Œc>/€;TSḂ - Link: list of integers
Œc - unordered pairs
€ - for each:
/ - reduce with:
> - greater than?
T - truthy indices (i.e. [1..16] without 1-indexed index of 0)
; - concatenate
S - sum
Ḃ - is odd?
((C.!.2=_1^i.&0)&.".&.stdin''
输入顺序是主要行,行在表的单个路径中从左到右和从右到左交替读取。假设零属于左上角。
在Windows上的用法:
<nul set /p="0 1 2 3 7 6 5 4 8 9 10 11 15 14 13 12" | jconsole c:\...\15.jhs
说明:
<nul set /p=
用于防止输入中的换行符echo
产生".
不喜欢的字符。当然,Unix支持echo /n
。v&.".&.stdin''
读为“输入,然后解析输入,然后执行v,然后撤消解析(=格式),然后撤消输入(=输出)”,表示“在stdin下的v under parse下的v”。1!:1]3
是短一个字符,但没有定义的逆数。C.!.2
表示“排列奇偶校验”。它返回1
(偶校验)或_1
(奇校验)。那是,_1^inversions
_1^i.&0
表示“ -1等于索引0的幂”。C.!.2=_1^i.&0
意味着“置换奇偶性等于孔位置奇偶性吗?”这适用于4x4电路板,但是如果所需的最终位置从左到右是行主要的,则求解位置的置换具有奇数个反转,因此奇数奇偶校验。同样,当所需的孔位置从左上移到右下时,奇偶校验反转(对于任何输入顺序)。在两种情况下,解决方法都是一个字符:在-
后面添加=
以反转期望的奇偶校验。
正确性证明:
每次移动后,零都将与某个数字交换位置,从而翻转排列奇偶校验。零还在白色和黑色棋盘格位置之间交替,由输入顺序中的奇数和偶数位置指示。因此,该条件是必要的。用计数论证也足够了:众所周知,正好一半的职位是可以解决的。这种情况会过滤掉可能位置的一半。