Completed: 1, 2, 3, 4, 5.1, 6.1, 7, 8

This commit is contained in:
Crispy 2023-12-09 22:55:14 +01:00
parent 6344e9a504
commit 01116b01fe
44 changed files with 6587 additions and 0 deletions

35
day_06/Cargo.lock generated Normal file
View file

@ -0,0 +1,35 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3
[[package]]
name = "autocfg"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
[[package]]
name = "day_06"
version = "0.1.0"
dependencies = [
"num-integer",
]
[[package]]
name = "num-integer"
version = "0.1.45"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
dependencies = [
"autocfg",
"num-traits",
]
[[package]]
name = "num-traits"
version = "0.2.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c"
dependencies = [
"autocfg",
]

9
day_06/Cargo.toml Normal file
View file

@ -0,0 +1,9 @@
[package]
name = "day_06"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
num-integer = "0.1.45"

2
day_06/input.txt Normal file
View file

@ -0,0 +1,2 @@
Time: 7 15 30
Distance: 9 40 200

1
day_06/rustfmt.toml Normal file
View file

@ -0,0 +1 @@
hard_tabs = true

57
day_06/src/main.rs Normal file
View file

@ -0,0 +1,57 @@
use std::fs;
use num_integer::Roots;
fn main() {
let data = fs::read_to_string("input.txt").unwrap();
let (time_str, record_str) = data.split_once('\n').unwrap();
let times: Vec<i64> = time_str
.split_whitespace()
.skip(1)
.map(|t| t.parse().unwrap())
.collect();
let records: Vec<i64> = record_str
.split_whitespace()
.skip(1)
.map(|t| t.parse().unwrap())
.collect();
let answer = times
.iter()
.zip(records.iter())
.map(|(&time, &record)| beat(time, record))
.fold(1, |a, b| a * b);
println!("{answer}");
let big_time: i64 = time_str[7..].replace(' ', "").parse().unwrap();
let big_record: i64 = record_str[9..].trim().replace(' ', "").parse().unwrap();
/*
distance = held * (time - held)
held * (time - held) = record
held*time - held*held = record
held*time - held*held - record = 0
held*held - held*time + record = 0
*/
// let lower = ((time * time / 4) - record).sqrt() - time / 2;
// let upper = -((time * time / 4) - record).sqrt() - time / 2;
// println!("{lower} -> {upper}");
}
fn beat(time: i64, record: i64) -> i64 {
let mut variants = 0;
for t in 0..time {
let dist = t * (time - t);
if dist > record {
variants += 1;
}
}
let time = time as f64;
let record = record as f64;
let lower = ((time * time / 4.0) - record).sqrt() - time / 2.0;
let upper = -((time * time / 4.0) - record).sqrt() - time / 2.0;
println!("{lower} -> {upper}");
variants
}