Language agnostic 高尔夫代码:三维运动
假设一个三维不规则矩阵,其中Language agnostic 高尔夫代码:三维运动,language-agnostic,code-golf,Language Agnostic,Code Golf,假设一个三维不规则矩阵,其中y=1.5(x)和z=0.5(y) 进一步假设一个对象从0,0,0开始,并且必须在至少两个维度上正向移动,并且必须在所有三个维度上移动(x+1,y+1,z-1是可以的,x+1,y+1,z=z不是)。它可以移动任意数量的“空格”,但必须在所有方向上移动相同数量的空格 允许对象环绕(x(max+1)=x(0)) 将所述对象从其起始位置移动到(0,最大值(y),.5(最大值(z))对于z,分数向上取整(4,6,3矩阵中的终点变为0,6,2) 输入是一个整数(X) 输出是您将
y=1.5(x)和z=0.5(y)
进一步假设一个对象从0,0,0
开始,并且必须在至少两个维度上正向移动,并且必须在所有三个维度上移动(x+1,y+1,z-1
是可以的,x+1,y+1,z=z
不是)。它可以移动任意数量的“空格”,但必须在所有方向上移动相同数量的空格
允许对象环绕(x(max+1)=x(0))
将所述对象从其起始位置移动到(0,最大值(y),.5(最大值(z))
对于z
,分数向上取整(4,6,3矩阵中的终点变为0,6,2)
输入是一个整数(X)
输出是您将进行的移动列表(显示您移动的空间数的额外积分)
输入/输出示例:
X = 4
Y = 6 //(4 * 1.5)
Z = 3 // 6 / 2
0, 0, 0 //Start
2, 5, 2 // (+2, -2, +2)
1, 2, 2 // (+4, +4, +4)
3, 4, 0 // (+2, +2, -2)
1, 6, 2 // (-2, +2, +2)
3, 3, 3 // (-3, -3, -3)
1, 5, 1 // (-2, +2, -2)
0, 6, 2 // (-1, +1, -1)
7 Moves.
Mathematica-不打高尔夫球
只是想看看我们能不能把事情搞清楚
。。。并试图理解这个问题
f[x_] := (
(* Init code *)
xmax = x;
ymax = 3 Round[xmax]/2;
zmax = Round[ymax]/2;
xobj = 0;
yobj = ymax;
zobj = Ceiling[zmax/2];
p = Join[Permutations[{1, 1, -1}], {{1, 1, 1}}];
Print["X = ", xmax, "\nY = ", ymax, "\nZ = ", zmax];
(* Loop *)
i = 0;
pos = {0, 0, 0};
k = "Start";
While[
(npos= {Mod[pos[[1]], xmax+1], Mod[pos[[2]], ymax+1], Mod[pos[[3]], zmax+1]})
!= {xobj, yobj, zobj},
i++;
Print[npos, " // ", k];
pos= npos+ (k= RandomInteger[{1,xmax}] p[[RandomInteger[{1, Length[p]}]]]);
];
Print[npos, " // ", k];
Print[i, " Moves"];
);
援引
f[4]
样本输出
X = 4
Y = 6
Z = 3
{0,0,0} // Start
{3,4,3} // {3,-3,3}
{0,0,2} // {-3,3,3}
{2,3,1} // {-3,3,3}
{0,6,2} // {3,3,-3}
4 Moves
不确定我是否遵守了规则…Lua,68个字符
下面的长版本总是通过搜索第一个能够解决问题的积极行动,一步解决问题
x=...
y,z=x*3/2,x*3/4
a,b,c=0,y,math.ceil(z/2)
x,y,z=x+1,y+1,z+1
for i=1,math.huge do
if (x*i)%y==b and (x*i)%z==c then x=x*i break end
end
print("0,0,0\n0,"..b..","..c.."//+"..x..",+"..x..",+"..x.."\n1 move.")
x=12时的输出:
0,0,0
0,18,5//+455,+455,+455
1 move.
所以“赢家”是最短的来源,不管步骤有多优化?正确。只要答案是正确的,移动的次数并不重要。我只是想知道花了多少钱,因为我就是那种人……这看起来很奇怪,也毫无意义。有问题的背景吗?有什么引起我们兴趣的吗?您的一些示例运动向量似乎违反了“在至少两个维度上正向移动”规则
x
在矩阵中等于什么?这是否意味着结尾x
组件始终为0?你真的需要弄清楚什么是一切。输入是什么,如何获得最大值,如何获得终点?我不确定是否有人知道规则,甚至没有人对测试感兴趣。。。你证明了这个问题毫无价值:)
0,0,0
0,1500,375//+557424868,+557424868,+557424868
1 move.
x=...print("0,0,0\n0,"..(x*3/2)..","..math.ceil(x*3/8).."\n1 move.")