Add preparation for D12
This commit is contained in:
parent
66f7b2bcc0
commit
22e39e1d15
|
@ -0,0 +1,10 @@
|
|||
[package]
|
||||
name = "day12"
|
||||
version = "0.1.0"
|
||||
authors = ["kageru <kageru@encode.moe>"]
|
||||
edition = "2018"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
scan_fmt = "0.2.4"
|
|
@ -0,0 +1,4 @@
|
|||
<x=1, y=-4, z=3>
|
||||
<x=-14, y=9, z=-4>
|
||||
<x=-4, y=-6, z=7>
|
||||
<x=6, y=-9, z=-11>
|
|
@ -0,0 +1,63 @@
|
|||
#[macro_use]
|
||||
extern crate scan_fmt;
|
||||
|
||||
#[derive(Debug, PartialEq, Eq)]
|
||||
struct Moon {
|
||||
x: i32,
|
||||
y: i32,
|
||||
z: i32,
|
||||
x_vel: i32,
|
||||
y_vel: i32,
|
||||
z_vel: i32,
|
||||
}
|
||||
|
||||
fn main() {
|
||||
println!("Hello, world!");
|
||||
}
|
||||
|
||||
fn gcd(mut x: u32, mut y: u32) -> u32 {
|
||||
let mut remainder;
|
||||
while y != 0 {
|
||||
remainder = x % y;
|
||||
x = y;
|
||||
y = remainder;
|
||||
}
|
||||
x
|
||||
}
|
||||
|
||||
fn lcm(x: u32, y: u32) -> u32 {
|
||||
x * y / gcd(x, y)
|
||||
}
|
||||
|
||||
#[rustfmt::skip]
|
||||
fn parse(line: &str) -> Moon {
|
||||
let (x, y, z) = scan_fmt!(line, "<x={}, y={}, z={}>", i32, i32, i32).unwrap();
|
||||
Moon { x, y, z, x_vel: 0, y_vel: 0, z_vel: 0, }
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_gcd() {
|
||||
assert_eq!(gcd(20, 10), 10);
|
||||
assert_eq!(gcd(20, 15), 5);
|
||||
assert_eq!(gcd(15, 20), 5);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_lcm() {
|
||||
assert_eq!(lcm(20, 10), 20);
|
||||
assert_eq!(lcm(3, 7), 21);
|
||||
assert_eq!(lcm(7, 3), 21);
|
||||
assert_eq!(lcm(lcm(7, 3), 5), 105);
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[rustfmt::skip]
|
||||
fn test_parse() {
|
||||
assert_eq!(parse("<x=-14, y=9, z=-4>"), Moon { x: -14, y: 9, z: -4, x_vel: 0, y_vel: 0, z_vel: 0 });
|
||||
assert_ne!(parse("<x=-14, y=9, z=-4>"), Moon { x: 14, y: 9, z: -4, x_vel: 0, y_vel: 0, z_vel: 0 });
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user