回答編集履歴
7
関数の名前をtransformからrotateに修正
test
CHANGED
@@ -104,7 +104,7 @@
|
|
104
104
|
|
105
105
|
```
|
106
106
|
|
107
|
-
def t
|
107
|
+
def rotate(a, b):
|
108
108
|
|
109
109
|
return [b, N-a+1]
|
110
110
|
|
6
f
test
CHANGED
@@ -208,7 +208,7 @@
|
|
208
208
|
|
209
209
|
与えられた座標を数字に変換する関数。
|
210
210
|
|
211
|
-
1番目
|
211
|
+
返り値の1番目は配列のインデックス、2番目は配列の要素 を表す。
|
212
212
|
|
213
213
|
'''
|
214
214
|
|
@@ -222,7 +222,7 @@
|
|
222
222
|
|
223
223
|
与えられたインデックスと数値を座標に変換する。
|
224
224
|
|
225
|
-
1番目
|
225
|
+
返り値の1番目はx座標、2番目はy座標 を表す。
|
226
226
|
|
227
227
|
'''
|
228
228
|
|
@@ -238,6 +238,8 @@
|
|
238
238
|
|
239
239
|
queens_place[index] = value_to_coordinate(index, test_col[index])
|
240
240
|
|
241
|
+
|
242
|
+
|
241
243
|
print("現在のクイーンの位置")
|
242
244
|
|
243
245
|
print(queens_place)
|
@@ -272,14 +274,16 @@
|
|
272
274
|
|
273
275
|
index, value = coordinate_to_value(
|
274
276
|
|
275
|
-
rotated_place[i
|
277
|
+
rotated_place[i][0], # x座標
|
276
|
-
|
278
|
+
|
277
|
-
rotated_place[i
|
279
|
+
rotated_place[i][1] # y座標
|
278
280
|
|
279
281
|
)
|
280
282
|
|
281
283
|
rotated_col[index] = value
|
282
284
|
|
285
|
+
|
286
|
+
|
283
287
|
print("回転後の座標を数字に変換した後の答え")
|
284
288
|
|
285
289
|
print(rotated_col)
|
@@ -288,6 +292,6 @@
|
|
288
292
|
|
289
293
|
|
290
294
|
|
291
|
-
※詳しい方々へ:説明
|
295
|
+
※詳しい方々へ:説明にそった形にするためかなり冗長で無駄なコードになっています。
|
292
296
|
|
293
297
|
タプルを使えとかnumpy使えばすぐできるとかいろいろあると思いますが、ご容赦ください。
|
5
f
test
CHANGED
@@ -268,7 +268,7 @@
|
|
268
268
|
|
269
269
|
# 回転後のクイーンのx,y座標を数字に直して配列にする。
|
270
270
|
|
271
|
-
for i
|
271
|
+
for i in range(N):
|
272
272
|
|
273
273
|
index, value = coordinate_to_value(
|
274
274
|
|
4
追記
test
CHANGED
@@ -1,7 +1,3 @@
|
|
1
|
-
元コードが [こちらの本](https://www.amazon.co.jp/dp/B0822N5RMS)に記載されているコードの[丸コピー](https://books.google.co.jp/books?id=FHfRDwAAQBAJ&pg=PT194&lpg=PT194)なのはともかくとして
|
2
|
-
|
3
|
-
|
4
|
-
|
5
1
|
プログラムをそのまま示したのではためにならないと思うので、考え方だけ示します。
|
6
2
|
|
7
3
|
|
@@ -153,3 +149,145 @@
|
|
153
149
|
|
154
150
|
|
155
151
|
上記を使ってプログラムを考えてみましょう。
|
152
|
+
|
153
|
+
|
154
|
+
|
155
|
+
# 追記
|
156
|
+
|
157
|
+
上の説明でN=4の場合、下記のようなコードで変換できます。
|
158
|
+
|
159
|
+
```
|
160
|
+
|
161
|
+
N=4
|
162
|
+
|
163
|
+
|
164
|
+
|
165
|
+
# クイーンの位置を示す配列
|
166
|
+
|
167
|
+
test_col = [0,1,3,2]
|
168
|
+
|
169
|
+
|
170
|
+
|
171
|
+
# 回転前のクイーンの座標を格納する配列(初期化)
|
172
|
+
|
173
|
+
queens_place = [[0]*2 for i in range(N)]
|
174
|
+
|
175
|
+
|
176
|
+
|
177
|
+
# 回転後のクイーンの座標を格納する配列(初期化)
|
178
|
+
|
179
|
+
rotated_place = [[0]*2 for i in range(N)]
|
180
|
+
|
181
|
+
|
182
|
+
|
183
|
+
# 回転後のクイーンの座標に対応する数値を格納する配列(初期化)
|
184
|
+
|
185
|
+
rotated_col = [0 for i in range(N)]
|
186
|
+
|
187
|
+
|
188
|
+
|
189
|
+
|
190
|
+
|
191
|
+
def rotate(a, b):
|
192
|
+
|
193
|
+
'''
|
194
|
+
|
195
|
+
与えられた座標を左90度に回転した座標にして返す関数。
|
196
|
+
|
197
|
+
'''
|
198
|
+
|
199
|
+
return [b, N-a+1]
|
200
|
+
|
201
|
+
|
202
|
+
|
203
|
+
|
204
|
+
|
205
|
+
def coordinate_to_value(x, y):
|
206
|
+
|
207
|
+
'''
|
208
|
+
|
209
|
+
与えられた座標を数字に変換する関数。
|
210
|
+
|
211
|
+
1番目:配列のインデックス、2番目:配列の要素。
|
212
|
+
|
213
|
+
'''
|
214
|
+
|
215
|
+
return [x-1, y-1]
|
216
|
+
|
217
|
+
|
218
|
+
|
219
|
+
def value_to_coordinate(index, value):
|
220
|
+
|
221
|
+
'''
|
222
|
+
|
223
|
+
与えられたインデックスと数値を座標に変換する。
|
224
|
+
|
225
|
+
1番目:x座標、2番目:y座標。
|
226
|
+
|
227
|
+
'''
|
228
|
+
|
229
|
+
return [index+1, value + 1]
|
230
|
+
|
231
|
+
|
232
|
+
|
233
|
+
|
234
|
+
|
235
|
+
# 元のcol配列を、クイーンのx,y座標に変換してqueens_placeに格納する。
|
236
|
+
|
237
|
+
for index in range(N):
|
238
|
+
|
239
|
+
queens_place[index] = value_to_coordinate(index, test_col[index])
|
240
|
+
|
241
|
+
print("現在のクイーンの位置")
|
242
|
+
|
243
|
+
print(queens_place)
|
244
|
+
|
245
|
+
print()
|
246
|
+
|
247
|
+
|
248
|
+
|
249
|
+
# クイーンのx,y座標を左90度に回転したものをrotated_placeに格納する。
|
250
|
+
|
251
|
+
for index in range(N):
|
252
|
+
|
253
|
+
x = queens_place[index][0]
|
254
|
+
|
255
|
+
y = queens_place[index][1]
|
256
|
+
|
257
|
+
rotated_place[index]=rotate(x, y)
|
258
|
+
|
259
|
+
|
260
|
+
|
261
|
+
print("回転後のクイーンの位置")
|
262
|
+
|
263
|
+
print(rotated_place)
|
264
|
+
|
265
|
+
print()
|
266
|
+
|
267
|
+
|
268
|
+
|
269
|
+
# 回転後のクイーンのx,y座標を数字に直して配列にする。
|
270
|
+
|
271
|
+
for index in range(N):
|
272
|
+
|
273
|
+
index, value = coordinate_to_value(
|
274
|
+
|
275
|
+
rotated_place[index][0],
|
276
|
+
|
277
|
+
rotated_place[index][1]
|
278
|
+
|
279
|
+
)
|
280
|
+
|
281
|
+
rotated_col[index] = value
|
282
|
+
|
283
|
+
print("回転後の座標を数字に変換した後の答え")
|
284
|
+
|
285
|
+
print(rotated_col)
|
286
|
+
|
287
|
+
```
|
288
|
+
|
289
|
+
|
290
|
+
|
291
|
+
※詳しい方々へ:説明のためかなり冗長で無駄なコードになっています。
|
292
|
+
|
293
|
+
タプルを使えとかnumpy使えばすぐできるとかいろいろあると思いますが、ご容赦ください。
|
3
f
test
CHANGED
@@ -140,9 +140,9 @@
|
|
140
140
|
|
141
141
|
|
142
142
|
|
143
|
-
col[i] = a ならば、 座標[i+1, a+1]にクイーンがあることを示しています。
|
143
|
+
col[i] = a ならば、 座標[i+1, a+1] にクイーンがあることを示しています。
|
144
144
|
|
145
|
-
|
145
|
+
|
146
146
|
|
147
147
|
|
148
148
|
|
@@ -152,4 +152,4 @@
|
|
152
152
|
|
153
153
|
|
154
154
|
|
155
|
-
上記を使ってプログラムを考えて
|
155
|
+
上記を使ってプログラムを考えてみましょう。
|
2
f
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
元コードが [こちらの本](https://www.amazon.co.jp/dp/B0822N5RMS)に記載されているコードの丸コピーなのはともかくとして
|
1
|
+
元コードが [こちらの本](https://www.amazon.co.jp/dp/B0822N5RMS)に記載されているコードの[丸コピー](https://books.google.co.jp/books?id=FHfRDwAAQBAJ&pg=PT194&lpg=PT194)なのはともかくとして
|
2
2
|
|
3
3
|
|
4
4
|
|
1
f
test
CHANGED
@@ -140,12 +140,16 @@
|
|
140
140
|
|
141
141
|
|
142
142
|
|
143
|
-
col[i] = a
|
143
|
+
col[i] = a ならば、 座標[i+1, a+1]にクイーンがあることを示しています。
|
144
144
|
|
145
145
|
となります。
|
146
146
|
|
147
147
|
|
148
148
|
|
149
|
-
逆に 座標[x, y]にクイーンがある
|
149
|
+
逆に 座標[x, y]にクイーンがあることを示す場合は、
|
150
150
|
|
151
151
|
col[x-1] に y-1を代入すればよいことがわかります。
|
152
|
+
|
153
|
+
|
154
|
+
|
155
|
+
上記を使ってプログラムを考えてください。
|