首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >骑士Jam Chess

骑士Jam Chess
EN

Code Golf用户
提问于 2022-02-17 08:21:56
回答 3查看 730关注 0票数 11

骑士是一种棋子,当放置在o-marked广场上时,可以移动到任何x-marked方块(只要它们在棋盘内):

代码语言:javascript
复制
.x.x.
x...x
..o..
x...x
.x.x.

从1到8的八个骑士被安置在一个3×3的棋盘上,留下一个方形的空.

他们既不能互相攻击,也不能共享同一个广场,也不能离开董事会:唯一有效的行动就是跳到空旷的广场上。

通过任何有效移动序列计算达到以下有序配置所需的最小有效移动数:

代码语言:javascript
复制
123
456
78.

如果无法到达,则输出-1

示例详细说明:可能在三个移动

代码语言:javascript
复制
128       12.       123       123
356  -->  356  -->  .56  -->  456
7.4       784       784       78.

输入输出

  • 您将得到三行三个字符(包含每个字符1-8和.一次)。
  • 您将输出一个整数,该整数对应于到达有序配置所需的最小移动次数,如果无法到达,则输出-1
  • 允许将输入作为矩阵或数组/列表接受。
  • 允许您使用0或在输入中而不是在.中使用

测试用例

代码语言:javascript
复制
128
356
7.4
->
3

674
.25
831
->
-1

.67
835
214
->
-1

417
.53
826
->
23

评分

这是密码-高尔夫,所以最短的代码获胜!

这个谜题的学分

EN

回答 3

Code Golf用户

发布于 2022-02-17 10:20:42

JavaScript (Node.js),331字节

代码语言:javascript
复制
(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的输出。

票数 3
EN

Code Golf用户

发布于 2022-02-17 11:56:22

Python 3,126个字节

代码语言:javascript
复制
def f(a,s=[*range(1,9),0],m=0,n=8):
 for o in(3,2,7,0,5,6,1,8)*7:m+=a!=s or m-55;s[n],s[o],n=s[o],0,o
 return min(56-m or-1,m)

在网上试试!

-1字节多亏了乔纳森·艾伦

-3字节感谢Arnauld

有56个可能的排列。从起始位置开始,我们可以走7次圆形路径,直到我们再次到达起始位置。如果找到了输入,我们将返回m所需的步骤数。如果路径相对较短,则返回56-m

票数 2
EN

Code Golf用户

发布于 2022-02-17 18:06:21

Excel,158个字节

代码语言:javascript
复制
=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)

链接到电子表格

票数 1
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/242934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档