#!/usr/bin/env python3 # -*- coding: utf-8 -*- from time import time from collections import Counter # Puzzle-Input input_stones = [112, 1110, 163902, 0, 7656027, 83039, 9, 74] def transform_stone(stone): if stone == 0: return [1] elif len(str(stone)) % 2 == 0: mid = len(str(stone)) // 2 left = int(str(stone)[:mid]) right = int(str(stone)[mid:]) return [left, right] else: return [stone * 2024] def blink(stones, times): stone_counts = Counter(stones) for i in range(1, times + 1): new_stone_counts = Counter() for stone, count in stone_counts.items(): for new_stone in transform_stone(stone): new_stone_counts[new_stone] += count stone_counts = new_stone_counts total_stones = sum(stone_counts.values()) print(f"Blinzeln {i}: {total_stones} Steine") return total_stones start = time() # Teil 1: 25 Mal blinzeln result_part1 = blink(input_stones, 25) print(f"Nach 25 Mal Blinzeln: {result_part1} Steine") # Teil 2: 75 Mal blinzeln result_part2 = blink(input_stones, 75) print(f"Nach 75 Mal Blinzeln: {result_part2} Steine") print(f'\nLaufzeit: {time()-start:.2f} s')