···11+aaa: you hhh
22+you: bbb ccc
33+bbb: ddd eee
44+ccc: ddd eee fff
55+ddd: ggg
66+eee: out
77+fff: out
88+ggg: out
99+hhh: ccc fff iii
1010+iii: out
+42
day11/src/main.rs
···11+mod server;
22+use clap::Parser;
33+use server::Server;
44+55+#[derive(Parser)]
66+struct Args {
77+ #[clap(short, long)]
88+ file: String,
99+ #[clap(short, long)]
1010+ debug: bool,
1111+}
1212+1313+fn main() {
1414+ let args = Args::parse();
1515+ if args.debug {
1616+ println!("=== Debug mode enabled ===");
1717+ }
1818+1919+ let mut nodes: Vec<Server> = Vec::new();
2020+ let file_contents = std::fs::read_to_string(&args.file).expect("Failed to read file");
2121+2222+ for line in file_contents.lines() {
2323+ let tokens = line.split_whitespace().collect::<Vec<_>>();
2424+ let source = tokens[0];
2525+ let destinations = &tokens[1..];
2626+ println!("Source: {}, Destinations: {:?}", source, destinations);
2727+ let mut server = Server::new(&source[..source.len() - 1]);
2828+ let source_exists = nodes.iter().any(|s| s.label == source);
2929+ for next_label in destinations {
3030+ let server_exists = nodes.iter().any(|s| s.label == **next_label);
3131+3232+ if !server_exists {
3333+ let next_server = Server::new(next_label);
3434+ nodes.push(next_server);
3535+ }
3636+3737+ let index = nodes.iter().position(|s| s.label == **next_label).unwrap();
3838+ server.add_next(index);
3939+ }
4040+ }
4141+ println!("{:?}", nodes);
4242+}