Python中的Domino Solitaire

时间:2018-03-26 10:28:16

标签: python

在Domino Solitaire中,您有一个包含两行和多列的网格。网格中的每个方块都包含一个整数。您将获得一个矩形2×1瓦片供应,每个瓦片都精确覆盖网格的两个相邻正方形。你必须放置瓷砖以覆盖网格中的所有正方形,这样每个瓷砖覆盖两个正方形,并且没有一对瓷砖重叠。

磁贴的得分是磁贴覆盖的较大和较小数字之间的差异。游戏的目的是最大化所有瓷砖的分数总和。

这是一个网格示例,以及两个不同的倾斜度及其分数。

enter image description here

平铺1的得分为12 =(9-8)+(6-2)+(7-1)+(3-2),而平铺2的得分为6 =(8-6)+( 9-7)+(3-2)+(2-1)。此网格还有其他可能的倾斜,但您可以检查平铺1在所有倾斜中是否具有最高分数。

您的任务是阅读数字网格并计算任何平铺网格可以达到的最高分数。

我对上述问题的解决方案是

n = int(input())
l = [input().split() for j in range(0, 2)]
b = [0 for i in range(0, n)]


b[0] = int(l[0][1]) - int(l[0][0])
b[1] = max(b[0] + abs(int(l[1][0]) - int(l[1][1])), abs(int(l[1][0]) - int(l[0][0])) + abs(int(l[1][1]) - int(l[0][1])))

for i in range(2, n):
    x = b[i-1] + abs(int(l[i][0]) - int(l[i][1]))
    y = b[i-2] + abs(int(l[i][0]) - int(l[i-1][0])) + abs(int(l[i][1]) - int(l[i-1][1]))
    b[i] = max(x, y)

print(b[n-1])

但它给了我错误

 Traceback (most recent call last):
  File "D:/Python Programs/StringFromating/stringformat.py", line 10, in <module>
    x = b[i-1] + abs(int(l[i][0]) - int(l[i][1]))
IndexError: list index out of range

3 个答案:

答案 0 :(得分:1)

好吧,看了你的代码,我看到了什么。

x = b[i-1] + abs(int(l[i][0]) - int(l[i][1]))

您似乎访问l [i] [0],其中i是n(最大值)。但我有n列,只有两行。

在尝试形成逻辑之后,我建议你记住整个程序。可能是有益的。

答案 1 :(得分:1)

#My solution to the above problem :
n=int(input())
arr=list(map(int,input().split()))
arr_2=list(map(int,input().split()))
prev_state=0
final =abs(arr[0]-arr_2[0])
for i in range(1,n):
  vertical_place = final + abs(arr[i]-arr_2[i])
  horizontal_place = prev_state + abs(arr[i] - arr[i-1]) + abs(arr_2[i] - arr_2[i-1])
  prev_state = final
  final = max(vertical_place,horizontal_place)
print(final)

答案 2 :(得分:0)

我对上述问题的看法

n = input()

line1 = input()
line2 = input()

input_data=[[],[]]

temp_1 = line1.split(" ")
temp_2 = line2.split(" ")

for element in temp_1:
    try:
        input_data[0].append(int(element))
    except ValueError:
        pass
for element in temp_2:
    try:
        input_data[1].append(int(element))
    except ValueError:
        pass


lookup_table = {}

def arrangements(n,a):

    try:
        if lookup_table[n]:
            return(lookup_table[n])
    except:
        pass


    diff_1 =  a[0][0]-a[1][0]
    value = abs(diff_1)
    lookup_table[1] = value


    diff_2_vertical   = abs(a[0][0]-a[1][0]) + abs(a[0][1]-a[1][1])
    diff_2_horizontal = abs(a[0][0]-a[0][1]) + abs(a[1][0]-a[1][1])

    value = max(diff_2_vertical,diff_2_horizontal)
    lookup_table[2] = value



    for i in range(3,n+1):

        diff_vertical = abs(a[0][i-1]-a[1][i-1])



        sum_vertical_start = diff_vertical + lookup_table[i-1] 

        diff_horizontal = abs(a[0][i-1]-a[0][i-2]) + abs(a[1][i-1]-a[1][i-2])


        sum_horizontal_start = diff_horizontal + lookup_table[i-2] 
        value = max(sum_vertical_start,sum_horizontal_start)
        lookup_table[i] = value



    return(lookup_table[n])