Completed: 1, 2, 3, 4, 5.1, 6.1, 7, 8
This commit is contained in:
parent
6344e9a504
commit
01116b01fe
44 changed files with 6587 additions and 0 deletions
35
day_06/Cargo.lock
generated
Normal file
35
day_06/Cargo.lock
generated
Normal 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
9
day_06/Cargo.toml
Normal 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
2
day_06/input.txt
Normal file
|
@ -0,0 +1,2 @@
|
|||
Time: 7 15 30
|
||||
Distance: 9 40 200
|
1
day_06/rustfmt.toml
Normal file
1
day_06/rustfmt.toml
Normal file
|
@ -0,0 +1 @@
|
|||
hard_tabs = true
|
57
day_06/src/main.rs
Normal file
57
day_06/src/main.rs
Normal 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
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue