Add Day 24 solution in Mathematica (#24)

This commit is contained in:
Patrick Stevens
2023-01-22 01:12:34 +00:00
committed by GitHub
parent 3714865a72
commit d93eb92b3e
8 changed files with 6140 additions and 32 deletions

8
Cargo.lock generated
View File

@@ -270,6 +270,14 @@ dependencies = [
"criterion",
]
[[package]]
name = "day_25"
version = "0.1.0"
dependencies = [
"array",
"criterion",
]
[[package]]
name = "day_3"
version = "0.1.0"

6118
day24.nb Normal file

File diff suppressed because it is too large Load Diff

BIN
day24.pdf Normal file

Binary file not shown.

View File

@@ -173,7 +173,7 @@ pub mod day_13 {
let elts = (0..(row_len * col_len)).map(|_| false).collect();
let mut paper = Array::make(elts, row_len as usize);
let mut paper = Array::make(elts, row_len);
for (col, row) in coordinates.iter() {
paper.set(*row as usize, *col as usize, true);
@@ -244,11 +244,10 @@ pub mod day_13 {
let max_y_fold = data
.reversed_fold_list
.iter()
.filter_map(|(axis, v)| match axis {
.find_map(|(axis, v)| match axis {
Axis::X => None,
Axis::Y => Some(*v),
})
.next()
.unwrap();
while let Some(()) = fold_once(&mut data) {}

View File

@@ -133,34 +133,22 @@ pub mod day_16 {
Packet::Operator(p) => match p.type_id {
0 => p.sub_packets.iter().map(evaluate).sum(),
1 => p.sub_packets.iter().map(evaluate).product(),
2 => p.sub_packets.iter().map(evaluate).min().unwrap() as u64,
3 => p.sub_packets.iter().map(evaluate).max().unwrap() as u64,
2 => p.sub_packets.iter().map(evaluate).min().unwrap(),
3 => p.sub_packets.iter().map(evaluate).max().unwrap(),
5 => {
let v1 = evaluate(&p.sub_packets[0]);
let v2 = evaluate(&p.sub_packets[1]);
if v1 > v2 {
1
} else {
0
}
u64::from(v1 > v2)
}
6 => {
let v1 = evaluate(&p.sub_packets[0]);
let v2 = evaluate(&p.sub_packets[1]);
if v1 < v2 {
1
} else {
0
}
u64::from(v1 < v2)
}
7 => {
let v1 = evaluate(&p.sub_packets[0]);
let v2 = evaluate(&p.sub_packets[1]);
if v1 == v2 {
1
} else {
0
}
u64::from(v1 == v2)
}
_ => panic!("Unexpected type"),
},

View File

@@ -324,7 +324,7 @@ pub mod day_18 {
PairEntry::Pair((left, right)) => {
3 * magnitude_inner(p, left) + 2 * magnitude_inner(p, right)
}
PairEntry::Number(n) => (n as u32),
PairEntry::Number(n) => n as u32,
}
}

View File

@@ -50,8 +50,8 @@ pub mod day_3 {
let mut eps = 0;
for i in 0..N {
let most = most_common(bits, i);
gamma = gamma * 2 + if most { 1 } else { 0 };
eps = eps * 2 + if most { 0 } else { 1 };
gamma = gamma * 2 + u32::from(most);
eps = eps * 2 + u32::from(!most);
}
gamma * eps
}
@@ -117,7 +117,7 @@ pub mod day_3 {
fn to_u16<const N: usize>(bits: [bool; N]) -> u16 {
let mut ans = 0;
for b in bits.iter() {
ans = ans * 2 + if *b { 1 } else { 0 };
ans = ans * 2 + u16::from(*b);
}
ans
@@ -148,7 +148,7 @@ pub mod day_3 {
return to_u16(*answer);
}
Err(b) => {
least_common_arr[i as usize] = !b;
least_common_arr[i] = !b;
}
}
}

View File

@@ -89,7 +89,7 @@ pub mod day_8 {
let mut unshuffled = [false; 7];
for (after_shuffle, before_shuffle) in identification.iter().enumerate() {
// (0, 2); (1, 5); ...
unshuffled[*before_shuffle as usize] = d.segments[after_shuffle as usize];
unshuffled[*before_shuffle as usize] = d.segments[after_shuffle];
}
if !unshuffled[0] {
@@ -173,12 +173,7 @@ pub mod day_8 {
}
fn last_decreasing<const N: usize>(d: &[u8; N]) -> Option<usize> {
for i in (0..N - 1).rev() {
if d[i + 1] > d[i] {
return Some(i);
}
}
None
(0..N - 1).rev().find(|&i| d[i + 1] > d[i])
}
fn reverse<T, const N: usize>(d: &mut [T; N], i: usize)