刚开始也是90%,后来发现有个边界出了问题,改完就ac了

def up(a):
    # 向上合并,  1
    for i in range(3):
        for j in range(4):
            if a[i][j] == a[i + 1][j]:
                a[i][j] = 2*a[i][j]
                a[i + 1][j] = 0
    for j in range(4):
        idxs = []
        for i in range(4):
            if a[i][j] == 0:
                idxs.append(i)
            elif a[i][j] != 0 and len(idxs) >0:
                idx = idxs.pop(0)
                a[i][j],a[idx][j] = a[idx][j],a[i][j]
                idxs.append(i)
    return a

def low(a):
    # 向下合并, 2
    for i in range(3,0,-1):
        for j in range(4):
            if a[i][j] == a[i - 1][j]:
                a[i][j] = 2*a[i][j]
                a[i - 1][j] = 0
    for j in range(4):
        idxs = []
        for i in range(3,-1,-1):
            if a[i][j] == 0:
                idxs.append(i)
            elif a[i][j] != 0 and len(idxs) >0:
                idx = idxs.pop(0)
                a[i][j],a[idx][j] = a[idx][j],a[i][j]
                idxs.append(i)
    return a

def left(a):
    #向左合并, 3
    for i in range(4):
        for j in range(3):
            if a[i][j] == a[i][j+1]:
                a[i][j] = 2*a[i][j]
                a[i][j+1] =0
    # 去除0
    for i in range(4):
        idxs = []
        for j in range(4):
            if a[i][j] == 0:
                idxs.append(j)
            elif a[i][j] != 0 and len(idxs) >0:
                idx = idxs.pop(0)
                a[i][j],a[i][idx] = a[i][idx],a[i][j]
                idxs.append(j)
    return a

def right(a):
    for i in range(4):
        for j in range(3,0,-1):
            if a[i][j] == a[i][j-1]:
                a[i][j] = 2*a[i][j]
                a[i][j-1] =0
    #去零
    for i in range(4):
        idxs = []
        for j in range(3,-1,-1):
            if a[i][j] == 0:
                idxs.append(j)
            elif a[i][j] != 0 and len(idxs) >0:
                idx = idxs.pop(0)
                a[i][j],a[i][idx] = a[i][idx],a[i][j]
                idxs.append(j)
    return a

dx = int(input())
a = []
for _ in range(4):
    a.append(list(map(int, input().split())))

if dx == 1:
    res = up(a)
elif dx ==2:
    res = low(a)
elif dx ==3:
    res = left(a)
elif dx == 4:
    res = right(a)
for item in res:
    print(' '.join('%s' %i for i in item))