solution: day 1, primitive

This commit is contained in:
YK 2024-11-19 19:31:23 +03:00
parent 6368f3a66e
commit 3070407092
7 changed files with 145 additions and 9 deletions

1
in/1.txt Normal file
View File

@ -0,0 +1 @@
L1, L3, L5, L3, R1, L4, L5, R1, R3, L5, R1, L3, L2, L3, R2, R2, L3, L3, R1, L2, R1, L3, L2, R4, R2, L5, R4, L5, R4, L2, R3, L2, R4, R1, L5, L4, R1, L2, R3, R1, R2, L4, R1, L2, R3, L2, L3, R5, L192, R4, L5, R4, L1, R4, L4, R2, L5, R45, L2, L5, R4, R5, L3, R5, R77, R2, R5, L5, R1, R4, L4, L4, R2, L4, L1, R191, R1, L1, L2, L2, L4, L3, R1, L3, R1, R5, R3, L1, L4, L2, L3, L1, L1, R5, L4, R1, L3, R1, L2, R1, R4, R5, L4, L2, R4, R5, L1, L2, R3, L4, R2, R2, R3, L2, L3, L5, R3, R1, L4, L3, R4, R2, R2, R2, R1, L4, R4, R1, R2, R1, L2, L2, R4, L1, L2, R3, L3, L5, L4, R4, L3, L1, L5, L3, L5, R5, L5, L4, L2, R1, L2, L4, L2, L4, L1, R4, R4, R5, R1, L4, R2, L4, L2, L4, R2, L4, L1, L2, R1, R4, R3, R2, R2, R5, L1, L2

View File

@ -1 +1,24 @@
pub mod d1;
// pub mod d2;
// pub mod d3;
// pub mod d4;
// pub mod d5;
// pub mod d6;
// pub mod d7;
// pub mod d8;
// pub mod d9;
// pub mod d10;
// pub mod d11;
// pub mod d12;
// pub mod d13;
// pub mod d14;
// pub mod d15;
// pub mod d16;
// pub mod d17;
// pub mod d18;
// pub mod d19;
// pub mod d20;
// pub mod d21;
// pub mod d22;
// pub mod d23;
// pub mod d24;

View File

@ -1,18 +1,72 @@
use crate::prelude::*;
pub type I = String;
pub type O = i64;
pub type I = Vec<u16>;
pub type O = u64;
fn solve (data: I) -> O {
0
fn _parse (data: &str) -> I {
data.split(", ").map(|e| {
let dir = e.chars().next().unwrap();
let turn: u16 = if dir == 'L' { 1 << 15 } else { 0 };
let distance = &e[1..].trim().parse().unwrap();
distance | turn
}).collect_vec()
}
fn silver (data: I) -> O {
0
fn _silver (data: &I) -> O {
let mut d = 0;
let mut x: i32 = 0;
let mut y: i32 = 0;
for i in data {
let direction = i & (1 << 15);
let steps = (i & !(1 << 15)) as i32;
d = (d + if direction > 0 { 3 } else { 1 }) % 4;
match d {
0 => y -= steps,
1 => x += steps,
2 => y += steps,
3 => x -= steps,
_ => panic!()
}
}
(x.abs() + y.abs()) as u64
}
fn gold (data: I) -> O {
0
fn _gold (data: &I) -> O {
let mut d = 0;
let mut x: i32 = 0;
let mut y: i32 = 0;
let mut s = S::new();
for i in data {
let direction = i & (1 << 15);
let steps = (i & !(1 << 15)) as i32;
d = (d + if direction > 0 { 3 } else { 1 }) % 4;
for _ in 0..steps {
match d {
0 => y -= 1,
1 => x += 1,
2 => y += 1,
3 => x -= 1,
_ => unreachable!()
}
if !s.insert((x, y)) {
return (x.abs() + y.abs()) as u64
}
}
}
(x.abs() + y.abs()) as u64
}
#[cfg(test)]
@ -20,16 +74,30 @@ mod test {
use super::*;
fn read () -> I {
Default::default()
let file = inc!(1);
_parse(file)
}
#[test]
fn example () {
let data = _parse("R8, R4, R4, R8");
assert_eq!(_gold(&data), 4)
}
#[test]
fn silver () {
let data = read();
let ans = _silver(&data);
assert_eq!(ans, 299)
}
#[test]
fn gold () {
let data = read();
let ans = _gold(&data);
assert_eq!(ans, 181)
}
}

35
src/days/template.rs Normal file
View File

@ -0,0 +1,35 @@
use crate::prelude::*;
pub type I = String;
pub type O = i64;
fn solve (data: I) -> O {
0
}
fn silver (data: I) -> O {
0
}
fn gold (data: I) -> O {
0
}
#[cfg(test)]
mod test {
use super::*;
fn read () -> I {
Default::default()
}
#[test]
fn silver () {
}
#[test]
fn gold () {
}
}

View File

@ -1,3 +1,6 @@
#![feature(let_chains)]
#![feature(decl_macro)]
pub mod days;
pub mod utils;
pub mod prelude;

View File

@ -1,3 +1,4 @@
pub use crate::utils::*;
pub use anyhow::Error;
pub use itertools::Itertools;
pub use std::collections::{ HashMap as M, HashSet as S };

View File

@ -0,0 +1,5 @@
pub macro inc {
($d: literal) => {
include_str!(concat!(env!("CARGO_MANIFEST_DIR"), "/in/", $d, ".txt"))
}
}