
"""simple docstring"""





from __future__ import annotations







def 			__a  (	__lowerCamelCase,	__lowerCamelCase						):
   assert len(__lowerCamelCase						) == len(__lowerCamelCase						)

   UpperCAmelCase_      :      Tuple      =					len(__lowerCamelCase						)
   UpperCAmelCase_      :      List[Any]      =					list(range(__lowerCamelCase						)						)
   UpperCAmelCase_      :      Optional[int]      =					[-1] * n  # who the donor has donated to
   UpperCAmelCase_      :      int      =					[-1] * n  # who the recipient has received from
   UpperCAmelCase_      :      List[str]      =					[0] * n

   while unmatched_donors:
      UpperCAmelCase_      :      Dict      =					unmatched_donors[0]
      UpperCAmelCase_      :      List[str]      =					donor_pref[donor]
      UpperCAmelCase_      :      int      =					donor_preference[num_donations[donor]]
      num_donations[donor] += 1
      UpperCAmelCase_      :      int      =					recipient_pref[recipient]
      UpperCAmelCase_      :      List[Any]      =					rec_record[recipient]

      if prev_donor != -1:
         if rec_preference.index(__lowerCamelCase						) > rec_preference.index(__lowerCamelCase						):
            UpperCAmelCase_      :      int      =					donor
            UpperCAmelCase_      :      Dict      =					recipient
            unmatched_donors.append(__lowerCamelCase						)
            unmatched_donors.remove(__lowerCamelCase						)
      else:
         UpperCAmelCase_      :      Dict      =					donor
         UpperCAmelCase_      :      List[str]      =					recipient
         unmatched_donors.remove(__lowerCamelCase						)
   return donor_record




"""simple docstring"""





from __future__ import annotations

from statistics import mean







def 			__a  (	__lowerCamelCase						):
   UpperCAmelCase_      :      Dict      =					2
   UpperCAmelCase_      :      Any      =					list(__lowerCamelCase						)
   UpperCAmelCase_      :      List[Any]      =					[0] * len(__lowerCamelCase						)
   UpperCAmelCase_      :      str      =					0
   while True:
      UpperCAmelCase_      :      int      =					True
      for i, burst_time in enumerate(__lowerCamelCase						):
         if rem_burst_times[i] > 0:
            UpperCAmelCase_      :      List[Any]      =					False
            if rem_burst_times[i] > quantum:
               t += quantum
               rem_burst_times[i] -= quantum
            else:
               t += rem_burst_times[i]
               UpperCAmelCase_      :      Optional[int]      =					t - burst_time
               UpperCAmelCase_      :      Union[str, Any]      =					0
      if done is True:
         return waiting_times







def 			__a  (	__lowerCamelCase,	__lowerCamelCase						):
   return [burst + waiting for burst, waiting in zip(__lowerCamelCase,	__lowerCamelCase						)]


if __name__ == "__main__":
    _a	 =							[3, 5, 7]
    _a	 =							calculate_waiting_times(burst_times)
    _a	 =							calculate_turn_around_times(burst_times, waiting_times)
    print('Process ID \tBurst Time \tWaiting Time \tTurnaround Time')
    for i, burst_time in enumerate(burst_times):
        print(
            f"""  {i + 1}\t\t  {burst_time}\t\t  {waiting_times[i]}\t\t  """
            f"""{turn_around_times[i]}"""
        )
    print(f"""\nAverage waiting time = {mean(waiting_times):.5f}""")
    print(f"""Average turn around time = {mean(turn_around_times):.5f}""")


