前提・実現したいこと
Pythonでカックロを解く
■■な機能を実装中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
斜め線の数字で片方しかない部分がエラーの原因と考え、whileで条件を書いたのですが、エラーが解消できませんでした。
エラーメッセージ SyntaxError: invalid character in identifier
該当のソースコード
Python ソースコード from mip import* from itertools import product #model md=Model(name="") # CSVファイル入力 csv_file = sys.argv[1] with open(csv_file) as inp_f: read_file = csv.reader(inp_f) data = [row for row in read_file] sizes = data.pop(0) row = int(sys.argv[2]) #行数i cols = int(sys.argv[3]) #列数j #変数 x = [md.add_var('x_{}_{}_{}'.format(i,j,k),var_type='B')for i, j, k in product(range(rows), range(cols), range(9))] #制約 #白マスには1~9の数字が1つ入る for j in range(row): for i in range(cols): if '' in data[i][j]: md += xsum(x[i][j][k] for k in range(9)) == 1 continue #行の1つの白マスのつながりには、同じ数字が入らない for k in range(9): md += xsum(x[i][j][k] for j in range(cols)) <= 1 #縦への1つの白マスのつながりには、同じ数字が入らない for k in range(9): md += xsum(x[i][j][k] for i in range(row)) <= 1 #行の合計が等しいか for i in range(row): for j in range(cols): if '\' in data[i][j]: former, latter = data[i][j].split('\') xcnt = 0 while i<row and '' in data[i][j]: xcnt += 1 if latter != '': for j in range(xcnt): md += xsum((k+1) * x[i][j][k] for j in range(9)) == int(latter) #列の合計が等しいか for j in range(cols): for i in range(row): if '\' in data[i][j]: former, latter = data[i][j].split('\') ycnt = 0 while j<cols and '' in data[i][j]: ycnt += 1 if former != '': for i in range(ycnt): md += xsum((k+1) * x[i][j][k] for i in range(9)) == int(former) #出力
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/06/27 11:34