骑士是一种棋子,当放置在o-marked广场上时,可以移动到任何x-marked方块(只要它们在棋盘内):
.x.x.
x...x
..o..
x...x
.x.x.从1到8的八个骑士被安置在一个3×3的棋盘上,留下一个方形的空.。
他们既不能互相攻击,也不能共享同一个广场,也不能离开董事会:唯一有效的行动就是跳到空旷的广场上。
通过任何有效移动序列计算达到以下有序配置所需的最小有效移动数:
123
456
78.如果无法到达,则输出-1。
示例详细说明:可能在三个移动
128 12. 123 123
356 --> 356 --> .56 --> 456
7.4 784 784 78..一次)。-1。0或在输入中而不是在.中使用128
356
7.4
->
3
674
.25
831
->
-1
.67
835
214
->
-1
417
.53
826
->
23这是密码-高尔夫,所以最短的代码获胜!
给这个谜题的学分
发布于 2022-02-17 10:20:42
(n,F=(i,I)=>(I%3-i%3)**2+((I/3|0)-(i/3|0))**2==5)=>Math.min(...(X=[...Array(9)].flatMap((e,i,a)=>F(i,n.search`0`)?[eval('for(k=0,N=n,S=[];!(t=S.filter(Z=>Z==N)[1])&&N!="123456780";(N=[...m=N],N[h=m.search`0`]=N[(H=k?a.findIndex((E,P)=>P!=M&F(P,h)):i,M=m.search`0`,H)],N[H]="0",S.push(N=N.join``),k++));t?-1:k')]:[])).length?X:[-1])取一个9个字符的字符串,其中点被零替换.
因为这个窍门很有趣,我把它藏在了一个剧透板后面。
只有两个空格是一个骑士的移动远离零。让我们考虑其中之一。如果我们把它移到零,我们就可以决定把它移回原来的位置。然而,这浪费了移动。由于只有两个空格是一个骑士的移动与任何给定的空间,这意味着只有另一个部分可以移动到新的零位置,除了我们刚刚移动的一个。因此,我们必须把那块东西移开。使用上述相同的推理,这意味着只有一条“路径”来自于给定的移动,因为我们在每个阶段只有一个选择。最终,我们将以理想的安排告终。现在,要解释不可能的情况,请注意,只有这么多的可能的移动。最终,我们将达成我们已经看到的安排。如果我们这样做,这意味着情况是不可能的,我们可以打破循环并返回-1。
我的一个问题是这太长了,所以我会继续打高尔夫球。
修正了一个错误,它会为某些输入创建Infinity的输出。
发布于 2022-02-17 11:56:22
发布于 2022-02-17 18:06:21
=IFERROR(LET(a,MID(A1&A2&A3,{2;7;6;1;8;3;4;9},1)*1,b,CONCAT(FILTER(a,a)),d,"2761834",f,(FIND(2,b)*8+1-XMATCH(0,a))*(1-ISERROR(FIND(b,d&d)))-1,MIN(f,56-f)),-1)https://codegolf.stackexchange.com/questions/242934
复制相似问题