You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何识别reduceLineLeft函数中发生合并操作的数值?

2048行合并函数的合并数值追踪实现

原合并函数代码

以下是用于处理2048游戏中行合并逻辑的Python函数:

from functools import reduce

def reduceLineLeft(xs): 
    def aux(acc, y):
        if len(acc) == 0: acc.append(y)
        elif acc[len(acc)-1] == y:
            acc[len(acc)-1] = y * 2
            acc.append(0)
        else: acc.append(y)
        return acc
    res = list(filter(lambda x: x !=0, reduce(aux, filter(lambda x: x!=0, xs), [])))
    res.extend([0 for i in range(0, len(xs)-len(res))])
    return res

函数功能

该函数接收一行数字列表(模拟2048的一行方块),按照规则向左合并相同数值:

  • 输入[4, 2, 2, 0],返回合并后的结果[4, 4, 0, 0]
  • 输入[4, 4, 2, 2],返回合并后的结果[8, 4, 0, 0]

需求

现在需要在执行合并操作时,同步记录本次操作中发生合并的原始数值:

  • 对应第一个例子,需得到合并数值列表[2]
  • 对应第二个例子,需得到合并数值列表[4, 2]

合并规则补充

  • 两个相同数字的方块在移动碰撞时,合并为两者之和的新方块
  • 合并后的方块在同一次操作中无法再次合并(需再次调用函数才可能参与合并)

实现追踪合并数值的修改版函数

在原函数基础上新增合并数值追踪逻辑,代码如下:

from functools import reduce

def reduceLineLeftWithMergeTrack(xs):
    merged_values = []  # 存储本次操作中发生合并的原始数值
    def aux(acc, y):
        if len(acc) == 0:
            acc.append(y)
        elif acc[-1] == y:
            # 触发合并,记录原始数值
            merged_values.append(y)
            acc[-1] = y * 2
            acc.append(0)
        else:
            acc.append(y)
        return acc
    # 过滤掉原始列表中的0,只处理有效数值
    filtered_xs = list(filter(lambda x: x != 0, xs))
    # 执行合并逻辑并过滤中间产生的0
    merged_line = list(filter(lambda x: x != 0, reduce(aux, filtered_xs, [])))
    # 补全末尾的0,保持原列表长度
    merged_line.extend([0] * (len(xs) - len(merged_line)))
    # 返回合并后的行数据和合并数值列表
    return merged_line, merged_values

使用示例

# 示例1
line1 = [4, 2, 2, 0]
result1, merged1 = reduceLineLeftWithMergeTrack(line1)
print(result1)    # 输出: [4, 4, 0, 0]
print(merged1)    # 输出: [2]

# 示例2
line2 = [4, 4, 2, 2]
result2, merged2 = reduceLineLeftWithMergeTrack(line2)
print(result2)    # 输出: [8, 4, 0, 0]
print(merged2)    # 输出: [4, 2]

内容的提问来源于stack exchange,提问作者Kārlis Kazāks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 13:15:29