★Advent of Code 202225 days solved.Source ↗
Day 25 · finished January 2023

Full of Hot Air

“Still trying to find pattern...”Git commit.
from helpers import load_data

def char_to_num(c):
	match c:
		case '-': return -1
		case '=': return -2
		case _: return int(c)

def decrement_char(old_char):
	match old_char:
		case '2': return '1'
		case '1': return '0'
		case '0': return '-'
		case '-': return '='
		case _: raise Exception('Cannot decrement')

def decrement_at_index(str_number, index):
	old_char = str_number[index]
	new_char = decrement_char(old_char)
	result = str_number[:index] + new_char + str_number[index + 1:]
	return result

def weird_num_to_decimal(str_num):
	result = 0
	for i, c in enumerate(reversed(str_num)):
		val = char_to_num(c)
		result += val * (5 ** i)
	return result
	

if __name__ == "__main__":
	data = load_data("day-25-input.txt")

	total = sum([weird_num_to_decimal(d) for d in data])
	# total = 36067808580527
	print(total)

	powers_2 =[2 * 5 ** i for i in range(30)] 
	for i in range(len(powers_2)):
		if total < sum(powers_2[:i]):
			num_digits = i
			print(f'{num_digits} digits')
			break

	# part 1 (answer: 2-212-2---=00-1--102)
	answer = '2' * num_digits
	found = False
	for i in range(num_digits):
		# at most 2 -> =, or 4 decrements
		candidate = answer
		for _ in range(4):
			candidate = decrement_at_index(candidate, i)
			test_val = weird_num_to_decimal(candidate)
			if test_val == total:
				found = True
				answer = candidate
				break
			elif test_val > total:
				answer = candidate
			else:
				break
		
		if found == True:
			break

	print(answer)
	



No writeup for this day yet.