Pass is_real_data to parsers
As in Haskell, we'll need this for some awkward problems.
This commit is contained in:
parent
ea3900dd93
commit
be0bfd0545
@ -29,7 +29,7 @@ fn main() {
|
|||||||
println!(" {}", puzzle.number());
|
println!(" {}", puzzle.number());
|
||||||
let input = fs::read_to_string(format!("../inputs/{}/{}", t, puzzle.number()))
|
let input = fs::read_to_string(format!("../inputs/{}/{}", t, puzzle.number()))
|
||||||
.expect("no input file");
|
.expect("no input file");
|
||||||
puzzle.with_parts(&input, &|n, run| {
|
puzzle.with_parts(*is_real_data, &input, &|n, run| {
|
||||||
let expected =
|
let expected =
|
||||||
fs::read_to_string(format!("../outputs/{}/{}/{}", t, puzzle.number(), n))
|
fs::read_to_string(format!("../outputs/{}/{}/{}", t, puzzle.number(), n))
|
||||||
.expect("no golden file");
|
.expect("no golden file");
|
||||||
@ -53,14 +53,14 @@ fn main() {
|
|||||||
|
|
||||||
pub trait SomePuzzle {
|
pub trait SomePuzzle {
|
||||||
fn number(&self) -> u32;
|
fn number(&self) -> u32;
|
||||||
fn with_parts(&self, input: &str, f: &dyn Fn(usize, &dyn Fn() -> String));
|
fn with_parts(&self, is_real_data: bool, input: &str, f: &dyn Fn(usize, &dyn Fn() -> String));
|
||||||
}
|
}
|
||||||
impl<Input, const N: usize> SomePuzzle for Puzzle<Input, { N }> {
|
impl<Input, const N: usize> SomePuzzle for Puzzle<Input, { N }> {
|
||||||
fn number(&self) -> u32 {
|
fn number(&self) -> u32 {
|
||||||
self.number
|
self.number
|
||||||
}
|
}
|
||||||
fn with_parts(&self, s: &str, f: &dyn Fn(usize, &dyn Fn() -> String)) {
|
fn with_parts(&self, is_real_data: bool, s: &str, f: &dyn Fn(usize, &dyn Fn() -> String)) {
|
||||||
let input = (self.parser)(s);
|
let input = (self.parser)(is_real_data, s);
|
||||||
for (i, p) in self.parts.iter().enumerate() {
|
for (i, p) in self.parts.iter().enumerate() {
|
||||||
f(i + 1, &|| p(&input));
|
f(i + 1, &|| p(&input));
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
pub struct Puzzle<Input, const N: usize> {
|
pub struct Puzzle<Input, const N: usize> {
|
||||||
pub number: u32,
|
pub number: u32,
|
||||||
pub parser: fn(&str) -> Input,
|
pub parser: fn(bool, &str) -> Input,
|
||||||
pub parts: [fn(&Input) -> String; N],
|
pub parts: [fn(&Input) -> String; N],
|
||||||
}
|
}
|
||||||
|
|||||||
@ -11,7 +11,7 @@ use nom::{
|
|||||||
|
|
||||||
pub const PUZZLE: Puzzle<Vec<(Direction, i32)>, 2> = Puzzle {
|
pub const PUZZLE: Puzzle<Vec<(Direction, i32)>, 2> = Puzzle {
|
||||||
number: 1,
|
number: 1,
|
||||||
parser: |input| {
|
parser: |_, input| {
|
||||||
terminated::<_, _, Error<&str>, _, _>(
|
terminated::<_, _, Error<&str>, _, _>(
|
||||||
terminated(
|
terminated(
|
||||||
separated_list1(
|
separated_list1(
|
||||||
|
|||||||
@ -10,7 +10,7 @@ use nom::{
|
|||||||
|
|
||||||
pub const PUZZLE: Puzzle<Vec<(usize, usize)>, 2> = Puzzle {
|
pub const PUZZLE: Puzzle<Vec<(usize, usize)>, 2> = Puzzle {
|
||||||
number: 2,
|
number: 2,
|
||||||
parser: |input| {
|
parser: |_, input| {
|
||||||
terminated::<_, _, Error<&str>, _, _>(
|
terminated::<_, _, Error<&str>, _, _>(
|
||||||
terminated(
|
terminated(
|
||||||
separated_list1(char(','), separated_pair(usize, char('-'), usize)),
|
separated_list1(char(','), separated_pair(usize, char('-'), usize)),
|
||||||
|
|||||||
@ -10,7 +10,7 @@ use nom::{
|
|||||||
|
|
||||||
pub const PUZZLE: Puzzle<Vec<Vec<u8>>, 2> = Puzzle {
|
pub const PUZZLE: Puzzle<Vec<Vec<u8>>, 2> = Puzzle {
|
||||||
number: 3,
|
number: 3,
|
||||||
parser: |input| {
|
parser: |_, input| {
|
||||||
terminated::<_, _, Error<&str>, _, _>(
|
terminated::<_, _, Error<&str>, _, _>(
|
||||||
terminated(
|
terminated(
|
||||||
separated_list1(
|
separated_list1(
|
||||||
|
|||||||
@ -11,7 +11,7 @@ use nom::{
|
|||||||
|
|
||||||
pub const PUZZLE: Puzzle<Vec<Vec<InTile>>, 2> = Puzzle {
|
pub const PUZZLE: Puzzle<Vec<Vec<InTile>>, 2> = Puzzle {
|
||||||
number: 4,
|
number: 4,
|
||||||
parser: |input| {
|
parser: |_, input| {
|
||||||
terminated::<_, _, Error<&str>, _, _>(
|
terminated::<_, _, Error<&str>, _, _>(
|
||||||
terminated(
|
terminated(
|
||||||
separated_list1(
|
separated_list1(
|
||||||
|
|||||||
@ -11,7 +11,7 @@ use nom::{
|
|||||||
|
|
||||||
pub const PUZZLE: Puzzle<(Vec<Range>, Vec<usize>), 2> = Puzzle {
|
pub const PUZZLE: Puzzle<(Vec<Range>, Vec<usize>), 2> = Puzzle {
|
||||||
number: 5,
|
number: 5,
|
||||||
parser: |input| {
|
parser: |_, input| {
|
||||||
terminated::<_, _, Error<&str>, _, _>(
|
terminated::<_, _, Error<&str>, _, _>(
|
||||||
separated_pair(
|
separated_pair(
|
||||||
separated_list1(
|
separated_list1(
|
||||||
|
|||||||
@ -13,7 +13,7 @@ use std::ops::{Add, Mul};
|
|||||||
|
|
||||||
pub const PUZZLE: Puzzle<(Vec<Op>, Vec<Vec<Option<u8>>>), 2> = Puzzle {
|
pub const PUZZLE: Puzzle<(Vec<Op>, Vec<Vec<Option<u8>>>), 2> = Puzzle {
|
||||||
number: 6,
|
number: 6,
|
||||||
parser: |input| {
|
parser: |_, input| {
|
||||||
terminated::<_, _, Error<&str>, _, _>(
|
terminated::<_, _, Error<&str>, _, _>(
|
||||||
(
|
(
|
||||||
terminated(
|
terminated(
|
||||||
|
|||||||
@ -13,7 +13,7 @@ use std::collections::{HashMap, HashSet};
|
|||||||
|
|
||||||
pub const PUZZLE: Puzzle<(usize, Vec<HashSet<usize>>), 2> = Puzzle {
|
pub const PUZZLE: Puzzle<(usize, Vec<HashSet<usize>>), 2> = Puzzle {
|
||||||
number: 7,
|
number: 7,
|
||||||
parser: |input| {
|
parser: |_, input| {
|
||||||
terminated::<_, _, Error<&str>, _, _>(
|
terminated::<_, _, Error<&str>, _, _>(
|
||||||
terminated(
|
terminated(
|
||||||
(
|
(
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user