質問編集履歴

1

修正した回答とお礼を追記しました。

2019/03/07 07:54

投稿

NirohShimashita
NirohShimashita

スコア19

test CHANGED
File without changes
test CHANGED
@@ -141,3 +141,155 @@
141
141
  アイデアをお持ちの方がいらっしゃいましたら、ご助言をいただけたるととても助かります。
142
142
 
143
143
  ご協力いただけると幸いです。よろしくお願いいたします。
144
+
145
+
146
+
147
+ ##回答を修正することができました。ご協力いただき有難うございました。
148
+
149
+
150
+
151
+ 人のスクリプトを読んで理解するという経験がまだまだ少ないので教えていただいたリンク先のスクリプトを読み解くのに時間がかかってしまい、返事とお礼が遅れてしまいました。解き方自体が勉強になっただけではなく、人のスクリプトを読んで理解する体験が自分にとってはとても貴重なものでした。
152
+
153
+ リンク先の解き方をそのまま真似することはできなかったですが、じっくりスクリプトを読んでいく中でなんとかオリジナルの解き方というか修正の仕方を思いつくことができました。まだまだ初心者なのでとても体力がいる作業でしたが貴重な経験になりました。有難うございました。
154
+
155
+
156
+
157
+ ```python
158
+
159
+ def adding_numbers(N, S, C):
160
+
161
+ new_list = []
162
+
163
+
164
+
165
+ for l in C:
166
+
167
+ N_copy = list(N)
168
+
169
+
170
+
171
+ l_copy = list(l)
172
+
173
+ l_copy.remove(1)
174
+
175
+
176
+
177
+ for num in l_copy:
178
+
179
+ N_copy.remove(num)
180
+
181
+
182
+
183
+ for num in N_copy:
184
+
185
+ n_sum = num + l_copy[-1]
186
+
187
+
188
+
189
+ if n_sum in S:
190
+
191
+ l_copy_2 = list(l)
192
+
193
+ l_copy_2.append(num)
194
+
195
+
196
+
197
+ new_list.append(l_copy_2)
198
+
199
+
200
+
201
+ if new_list == []:
202
+
203
+ return N, S, new_list
204
+
205
+
206
+
207
+ elif len(new_list[0]) == len(N) + 1:
208
+
209
+ the_final_list = []
210
+
211
+
212
+
213
+ for l in new_list:
214
+
215
+ n_sum = l[-1] + 1
216
+
217
+ if n_sum in S:
218
+
219
+ the_final_list.append(l)
220
+
221
+
222
+
223
+ return N, S, the_final_list
224
+
225
+
226
+
227
+ else:
228
+
229
+ return adding_numbers(N, S, new_list)
230
+
231
+
232
+
233
+
234
+
235
+ def main():
236
+
237
+
238
+
239
+ n = 2
240
+
241
+ while True:
242
+
243
+ # N -> numbers, S -> squares, C -> circle_list
244
+
245
+
246
+
247
+ N = [i for i in range(2, n+1)]
248
+
249
+ S = [i**2 for i in range(2, int((2*n - 1)**0.5 + 1))]
250
+
251
+
252
+
253
+ C = []
254
+
255
+ for i in N:
256
+
257
+ n_sum = i + 1
258
+
259
+ if n_sum in S:
260
+
261
+ new_list = [1, i]
262
+
263
+ C.append(new_list)
264
+
265
+
266
+
267
+ if C != []:
268
+
269
+ N, S, C = adding_numbers(N, S, C)
270
+
271
+
272
+
273
+ if C != []:
274
+
275
+ print(n)
276
+
277
+ for l in C:
278
+
279
+ print(*l)
280
+
281
+ break
282
+
283
+
284
+
285
+ n += 1
286
+
287
+
288
+
289
+
290
+
291
+ if __name__ == '__main__':
292
+
293
+ main()
294
+
295
+ ```