2023年4月15日土曜日

数独

日本経済新聞の土曜版のクイズ欄では,数独(ナンプレ)が毎週出題されていた。以前は赤で配置可能な数字をメモしながら解くものだと信じていたのだが,ある日電車の隣に座ったおじさんが,メモなしでスイスイ解いているのを見てしまった。それ以降は,簡単なものなら補助メモなしで解けるようになった。なにごとも信念が重要である。

その土曜版のクイズ欄は,4月から漢字クイズに変わってしまった。えぇーっ。せっかく惚け防止のために頭の体操(10-20分)をしていたのに・・・。まあ,数独を含む各種クイズがセットになった日経脳活動クイズのiPhoneアプリ版があるといえばあったけれど消してしまった。紙に書かないと,落ち着かない旧世代なのだ。

それならば,自分で数独の問題を作るプログラムを書けばよい。さっそくGPT-4に聞いてみたら,pythonプログラムを出してきた(ありふれているので学習済みだろう)。さらに,第2案として,sudokuモジュールをインポートする2-3行ですむ簡単な方法が提案された。pip でsudokuをインストールせよとのことだが,それではだめで,py-sudokuならうまくいった。

GPT-4と相談しながら,修正を繰り返し,結果をcsvファイルに格納するプログラムができた。これをexcelで読み込んで出力すればOKだ。

#!/Users/koshi/bin/python

import csv

from sudoku import Sudoku


# Initializes a Sudoku puzzle with 3 x 3 sub-grid and

# generates a puzzle with 75% of the cells empty

puzzle = Sudoku(3).difficulty(0.65)

puzzle.show()


# Convert the puzzle to a list of lists

puzzle_data = []

for row in puzzle.board:

    puzzle_data.append(list(row))


# Write the puzzle data to a CSV file

with open('puzzle.csv', 'w', newline='') as csvfile:

    csv_writer = csv.writer(csvfile)

    for row in puzzle_data:

        # Replace 0 or None with an empty string to represent empty cells

        formatted_row = [str(cell) if cell not in (0, None) else '' for cell in row]

        csv_writer.writerow(formatted_row)

 その結果わかったこと。日経のクイズは超難問の場合でも解けるようにかなり配慮されている。難易度を易しめに設定しても,単純にランダムに消すことで数独問題をつくるとかなり解くのが難しい極値にはまり込むことがあるような気がする。


図:GPT-4と協力して作成したコードの出力例

[1]py-sudoku 1.0.3(pypi.org)

0 件のコメント: