fork download
  1. # your code goes here
  2. import numpy as np
  3.  
  4. def simulate_trains(speed1, speed2, departure_interval, time_step=0.1):
  5. """
  6. Симулює рух поїздів та шукає час їх зустрічі
  7.  
  8. Parameters:
  9. speed1 - швидкість електропоїздів (км/год)
  10. speed2 - швидкість зустрічного поїзда (км/год)
  11. departure_interval - інтервал між відправленням електропоїздів (хв)
  12. time_step - крок симуляції (хв)
  13. """
  14. # Конвертуємо швидкості в км/хв
  15. speed1 = speed1 / 60 # швидкість електропоїздів
  16. speed2 = speed2 / 60 # швидкість зустрічного поїзда
  17.  
  18. # Початкові позиції поїздів (км)
  19. train1_pos = 0 # перший електропоїзд
  20. train2_pos = 0 # другий електропоїзд (ще не вийшов)
  21. opposite_pos = 100 # зустрічний поїзд (починаємо з деякої відстані)
  22.  
  23. # Час відправлення другого поїзда
  24. train2_departure = departure_interval
  25.  
  26. # Змінні для зберігання часу зустрічей
  27. meeting1_time = None
  28. meeting2_time = None
  29.  
  30. # Симуляція руху
  31. time = 0
  32. while time < 120: # симулюємо до 2 годин
  33. # Оновлюємо позиції
  34. train1_pos = speed1 * time
  35. opposite_pos = 100 - speed2 * time
  36.  
  37. # Перевіряємо першу зустріч
  38. if meeting1_time is None and abs(train1_pos - opposite_pos) < 0.1:
  39. meeting1_time = time
  40.  
  41. # Оновлюємо позицію другого поїзда після його відправлення
  42. if time >= train2_departure:
  43. train2_pos = speed1 * (time - train2_departure)
  44.  
  45. # Перевіряємо другу зустріч
  46. if meeting1_time is not None and meeting2_time is None and abs(train2_pos - opposite_pos) < 0.1:
  47. meeting2_time = time
  48. break
  49.  
  50. time += time_step
  51.  
  52. return meeting1_time, meeting2_time
  53.  
  54. # Перевіряємо різні швидкості зустрічного поїзда
  55. test_speeds = np.arange(50, 140, 1)
  56. for speed2 in test_speeds:
  57. meeting1, meeting2 = simulate_trains(
  58. speed1=50, # швидкість електропоїздів
  59. speed2=speed2, # тестована швидкість зустрічного
  60. departure_interval=12 # інтервал між електропоїздами
  61. )
  62.  
  63. if meeting1 is not None and meeting2 is not None:
  64. time_diff = meeting2 - meeting1
  65. if abs(time_diff - 5) < 0.1: # перевіряємо чи різниця близька до 5 хвилин
  66. print(f"При швидкості зустрічного поїзда {speed2} км/год:")
  67. print(f"Час першої зустрічі: {meeting1:.1f} хв")
  68. print(f"Час другої зустрічі: {meeting2:.1f} хв")
  69. print(f"Різниця часу: {time_diff:.1f} хв")
  70. break
Success #stdin #stdout 1.02s 41612KB
stdin
Standard input is empty
stdout
При швидкості зустрічного поїзда 70 км/год:
Час першої зустрічі: 50.0 хв
Час другої зустрічі: 55.0 хв
Різниця часу: 5.0 хв