





from statistics import mean

import numpy as np






def 			_SCREAMING_SNAKE_CASE						(     SCREAMING_SNAKE_CASE						:list       ,       SCREAMING_SNAKE_CASE						:list       ,       SCREAMING_SNAKE_CASE						:list       ,       SCREAMING_SNAKE_CASE						:int       )     ->       list:
 __lowerCAmelCase	:			str         =  0
 # Number of processes finished
 __lowerCAmelCase	:			Optional[Any]         =  0
 # Displays the finished process.
 # If it is 0, the performance is completed if it is 1, before the performance.
 __lowerCAmelCase	:			str         =  [0] * no_of_process
 # List to include calculation results
 __lowerCAmelCase	:			Tuple         =  [0] * no_of_process

 # Sort by arrival time.
 __lowerCAmelCase	:			Tuple         =  [burst_time[i] for i in np.argsort(UpperCAmelCase_       )]
 __lowerCAmelCase	:			Union[str, Any]         =  [process_name[i] for i in np.argsort(UpperCAmelCase_       )]
 arrival_time.sort()

 while no_of_process > finished_process_count:
  __lowerCAmelCase	:			int         =  0
  while finished_process[i] == 1:
   i += 1
  if current_time < arrival_time[i]:
   __lowerCAmelCase	:			Dict         =  arrival_time[i]

  __lowerCAmelCase	:			Any         =  0
  # Index showing the location of the process being performed
  __lowerCAmelCase	:			Optional[Any]         =  0
  # Saves the current response ratio.
  __lowerCAmelCase	:			Tuple         =  0
  for i in range(0       ,       UpperCAmelCase_       ):
   if finished_process[i] == 0 and arrival_time[i] <= current_time:
    __lowerCAmelCase	:			Optional[int]         =  (burst_time[i] + (current_time - arrival_time[i])) / burst_time[
        i
    ]
   if response_ratio < temp:
    __lowerCAmelCase	:			int         =  temp
    __lowerCAmelCase	:			Dict         =  i

        # Calculate the turn around time
  __lowerCAmelCase	:			Tuple         =  current_time + burst_time[loc] - arrival_time[loc]
  current_time += burst_time[loc]
  # Indicates that the process has been performed.
  __lowerCAmelCase	:			List[Any]         =  1
  # Increase finished_process_count by 1
  finished_process_count += 1

 return turn_around_time






def 			_SCREAMING_SNAKE_CASE						(     SCREAMING_SNAKE_CASE						:list       ,       SCREAMING_SNAKE_CASE						:list       ,       SCREAMING_SNAKE_CASE						:list       ,       SCREAMING_SNAKE_CASE						:int       )     ->       list:
 __lowerCAmelCase	:			Tuple         =  [0] * no_of_process
 for i in range(0       ,       UpperCAmelCase_       ):
  __lowerCAmelCase	:			Optional[int]         =  turn_around_time[i] - burst_time[i]
 return waiting_time


if __name__ == "__main__":
      _UpperCAmelCase       =				5
      _UpperCAmelCase       =				['A', 'B', 'C', 'D', 'E']
      _UpperCAmelCase       =				[1, 2, 3, 4, 5]
      _UpperCAmelCase       =				[1, 2, 3, 4, 5]

      _UpperCAmelCase       =				calculate_turn_around_time(
          process_name, arrival_time, burst_time, no_of_process
      )
      _UpperCAmelCase       =				calculate_waiting_time(
          process_name, turn_around_time, burst_time, no_of_process
      )

      print('Process name \tArrival time \tBurst time \tTurn around time \tWaiting time')
      for i in range(0, no_of_process):
            print(
                f'''{process_name[i]}\t\t{arrival_time[i]}\t\t{burst_time[i]}\t\t'''
                f'''{turn_around_time[i]}\t\t\t{waiting_time[i]}'''
            )

      print(f'''average waiting time : {mean(waiting_time):.5f}''')
      print(f'''average turn around time : {mean(turn_around_time):.5f}''')




"""simple docstring"""







def       _lowerCamelCase				(							UpperCAmelCase_ :       int     )	-> int:






	"""simple docstring"""





	assert (
	    isinstance(UpperCAmelCase_,	UpperCAmelCase_     ) and number_of_steps > 0
	), F"""number_of_steps needs to be positive integer, your input {number_of_steps}"""
	if number_of_steps == 1:
		return 1
	A__							,							A__											=					1, 1
	for _ in range(number_of_steps - 1     ):
		A__							,							A__											=					current + previous, current
	return current


if __name__ == "__main__":
			import doctest

			doctest.testmod()




