创建一个可以扩展到更大/更小的数字拼图(即可以调整为更大的拼图)

时间:2016-11-29 06:05:58

标签: math equation puzzle

我正在尝试创建一个可缩放的图片拼图(like this),但无法找出用于覆盖超过3x3和4x4的等式。我根据我想要添加的图块数量动态生成拼图(例如,对于3x3为8,对于4x4为15)。

到目前为止,为了生成行,我只需将tile编号除以行/列号。

困难的部分是做列。

以下是我使用过的柱式公式:

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的另一个等式,但它根本没有比例。我该如何解决这个问题并使所有更大的难题扩大规模。

1 个答案:

答案 0 :(得分:1)

我假设您正在处理8或15个拼图(如在链接中),您想要找到拼图解决时拼贴结束的行和列,以及拼贴编号,行和列一切都从零开始。 (这是我从你上次评论和上次编辑中收集到的内容。)如果是这样,你可以在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 - 应该清楚在哪里。