创建一个可以扩展为 greater/less 的数字拼图(即可以针对更大的拼图进行调整)
Creating a number-puzzle that can scale to be greater/less (i.e. Can be adjusted for bigger puzzles)
我正在尝试创建一个可缩放的图片拼图 (like this),但无法找到一个方程来覆盖超过 3x3 和 4x4 的尺寸。我根据要添加的图块数量动态生成拼图(例如 3x3 为 8 个,4x4 为 15 个)。
到目前为止,为了生成行,我只是将图块编号除以 row/col 编号。
困难的部分是做专栏。
这是我使用的列方程式:
A = Tile Number Index (Start at 0 and end at 8 for 3x3)
B = Row/Col (3 for 3x3)
//A and B are both ints to start. The final divide B/() I convert to float
and then use a rounding to get the final number
(B/((A/B+1)*B-A))-1
- 3x3 的行需要如下所示:000 111 222
- 3x3 的列需要如下所示:012 012 012
- 如果使用 4x4 列将如下所示:0123 0123 0123 0123
- 等等
此等式仅适用于 3x3 拼图。我有另一个 4x4 方程式,但它根本无法缩放。我怎样才能解决这个问题并让所有更大的谜题都按比例缩放。
我假设您正在研究 8 或 15 的拼图(如您的 link),您想要找到解决拼图时拼图结束的行和列,以及拼图数字、行和列都从零开始。 (这是我从你最后的评论和你最后的编辑中收集到的。)如果是这样,你可以使用,在 Python,
def tile_end_coords(tilenum):
'''Return the row and column coordinates for the end (solved) tile given
its number. Global variable *n* is the number of squares on each side
of the square puzzle.'''
row = tilenum // n
col = tilenum % n
return row, col
row
的表达式是整数除法后的商。一些语言,例如 Object Pascal,使用 div
而不是 //
。在某些语言中,您需要使用 int(tilenum / n)
.
col
的表达式是整数除法后的余数。一些语言,例如 Object Pascal,使用 mod
而不是 %
。在某些语言中,您需要使用 tilenum - row * n
.
我向您展示了一些易于理解、可移植性更强的代码。在 Python 中,您可以仅用一行替换整个函数:
row, col = divmod(tilenum, n)
如果图块编号、行或列是从一开始而不是从零开始,只需在适当的地方添加或减去 1
——应该清楚在哪里。
我正在尝试创建一个可缩放的图片拼图 (like this),但无法找到一个方程来覆盖超过 3x3 和 4x4 的尺寸。我根据要添加的图块数量动态生成拼图(例如 3x3 为 8 个,4x4 为 15 个)。
到目前为止,为了生成行,我只是将图块编号除以 row/col 编号。
困难的部分是做专栏。
这是我使用的列方程式:
A = Tile Number Index (Start at 0 and end at 8 for 3x3)
B = Row/Col (3 for 3x3)
//A and B are both ints to start. The final divide B/() I convert to float
and then use a rounding to get the final number
(B/((A/B+1)*B-A))-1
- 3x3 的行需要如下所示:000 111 222
- 3x3 的列需要如下所示:012 012 012
- 如果使用 4x4 列将如下所示:0123 0123 0123 0123
- 等等
此等式仅适用于 3x3 拼图。我有另一个 4x4 方程式,但它根本无法缩放。我怎样才能解决这个问题并让所有更大的谜题都按比例缩放。
我假设您正在研究 8 或 15 的拼图(如您的 link),您想要找到解决拼图时拼图结束的行和列,以及拼图数字、行和列都从零开始。 (这是我从你最后的评论和你最后的编辑中收集到的。)如果是这样,你可以使用,在 Python,
def tile_end_coords(tilenum):
'''Return the row and column coordinates for the end (solved) tile given
its number. Global variable *n* is the number of squares on each side
of the square puzzle.'''
row = tilenum // n
col = tilenum % n
return row, col
row
的表达式是整数除法后的商。一些语言,例如 Object Pascal,使用 div
而不是 //
。在某些语言中,您需要使用 int(tilenum / n)
.
col
的表达式是整数除法后的余数。一些语言,例如 Object Pascal,使用 mod
而不是 %
。在某些语言中,您需要使用 tilenum - row * n
.
我向您展示了一些易于理解、可移植性更强的代码。在 Python 中,您可以仅用一行替换整个函数:
row, col = divmod(tilenum, n)
如果图块编号、行或列是从一开始而不是从零开始,只需在适当的地方添加或减去 1
——应该清楚在哪里。