回答編集履歴

7

関数の名前をtransformからrotateに修正

2020/08/19 17:23

投稿

sfdust
sfdust

スコア1137

test CHANGED
@@ -104,7 +104,7 @@
104
104
 
105
105
  ```
106
106
 
107
- def transform(a, b):
107
+ def rotate(a, b):
108
108
 
109
109
  return [b, N-a+1]
110
110
 

6

f

2020/08/19 17:23

投稿

sfdust
sfdust

スコア1137

test CHANGED
@@ -208,7 +208,7 @@
208
208
 
209
209
  与えられた座標を数字に変換する関数。
210
210
 
211
- 1番目配列のインデックス、2番目配列の要素。
211
+ 返り値の1番目配列のインデックス、2番目配列の要素 を表す
212
212
 
213
213
  '''
214
214
 
@@ -222,7 +222,7 @@
222
222
 
223
223
  与えられたインデックスと数値を座標に変換する。
224
224
 
225
- 1番目x座標、2番目y座標。
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[index][0],
277
+ rotated_place[i][0], # x座標
276
-
278
+
277
- rotated_place[index][1]
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

2020/08/19 17:18

投稿

sfdust
sfdust

スコア1137

test CHANGED
@@ -268,7 +268,7 @@
268
268
 
269
269
  # 回転後のクイーンのx,y座標を数字に直して配列にする。
270
270
 
271
- for index in range(N):
271
+ for i in range(N):
272
272
 
273
273
  index, value = coordinate_to_value(
274
274
 

4

追記

2020/08/19 17:13

投稿

sfdust
sfdust

スコア1137

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

2020/08/19 17:02

投稿

sfdust
sfdust

スコア1137

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

2020/08/18 17:25

投稿

sfdust
sfdust

スコア1137

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

2020/08/18 17:23

投稿

sfdust
sfdust

スコア1137

test CHANGED
@@ -140,12 +140,16 @@
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
 
149
- 逆に 座標[x, y]にクイーンがあるのであれば
149
+ 逆に 座標[x, y]にクイーンがあることを示す場合は
150
150
 
151
151
  col[x-1] に y-1を代入すればよいことがわかります。
152
+
153
+
154
+
155
+ 上記を使ってプログラムを考えてください。