创建一个可以扩展为 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 拼图。我有另一个 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——应该清楚在哪里。