mirror of
https://github.com/Smaug123/advent-of-code-2021
synced 2025-10-06 04:28:41 +00:00
Add Day 24 solution in Mathematica (#24)
This commit is contained in:
8
Cargo.lock
generated
8
Cargo.lock
generated
@@ -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"
|
||||
|
@@ -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) {}
|
||||
|
@@ -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"),
|
||||
},
|
||||
|
@@ -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,
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -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)
|
||||
|
Reference in New Issue
Block a user