从片段中获取位置id的算法

时间:2014-04-27 18:25:25

标签: python algorithm

我将用一个例子来描述有问题的算法:

我有一块,让我们说件号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方法。我已经尝试计算并到达我需要的位置。

对于简单算法的任何想法?由于我正在使用遗留代码,因此输出必须相同。

3 个答案:

答案 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