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.")