- こちらにパズルを解くパイソンコードの解説があった
- パイソンの練習がてら、なぞってみる
コピペをしても動かないので、いまいちなのだけれど…コメントをいただきまして、1行修正して回りました。
- いくつか学ぶこと
- Classの作り方
- クラスオブジェクトを作るのが "__init__"
- そのときに"self"という予約語(のようなもの)を使うこと→この"self"は引数のように書いてあるけれど、実際の引数はs,tだけであること:"Piece('010111010', 311)"と使えば、"010111010"がs、311がtに相当する
- "self.hoge"で、作ったクラスオブジェクトの属性を取り出せること
- その他
- np.array(...).reshape(h,-1)の "-1"は列数としては、「不適切」だが、そういうときは、"h(行数)"に合わせて「よしなに値をとれ」という意味に解釈されるらしい
import numpy as np
class Piece:
def __init__(self, s, t):
h = t // 100 # 縦
m = (t // 10) % 10 # 反転する(2)/しない(1)
n = t % 10 # 回転数
#a = np.array(1).reshape(h, -1)
a = np.array([c != '0' for c in s]).reshape(h, -1)
self.pos = -1
self.sel = 0
self.cand = []
for i in range(m):
for j in range(n):
self.cand.append((a, a.argmax()))
a = np.rot90(a)
a = np.fliplr(a)
-
- バックトラックのおよその動き
- 組み合わせを作って
- 判定をしながら、ダメになったら、組み合わせのうち、ダメをもたらす部分を共有しているところは全はしょり