day 18: disable box syntax
This commit is contained in:
parent
e0461fb56a
commit
74372c1e33
|
@ -1,4 +1,3 @@
|
||||||
#![feature(box_syntax)]
|
|
||||||
#![feature(test)]
|
#![feature(test)]
|
||||||
extern crate test;
|
extern crate test;
|
||||||
use aoc2021::common::*;
|
use aoc2021::common::*;
|
||||||
|
@ -11,7 +10,7 @@ type Parsed = Vec<Node>;
|
||||||
impl Add for Node {
|
impl Add for Node {
|
||||||
type Output = Node;
|
type Output = Node;
|
||||||
fn add(self, rhs: Self) -> Self::Output {
|
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('[') {
|
if let Some(inner) = raw.strip_prefix('[') {
|
||||||
let (first, offset) = parse_node(inner);
|
let (first, offset) = parse_node(inner);
|
||||||
let (second, offset2) = parse_node(&inner[offset..]);
|
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 {
|
} else {
|
||||||
let n = raw.as_bytes()[0] - b'0';
|
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)
|
(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();
|
let [first, second]: [Node; 2] = parse_input(TEST_INPUT_SINGLE_ADDITION).try_into().unwrap();
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
first,
|
first,
|
||||||
Node::Pair(box (
|
(((Node::Number(4) + Node::Number(3)) + Node::Number(4)) + Node::Number(4))
|
||||||
Node::Pair(box (Node::Pair(box (Node::Pair(box (Node::Number(4), Node::Number(3))), Node::Number(4))), Node::Number(4))),
|
+ (Node::Number(7) + ((Node::Number(8) + Node::Number(4)) + Node::Number(9)))
|
||||||
Node::Pair(box (Node::Number(7), Node::Pair(box (Node::Pair(box (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]
|
#[test]
|
||||||
|
@ -227,7 +224,7 @@ mod tests {
|
||||||
fn test_full_chain() {
|
fn test_full_chain() {
|
||||||
let lhs = parse_node("[[[[4,3],4],4],[7,[[8,4],9]]]").0;
|
let lhs = parse_node("[[[[4,3],4],4],[7,[[8,4],9]]]").0;
|
||||||
let rhs = parse_node("[1,1]").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]]");
|
assert_eq!(res.to_string(), "[[[[[4,3],4],4],[7,[[8,4],9]]],[1,1]]");
|
||||||
|
|
||||||
let mut res2 = res.clone();
|
let mut res2 = res.clone();
|
||||||
|
|
|
@ -70,8 +70,8 @@ impl<T> Grid<T, 2> for VecGrid<T> {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T: Copy> VecGrid<T> {
|
impl<T: Copy> VecGrid<T> {
|
||||||
pub fn from_bytes_2d<F: FnMut(u8) -> T + Copy>(raw: &str, mut f: F) -> VecGrid<T> {
|
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(|c| f(c)).collect()).collect() }
|
VecGrid { fields: raw.lines().map(|l| l.bytes().map(f).collect()).collect() }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user