aoc6
This commit is contained in:
parent
00f434a9c1
commit
eb4d08968b
@ -25,6 +25,10 @@ harness = false
|
|||||||
name = "bench_aoc_5"
|
name = "bench_aoc_5"
|
||||||
harness = false
|
harness = false
|
||||||
|
|
||||||
|
[[bench]]
|
||||||
|
name = "bench_aoc_6"
|
||||||
|
harness = false
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
[profile.bench]
|
[profile.bench]
|
||||||
opt-level = 3
|
opt-level = 3
|
||||||
|
|||||||
22
benches/bench_aoc_6.rs
Normal file
22
benches/bench_aoc_6.rs
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
use std::hint::black_box;
|
||||||
|
use criterion::{criterion_group, criterion_main, Criterion};
|
||||||
|
use aoc2025::aoc::aoc_6;
|
||||||
|
|
||||||
|
fn bench_aoc_6_part1(c: &mut Criterion) {
|
||||||
|
let input = black_box(include_str!("../src/aoc/input/full_input_aoc5.txt"));
|
||||||
|
c.bench_function("bench_aoc6 part 1", |b| b.iter(|| aoc_6::solve_p1(input)));
|
||||||
|
}
|
||||||
|
|
||||||
|
fn bench_aoc_6_part2(c: &mut Criterion) {
|
||||||
|
let input = black_box(include_str!("../src/aoc/input/full_input_aoc5.txt"));
|
||||||
|
c.bench_function("bench_aoc6 part 2", |b| b.iter(|| aoc_6::solve_p2(input)));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
criterion_group!(
|
||||||
|
benches_p6,
|
||||||
|
bench_aoc_6_part1,
|
||||||
|
bench_aoc_6_part2,
|
||||||
|
);
|
||||||
|
criterion_main!(benches_p6);
|
||||||
@ -3,3 +3,4 @@ pub mod aoc_2;
|
|||||||
pub mod aoc_3;
|
pub mod aoc_3;
|
||||||
pub mod aoc_4;
|
pub mod aoc_4;
|
||||||
pub mod aoc_5;
|
pub mod aoc_5;
|
||||||
|
pub mod aoc_6;
|
||||||
|
|||||||
158
src/aoc/aoc_6.rs
Normal file
158
src/aoc/aoc_6.rs
Normal file
@ -0,0 +1,158 @@
|
|||||||
|
pub fn solve_p1(input: &str) -> u64 {
|
||||||
|
let mut answer = 0;
|
||||||
|
let lines = input.lines().count();
|
||||||
|
let input = input.split_ascii_whitespace().collect::<Vec<_>>();
|
||||||
|
// println!("{:?}", input.len()/lines);
|
||||||
|
|
||||||
|
let len = input.len()/lines;
|
||||||
|
for i in 0..len {
|
||||||
|
if input[i+(lines-1)*len] == "+" {
|
||||||
|
let mut sum = input[i].parse::<u64>().unwrap();
|
||||||
|
for j in 1..lines-1{
|
||||||
|
sum += input[i+ len* j].parse::<u64>().unwrap();
|
||||||
|
}
|
||||||
|
answer += sum;
|
||||||
|
} else {
|
||||||
|
let mut product = input[i].parse::<u64>().unwrap();
|
||||||
|
for j in 1..lines-1{
|
||||||
|
product *= input[i+ len* j].parse::<u64>().unwrap();
|
||||||
|
}
|
||||||
|
answer += product;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
answer
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn solve_p2(input: &str) -> u64 {
|
||||||
|
let mut answer = 0;
|
||||||
|
let lines = 4;
|
||||||
|
let input = input.lines().collect::<Vec<_>>();
|
||||||
|
//println!("{:?}", input);
|
||||||
|
let mut len = [0;5];
|
||||||
|
for i in 0..lines{
|
||||||
|
len[i] = input[i].len();
|
||||||
|
}
|
||||||
|
|
||||||
|
let max_idx = *len.iter().max().unwrap();
|
||||||
|
|
||||||
|
|
||||||
|
let mut temp_ans = 0;
|
||||||
|
let mut start_idx = 0;
|
||||||
|
let mut op = false;
|
||||||
|
for i in 0..max_idx{
|
||||||
|
if i == start_idx {
|
||||||
|
if input[4].chars().collect::<Vec<_>>()[i] == '+'{
|
||||||
|
op = false;
|
||||||
|
}else {
|
||||||
|
op = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let mut num1 = ' ';
|
||||||
|
if i < len[0] {
|
||||||
|
num1 = input[0].chars().collect::<Vec<_>>()[i];
|
||||||
|
}
|
||||||
|
let mut num2 = ' ';
|
||||||
|
if i < len[1] {
|
||||||
|
num2 = input[1].chars().collect::<Vec<_>>()[i];
|
||||||
|
}
|
||||||
|
let mut num3 = ' ';
|
||||||
|
if i < len[2] {
|
||||||
|
num3 = input[2].chars().collect::<Vec<_>>()[i];
|
||||||
|
}
|
||||||
|
let mut num4 = ' ';
|
||||||
|
if i < len[3] {
|
||||||
|
num4 = input[3].chars().collect::<Vec<_>>()[i];
|
||||||
|
}
|
||||||
|
let full_num = format!("{}{}{}{}",num1 , num2 , num3, num4).trim().parse::<u64>().unwrap_or(0);
|
||||||
|
|
||||||
|
if full_num != 0 {
|
||||||
|
if op {
|
||||||
|
if temp_ans != 0{
|
||||||
|
temp_ans *= full_num;
|
||||||
|
} else {
|
||||||
|
temp_ans = full_num;
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
temp_ans += full_num;
|
||||||
|
}
|
||||||
|
}else {
|
||||||
|
//println!("{}", temp_ans);
|
||||||
|
answer += temp_ans;
|
||||||
|
start_idx = i+1;
|
||||||
|
temp_ans = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
answer += temp_ans;
|
||||||
|
|
||||||
|
|
||||||
|
answer
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn solve_p2_f(input: &str) -> u64 {
|
||||||
|
let mut answer = 0;
|
||||||
|
let lines = 4;
|
||||||
|
let input = input.lines().map(| x| {x.chars().collect()}).collect::<Vec<Vec<char>>>();
|
||||||
|
println!("{:?}", input);
|
||||||
|
let mut len = [0;5];
|
||||||
|
for i in 0..lines{
|
||||||
|
len[i] = input[i].len();
|
||||||
|
}
|
||||||
|
|
||||||
|
let max_idx = *len.iter().max().unwrap();
|
||||||
|
|
||||||
|
|
||||||
|
let mut temp_ans = 0;
|
||||||
|
let mut start_idx = 0;
|
||||||
|
let mut op = false;
|
||||||
|
for i in 0..max_idx{
|
||||||
|
if i == start_idx {
|
||||||
|
if input[4][i] == '+'{
|
||||||
|
op = false;
|
||||||
|
}else {
|
||||||
|
op = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let mut num1 = ' ';
|
||||||
|
if i < len[0] {
|
||||||
|
num1 = input[0][i];
|
||||||
|
}
|
||||||
|
let mut num2 = ' ';
|
||||||
|
if i < len[1] {
|
||||||
|
num2 = input[1][i];
|
||||||
|
}
|
||||||
|
let mut num3 = ' ';
|
||||||
|
if i < len[2] {
|
||||||
|
num3 = input[2][i];
|
||||||
|
}
|
||||||
|
let mut num4 = ' ';
|
||||||
|
if i < len[3] {
|
||||||
|
num4 = input[3][i];
|
||||||
|
}
|
||||||
|
let full_num = format!("{}{}{}{}",num1 , num2 , num3, num4).trim().parse::<u64>().unwrap_or(0);
|
||||||
|
|
||||||
|
if full_num != 0 {
|
||||||
|
if op {
|
||||||
|
if temp_ans != 0{
|
||||||
|
temp_ans *= full_num;
|
||||||
|
} else {
|
||||||
|
temp_ans = full_num;
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
temp_ans += full_num;
|
||||||
|
}
|
||||||
|
}else {
|
||||||
|
//println!("{}", temp_ans);
|
||||||
|
answer += temp_ans;
|
||||||
|
start_idx = i+1;
|
||||||
|
temp_ans = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
answer += temp_ans;
|
||||||
|
|
||||||
|
|
||||||
|
answer
|
||||||
|
}
|
||||||
4
src/aoc/input/test_input_aoc6.txt
Normal file
4
src/aoc/input/test_input_aoc6.txt
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
123 328 51 64
|
||||||
|
45 64 387 23
|
||||||
|
6 98 215 314
|
||||||
|
* + * +
|
||||||
12
src/main.rs
12
src/main.rs
@ -20,13 +20,23 @@ fn main() {
|
|||||||
let answer = aoc_4::solve_p1(input);
|
let answer = aoc_4::solve_p1(input);
|
||||||
println!("{}", answer);
|
println!("{}", answer);
|
||||||
*/
|
*/
|
||||||
|
/*
|
||||||
let input = include_str!("aoc/input/full_input_aoc5.txt");
|
let input = include_str!("aoc/input/full_input_aoc5.txt");
|
||||||
let answer = aoc_5::solve_p1(input);
|
let answer = aoc_5::solve_p1(input);
|
||||||
println!("{}", answer);
|
println!("{}", answer);
|
||||||
|
|
||||||
let input = include_str!("aoc/input/full_input_aoc5.txt");
|
let input = include_str!("aoc/input/test_input_aoc5.txt");
|
||||||
let answer = aoc_5::solve_p2(input);
|
let answer = aoc_5::solve_p2(input);
|
||||||
println!("{}", answer);
|
println!("{}", answer);
|
||||||
|
|
||||||
|
*/
|
||||||
|
let input = include_str!("aoc/input/full_input_aoc6.txt");
|
||||||
|
let answer = aoc_6::solve_p1(input);
|
||||||
|
println!("answer: {}", answer);
|
||||||
|
|
||||||
|
let input = include_str!("aoc/input/full_input_aoc6.txt");
|
||||||
|
let answer = aoc_6::solve_p2(input);
|
||||||
|
println!("answer: {}", answer);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user