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

如何使用Python生成符合指定规则的Binary Puzzle(二进制谜题)已解网格

二进制谜题已解网格生成实现方案

首先明确前提:网格边长CELL必须为偶数,否则无法满足每行/列0和1数量相等的要求。

实现思路

放弃全网格纯随机生成的方案,改为逐行生成+实时校验约束,不符合约束立刻丢弃重试,大幅降低无效计算量:

  1. 先预先生成所有满足「相邻相同数字不超过2个」、「0和1数量相等」的合法行候选池
  2. 从候选池中随机选不重复的行拼接为网格,每拼接一行就校验垂直方向约束、列01数量约束
  3. 网格拼接完成后最后校验列不重复约束

核心代码实现

import numpy as np
from itertools import product

CELL = 6  # 可自行修改为其他偶数值
HALF = CELL // 2

# 1. 预先生成所有合法的行候选
def is_valid_line(line):
    # 校验0和1数量相等
    if sum(line) != HALF:
        return False
    # 校验相邻相同数不超过2个
    for i in range(len(line)-2):
        if line[i] == line[i+1] == line[i+2]:
            return False
    return True

# 生成所有长度为CELL的01组合,过滤出合法行
all_valid_rows = [list(row) for row in product([0,1], repeat=CELL) if is_valid_line(row)]

# 2. 生成符合所有规则的网格
def generate_valid_grid():
    while True:
        grid = []
        used_rows = set()
        for _ in range(CELL):
            # 随机选未使用过的合法行
            while True:
                candidate = all_valid_rows[np.random.randint(0, len(all_valid_rows))]
                candidate_tuple = tuple(candidate)
                if candidate_tuple not in used_rows:
                    break
            grid.append(candidate)
            used_rows.add(candidate_tuple)
            # 校验垂直相邻相同数不超过2个
            if len(grid) >=3:
                valid_vertical = True
                for col in range(CELL):
                    if grid[-1][col] == grid[-2][col] == grid[-3][col]:
                        valid_vertical = False
                        break
                if not valid_vertical:
                    break
            # 提前校验当前每列的0/1数量不超过半数,避免最终超出限制
            current_cols = np.array(grid).T
            valid_col_count = True
            for col in current_cols:
                if sum(col) > HALF or (len(col) - sum(col)) > HALF:
                    valid_col_count = False
                    break
            if not valid_col_count:
                break
        # 全部行生成完成,做最终规则校验
        if len(grid) == CELL:
            grid_np = np.array(grid)
            # 校验所有列是否满足相邻规则、01数量相等规则
            cols_valid = all(is_valid_line(col) for col in grid_np.T)
            # 校验所有列不重复
            cols = [tuple(col) for col in grid_np.T]
            cols_unique = len(set(cols)) == CELL
            if cols_valid and cols_unique:
                return grid_np

# 调用生成合法网格
valid_grid = generate_valid_grid()
print(valid_grid)

逻辑说明

预生成合法行候选池的步骤提前过滤了不符合行规则的内容,大幅减少后续重试概率;逐行拼接时实时校验垂直相邻和列数量约束,避免生成完所有行才发现问题;最终额外校验列的所有规则,确保生成结果完全符合要求。

内容的提问来源于stack exchange,提问作者leo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 13:27:02