回答編集履歴
7
関数の名前をtransformからrotateに修正
answer
CHANGED
@@ -51,7 +51,7 @@
|
|
51
51
|
|
52
52
|
プログラムにすると、単純に
|
53
53
|
```
|
54
|
-
def
|
54
|
+
def rotate(a, b):
|
55
55
|
return [b, N-a+1]
|
56
56
|
```
|
57
57
|
|
6
f
answer
CHANGED
@@ -103,14 +103,14 @@
|
|
103
103
|
def coordinate_to_value(x, y):
|
104
104
|
'''
|
105
105
|
与えられた座標を数字に変換する関数。
|
106
|
-
1番目
|
106
|
+
返り値の1番目は配列のインデックス、2番目は配列の要素 を表す。
|
107
107
|
'''
|
108
108
|
return [x-1, y-1]
|
109
109
|
|
110
110
|
def value_to_coordinate(index, value):
|
111
111
|
'''
|
112
112
|
与えられたインデックスと数値を座標に変換する。
|
113
|
-
1番目
|
113
|
+
返り値の1番目はx座標、2番目はy座標 を表す。
|
114
114
|
'''
|
115
115
|
return [index+1, value + 1]
|
116
116
|
|
@@ -118,6 +118,7 @@
|
|
118
118
|
# 元のcol配列を、クイーンのx,y座標に変換してqueens_placeに格納する。
|
119
119
|
for index in range(N):
|
120
120
|
queens_place[index] = value_to_coordinate(index, test_col[index])
|
121
|
+
|
121
122
|
print("現在のクイーンの位置")
|
122
123
|
print(queens_place)
|
123
124
|
print()
|
@@ -135,13 +136,14 @@
|
|
135
136
|
# 回転後のクイーンのx,y座標を数字に直して配列にする。
|
136
137
|
for i in range(N):
|
137
138
|
index, value = coordinate_to_value(
|
138
|
-
rotated_place[
|
139
|
+
rotated_place[i][0], # x座標
|
139
|
-
rotated_place[
|
140
|
+
rotated_place[i][1] # y座標
|
140
141
|
)
|
141
142
|
rotated_col[index] = value
|
143
|
+
|
142
144
|
print("回転後の座標を数字に変換した後の答え")
|
143
145
|
print(rotated_col)
|
144
146
|
```
|
145
147
|
|
146
|
-
※詳しい方々へ:説明
|
148
|
+
※詳しい方々へ:説明にそった形にするためかなり冗長で無駄なコードになっています。
|
147
149
|
タプルを使えとかnumpy使えばすぐできるとかいろいろあると思いますが、ご容赦ください。
|
5
f
answer
CHANGED
@@ -133,7 +133,7 @@
|
|
133
133
|
print()
|
134
134
|
|
135
135
|
# 回転後のクイーンのx,y座標を数字に直して配列にする。
|
136
|
-
for
|
136
|
+
for i in range(N):
|
137
137
|
index, value = coordinate_to_value(
|
138
138
|
rotated_place[index][0],
|
139
139
|
rotated_place[index][1]
|
4
追記
answer
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
元コードが [こちらの本](https://www.amazon.co.jp/dp/B0822N5RMS)に記載されているコードの[丸コピー](https://books.google.co.jp/books?id=FHfRDwAAQBAJ&pg=PT194&lpg=PT194)なのはともかくとして
|
2
|
-
|
3
1
|
プログラムをそのまま示したのではためにならないと思うので、考え方だけ示します。
|
4
2
|
|
5
3
|
1.回転座標
|
@@ -75,4 +73,75 @@
|
|
75
73
|
逆に 座標[x, y]にクイーンがあることを示す場合は、
|
76
74
|
col[x-1] に y-1を代入すればよいことがわかります。
|
77
75
|
|
78
|
-
上記を使ってプログラムを考えてみましょう。
|
76
|
+
上記を使ってプログラムを考えてみましょう。
|
77
|
+
|
78
|
+
# 追記
|
79
|
+
上の説明でN=4の場合、下記のようなコードで変換できます。
|
80
|
+
```
|
81
|
+
N=4
|
82
|
+
|
83
|
+
# クイーンの位置を示す配列
|
84
|
+
test_col = [0,1,3,2]
|
85
|
+
|
86
|
+
# 回転前のクイーンの座標を格納する配列(初期化)
|
87
|
+
queens_place = [[0]*2 for i in range(N)]
|
88
|
+
|
89
|
+
# 回転後のクイーンの座標を格納する配列(初期化)
|
90
|
+
rotated_place = [[0]*2 for i in range(N)]
|
91
|
+
|
92
|
+
# 回転後のクイーンの座標に対応する数値を格納する配列(初期化)
|
93
|
+
rotated_col = [0 for i in range(N)]
|
94
|
+
|
95
|
+
|
96
|
+
def rotate(a, b):
|
97
|
+
'''
|
98
|
+
与えられた座標を左90度に回転した座標にして返す関数。
|
99
|
+
'''
|
100
|
+
return [b, N-a+1]
|
101
|
+
|
102
|
+
|
103
|
+
def coordinate_to_value(x, y):
|
104
|
+
'''
|
105
|
+
与えられた座標を数字に変換する関数。
|
106
|
+
1番目:配列のインデックス、2番目:配列の要素。
|
107
|
+
'''
|
108
|
+
return [x-1, y-1]
|
109
|
+
|
110
|
+
def value_to_coordinate(index, value):
|
111
|
+
'''
|
112
|
+
与えられたインデックスと数値を座標に変換する。
|
113
|
+
1番目:x座標、2番目:y座標。
|
114
|
+
'''
|
115
|
+
return [index+1, value + 1]
|
116
|
+
|
117
|
+
|
118
|
+
# 元のcol配列を、クイーンのx,y座標に変換してqueens_placeに格納する。
|
119
|
+
for index in range(N):
|
120
|
+
queens_place[index] = value_to_coordinate(index, test_col[index])
|
121
|
+
print("現在のクイーンの位置")
|
122
|
+
print(queens_place)
|
123
|
+
print()
|
124
|
+
|
125
|
+
# クイーンのx,y座標を左90度に回転したものをrotated_placeに格納する。
|
126
|
+
for index in range(N):
|
127
|
+
x = queens_place[index][0]
|
128
|
+
y = queens_place[index][1]
|
129
|
+
rotated_place[index]=rotate(x, y)
|
130
|
+
|
131
|
+
print("回転後のクイーンの位置")
|
132
|
+
print(rotated_place)
|
133
|
+
print()
|
134
|
+
|
135
|
+
# 回転後のクイーンのx,y座標を数字に直して配列にする。
|
136
|
+
for index in range(N):
|
137
|
+
index, value = coordinate_to_value(
|
138
|
+
rotated_place[index][0],
|
139
|
+
rotated_place[index][1]
|
140
|
+
)
|
141
|
+
rotated_col[index] = value
|
142
|
+
print("回転後の座標を数字に変換した後の答え")
|
143
|
+
print(rotated_col)
|
144
|
+
```
|
145
|
+
|
146
|
+
※詳しい方々へ:説明のためかなり冗長で無駄なコードになっています。
|
147
|
+
タプルを使えとかnumpy使えばすぐできるとかいろいろあると思いますが、ご容赦ください。
|
3
f
answer
CHANGED
@@ -69,10 +69,10 @@
|
|
69
69
|
col[3] = 2 → 座標[4, 3]
|
70
70
|
となっているのですから、これを一般化すると
|
71
71
|
|
72
|
-
col[i] = a ならば、 座標[i+1, a+1]にクイーンがあることを示しています。
|
72
|
+
col[i] = a ならば、 座標[i+1, a+1] にクイーンがあることを示しています。
|
73
|
-
となります。
|
74
73
|
|
74
|
+
|
75
75
|
逆に 座標[x, y]にクイーンがあることを示す場合は、
|
76
76
|
col[x-1] に y-1を代入すればよいことがわかります。
|
77
77
|
|
78
|
-
上記を使ってプログラムを考えて
|
78
|
+
上記を使ってプログラムを考えてみましょう。
|
2
f
answer
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
answer
CHANGED
@@ -69,8 +69,10 @@
|
|
69
69
|
col[3] = 2 → 座標[4, 3]
|
70
70
|
となっているのですから、これを一般化すると
|
71
71
|
|
72
|
-
col[i] = a
|
72
|
+
col[i] = a ならば、 座標[i+1, a+1]にクイーンがあることを示しています。
|
73
73
|
となります。
|
74
74
|
|
75
|
-
逆に 座標[x, y]にクイーンがある
|
75
|
+
逆に 座標[x, y]にクイーンがあることを示す場合は、
|
76
|
-
col[x-1] に y-1を代入すればよいことがわかります。
|
76
|
+
col[x-1] に y-1を代入すればよいことがわかります。
|
77
|
+
|
78
|
+
上記を使ってプログラムを考えてください。
|