1
+ import ISolution from "./ISolution.ts" ;
2
+
3
+ export default class S2411 implements ISolution {
4
+ firstPart ( input : string ) : ( number | string ) | Promise < number | string > {
5
+ const stones = input . split ( " " ) . map ( Number ) ;
6
+ for ( let i = 0 ; i < 25 ; i ++ ) {
7
+ for ( let elem = 0 ; elem < stones . length ; elem ++ ) {
8
+ if ( stones [ elem ] === 0 ) {
9
+ stones [ elem ] = 1 ;
10
+ continue ;
11
+ }
12
+ if ( stones [ elem ] . toString ( ) . length % 2 === 0 ) {
13
+ const half = stones [ elem ] . toString ( ) . length / 2 ;
14
+ stones . splice ( elem , 1 , Number ( stones [ elem ] . toString ( ) . substring ( 0 , half ) ) , Number ( stones [ elem ] . toString ( ) . substring ( half ) ) ) ;
15
+ elem ++ ;
16
+ continue ;
17
+ }
18
+ stones [ elem ] *= 2024 ;
19
+ }
20
+ }
21
+ return stones . length ;
22
+ }
23
+ secondPart ( input : string ) : ( number | string ) | Promise < number | string > {
24
+ const inputstones = input . split ( " " ) . map ( Number ) ;
25
+ let stones : Record < number , number > = { } ;
26
+ inputstones . forEach ( stone => {
27
+ stones [ stone ] ? stones [ stone ] ++ : stones [ stone ] = 1 ;
28
+ } ) ;
29
+ for ( let i = 0 ; i < 75 ; i ++ ) {
30
+ const newStones : Record < number , number > = { } ;
31
+ stones [ 0 ] ? newStones [ 1 ] = stones [ 0 ] : '' ;
32
+ stones [ 1 ] ? newStones [ 2024 ] = stones [ 1 ] : '' ;
33
+ for ( const key of Object . keys ( stones ) ) {
34
+ if ( Number ( key ) === 0 || Number ( key ) === 1 ) {
35
+ continue ;
36
+ }
37
+ if ( key . length % 2 === 0 ) {
38
+ const half = key . length / 2 ;
39
+ [ key . substring ( 0 , half ) , key . substring ( half ) ] . map ( Number ) . forEach ( half => {
40
+ if ( ! Object . hasOwn ( newStones , half ) ) {
41
+ newStones [ half ] = 0 ;
42
+ }
43
+ newStones [ half ] += stones [ Number ( key ) ] ;
44
+ } ) ;
45
+ continue ;
46
+ }
47
+ newStones [ Number ( key ) * 2024 ] = stones [ Number ( key ) ] ;
48
+ }
49
+ stones = newStones ;
50
+ }
51
+ return Object . entries ( stones ) . reduce ( ( acc , val ) => acc + val [ 1 ] , 0 ) ;
52
+ }
53
+
54
+ }
0 commit comments