File tree Expand file tree Collapse file tree 5 files changed +79
-0
lines changed Expand file tree Collapse file tree 5 files changed +79
-0
lines changed Original file line number Diff line number Diff line change
1
+ 2,0,6,12,1,3
Original file line number Diff line number Diff line change
1
+ [package ]
2
+ name = " day15a"
3
+ version = " 0.1.0"
4
+ authors = [
" Linus Kardell <[email protected] >" ]
5
+ edition = " 2018"
6
+
7
+ # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
8
+
9
+ [dependencies ]
Original file line number Diff line number Diff line change
1
+ use std:: io;
2
+
3
+ fn main ( ) {
4
+ let mut input = String :: new ( ) ;
5
+ io:: stdin ( ) . read_line ( & mut input) . unwrap ( ) ;
6
+
7
+ const ITERATIONS : usize = 2020 ;
8
+
9
+ let numbers: Vec < _ > = input. trim ( ) . split ( ',' ) . map ( |x| x. parse ( ) . unwrap ( ) ) . collect ( ) ;
10
+ let ( & last_number, rest) = numbers. split_last ( ) . unwrap ( ) ;
11
+ let mut number_timestamps = vec ! [ None ; ITERATIONS ] ;
12
+ for ( & i, n) in rest. iter ( ) . zip ( 1 ..) {
13
+ number_timestamps[ i] = Some ( n) ;
14
+ }
15
+
16
+ let ( _, last_number) = ( numbers. len ( ) ..ITERATIONS ) . fold (
17
+ ( number_timestamps, last_number) ,
18
+ |( mut number_timestamps, last_number) , curr_time| {
19
+ let new_number = if let Some ( last_time) = number_timestamps[ last_number] {
20
+ curr_time - last_time
21
+ } else {
22
+ 0
23
+ } ;
24
+ number_timestamps[ last_number] = Some ( curr_time) ;
25
+ ( number_timestamps, new_number)
26
+ } ,
27
+ ) ;
28
+
29
+ println ! ( "{}" , last_number) ;
30
+ }
Original file line number Diff line number Diff line change
1
+ [package ]
2
+ name = " day15b"
3
+ version = " 0.1.0"
4
+ authors = [
" Linus Kardell <[email protected] >" ]
5
+ edition = " 2018"
6
+
7
+ # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
8
+
9
+ [dependencies ]
Original file line number Diff line number Diff line change
1
+ use std:: io;
2
+
3
+ fn main ( ) {
4
+ let mut input = String :: new ( ) ;
5
+ io:: stdin ( ) . read_line ( & mut input) . unwrap ( ) ;
6
+
7
+ const ITERATIONS : usize = 30000000 ;
8
+
9
+ let numbers: Vec < _ > = input. trim ( ) . split ( ',' ) . map ( |x| x. parse ( ) . unwrap ( ) ) . collect ( ) ;
10
+ let ( & last_number, rest) = numbers. split_last ( ) . unwrap ( ) ;
11
+ let mut number_timestamps = vec ! [ None ; ITERATIONS ] ;
12
+ for ( & i, n) in rest. iter ( ) . zip ( 1 ..) {
13
+ number_timestamps[ i] = Some ( n) ;
14
+ }
15
+
16
+ let ( _, last_number) = ( numbers. len ( ) ..ITERATIONS ) . fold (
17
+ ( number_timestamps, last_number) ,
18
+ |( mut number_timestamps, last_number) , curr_time| {
19
+ let new_number = if let Some ( last_time) = number_timestamps[ last_number] {
20
+ curr_time - last_time
21
+ } else {
22
+ 0
23
+ } ;
24
+ number_timestamps[ last_number] = Some ( curr_time) ;
25
+ ( number_timestamps, new_number)
26
+ } ,
27
+ ) ;
28
+
29
+ println ! ( "{}" , last_number) ;
30
+ }
You can’t perform that action at this time.
0 commit comments