Add helper
This commit is contained in:
parent
60e63a667d
commit
a2aa8a353f
|
@ -1,6 +1,7 @@
|
||||||
#![feature(test)]
|
#![feature(test)]
|
||||||
extern crate test;
|
extern crate test;
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
use aoc2020::common::*;
|
||||||
|
|
||||||
type Parsed = Vec<usize>;
|
type Parsed = Vec<usize>;
|
||||||
|
|
||||||
|
@ -8,8 +9,9 @@ fn read_input() -> String {
|
||||||
String::from("15,12,0,14,3,1")
|
String::from("15,12,0,14,3,1")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
fn parse_input(raw: &str) -> Parsed {
|
fn parse_input(raw: &str) -> Parsed {
|
||||||
raw.split(',').filter_map(|x| x.parse().ok()).collect()
|
parse_nums(raw)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustfmt::skip]
|
#[rustfmt::skip]
|
||||||
|
|
|
@ -45,23 +45,13 @@ fn parse_input(raw: &str) -> Parsed {
|
||||||
let (rules, my_ticket, nearby) = raw.split("\n\n").next_tuple().unwrap();
|
let (rules, my_ticket, nearby) = raw.split("\n\n").next_tuple().unwrap();
|
||||||
Parsed {
|
Parsed {
|
||||||
rules: rules.lines().map_into().collect(),
|
rules: rules.lines().map_into().collect(),
|
||||||
my_ticket: my_ticket
|
my_ticket: parse_nums(my_ticket.split_once('\n').unwrap().1),
|
||||||
.split_once('\n')
|
nearby_tickets: nearby.lines().skip(1).map(parse_nums).collect(),
|
||||||
.unwrap()
|
|
||||||
.1
|
|
||||||
.split(',')
|
|
||||||
.map(|n| n.parse().unwrap())
|
|
||||||
.collect(),
|
|
||||||
nearby_tickets: nearby
|
|
||||||
.lines()
|
|
||||||
.skip(1)
|
|
||||||
.map(|l| l.split(',').map(|n| n.parse().unwrap()).collect())
|
|
||||||
.collect(),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Could be optimized by folding the ranges first to only have one lower and one upper (or even
|
// Could be optimized by merging overlapping ranges into one before checking all the tickets.
|
||||||
// just a single one if they’re continuous), but meh.
|
// … or so I thought until I tried, benchmarked, and saw that that takes twice as long.
|
||||||
fn part1(parsed: &Parsed) -> usize {
|
fn part1(parsed: &Parsed) -> usize {
|
||||||
parsed
|
parsed
|
||||||
.nearby_tickets
|
.nearby_tickets
|
||||||
|
|
|
@ -9,3 +9,8 @@ pub fn read_file(day: usize) -> String {
|
||||||
)
|
)
|
||||||
.unwrap()
|
.unwrap()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
pub fn parse_nums(l: &str) -> Vec<usize> {
|
||||||
|
l.split(',').filter_map(|n| n.parse().ok()).collect()
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user