
"""simple docstring"""





from __future__ import annotations

import pandas as pd



def 						_lowerCAmelCase				(				UpperCamelCase_  ,				UpperCamelCase_  ,				UpperCamelCase_				):
		__SCREAMING_SNAKE_CASE            = [0] * no_of_processes
		__SCREAMING_SNAKE_CASE            = [0] * no_of_processes
		# Copy the burst time into remaining_time[]
		for i in range(UpperCamelCase_				):
				__SCREAMING_SNAKE_CASE            = burst_time[i]

		__SCREAMING_SNAKE_CASE            = 0
		__SCREAMING_SNAKE_CASE            = 0
		__SCREAMING_SNAKE_CASE            = 9_9999_9999
		__SCREAMING_SNAKE_CASE            = 0
		__SCREAMING_SNAKE_CASE            = False

		# Process until all processes are completed
		while complete != no_of_processes:
				for j in range(UpperCamelCase_				):
						if arrival_time[j] <= increment_time and remaining_time[j] > 0:
								if remaining_time[j] < minm:
										__SCREAMING_SNAKE_CASE            = remaining_time[j]
										__SCREAMING_SNAKE_CASE            = j
										__SCREAMING_SNAKE_CASE            = True

				if not check:
						increment_time += 1
						continue
				remaining_time[short] -= 1

				__SCREAMING_SNAKE_CASE            = remaining_time[short]
				if minm == 0:
						__SCREAMING_SNAKE_CASE            = 9_9999_9999

				if remaining_time[short] == 0:
						complete += 1
						__SCREAMING_SNAKE_CASE            = False

						# Find finish time of current process
						__SCREAMING_SNAKE_CASE            = increment_time + 1

						# Calculate waiting time
						__SCREAMING_SNAKE_CASE            = finish_time - arrival_time[short]
						__SCREAMING_SNAKE_CASE            = finar - burst_time[short]

						if waiting_time[short] < 0:
								__SCREAMING_SNAKE_CASE            = 0

        # Increment time
				increment_time += 1
		return waiting_time



def 						_lowerCAmelCase				(				UpperCamelCase_  ,				UpperCamelCase_  ,				UpperCamelCase_				):
		__SCREAMING_SNAKE_CASE            = [0] * no_of_processes
		for i in range(UpperCamelCase_				):
				__SCREAMING_SNAKE_CASE            = burst_time[i] + waiting_time[i]
		return turn_around_time



def 						_lowerCAmelCase				(				UpperCamelCase_  ,				UpperCamelCase_  ,				UpperCamelCase_				):
		__SCREAMING_SNAKE_CASE            = 0
		__SCREAMING_SNAKE_CASE            = 0
		for i in range(UpperCamelCase_				):
				__SCREAMING_SNAKE_CASE            = total_waiting_time + waiting_time[i]
				__SCREAMING_SNAKE_CASE            = total_turn_around_time + turn_around_time[i]
		print(f"Average waiting time = {total_waiting_time / no_of_processes:.5f}"				)
		print("""Average turn around time ="""  ,				total_turn_around_time / no_of_processes				)


if __name__ == "__main__":
							print("Enter how many process you want to analyze")
							__magic_name__       =			int(input())
							__magic_name__       =			[0] * no_of_processes
							__magic_name__       =			[0] * no_of_processes
							__magic_name__       =			list(range(1, no_of_processes + 1))

							for i in range(no_of_processes):
														print("Enter the arrival time and burst time for process:--" + str(i + 1))
														__magic_name__,							__magic_name__       =			map(int, input().split())

							__magic_name__       =			calculate_waitingtime(arrival_time, burst_time, no_of_processes)

							__magic_name__       =			burst_time
							__magic_name__       =			no_of_processes
							__magic_name__       =			waiting_time
							__magic_name__       =			calculate_turnaroundtime(bt, n, wt)

							calculate_average_times(waiting_time, turn_around_time, no_of_processes)

							__magic_name__       =			pd.DataFrame(
							    list(zip(processes, burst_time, arrival_time, waiting_time, turn_around_time)),
							    columns=[
							        "Process",
							        "BurstTime",
							        "ArrivalTime",
							        "WaitingTime",
							        "TurnAroundTime",
							    ],
							)

							# Printing the dataFrame
							pd.set_option("display.max_rows", fcfs.shape[0] + 1)
							print(fcfs)






"""simple docstring"""





def 						_lowerCAmelCase				(				UpperCamelCase_				):

		if isinstance(UpperCamelCase_  ,				UpperCamelCase_				):
				raise TypeError("""'float' object cannot be interpreted as an integer"""				)
		if isinstance(UpperCamelCase_  ,				UpperCamelCase_				):
				raise TypeError("""'str' object cannot be interpreted as an integer"""				)

		if num == 0:
				return "0b0"

		__SCREAMING_SNAKE_CASE            = False

		if num < 0:
				__SCREAMING_SNAKE_CASE            = True
				__SCREAMING_SNAKE_CASE            = -num

		__SCREAMING_SNAKE_CASE            = []
		while num > 0:
				binary.insert(0  ,				num % 2				)
				num >>= 1

		if negative:
				return "-0b" + "".join(str(UpperCamelCase_				) for e in binary				)

		return "0b" + "".join(str(UpperCamelCase_				) for e in binary				)


if __name__ == "__main__":
							import doctest

							doctest.testmod()




