コミュニティ

投書の声

毎度毎度メッセージありがとうございます! (^^)/ 

問題の感想+解答例+その他篇

なかなか楽しめました。朝いちに回答しましたが、何番目か来月が楽しみです。  (宮下さとし さん)
いつも良問をありがとう!!  (えつこママ さん)
前月の失敗に続き今月も同様でした。もう歳には勝てませんネ。  (晶 さん)
問題2は私にとっては難しい問題でした。 各行・列・ブロック毎に「この2つの枠はこの2つの数字で決まり」を見つけ続けて何とかなりました。 今月もありがとうございます。  (たまづさ さん)
今月も楽しませていただきました。問題2は時間かかりました。  (★ハミガキ さん)
問題2は、7ヶ所埋まったのち7行3,7列が56固定で9行2,7列が67固定なので7,9行5列が38固定となり1行4列が8。あとはすんなり。  (まあ坊 さん)
穏やかな秋晴れ、本当は芋ほり予定でしたが、イノシシにやられてしまい収穫はありませんでした。 なのでのんびり連休でしたが更新日を忘れていて朝一番に取り組めませんでした。 お昼までもう少しナンプレやりますが新しいWeb上でやるナンプレはメモが入れられず結局Web上ではできません、残念。  (●●まーりん●● さん)

うえはら:

今月号も応募問題1は簡単です。今月の応募問題2は難しめです。
Web版ナンプレはGoogleスプレッドシートとGASを使っています。 プログラムはAIに書いてもらいました。 メモは追加したい機能ですが、まだ実現できていません。 みなさんもAIプログラミングにチャレンジして、もっといいアプリを作ってください。

編集後記

セキュリティホールや譲歩漏洩の情報が飛び回っていますね。 「月刊ナンプレ」はユーザ情報を持っていないので情報漏洩はありません。 ですが「ナンプレ実験棟」でPHPを使用していました。パッチ適用の方法が分からなかったので、サイトごと削除してしまいました。

Webナンプレ作成AIプロンプト

# ナンプレ問題集

GoogleスプレッドシートとGASでナンプレ問題集のWebアプリを作りたいです。

## ナンプレとは

知っていると思いますが、念のため定義しておきます。

- 9*9のマスがある(説明では座標を(1,1)から(9,9)とする[列(X),行(Y)])
- マスは左上の3*3、上中央の3*3、右上の3*3、左中の3*3、中央の3*3、右中の3*3、左下の3*3、下中央の3*3、右下の3*3がブロックで太枠
- ほかは細枠
- マスには1から9の数字が入る
- 問題としていくつかのマスが埋まっている(解答者は変更不可)
- 空いているマスをすべて埋めると終了
- 一行に入る数字は1から9が一つずつ(同じ数字は二つ以上は入らない)
- 一列に入る数字は1から9が一つずつ(同じ数字は二つ以上は入らない)
- ブロックに入る数字は1から9が一つずつ(同じ数字は二つ以上は入らない)

## 第一段階

最初からフルスペックにすると煩雑なので徐々にバージョンアップします。
第一段階は表示と解答までです。

**概略**
- スプレッドシートから問題文字列を受け取る
- 問題文字列をナンプレの枠に当てはめ表示する
- 問題の下に1,2,3,4,5,6,7,8,9,削除のラジオボタンと全クリアのボタンを配置する
- 最下行にPrevボタンとNextボタンを配置する
- 全クリアが押されたら、問題マス以外をクリアする
- Prevが押されたら、前の問題を表示
- Nextが押されたら、次の問題を表示
- クリックでそのマスをラジオボタンの値にする
  - ただし、問題文字列の該当箇所が1から9のマスは変更不可
  - そのマスに入りえない数字は一瞬、そのマスと、NG要因のマスの背景を赤くし、変更不可
- すべてのマスが埋まったら終了

## 問題シートの構造

Exampleシート
- 1行目:ヘッダー
- A列:問題番号
- B列:問題文字列

C列以降は未使用

## 問題文字列の構造

問題文字列は以下の形式とする
- 先頭は "Q"(半角英字1文字)
- Qのあとに0から9が81文字
- Qの直後から(1,1),(2,1),(3,1),(4,1),(5,1),(6,1),(7,1),(8,1),(9,1),(1,2),(2,2),(3,2),...,(8,9),(9,9)のマスの値とする
- 0は空きマスとする
- 1から9は問題マスとする

## 問題表示

- 空きマスは、文字表示なし(文字色は濃い灰色にするが、文字表示がない)、白背景とする
- 問題マスは、黒文字、ごく薄い灰色背景とする

## ブロックマスの要素

左上:1ブロック・(1,1),(2,1),(3,1),(1,2),(2,2),(3,2),(1,3),(2,3),(3,3)
上中央:2ブロック・(4,1),(5,1),(6,1),(4,2),(5,2),(6,2),(4,3),(5,3),(6,3)
右上:3ブロック・(7,1),(8,1),(9,1),(7,2),(8,2),(9,2),(7,3),(8,3),(9,3)
左中:4ブロック・(1,4),(2,4),(3,4),(1,5),(2,5),(3,5),(1,6),(2,6),(3,6)
中央:5ブロック・(4,4),(5,4),(6,4),(4,5),(5,5),(6,5),(4,6),(5,6),(6,6)
右中:6ブロック・(7,4),(8,4),(9,4),(7,5),(8,5),(9,5),(7,6),(8,6),(9,6)
左下:7ブロック・(1,7),(2,7),(3,7),(1,8),(2,8),(3,8),(1,9),(2,9),(3,9)
下中央:8ブロック・(4,7),(5,7),(6,7),(4,8),(5,8),(6,8),(4,9),(5,9),(6,9)
右下:9ブロック・(7,7),(8,7),(9,7),(7,8),(8,8),(9,8),(7,9),(8,9),(9,9)

## マスの定義

問題マス:問題文字列が1から9・変更不可マス・黒文字・薄い灰色背景
空きマス:問題文字列が0・未入力のマス・白背景
入力済マス:問題文字列が0・入力済のマス・濃い灰色文字・白背景

## チェック仕様

**前提:**
- チェックを行うのは問題マス以外のマスクリック
- すでに値が入っている入力済マスもチェック対象

(X,Y)がクリックされたときのチェック

- 行チェック:クリックマス以外の同一行(n,Y) n=1から9(ただしn<>X)にラジオボタン選択数字があるときはNG
- 列チェック:クリックマス以外の同一列(X,n) n=1から9(ただしn<>Y)にラジオボタン選択数字があるときはNG
- ブロックチェック:クリックマス以外の同ブロックにラジオボタン選択数字があるときはNG

※ブロック番号=((X-1)%3)+(Math.floor((Y-1)/3))*3

## 動作

問題を表示する。
問題マスのクリックは無効にする。
ラジオボタンが削除のときはクリックマスの値を削除する(空きマスにする)
空きマス、入力済マスのクリックでチェックを行う。
チェックNGはクリックマスとNG原因マスの背景を一瞬赤くする。
チェックOKなら、クリックマスにラジオボタンの値を設定

## 依頼

GASでナンプレ問題集のWebアプリを作ってください。