我将用一个例子来描述有问题的算法:
我有一块,让我们说件号7
。
我有一个4 x 4
大小的拼图,其ID为
00 01 02 03
10 11 12 13
20 21 22 23
30 31 32 33
我需要确定作品7
位置为12
我在python中写这个,并认为我可以使用bruit force方法。我已经尝试计算并到达我需要的位置。
对于简单算法的任何想法?由于我正在使用遗留代码,因此输出必须相同。
答案 0 :(得分:0)
REVISED
使用模运算和除法运算来查找x和y坐标 数字/列的整数是x坐标 分段数%列的整数是y坐标#即。数字/列的其余部分
注意:请记住python中的行和列从0开始而不是1.因此第三行实际上是第2行。坐标0,0中的tile是数字1,因此从y坐标中减去1。因此,您的算法是这样的:
valueyouwant=grid[tilenumber/numberofcolumns][tilenumber%numberofcolumns-1]
即。 6x7网格上的第34个图块=
34/6 =5 (ignore remainder)
34%6 =4 -1 = 3
x=5
y=3
00 01 02 03 04 05
10 11 12 13 14 15
20 21 22 23 24 25
30 31 32 33 34 35
40 41 42 43 44 45
50 51 52 53 54 55
60 61 62 63 64 65
Answer is 53
或为您举例:
piecenum=7
row=piecenum/4
column=piecenum%4-1
value you want = puzzle[row][column]
答案 1 :(得分:0)
python list comprehension目的是flattening a nested list。 :)
这就是它的完成方式:
<强> DATA1.TXT 强>
00 01 02 03
10 11 12 13
20 21 22 23
30 31 32 33
<强> data2.txt 强>
00 01 02 03 04
10 11 12 13 14
20 21 22 23 24
30 31 32 33 34
40 41 42 43 44
50 51 52 53 54
60 61 62 63 64
70 71 72 73 74
80 81 82 83 84
<强> acquire_location.py 强>
def acquire_location_id(data, piece):
return data[piece - 1]
def read_file(filename):
data = []
with open(filename) as f:
lines = f.readlines()
for line in lines:
data.append([str(x) for x in line.split()])
return [x for sublist in data for x in sublist]
data = read_file('data1.txt')
print acquire_location_id(data, 7)
# 12
data = read_file('data2.txt')
print acquire_location_id(data, 11)
# 20
print acquire_location_id(data, 17)
# 31
答案 2 :(得分:0)
关于获取x,y
位置的ID:
在这种情况下Id=y*width+x=y*4+c