teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

7

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

2020/08/19 17:23

投稿

sfdust
sfdust

スコア1137

answer CHANGED
@@ -51,7 +51,7 @@
51
51
 
52
52
  プログラムにすると、単純に
53
53
  ```
54
- def transform(a, b):
54
+ def rotate(a, b):
55
55
  return [b, N-a+1]
56
56
  ```
57
57
 

6

f

2020/08/19 17:23

投稿

sfdust
sfdust

スコア1137

answer CHANGED
@@ -103,14 +103,14 @@
103
103
  def coordinate_to_value(x, y):
104
104
  '''
105
105
  与えられた座標を数字に変換する関数。
106
- 1番目配列のインデックス、2番目配列の要素。
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番目x座標、2番目y座標。
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[index][0],
139
+ rotated_place[i][0], # x座標
139
- rotated_place[index][1]
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

2020/08/19 17:18

投稿

sfdust
sfdust

スコア1137

answer CHANGED
@@ -133,7 +133,7 @@
133
133
  print()
134
134
 
135
135
  # 回転後のクイーンのx,y座標を数字に直して配列にする。
136
- for index in range(N):
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

追記

2020/08/19 17:13

投稿

sfdust
sfdust

スコア1137

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

2020/08/19 17:02

投稿

sfdust
sfdust

スコア1137

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

2020/08/18 17:25

投稿

sfdust
sfdust

スコア1137

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

2020/08/18 17:23

投稿

sfdust
sfdust

スコア1137

answer CHANGED
@@ -69,8 +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
73
  となります。
74
74
 
75
- 逆に 座標[x, y]にクイーンがあるのであれば
75
+ 逆に 座標[x, y]にクイーンがあることを示す場合は
76
- col[x-1] に y-1を代入すればよいことがわかります。
76
+ col[x-1] に y-1を代入すればよいことがわかります。
77
+
78
+ 上記を使ってプログラムを考えてください。