|
|
@@ -16,6 +16,7 @@ fn read_lines(filename: &str) -> Vec<String> {
|
|
|
|
|
|
for line in read_to_string(filename).unwrap().lines() {
|
|
|
result.push(line.to_string())
|
|
|
+ // result.push(line);
|
|
|
}
|
|
|
|
|
|
result
|
|
|
@@ -87,31 +88,27 @@ fn parse_game(line: &str) -> Game {
|
|
|
game
|
|
|
}
|
|
|
|
|
|
-// fn parse_games(lines: Vec<String>) -> Vec<Game> {
|
|
|
-// let mut games: Vec<Game> = Vec::new();
|
|
|
-// for line in lines {
|
|
|
-// let l: &str = line.as_str();
|
|
|
-// let game: Game = parse_game(l);
|
|
|
-// games.push(game);
|
|
|
-// }
|
|
|
-// games
|
|
|
-// }
|
|
|
+fn parse_games(lines: Vec<String>) -> Vec<Game> {
|
|
|
+ let mut games: Vec<Game> = Vec::new();
|
|
|
+ for line in lines {
|
|
|
+ let line: &str = line.as_str();
|
|
|
+ let game: Game = parse_game(line);
|
|
|
+ games.push(game);
|
|
|
+ }
|
|
|
+ games
|
|
|
+}
|
|
|
|
|
|
fn main() {
|
|
|
let lines: Vec<String> = read_lines("input.txt");
|
|
|
|
|
|
- // let _games: Vec<Game> = parse_games(lines);
|
|
|
-
|
|
|
- // let _max_red: i32 = 12;
|
|
|
- // let _max_green: i32 = 13;
|
|
|
- // let _max_blue: i32 = 14;
|
|
|
+ let games: Vec<Game> = parse_games(lines);
|
|
|
|
|
|
// println!("hallo world");
|
|
|
}
|
|
|
|
|
|
#[cfg(test)]
|
|
|
mod tests {
|
|
|
- use crate::{parse_game, parse_reveal, parse_reveals, Game};
|
|
|
+ use crate::{parse_game, parse_games, parse_reveal, parse_reveals, Game};
|
|
|
|
|
|
#[test]
|
|
|
fn test_parse_reveal_1() {
|
|
|
@@ -205,4 +202,24 @@ mod tests {
|
|
|
assert_eq!(game.reveals[2].blue, 0);
|
|
|
assert_eq!(game.reveals[2].green, 0);
|
|
|
}
|
|
|
+
|
|
|
+ #[test]
|
|
|
+ fn test_parse_games() {
|
|
|
+ // arrange
|
|
|
+ let mut v: Vec<String> = Vec::new();
|
|
|
+ v.push(String::from("Game 1: 1 green, 4 blue; 1 blue, 2 green, 1 red; 1 red, 1 green, 2 blue; 1 green, 1 red; 1 green; 1 green, 1 blue, 1 red"));
|
|
|
+ v.push(String::from("Game 2: 2 blue, 2 red, 6 green; 1 red, 6 green, 7 blue; 10 green, 8 blue, 1 red; 2 green, 18 blue, 2 red; 14 blue, 3 green, 1 red; 8 green, 1 red, 9 blue"));
|
|
|
+ v.push(String::from(
|
|
|
+ "Game 3: 6 green, 5 blue, 9 red; 4 blue, 1 green, 13 red; 9 green, 14 red, 1 blue",
|
|
|
+ ));
|
|
|
+
|
|
|
+ // act
|
|
|
+ let game: Vec<Game> = parse_games(v);
|
|
|
+
|
|
|
+ // assert
|
|
|
+ assert_eq!(game.len(), 3);
|
|
|
+ assert_eq!(game[0].id, 1);
|
|
|
+ assert_eq!(game[1].id, 2);
|
|
|
+ assert_eq!(game[2].id, 3);
|
|
|
+ }
|
|
|
}
|