質問編集履歴

1

リストを使ってコードを書き直しました、コードは正常に動いていますが、初心者なので訂正すべき箇所があれば指摘していただけると今後助かります。

2020/03/14 05:43

投稿

kimtakuya_
kimtakuya_

スコア22

test CHANGED
File without changes
test CHANGED
@@ -188,11 +188,169 @@
188
188
 
189
189
 
190
190
 
191
+
192
+
193
+
194
+
195
+ ### 試したこと(ご指摘を頂いたリストを使って書き直しました)
196
+
197
+
198
+
199
+ ```ここに言語を入力
200
+
201
+ import numpy as np
202
+
203
+ import random
204
+
205
+ import matplotlib.pyplot as plt
206
+
207
+ import logging
208
+
209
+
210
+
211
+ plt.style.use('ggplot')
212
+
213
+
214
+
215
+ # ログレベルを DEBUG に変更
216
+
217
+ logging.basicConfig(level=logging.ERROR)
218
+
219
+
220
+
221
+ # 問題の設定(竿の長さとアリの数)
222
+
223
+ L = 100
224
+
225
+ num = 50
226
+
227
+
228
+
229
+
230
+
231
+ class Ant:
232
+
233
+ def __init__(self, pos, speed, name):
234
+
235
+ self.name = name
236
+
237
+ self.pos = pos
238
+
239
+ self.speed = speed
240
+
241
+ self.history = [pos]
242
+
243
+ self.fall = False
244
+
245
+
246
+
247
+ def step(self):
248
+
249
+ self.pos += self.speed
250
+
251
+ self.is_fall()
252
+
253
+ if not self.fall:
254
+
255
+ self.history.append(self.pos)
256
+
257
+ else:
258
+
259
+ self.history.append(np.nan)
260
+
261
+
262
+
263
+ def is_fall(self):
264
+
265
+ if self.pos < 0 or self.pos > L:
266
+
267
+ self.fall = True
268
+
269
+
270
+
271
+
272
+
273
+ def is_conflict(ant_a, ant_b):
274
+
275
+ if abs(ant_a.pos - ant_b.pos) <= 1:
276
+
277
+ ant_a.speed = ant_a.speed * (-1)
278
+
279
+ ant_b.speed *= ant_b.speed * (-1)
280
+
281
+ logging.info('turn!!' + ant_a.name + ',' + ant_b.name)
282
+
283
+ logging.info('turn!! {},{}'.format(str(ant_a.speed), str(ant_b.speed)))
284
+
285
+
286
+
287
+
288
+
289
+ def main():
290
+
291
+ ants = [Ant(0, 1, 'ant_1')]
292
+
293
+ for ant_num in range(2, num + 1):
294
+
295
+ _pos = random.randint(1, L)
296
+
297
+ _speed = random.choice([-1, 1])
298
+
299
+ _name = 'ant_' + str(ant_num)
300
+
301
+ ants.append(Ant(_pos, _speed, _name))
302
+
303
+
304
+
305
+ while True:
306
+
307
+ for i in range(len(ants)):
308
+
309
+ ants[i].step()
310
+
311
+
312
+
313
+ for i in ants:
314
+
315
+ for k in ants:
316
+
317
+ if i != k:
318
+
319
+ is_conflict(i, k)
320
+
321
+
322
+
323
+ if sum([ants[i].fall for i in range(len(ants))]) == len(ants):
324
+
325
+ break
326
+
327
+
328
+
191
- ### たこと
329
+ # 描画てみる
192
-
193
-
194
-
330
+
195
- ここに問題に対して試したことを記載してください。
331
+ for i in range(len(ants)):
332
+
333
+ plt.plot(ants[i].history, label=ants[i].name)
334
+
335
+
336
+
337
+ plt.legend()
338
+
339
+ plt.xlabel('time')
340
+
341
+ plt.ylabel('ant_pos')
342
+
343
+ plt.show()
344
+
345
+
346
+
347
+
348
+
349
+ # 実行
350
+
351
+ main()
352
+
353
+ ```
196
354
 
197
355
 
198
356