@@ -46,18 +46,21 @@ pub fn solve_part1(input: &[String]) -> u32 {
4646}
4747
4848pub fn solve_part2 ( input : & [ String ] ) -> u32 {
49- let mut count: HashMap < u32 , u32 > = HashMap :: new ( ) ;
49+ input
50+ . iter ( )
51+ . map ( |line| Card :: from ( line) )
52+ . fold ( HashMap :: new ( ) , |mut count, card| {
53+ * count. entry ( card. id ) . or_insert ( 0 ) += 1 ;
5054
51- input. iter ( ) . map ( |line| Card :: from ( line) ) . for_each ( |card| {
52- * count. entry ( card. id ) . or_insert ( 0 ) += 1 ;
55+ // inspired by https://github.com/rust-tw/advent-of-code/tree/main/2023/04
56+ ( 1 ..=card. won_copies ( ) )
57+ . map ( |i| i + card. id )
58+ . for_each ( |id| * count. entry ( id) . or_insert ( 0 ) += * count. get ( & card. id ) . unwrap ( ) ) ;
5359
54- // inspired by https://github.com/rust-tw/advent-of-code/tree/main/2023/04
55- ( 1 ..=card. won_copies ( ) ) . map ( |i| i + card. id ) . for_each ( |id| {
56- * count. entry ( id) . or_insert ( 0 ) += * count. get ( & card. id ) . unwrap ( ) ;
60+ count
5761 } )
58- } ) ;
59- 60- count. values ( ) . sum ( )
62+ . values ( )
63+ . sum ( )
6164}
6265
6366#[ cfg( test) ]
0 commit comments