Compare commits
No commits in common. "b90d770c8aee4ec108345d683f315dcb93b83987" and "f6ebab690baf5037bcce164b66d8455d384bb0be" have entirely different histories.
b90d770c8a
...
f6ebab690b
21 changed files with 7 additions and 478 deletions
|
@ -1,12 +0,0 @@
|
||||||
............
|
|
||||||
........0...
|
|
||||||
.....0......
|
|
||||||
.......0....
|
|
||||||
....0.......
|
|
||||||
......A.....
|
|
||||||
............
|
|
||||||
............
|
|
||||||
........A...
|
|
||||||
.........A..
|
|
||||||
............
|
|
||||||
............
|
|
50
res/08/input
50
res/08/input
|
@ -1,50 +0,0 @@
|
||||||
.E..........m..0N.........f.......................
|
|
||||||
........N........P0...............................
|
|
||||||
.......j..................................F.......
|
|
||||||
........1j............P........................C..
|
|
||||||
...........................3..K......f..........E.
|
|
||||||
...........V...y...0.....................F........
|
|
||||||
1.......j.....P....y.N.......................F....
|
|
||||||
....................m...................C.........
|
|
||||||
..L......P....p..................w.m..............
|
|
||||||
............E......p..AU........8......f..........
|
|
||||||
..............C...............w....d..............
|
|
||||||
j1...............E..........3.........f........w..
|
|
||||||
.................p...A..........3.................
|
|
||||||
.................3..p........KU...w..r..F.........
|
|
||||||
7.........y........8.......................r......
|
|
||||||
........y..u......K...............................
|
|
||||||
...1..................8....C...K..................
|
|
||||||
...........h.......................6..............
|
|
||||||
......................U.........A.r..t........6...
|
|
||||||
...........5.........8..c.........................
|
|
||||||
.................U................t...............
|
|
||||||
.....L...O...................t.............d......
|
|
||||||
.........7........................................
|
|
||||||
......L..H...c.....9....t.................6.......
|
|
||||||
...........................c.M..................4.
|
|
||||||
.....R..7...O.....................................
|
|
||||||
.......................9......................d...
|
|
||||||
..................................................
|
|
||||||
.........L..9...R..........................6c.....
|
|
||||||
..M.....T.5.................................d.....
|
|
||||||
.......5OR...................T....................
|
|
||||||
.......D......o.........v...................r.....
|
|
||||||
...u....o.........5...............................
|
|
||||||
.......WR.....Y...........................e...4...
|
|
||||||
T............O......M..................4..a.......
|
|
||||||
.Y...................M............................
|
|
||||||
........W..D...............oh............e........
|
|
||||||
.......7......Do...................A...e.......4..
|
|
||||||
.W...Y..D........................h...v..........e.
|
|
||||||
..........V.....9.l.......h.......a.........n..v..
|
|
||||||
.......................H.....a2...................
|
|
||||||
..................................................
|
|
||||||
...V............Y....J..H2................vn......
|
|
||||||
..............................H2.................n
|
|
||||||
................V..........l...........k..........
|
|
||||||
.T..u........................J...ak...............
|
|
||||||
..................J.....l.........................
|
|
||||||
.................l................................
|
|
||||||
......u.........................................n.
|
|
||||||
......................J..k............2...........
|
|
106
src/days/d08.rs
106
src/days/d08.rs
|
@ -1,106 +0,0 @@
|
||||||
use std::collections::{HashMap, HashSet};
|
|
||||||
|
|
||||||
use std::fs;
|
|
||||||
|
|
||||||
pub fn solve() {
|
|
||||||
let path = "res/08/input";
|
|
||||||
|
|
||||||
let contents = fs::read_to_string(path).expect("Something went wrong reading the file");
|
|
||||||
|
|
||||||
let mut antennas: HashMap<char, Vec<(isize, isize)>> = HashMap::new();
|
|
||||||
|
|
||||||
let rows = contents.lines().count();
|
|
||||||
let cols = contents.lines().next().unwrap().chars().count();
|
|
||||||
|
|
||||||
for (i, line) in contents.lines().enumerate() {
|
|
||||||
for (j, c) in line.chars().enumerate() {
|
|
||||||
match c {
|
|
||||||
'.' => {}
|
|
||||||
_ => {
|
|
||||||
let entry = antennas.entry(c).or_insert(Vec::new());
|
|
||||||
entry.push((i as isize, j as isize));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let mut antinodes: HashSet<(isize, isize)> = HashSet::new();
|
|
||||||
|
|
||||||
antennas.iter().for_each(|(_, v)| {
|
|
||||||
v.iter().enumerate().for_each(|(i, (x1, y1))| {
|
|
||||||
v.iter().skip(i + 1).for_each(|(x2, y2)| {
|
|
||||||
if x1 == x2 && y1 == y2 {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
let (a_x1, a_y1) = (x1 + (x1 - x2), y1 + (y1 - y2));
|
|
||||||
let (a_x2, a_y2) = (x2 + (x2 - x1), y2 + (y2 - y1));
|
|
||||||
|
|
||||||
if a_x1 >= 0 && a_y1 >= 0 && a_x1 < rows as isize && a_y1 < cols as isize {
|
|
||||||
antinodes.insert((a_x1, a_y1));
|
|
||||||
}
|
|
||||||
if a_x2 >= 0 && a_y2 >= 0 && a_x2 < rows as isize && a_y2 < cols as isize {
|
|
||||||
antinodes.insert((a_x2, a_y2));
|
|
||||||
}
|
|
||||||
})
|
|
||||||
})
|
|
||||||
});
|
|
||||||
|
|
||||||
let result = antinodes.len();
|
|
||||||
|
|
||||||
println!("Result 1: {}", result);
|
|
||||||
|
|
||||||
let mut antinodes: HashSet<(isize, isize)> = HashSet::new();
|
|
||||||
|
|
||||||
antennas.iter().for_each(|(_, v)| {
|
|
||||||
v.iter().enumerate().for_each(|(i, (x1, y1))| {
|
|
||||||
v.iter().skip(i + 1).for_each(|(x2, y2)| {
|
|
||||||
if x1 == x2 && y1 == y2 {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
let ax1_diff = x1 - x2;
|
|
||||||
let ay1_diff = y1 - y2;
|
|
||||||
let a1_gcd = gcd(ax1_diff, ay1_diff);
|
|
||||||
|
|
||||||
let mut cnt = 0;
|
|
||||||
loop {
|
|
||||||
let (ax, ay) = (x1 + ax1_diff * cnt / a1_gcd, y1 + ay1_diff * cnt / a1_gcd);
|
|
||||||
if ax < 0 || ay < 0 || ax >= rows as isize || ay >= cols as isize {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
antinodes.insert((ax, ay));
|
|
||||||
cnt += 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
let ax2_diff = x2 - x1;
|
|
||||||
let ay2_diff = y2 - y1;
|
|
||||||
let a2_gcd = gcd(ax2_diff, ay2_diff);
|
|
||||||
|
|
||||||
cnt = 0;
|
|
||||||
loop {
|
|
||||||
let (ax, ay) = (x2 + ax2_diff * cnt / a2_gcd, y2 + ay2_diff * cnt / a2_gcd);
|
|
||||||
if ax < 0 || ay < 0 || ax >= rows as isize || ay >= cols as isize {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
antinodes.insert((ax, ay));
|
|
||||||
cnt += 1;
|
|
||||||
}
|
|
||||||
})
|
|
||||||
})
|
|
||||||
});
|
|
||||||
|
|
||||||
let result = antinodes.len();
|
|
||||||
|
|
||||||
println!("Result 2: {}", result);
|
|
||||||
}
|
|
||||||
|
|
||||||
fn gcd(mut a: isize, mut b: isize) -> isize {
|
|
||||||
a = a.abs();
|
|
||||||
b = b.abs();
|
|
||||||
while b != 0 {
|
|
||||||
let temp = b;
|
|
||||||
b = a % b;
|
|
||||||
a = temp;
|
|
||||||
}
|
|
||||||
a
|
|
||||||
}
|
|
|
@ -1,16 +0,0 @@
|
||||||
use std::fs;
|
|
||||||
|
|
||||||
pub fn solve() {
|
|
||||||
let path = "res/09/input";
|
|
||||||
|
|
||||||
#[allow(unused)]
|
|
||||||
let contents = fs::read_to_string(path).expect("Something went wrong reading the file");
|
|
||||||
|
|
||||||
let result: usize = 0;
|
|
||||||
|
|
||||||
println!("Result 1: {}", result);
|
|
||||||
|
|
||||||
let result: usize = 0;
|
|
||||||
|
|
||||||
println!("Result 2: {}", result);
|
|
||||||
}
|
|
|
@ -1,16 +0,0 @@
|
||||||
use std::fs;
|
|
||||||
|
|
||||||
pub fn solve() {
|
|
||||||
let path = "res/10/input";
|
|
||||||
|
|
||||||
#[allow(unused)]
|
|
||||||
let contents = fs::read_to_string(path).expect("Something went wrong reading the file");
|
|
||||||
|
|
||||||
let result: usize = 0;
|
|
||||||
|
|
||||||
println!("Result 1: {}", result);
|
|
||||||
|
|
||||||
let result: usize = 0;
|
|
||||||
|
|
||||||
println!("Result 2: {}", result);
|
|
||||||
}
|
|
|
@ -1,16 +0,0 @@
|
||||||
use std::fs;
|
|
||||||
|
|
||||||
pub fn solve() {
|
|
||||||
let path = "res/11/input";
|
|
||||||
|
|
||||||
#[allow(unused)]
|
|
||||||
let contents = fs::read_to_string(path).expect("Something went wrong reading the file");
|
|
||||||
|
|
||||||
let result: usize = 0;
|
|
||||||
|
|
||||||
println!("Result 1: {}", result);
|
|
||||||
|
|
||||||
let result: usize = 0;
|
|
||||||
|
|
||||||
println!("Result 2: {}", result);
|
|
||||||
}
|
|
|
@ -1,16 +0,0 @@
|
||||||
use std::fs;
|
|
||||||
|
|
||||||
pub fn solve() {
|
|
||||||
let path = "res/12/input";
|
|
||||||
|
|
||||||
#[allow(unused)]
|
|
||||||
let contents = fs::read_to_string(path).expect("Something went wrong reading the file");
|
|
||||||
|
|
||||||
let result: usize = 0;
|
|
||||||
|
|
||||||
println!("Result 1: {}", result);
|
|
||||||
|
|
||||||
let result: usize = 0;
|
|
||||||
|
|
||||||
println!("Result 2: {}", result);
|
|
||||||
}
|
|
|
@ -1,16 +0,0 @@
|
||||||
use std::fs;
|
|
||||||
|
|
||||||
pub fn solve() {
|
|
||||||
let path = "res/13/input";
|
|
||||||
|
|
||||||
#[allow(unused)]
|
|
||||||
let contents = fs::read_to_string(path).expect("Something went wrong reading the file");
|
|
||||||
|
|
||||||
let result: usize = 0;
|
|
||||||
|
|
||||||
println!("Result 1: {}", result);
|
|
||||||
|
|
||||||
let result: usize = 0;
|
|
||||||
|
|
||||||
println!("Result 2: {}", result);
|
|
||||||
}
|
|
|
@ -1,16 +0,0 @@
|
||||||
use std::fs;
|
|
||||||
|
|
||||||
pub fn solve() {
|
|
||||||
let path = "res/14/input";
|
|
||||||
|
|
||||||
#[allow(unused)]
|
|
||||||
let contents = fs::read_to_string(path).expect("Something went wrong reading the file");
|
|
||||||
|
|
||||||
let result: usize = 0;
|
|
||||||
|
|
||||||
println!("Result 1: {}", result);
|
|
||||||
|
|
||||||
let result: usize = 0;
|
|
||||||
|
|
||||||
println!("Result 2: {}", result);
|
|
||||||
}
|
|
|
@ -1,16 +0,0 @@
|
||||||
use std::fs;
|
|
||||||
|
|
||||||
pub fn solve() {
|
|
||||||
let path = "res/15/input";
|
|
||||||
|
|
||||||
#[allow(unused)]
|
|
||||||
let contents = fs::read_to_string(path).expect("Something went wrong reading the file");
|
|
||||||
|
|
||||||
let result: usize = 0;
|
|
||||||
|
|
||||||
println!("Result 1: {}", result);
|
|
||||||
|
|
||||||
let result: usize = 0;
|
|
||||||
|
|
||||||
println!("Result 2: {}", result);
|
|
||||||
}
|
|
|
@ -1,16 +0,0 @@
|
||||||
use std::fs;
|
|
||||||
|
|
||||||
pub fn solve() {
|
|
||||||
let path = "res/16/input";
|
|
||||||
|
|
||||||
#[allow(unused)]
|
|
||||||
let contents = fs::read_to_string(path).expect("Something went wrong reading the file");
|
|
||||||
|
|
||||||
let result: usize = 0;
|
|
||||||
|
|
||||||
println!("Result 1: {}", result);
|
|
||||||
|
|
||||||
let result: usize = 0;
|
|
||||||
|
|
||||||
println!("Result 2: {}", result);
|
|
||||||
}
|
|
|
@ -1,16 +0,0 @@
|
||||||
use std::fs;
|
|
||||||
|
|
||||||
pub fn solve() {
|
|
||||||
let path = "res/17/input";
|
|
||||||
|
|
||||||
#[allow(unused)]
|
|
||||||
let contents = fs::read_to_string(path).expect("Something went wrong reading the file");
|
|
||||||
|
|
||||||
let result: usize = 0;
|
|
||||||
|
|
||||||
println!("Result 1: {}", result);
|
|
||||||
|
|
||||||
let result: usize = 0;
|
|
||||||
|
|
||||||
println!("Result 2: {}", result);
|
|
||||||
}
|
|
|
@ -1,16 +0,0 @@
|
||||||
use std::fs;
|
|
||||||
|
|
||||||
pub fn solve() {
|
|
||||||
let path = "res/18/input";
|
|
||||||
|
|
||||||
#[allow(unused)]
|
|
||||||
let contents = fs::read_to_string(path).expect("Something went wrong reading the file");
|
|
||||||
|
|
||||||
let result: usize = 0;
|
|
||||||
|
|
||||||
println!("Result 1: {}", result);
|
|
||||||
|
|
||||||
let result: usize = 0;
|
|
||||||
|
|
||||||
println!("Result 2: {}", result);
|
|
||||||
}
|
|
|
@ -1,16 +0,0 @@
|
||||||
use std::fs;
|
|
||||||
|
|
||||||
pub fn solve() {
|
|
||||||
let path = "res/19/input";
|
|
||||||
|
|
||||||
#[allow(unused)]
|
|
||||||
let contents = fs::read_to_string(path).expect("Something went wrong reading the file");
|
|
||||||
|
|
||||||
let result: usize = 0;
|
|
||||||
|
|
||||||
println!("Result 1: {}", result);
|
|
||||||
|
|
||||||
let result: usize = 0;
|
|
||||||
|
|
||||||
println!("Result 2: {}", result);
|
|
||||||
}
|
|
|
@ -1,16 +0,0 @@
|
||||||
use std::fs;
|
|
||||||
|
|
||||||
pub fn solve() {
|
|
||||||
let path = "res/20/input";
|
|
||||||
|
|
||||||
#[allow(unused)]
|
|
||||||
let contents = fs::read_to_string(path).expect("Something went wrong reading the file");
|
|
||||||
|
|
||||||
let result: usize = 0;
|
|
||||||
|
|
||||||
println!("Result 1: {}", result);
|
|
||||||
|
|
||||||
let result: usize = 0;
|
|
||||||
|
|
||||||
println!("Result 2: {}", result);
|
|
||||||
}
|
|
|
@ -1,16 +0,0 @@
|
||||||
use std::fs;
|
|
||||||
|
|
||||||
pub fn solve() {
|
|
||||||
let path = "res/21/input";
|
|
||||||
|
|
||||||
#[allow(unused)]
|
|
||||||
let contents = fs::read_to_string(path).expect("Something went wrong reading the file");
|
|
||||||
|
|
||||||
let result: usize = 0;
|
|
||||||
|
|
||||||
println!("Result 1: {}", result);
|
|
||||||
|
|
||||||
let result: usize = 0;
|
|
||||||
|
|
||||||
println!("Result 2: {}", result);
|
|
||||||
}
|
|
|
@ -1,16 +0,0 @@
|
||||||
use std::fs;
|
|
||||||
|
|
||||||
pub fn solve() {
|
|
||||||
let path = "res/22/input";
|
|
||||||
|
|
||||||
#[allow(unused)]
|
|
||||||
let contents = fs::read_to_string(path).expect("Something went wrong reading the file");
|
|
||||||
|
|
||||||
let result: usize = 0;
|
|
||||||
|
|
||||||
println!("Result 1: {}", result);
|
|
||||||
|
|
||||||
let result: usize = 0;
|
|
||||||
|
|
||||||
println!("Result 2: {}", result);
|
|
||||||
}
|
|
|
@ -1,16 +0,0 @@
|
||||||
use std::fs;
|
|
||||||
|
|
||||||
pub fn solve() {
|
|
||||||
let path = "res/23/input";
|
|
||||||
|
|
||||||
#[allow(unused)]
|
|
||||||
let contents = fs::read_to_string(path).expect("Something went wrong reading the file");
|
|
||||||
|
|
||||||
let result: usize = 0;
|
|
||||||
|
|
||||||
println!("Result 1: {}", result);
|
|
||||||
|
|
||||||
let result: usize = 0;
|
|
||||||
|
|
||||||
println!("Result 2: {}", result);
|
|
||||||
}
|
|
|
@ -1,16 +0,0 @@
|
||||||
use std::fs;
|
|
||||||
|
|
||||||
pub fn solve() {
|
|
||||||
let path = "res/24/input";
|
|
||||||
|
|
||||||
#[allow(unused)]
|
|
||||||
let contents = fs::read_to_string(path).expect("Something went wrong reading the file");
|
|
||||||
|
|
||||||
let result: usize = 0;
|
|
||||||
|
|
||||||
println!("Result 1: {}", result);
|
|
||||||
|
|
||||||
let result: usize = 0;
|
|
||||||
|
|
||||||
println!("Result 2: {}", result);
|
|
||||||
}
|
|
|
@ -1,16 +0,0 @@
|
||||||
use std::fs;
|
|
||||||
|
|
||||||
pub fn solve() {
|
|
||||||
let path = "res/25/input";
|
|
||||||
|
|
||||||
#[allow(unused)]
|
|
||||||
let contents = fs::read_to_string(path).expect("Something went wrong reading the file");
|
|
||||||
|
|
||||||
let result: usize = 0;
|
|
||||||
|
|
||||||
println!("Result 1: {}", result);
|
|
||||||
|
|
||||||
let result: usize = 0;
|
|
||||||
|
|
||||||
println!("Result 2: {}", result);
|
|
||||||
}
|
|
45
src/main.rs
45
src/main.rs
|
@ -4,45 +4,12 @@ extern crate scan_fmt;
|
||||||
use std::time::Instant;
|
use std::time::Instant;
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
if std::env::args().len() > 1 {
|
//days::d07::solve()
|
||||||
if let Some(day) = std::env::args().nth(1) {
|
_all_days()
|
||||||
match day.as_str() {
|
|
||||||
"all" => all_days(),
|
|
||||||
"1" => days::d01::solve(),
|
|
||||||
"2" => days::d02::solve(),
|
|
||||||
"3" => days::d03::solve(),
|
|
||||||
"4" => days::d04::solve(),
|
|
||||||
"5" => days::d05::solve(),
|
|
||||||
"6" => days::d06::solve(),
|
|
||||||
"7" => days::d07::solve(),
|
|
||||||
"8" => days::d08::solve(),
|
|
||||||
"9" => days::d09::solve(),
|
|
||||||
"10" => days::d10::solve(),
|
|
||||||
"11" => days::d11::solve(),
|
|
||||||
"12" => days::d12::solve(),
|
|
||||||
"13" => days::d13::solve(),
|
|
||||||
"14" => days::d14::solve(),
|
|
||||||
"15" => days::d15::solve(),
|
|
||||||
"16" => days::d16::solve(),
|
|
||||||
"17" => days::d17::solve(),
|
|
||||||
"18" => days::d18::solve(),
|
|
||||||
"19" => days::d19::solve(),
|
|
||||||
"20" => days::d20::solve(),
|
|
||||||
"21" => days::d21::solve(),
|
|
||||||
"22" => days::d22::solve(),
|
|
||||||
"23" => days::d23::solve(),
|
|
||||||
"24" => days::d24::solve(),
|
|
||||||
"25" => days::d25::solve(),
|
|
||||||
_ => println!("Day not implemented"),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
all_days();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[allow(unused)]
|
#[allow(unreachable_code, unused)]
|
||||||
fn all_days() {
|
fn _all_days() {
|
||||||
let start = Instant::now();
|
let start = Instant::now();
|
||||||
let mut time = start.clone();
|
let mut time = start.clone();
|
||||||
|
|
||||||
|
@ -74,6 +41,7 @@ fn all_days() {
|
||||||
days::d07::solve();
|
days::d07::solve();
|
||||||
time = _print_elapsed(time);
|
time = _print_elapsed(time);
|
||||||
|
|
||||||
|
/*
|
||||||
println!("\nDay 8");
|
println!("\nDay 8");
|
||||||
days::d08::solve();
|
days::d08::solve();
|
||||||
time = _print_elapsed(time);
|
time = _print_elapsed(time);
|
||||||
|
@ -130,6 +98,7 @@ fn all_days() {
|
||||||
days::d21::solve();
|
days::d21::solve();
|
||||||
time = _print_elapsed(time);
|
time = _print_elapsed(time);
|
||||||
|
|
||||||
|
|
||||||
println!("\nDay 22");
|
println!("\nDay 22");
|
||||||
days::d22::solve();
|
days::d22::solve();
|
||||||
time = _print_elapsed(time);
|
time = _print_elapsed(time);
|
||||||
|
@ -144,7 +113,7 @@ fn all_days() {
|
||||||
|
|
||||||
println!("\nDay 25");
|
println!("\nDay 25");
|
||||||
days::d25::solve();
|
days::d25::solve();
|
||||||
_print_elapsed(time);
|
_print_elapsed(time);*/
|
||||||
|
|
||||||
println!("\nTotal elapsed: {}ms", start.elapsed().as_millis())
|
println!("\nTotal elapsed: {}ms", start.elapsed().as_millis())
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue