File tree 1 file changed +41
-0
lines changed
1 file changed +41
-0
lines changed Original file line number Diff line number Diff line change
1
+ import math
2
+ from datetime import datetime
3
+ from functools import cache
4
+
5
+ stones : [int ]
6
+
7
+ with open ('input.txt' ) as file :
8
+ line = file .readline ()
9
+ stones = [int (number ) for number in line .split (' ' )]
10
+
11
+ def get_number_of_digits (number ):
12
+ return int (math .log10 (number )) + 1
13
+
14
+ def split_number (number_of_digits , number ):
15
+ return number // 10 ** (number_of_digits // 2 ), number % 10 ** (number_of_digits // 2 )
16
+
17
+ @cache
18
+ def blink (stone : int ):
19
+ if stone == 0 :
20
+ return [1 ]
21
+ number_of_digits = get_number_of_digits (stone )
22
+ if number_of_digits % 2 == 0 :
23
+ left_stone , right_stone = split_number (number_of_digits , stone )
24
+ return [left_stone , right_stone ]
25
+ return [stone * 2024 ]
26
+
27
+ @cache
28
+ def calculate_number_of_stones (stone : int , remaining_blinks : int ):
29
+ if remaining_blinks == 0 :
30
+ return 1
31
+ new_stones = blink (stone )
32
+ number_of_stones = 0
33
+ for stone in new_stones :
34
+ number_of_stones += calculate_number_of_stones (stone , remaining_blinks - 1 )
35
+ return number_of_stones
36
+
37
+ number_of_stones = 0
38
+ for stone in stones :
39
+ number_of_stones += calculate_number_of_stones (stone , 75 )
40
+
41
+ print ('Final number of stones:' , number_of_stones )
You can’t perform that action at this time.
0 commit comments