Pythonで数独の時短に成功!

こんにちは!サキナオコです^^
すっかり涼しくなりました。
いつもご覧いただき、本当にどうもありがとうございます!!*^o^*

さて、先日より数独のためのコードを書いていたのですが、なんとかこぎつけました。

えっと、何度も言うようですが、答えを出すコードではありません。
答えを出すために空欄に使用していない数字を書くためです。

単純に使っていない数字を書くだけの、カンタンな作業です。
でも、これ私苦手でどうしても過不足が出てしまい正確に書けません。

以下解く前の準備の状態でこれ。めちゃ時間かかってます。

真剣にやってもこのような状態。凄惨を極める。

過不足があるとちゃんと解けないのです。それで結局また空欄を見直して、目眩のする作業を繰り返さないといけないわけです。

これには堪えられずPythonにお願いすることにしました。

ということでコードをいろいろ調べながら書きました。
すっかりいろいろ忘れていましたので、時間がかかってしまいました。

で、縦と横の組み合わせの数字を全部取得して、並べ替えるということに成功しました!

が、同じ枠内の数字も除くコードもないといけないのですが、
それは頭がグワングワンしたのでやめました。手動で除きます。

苦心の作ごらんください。数値は上のとは別の問題のを入れてます。

ya = [0,1,0,2,0,0,0,8,0]
yb = [0,0,4,0,0,8,7,0,0]
yc = [3,0,0,0,9,0,0,0,6]
yd = [0,0,6,0,0,3,0,5,0]
ye = [0,0,0,0,0,0,0,0,0]
yf = [0,7,0,1,0,0,8,0,0]
yg = [9,0,0,0,4,0,0,0,3]
yh = [0,0,2,8,0,0,9,0,0]
yi = [0,5,0,0,0,6,0,2,8]

num = [i for i in range(0,10)]

lst_yoko = [ya,yb,yc,yd,ye,yf,yg,yh,yi]

lst_tate_a =[i[0] for i in lst_yoko]
lst_tate_b =[i[1] for i in lst_yoko]
lst_tate_c =[i[2] for i in lst_yoko]
lst_tate_d =[i[3] for i in lst_yoko]
lst_tate_e =[i[4] for i in lst_yoko]
lst_tate_f =[i[5] for i in lst_yoko]
lst_tate_g =[i[6] for i in lst_yoko]
lst_tate_h =[i[7] for i in lst_yoko]
lst_tate_i =[i[8] for i in lst_yoko]

lst_tate = [lst_tate_a,lst_tate_b,lst_tate_c,lst_tate_d,lst_tate_e,lst_tate_f,lst_tate_g,lst_tate_h,lst_tate_i]

new_lst = [(x,y) for x in lst_yoko for y in lst_tate]

#print(new_lst)


for ms in new_lst:

    #print(ms)
    nms=ms[0]+ms[1]

    n_nms = sorted(nms)
    
    ans = set(num)^set(n_nms)


    print(ans)

いやあ、苦心の作というか苦肉の策ですね。

ということで実行以下。

{4, 5, 6, 7}
{3, 4, 6, 9}
{3, 5, 7, 9}
{3, 4, 5, 6, 7, 9}
{3, 5, 6, 7}
{4, 5, 7, 9}
{3, 4, 5, 6}
{3, 4, 6, 7, 9}
{4, 5, 7, 9}
{1, 2, 5, 6}
{2, 3, 6, 9}
{1, 3, 5, 9}
{3, 5, 6, 9}
{1, 2, 3, 5, 6}
{1, 2, 5, 9}
{1, 2, 3, 5, 6}
{1, 3, 6, 9}
{1, 2, 5, 9}
{1, 2, 4, 5, 7, 8}
{2, 4, 8}
{1, 5, 7, 8}
{4, 5, 7}
{1, 2, 5, 7, 8}
{1, 2, 4, 5, 7}
{1, 2, 4, 5}
{1, 4, 7}
{1, 2, 4, 5, 7}
{1, 2, 4, 7, 8}
{2, 4, 8, 9}
{1, 7, 8, 9}
{4, 7, 9}
{1, 2, 7, 8}
{1, 2, 4, 7, 9}
{1, 2, 4}
{1, 4, 7, 9}
{1, 2, 4, 7, 9}
{1, 2, 4, 5, 6, 7, 8}
{2, 3, 4, 6, 8, 9}
{1, 3, 5, 7, 8, 9}
{3, 4, 5, 6, 7, 9}
{1, 2, 3, 5, 6, 7, 8}
{1, 2, 4, 5, 7, 9}
{1, 2, 3, 4, 5, 6}
{1, 3, 4, 6, 7, 9}
{1, 2, 4, 5, 7, 9}
{2, 4, 5, 6}
{2, 3, 4, 6, 9}
{3, 5, 9}
{3, 4, 5, 6, 9}
{2, 3, 5, 6}
{2, 4, 5, 9}
{2, 3, 4, 5, 6}
{3, 4, 6, 9}
{2, 4, 5, 9}
{1, 2, 5, 6, 7, 8}
{2, 6, 8}
{1, 5, 7, 8}
{5, 6, 7}
{1, 2, 5, 6, 7, 8}
{1, 2, 5, 7}
{1, 2, 5, 6}
{1, 6, 7}
{1, 2, 5, 7}
{1, 4, 5, 6, 7}
{3, 4, 6}
{1, 3, 5, 7}
{3, 4, 5, 6, 7}
{1, 3, 5, 6, 7}
{1, 4, 5, 7}
{1, 3, 4, 5, 6}
{1, 3, 4, 6, 7}
{1, 4, 5, 7}
{1, 4, 7}
{3, 4, 9}
{1, 3, 7, 9}
{3, 4, 7, 9}
{1, 3, 7}
{1, 4, 7, 9}
{1, 3, 4}
{1, 3, 4, 7, 9}
{1, 4, 7, 9}

これを右横方面へ順番に入れていけばいいのです。数字が元々入っているところは書きません。
写し間違えたらアウトですが。

丸写しし終えたら、同じ枠内の数字を消します。これだけなら私にも間違えずにできます。
そして、あとは楽しく解いていくだけです。

ああ、解いたあとの画像になってしまいましたが、準備段階で間違いがないのですっきり解けます。

とうとう枠も作成してプリントした

おいしいところだけ、いただけるようになりました!ありがとう!Python!!

昨日、職場で数独に夢中という話をしたら仕事の日は難しい問題を解いてから来るという数独マスターがいらっしゃるのが判明しました。リスペクト〜

空欄に使用していない数字を書くという私のやっている方法ではなく、空欄の数字の場所に点をつけるという方法だとか。やってみましたが、初心者の私にはムリでした…

コードができて、なんだか少し数独熱が冷めた気もしないでもないですがとにかく良かった良かった!



Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


こんにちは!サキナオコです^o^
ごゆっくりどうぞ!

最近の投稿

2022年10月
 12
3456789
10111213141516
17181920212223
24252627282930
31  

Categories

Search the website

サキ ナオコのアバター