Untitled

 avatar
unknown
python
2 months ago
1.4 kB
3
Indexable
def get_mid(update):
    return update[int((len(update)-1)/2)]

def respect_rules(rules, parsed_nums, update_num):
    for rule in rules:
        if rule[0] == update_num and rule[1] in parsed_nums:
            return False
    return True
        
def valid_update(rules, update):
    parsed_nums = []
    for update_num in update:
        index = len(parsed_nums)
        for rule in rules:
            if rule[0] == update_num and rule[1] in parsed_nums:
                index = min(parsed_nums.index(rule[1]), index)
        parsed_nums.insert(index,update_num)
    return parsed_nums

with open("day05 input.txt", 'r') as f:    
    content = f.read()

rules_string, updates_string = content.split('\n\n')

rules = list()
for rule in rules_string.split():
    rule_split = rule.split('|')
    rules.append((int(rule_split[0]), int(rule_split[1])))

updates = list()
for update in updates_string.split():
    update_split = update.split(',')
    updates.append(tuple(map(int,update_split)))

valid_update(rules, updates[5])
soma_mids_ordenados = 0
soma_mids = 0

for update in updates:
    update_list = list(update)
    validado = valid_update(rules,update_list)
    if validado != update_list:
        soma_mids_ordenados += get_mid(validado)
    else:
        soma_mids += get_mid(update)

print('parte 1:', soma_mids)
print('parte 2:',soma_mids_ordenados)
    
Editor is loading...
Leave a Comment