use aoc_runner_derive::{aoc, aoc_generator}; mod bingo; mod parsing; pub use bingo::{Board, Field, Game}; pub use parsing::parse_game; #[aoc_generator(day4)] pub fn parse_input(input: &str) -> Game { parse_game(input) } #[aoc(day4, part1)] pub fn part1(input: &Game) -> usize { let game = input.clone(); *game.get_scores(Some(1)).first().unwrap() } #[aoc(day4, part2)] pub fn part2(input: &Game) -> usize { let game = input.clone(); *game.get_scores(None).last().unwrap() } #[cfg(test)] mod test { const EXAMPLE_INPUT: &str = "7,4,9,5,11,17,23,2,0,14,21,24,10,16,13,6,15,25,12,22,18,20,8,19,3,26,1 22 13 17 11 0 8 2 23 4 24 21 9 14 16 7 6 10 3 18 5 1 12 20 15 19 3 15 0 2 22 9 18 13 17 5 19 8 7 25 23 20 11 10 24 4 14 21 16 12 6 14 21 17 24 4 10 16 15 9 19 18 8 23 26 20 22 11 13 6 5 2 0 12 3 7 "; const RESULT_PART_1: usize = 4512; const RESULT_PART_2: usize = 1924; #[test] fn part1_example() { let result = super::part1(&super::parse_input(EXAMPLE_INPUT)); assert_eq!(result, RESULT_PART_1); } #[test] fn part2_example() { let result = super::part2(&super::parse_input(EXAMPLE_INPUT)); assert_eq!(result, RESULT_PART_2); } #[test] fn parse_example() { let game = super::parse_game(EXAMPLE_INPUT); assert!(!game.boards.is_empty()); assert!(!game.input_numbers.is_empty()); } }