def arrive_on_close_judge(output_list=[]): for i in range(1, len(output_list)): state_i = get_state(i, output_list) if (state_i == "ARRIVE"): j = i - 1 state_j = get_state(j, output_list) if (state_j != "ARRIVE" and state_j != "CLOSE"): return True return False
def open_and_close_judge(door_list=[]): if (get_state(0, door_list) != "OPEN"): return True for i in range(len(door_list) - 1): j = i + 1 state_i = get_state(i, door_list) state_j = get_state(j, door_list) if (state_i == state_j): return True return False
def in_and_out_on_open_judge(output_list=[]): for i in range(len(output_list)): state_i = get_state(i, output_list) if (state_i == "IN" or state_i == "OUT"): if (i == 0): return True j = i - 1 state_j = get_state(j, output_list) if (state_j != "OPEN" and state_j != "IN" and state_j != "OUT"): return True return False
def get_door_list(output_list=[]): door_list = [] for i in range(len(output_list)): state_i = get_state(i, output_list) if (state_i == "OPEN" or state_i == "CLOSE"): door_list.append(output_list[i]) return door_list
def get_arrive_list(output_list=[]): arrive_list = [] for i in range(len(output_list)): state_i = get_state(i, output_list) if (state_i == "ARRIVE"): arrive_list.append(output_list[i]) return arrive_list
def meet_floor_judge(output_list=[]): for i in range(len(output_list)): state_i = get_state(i, output_list) if (state_i == "OPEN"): std_floor = get_door_floor(i, output_list) for j in range(i + 1, len(output_list)): state_j = get_state(j, output_list) if (state_j == "CLOSE"): break for output in output_list[i + 1:j]: pos = output.index(']') send = output[pos + 1:] state, send_id, floor = get_send_info(send) if (floor != std_floor): return True return False
def open_on_arrive_judge(output_list=[]): for i in range(len(output_list)): state_i = get_state(i, output_list) if (state_i == "OPEN"): floor_i = get_door_floor(i, output_list) if (i == 0): if (floor_i != 1): return True # door can only be open at FIRST floor when not moving at all else: j = i - 1 state_j = get_state(j, output_list) if (state_j != "ARRIVE" and state_j != "CLOSE"): return True if (floor_i != 1): floor_j = get_door_floor(j, output_list) if (floor_i != floor_j): return True return False
def transfer_judge(id_send_dic=[]): for id, sub_send_list in id_send_dic.items(): if (len(sub_send_list) % 2 != 0): return True if (get_state(0, sub_send_list) != "IN"): return True for i in range(1, len(sub_send_list) - 1): if (i % 2 == 0): continue out_one = sub_send_list[i] in_two = sub_send_list[i + 1] state_one = get_state(i, sub_send_list) state_two = get_state(i + 1, sub_send_list) if (state_one != "OUT" or state_two != "IN"): return True floor_one = get_send_floor(i, sub_send_list) floor_two = get_send_floor(i + 1, sub_send_list) if (floor_one != floor_two): return True return False
def capacity_check(send_list=[], elev_type=''): if (elev_type == 'A'): in_str = "1111111" elif (elev_type == 'B'): in_str = "111111111" elif (elev_type == 'C'): in_str = "11111111" state_str = "" for send in send_list: state = get_state(0, [send]) if (state == "IN"): state_str += "1" else: state_str += "0" if (in_str in state_str): return True return False
def get_send_list(output_list=[]): send_list = [] id_send_dic = {} for i in range(len(output_list)): state_i = get_state(i, output_list) if (state_i == "IN" or state_i == "OUT"): pos = int((output_list[i]).index(']') + 1) send_list.append(output_list[i][pos:]) sep_pos_first = output_list[i].index('-') if ("--" in output_list[i]): sep_pos_last = output_list[i].rindex('-') - 1 else: sep_pos_last = output_list[i].rindex('-') id = int(output_list[i][sep_pos_first + 1:sep_pos_last]) if (id in id_send_dic): id_send_dic[id].append(output_list[i][pos:]) else: id_send_dic[id] = [output_list[i][pos:]] return send_list, id_send_dic