Files
2025-05-23 22:01:00 +08:00

103 lines
15 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import random
prompt_candidates = {
# 英文提示
"You are given a {n}×{n} Numbrix puzzle. In this puzzle, you need to fill in the missing numbers from 1 to {n_squared} to create a continuous path where consecutive numbers are orthogonally adjacent (horizontally or vertically, not diagonally).\n1. Rules:\n 1. Each cell must contain a unique number from 1 to {n_squared}.\n 2. Consecutive numbers (like 1-2, 2-3, etc.) must be orthogonally adjacent (horizontally or vertically).\n 3. Some numbers are already placed as hints.\n2. Input:\n{puzzle}": "en",
"This is a {n}×{n} Numbrix puzzle grid. Your task is to fill in all missing numbers from 1 to {n_squared} such that consecutive numbers are always adjacent horizontally or vertically (not diagonally).\n1. Rules:\n 1. Each cell must contain exactly one number from 1 to {n_squared}.\n 2. Each number from 1 to {n_squared} must appear exactly once in the grid.\n 3. Consecutive numbers must be orthogonally adjacent (up, down, left, or right).\n 4. Some numbers are already provided as clues.\n2. Input:\n{puzzle}": "en",
"You're presented with a {n}×{n} Numbrix puzzle. The goal is to fill in all empty cells marked with 'X' with numbers from 1 to {n_squared} to form a continuous path where consecutive numbers are adjacent horizontally or vertically.\n1. Rules:\n 1. Each number from 1 to {n_squared} must appear exactly once in the grid.\n 2. Consecutive numbers (such as 3-4, 8-9, etc.) must be orthogonally adjacent.\n 3. Some numbers are already placed in the grid as hints.\n2. Input:\n{puzzle}": "en",
"Below is a {n}×{n} Numbrix puzzle grid. Your objective is to place the numbers 1 through {n_squared} in the grid such that consecutive numbers are always adjacent horizontally or vertically (not diagonally).\n1. Rules:\n 1. Each cell must contain a unique integer from 1 to {n_squared}.\n 2. Consecutive integers must be orthogonally adjacent.\n 3. Some cells already contain numbers as hints.\n2. Input:\n{puzzle}": "en",
"Here's a {n}×{n} Numbrix logic puzzle. You need to fill in all empty cells (marked with 'X') with numbers from 1 to {n_squared} to create a continuous path where consecutive numbers are adjacent.\n1. Rules:\n 1. Each number from 1 to {n_squared} must appear exactly once in the grid.\n 2. Consecutive numbers must be orthogonally adjacent (up, down, left, or right).\n 3. Some numbers are already placed as clues.\n2. Input:\n{puzzle}": "en",
"I'm presenting you with a {n}×{n} Numbrix puzzle. Your task is to fill in the grid with numbers from 1 to {n_squared} so that consecutive numbers are always adjacent (horizontally or vertically).\n1. Rules:\n 1. Each cell must contain a unique number from 1 to {n_squared}.\n 2. Consecutive numbers must share an edge (not just a corner).\n 3. Some numbers are already placed in the grid as hints.\n2. Input:\n{puzzle}": "en",
"Consider this {n}×{n} Numbrix puzzle grid. You need to place numbers from 1 to {n_squared} in the grid such that consecutive numbers are always orthogonally adjacent.\n1. Rules:\n 1. Each number from 1 to {n_squared} must appear exactly once.\n 2. Numbers that differ by 1 must be placed in cells that share an edge.\n 3. Some cells already contain numbers as clues.\n2. Input:\n{puzzle}": "en",
"You have a {n}×{n} Numbrix puzzle grid. Your goal is to fill in all cells marked with 'X' with numbers from 1 to {n_squared} to create a continuous path of consecutive numbers.\n1. Rules:\n 1. Each number from 1 to {n_squared} must be used exactly once.\n 2. Consecutive numbers must be placed in cells that are horizontally or vertically adjacent.\n 3. Some numbers are already placed as hints.\n2. Input:\n{puzzle}": "en",
"This {n}×{n} grid represents a Numbrix puzzle. Your task is to fill in all empty cells with numbers from 1 to {n_squared} to form a continuous path where consecutive numbers are adjacent.\n1. Rules:\n 1. Each cell must contain a unique number from 1 to {n_squared}.\n 2. Consecutive numbers must be placed in orthogonally adjacent cells.\n 3. Some numbers are already provided as clues.\n2. Input:\n{puzzle}": "en",
"Examine this {n}×{n} Numbrix puzzle grid. Your objective is to place numbers from 1 to {n_squared} in the grid such that consecutive numbers are always adjacent horizontally or vertically.\n1. Rules:\n 1. Each number from 1 to {n_squared} must appear exactly once in the grid.\n 2. Numbers that differ by 1 must be placed in orthogonally adjacent cells.\n 3. Some cells already contain numbers as hints.\n2. Input:\n{puzzle}": "en",
"Solve this {n}×{n} Numbrix puzzle by filling in all empty cells with numbers from 1 to {n_squared} to create a continuous path of consecutive numbers.\n1. Rules:\n 1. Each number from 1 to {n_squared} must appear exactly once in the grid.\n 2. Consecutive numbers must be placed in cells that share an edge.\n 3. Some numbers are already placed as hints.\n2. Input:\n{puzzle}": "en",
"This is a Numbrix puzzle on a {n}×{n} grid. Your challenge is to fill in all empty cells with numbers from 1 to {n_squared} to create a continuous path.\n1. Rules:\n 1. Each cell must contain a unique number from 1 to {n_squared}.\n 2. Consecutive numbers must be placed in orthogonally adjacent cells.\n 3. Some numbers are already provided as clues.\n2. Input:\n{puzzle}": "en",
"You're looking at a {n}×{n} Numbrix puzzle. The goal is to place numbers from 1 to {n_squared} in the grid to form a continuous path where consecutive numbers are adjacent.\n1. Rules:\n 1. Each number from 1 to {n_squared} must appear exactly once.\n 2. Consecutive numbers must be placed in cells that share an edge.\n 3. Some cells already contain numbers as hints.\n2. Input:\n{puzzle}": "en",
"Complete this {n}×{n} Numbrix puzzle by filling in all empty cells with numbers from 1 to {n_squared} to create a continuous path.\n1. Rules:\n 1. Each number from 1 to {n_squared} must be used exactly once.\n 2. Consecutive numbers must be placed in orthogonally adjacent cells.\n 3. Some numbers are already placed as hints.\n2. Input:\n{puzzle}": "en",
"This Numbrix puzzle is on a {n}×{n} grid. Your task is to fill in all empty cells with numbers from 1 to {n_squared} to form a continuous path of consecutive numbers.\n1. Rules:\n 1. Each cell must contain a unique number from 1 to {n_squared}.\n 2. Numbers that differ by 1 must be placed in cells that share an edge.\n 3. Some numbers are already provided as clues.\n2. Input:\n{puzzle}": "en",
# 中文提示
"这是一个 {n}×{n} 的 Numbrix 谜题。在这个谜题中,你需要填入从 1 到 {n_squared} 的缺失数字,创建一条连续路径,使得连续的数字在正交方向上相邻(水平或垂直,不能对角)。\n1. 规则:\n 1. 每个单元格必须包含从 1 到 {n_squared} 的唯一数字。\n 2. 连续的数字(如 1-2, 2-3 等)必须正交相邻(水平或垂直)。\n 3. 一些数字已经作为提示放置在网格中。\n2. 输入:\n{puzzle}": "zh",
"给你一个 {n}×{n} 的 Numbrix 谜题网格。你的任务是填入所有从 1 到 {n_squared} 的缺失数字,使得连续的数字总是水平或垂直相邻(不能对角相邻)。\n1. 规则:\n 1. 每个单元格必须包含从 1 到 {n_squared} 的一个数字。\n 2. 从 1 到 {n_squared} 的每个数字在网格中必须恰好出现一次。\n 3. 连续的数字必须正交相邻(上、下、左、右)。\n 4. 一些数字已经作为线索提供。\n2. 输入:\n{puzzle}": "zh",
"这是一个 {n}×{n} 的 Numbrix 逻辑谜题。目标是在所有标记为'X'的空单元格中填入从 1 到 {n_squared} 的数字,形成一条连续路径,使得连续的数字在水平或垂直方向上相邻。\n1. 规则:\n 1. 从 1 到 {n_squared} 的每个数字在网格中必须恰好出现一次。\n 2. 连续的数字(如 3-4, 8-9 等)必须正交相邻。\n 3. 一些数字已经作为提示放置在网格中。\n2. 输入:\n{puzzle}": "zh",
"下面是一个 {n}×{n} 的 Numbrix 谜题网格。你的目标是在网格中放置从 1 到 {n_squared} 的数字,使得连续的数字总是水平或垂直相邻(不能对角相邻)。\n1. 规则:\n 1. 每个单元格必须包含从 1 到 {n_squared} 的唯一整数。\n 2. 连续的整数必须正交相邻。\n 3. 一些单元格已经包含作为提示的数字。\n2. 输入:\n{puzzle}": "zh",
"这是一个 {n}×{n} 的 Numbrix 谜题。你需要在所有空单元格(标记为'X')中填入从 1 到 {n_squared} 的数字,创建一条连续的路径,使得连续的数字相邻。\n1. 规则:\n 1. 从 1 到 {n_squared} 的每个数字在网格中必须恰好出现一次。\n 2. 连续的数字必须正交相邻(上、下、左、右)。\n 3. 一些数字已经作为线索放置。\n2. 输入:\n{puzzle}": "zh",
"我给你一个 {n}×{n} 的 Numbrix 谜题。你的任务是在网格中填入从 1 到 {n_squared} 的数字,使得连续的数字总是相邻(水平或垂直)。\n1. 规则:\n 1. 每个单元格必须包含从 1 到 {n_squared} 的唯一数字。\n 2. 连续的数字必须共享一条边(不仅仅是一个角)。\n 3. 一些数字已经作为提示放置在网格中。\n2. 输入:\n{puzzle}": "zh",
"考虑这个 {n}×{n} 的 Numbrix 谜题网格。你需要在网格中放置从 1 到 {n_squared} 的数字,使得连续的数字总是正交相邻。\n1. 规则:\n 1. 从 1 到 {n_squared} 的每个数字必须恰好出现一次。\n 2. 相差为 1 的数字必须放置在共享一条边的单元格中。\n 3. 一些单元格已经包含作为线索的数字。\n2. 输入:\n{puzzle}": "zh",
"你有一个 {n}×{n} 的 Numbrix 谜题网格。你的目标是在所有标记为'X'的单元格中填入从 1 到 {n_squared} 的数字,创建一条连续数字的路径。\n1. 规则:\n 1. 从 1 到 {n_squared} 的每个数字必须恰好使用一次。\n 2. 连续的数字必须放置在水平或垂直相邻的单元格中。\n 3. 一些数字已经作为提示放置。\n2. 输入:\n{puzzle}": "zh",
"这个 {n}×{n} 的网格代表一个 Numbrix 谜题。你的任务是在所有空单元格中填入从 1 到 {n_squared} 的数字,形成一条连续的路径,使得连续的数字相邻。\n1. 规则:\n 1. 每个单元格必须包含从 1 到 {n_squared} 的唯一数字。\n 2. 连续的数字必须放置在正交相邻的单元格中。\n 3. 一些数字已经作为线索提供。\n2. 输入:\n{puzzle}": "zh",
"请分析这个 {n}×{n} 的 Numbrix 谜题网格。你的目标是在网格中放置从 1 到 {n_squared} 的数字,使得连续的数字总是水平或垂直相邻。\n1. 规则:\n 1. 从 1 到 {n_squared} 的每个数字在网格中必须恰好出现一次。\n 2. 相差为 1 的数字必须放置在正交相邻的单元格中。\n 3. 一些单元格已经包含作为线索的数字。\n2. 输入:\n{puzzle}": "zh",
"解决这个 {n}×{n} 的 Numbrix 谜题,在所有空单元格中填入从 1 到 {n_squared} 的数字,创建一条连续数字的路径。\n1. 规则:\n 1. 从 1 到 {n_squared} 的每个数字在网格中必须恰好出现一次。\n 2. 连续的数字必须放置在共享一条边的单元格中。\n 3. 一些数字已经作为提示放置。\n2. 输入:\n{puzzle}": "zh",
"这是一个在 {n}×{n} 网格上的 Numbrix 谜题。你的挑战是在所有空单元格中填入从 1 到 {n_squared} 的数字,创建一条连续的路径。\n1. 规则:\n 1. 每个单元格必须包含从 1 到 {n_squared} 的唯一数字。\n 2. 连续的数字必须放置在正交相邻的单元格中。\n 3. 一些数字已经作为线索提供。\n2. 输入:\n{puzzle}": "zh",
"你正在看一个 {n}×{n} 的 Numbrix 谜题。目标是在网格中放置从 1 到 {n_squared} 的数字,形成一条连续的路径,使得连续的数字相邻。\n1. 规则:\n 1. 从 1 到 {n_squared} 的每个数字必须恰好出现一次。\n 2. 连续的数字必须放置在共享一条边的单元格中。\n 3. 一些单元格已经包含作为线索的数字。\n2. 输入:\n{puzzle}": "zh",
"完成这个 {n}×{n} 的 Numbrix 谜题,在所有空单元格中填入从 1 到 {n_squared} 的数字,创建一条连续的路径。\n1. 规则:\n 1. 从 1 到 {n_squared} 的每个数字必须恰好使用一次。\n 2. 连续的数字必须放置在正交相邻的单元格中。\n 3. 一些数字已经作为提示放置。\n2. 输入:\n{puzzle}": "zh",
"这个 Numbrix 谜题是在一个 {n}×{n} 的网格上。你的任务是在所有空单元格中填入从 1 到 {n_squared} 的数字,形成一条连续数字的路径。\n1. 规则:\n 1. 每个单元格必须包含从 1 到 {n_squared} 的唯一数字。\n 2. 相差为 1 的数字必须放置在共享一条边的单元格中。\n 3. 一些数字已经作为线索提供。\n2. 输入:\n{puzzle}": "zh"
}
def format_grid(grid):
"""将网格格式化为易读的字符串表示
Args:
grid: 二维列表,表示 Numbrix 谜题网格
Returns:
格式化后的字符串表示
"""
n = len(grid)
# 计算每个单元格的最大宽度
max_width = max(len(str(n*n)), 1)
# 创建水平分隔线
h_line = "+" + "+".join(["-" * (max_width + 2)] * n) + "+"
result = h_line + "\n"
for row in grid:
# 格式化每个单元格
formatted_row = []
for cell in row:
if cell == "X":
cell_str = " " * max_width + "X"
else:
cell_str = f"{cell:>{max_width+1}} "
formatted_row.append(cell_str)
result += "|" + "|".join(formatted_row) + "|\n"
result += h_line + "\n"
return result
def prompt_numbrix(grid):
"""为 Numbrix 谜题生成提示
Args:
grid: 二维列表,表示初始 Numbrix 谜题网格,空白处用 "X" 表示
Returns:
谜题提示字符串
"""
n = len(grid)
n_squared = n * n
# 创建网格的字符串表示
grid_str = format_grid(grid)
# 创建完整的谜题描述
puzzle = f"{grid_str}\n\nGrid size: {n}×{n}\nNumbers range: 1 to {n_squared}"
# 选择一个随机提示模板
prompt = random.choice(list(prompt_candidates.keys()))
language = prompt_candidates[prompt]
# 格式化提示
prompt = prompt.format(n=n, n_squared=n_squared, puzzle=puzzle)
# 添加任务说明和输出格式
if language == "en":
prompt += "\n3. Task:\n - Fill in all empty cells marked with 'X' with appropriate numbers from 1 to {n_squared}.\n - Ensure that consecutive numbers are always orthogonally adjacent.\n - Output the completed grid as a 2D list (list of lists) in Python format.\n4. Example Output Format:\n[\n [1, 2, 3, 4],\n [8, 7, 6, 5],\n [9, 10, 11, 12],\n [16, 15, 14, 13]\n]".format(n_squared=n_squared)
elif language == "zh":
prompt += "\n3. 任务:\n - 在所有标记为'X'的空单元格中填入从 1 到 {n_squared} 的适当数字。\n - 确保连续的数字总是正交相邻。\n - 以Python格式的二维列表(列表的列表)输出完成的网格。\n4. 示例输出格式:\n[\n [1, 2, 3, 4],\n [8, 7, 6, 5],\n [9, 10, 11, 12],\n [16, 15, 14, 13]\n]".format(n_squared=n_squared)
return prompt