day 18: disable box syntax

This commit is contained in:
kageru 2021-12-18 18:14:54 +01:00
parent e0461fb56a
commit 74372c1e33
Signed by: kageru
GPG Key ID: 8282A2BEA4ADA3D2
2 changed files with 9 additions and 12 deletions

View File

@ -1,4 +1,3 @@
#![feature(box_syntax)]
#![feature(test)]
extern crate test;
use aoc2021::common::*;
@ -11,7 +10,7 @@ type Parsed = Vec<Node>;
impl Add for Node {
type Output = Node;
fn add(self, rhs: Self) -> Self::Output {
Node::Pair(box (self, rhs))
Node::Pair(Box::new((self, rhs)))
}
}
@ -38,10 +37,10 @@ fn parse_node(raw: &str) -> (Node, usize) {
if let Some(inner) = raw.strip_prefix('[') {
let (first, offset) = parse_node(inner);
let (second, offset2) = parse_node(&inner[offset..]);
(first + second, 1 /* the opening [ */ + offset + offset2 + 1 /* the comma */)
(first + second, offset + offset2 + 2 /* 1 for the opening [ and 1 for the comma */)
} else {
let n = raw.as_bytes()[0] - b'0';
debug_assert!(n <= 9, "Number was {n}, raw was {raw}");
debug_assert!(n <= 9);
(Node::Number(n as _), 2)
}
}
@ -185,12 +184,10 @@ mod tests {
let [first, second]: [Node; 2] = parse_input(TEST_INPUT_SINGLE_ADDITION).try_into().unwrap();
assert_eq!(
first,
Node::Pair(box (
Node::Pair(box (Node::Pair(box (Node::Pair(box (Node::Number(4), Node::Number(3))), Node::Number(4))), Node::Number(4))),
Node::Pair(box (Node::Number(7), Node::Pair(box (Node::Pair(box (Node::Number(8), Node::Number(4),)), Node::Number(9),))))
))
(((Node::Number(4) + Node::Number(3)) + Node::Number(4)) + Node::Number(4))
+ (Node::Number(7) + ((Node::Number(8) + Node::Number(4)) + Node::Number(9)))
);
assert_eq!(second, Node::Pair(box (Node::Number(1), Node::Number(1))));
assert_eq!(second, (Node::Number(1) + Node::Number(1)));
}
#[test]
@ -227,7 +224,7 @@ mod tests {
fn test_full_chain() {
let lhs = parse_node("[[[[4,3],4],4],[7,[[8,4],9]]]").0;
let rhs = parse_node("[1,1]").0;
let mut res = Node::Pair(box (lhs, rhs));
let mut res = lhs + rhs;
assert_eq!(res.to_string(), "[[[[[4,3],4],4],[7,[[8,4],9]]],[1,1]]");
let mut res2 = res.clone();

View File

@ -70,8 +70,8 @@ impl<T> Grid<T, 2> for VecGrid<T> {
}
impl<T: Copy> VecGrid<T> {
pub fn from_bytes_2d<F: FnMut(u8) -> T + Copy>(raw: &str, mut f: F) -> VecGrid<T> {
VecGrid { fields: raw.lines().map(|l| l.bytes().map(|c| f(c)).collect()).collect() }
pub fn from_bytes_2d<F: FnMut(u8) -> T + Copy>(raw: &str, f: F) -> VecGrid<T> {
VecGrid { fields: raw.lines().map(|l| l.bytes().map(f).collect()).collect() }
}
}