cargo clippy fixes
This commit is contained in:
parent
818271e4ad
commit
3a72256177
17 changed files with 55 additions and 64 deletions
12
src/day01.rs
12
src/day01.rs
|
@ -10,9 +10,9 @@ pub fn input_generator(input: &str) -> Vec<usize> {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[aoc(day1, part1)]
|
#[aoc(day1, part1)]
|
||||||
pub fn solve_part1(input: &Vec<usize>) -> usize {
|
pub fn solve_part1(input: &[usize]) -> usize {
|
||||||
let mut input = input.clone();
|
let mut input = input.to_vec();
|
||||||
input.sort();
|
input.sort_unstable();
|
||||||
for (i1, v1) in input.iter().enumerate() {
|
for (i1, v1) in input.iter().enumerate() {
|
||||||
if v1 > &2020 {
|
if v1 > &2020 {
|
||||||
break;
|
break;
|
||||||
|
@ -27,9 +27,9 @@ pub fn solve_part1(input: &Vec<usize>) -> usize {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[aoc(day1, part2)]
|
#[aoc(day1, part2)]
|
||||||
pub fn solve_part2(input: &Vec<usize>) -> usize {
|
pub fn solve_part2(input: &[usize]) -> usize {
|
||||||
let mut input = input.clone();
|
let mut input = input.to_vec();
|
||||||
input.sort();
|
input.sort_unstable();
|
||||||
for (i1, v1) in input.iter().enumerate() {
|
for (i1, v1) in input.iter().enumerate() {
|
||||||
if v1 > &2020 {
|
if v1 > &2020 {
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -53,11 +53,11 @@ pub fn input_generator(input: &str) -> Vec<Rule> {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[aoc(day2, part1)]
|
#[aoc(day2, part1)]
|
||||||
pub fn solve_part1(input: &Vec<Rule>) -> usize {
|
pub fn solve_part1(input: &[Rule]) -> usize {
|
||||||
return input.iter().filter(|v| v.is_valid_part1()).count();
|
return input.iter().filter(|v| v.is_valid_part1()).count();
|
||||||
}
|
}
|
||||||
|
|
||||||
#[aoc(day2, part2)]
|
#[aoc(day2, part2)]
|
||||||
pub fn solve_part2(input: &Vec<Rule>) -> usize {
|
pub fn solve_part2(input: &[Rule]) -> usize {
|
||||||
return input.iter().filter(|v| v.is_valid_part2()).count();
|
return input.iter().filter(|v| v.is_valid_part2()).count();
|
||||||
}
|
}
|
||||||
|
|
20
src/day04.rs
20
src/day04.rs
|
@ -42,11 +42,7 @@ impl Creds {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if let Ok(val) = val.parse::<i64>() {
|
if let Ok(val) = val.parse::<i64>() {
|
||||||
if val >= min && val <= max {
|
return val >= min && val <= max;
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -61,10 +57,10 @@ impl Creds {
|
||||||
let num: Result<usize, _> = num.parse();
|
let num: Result<usize, _> = num.parse();
|
||||||
if let Ok(num) = num {
|
if let Ok(num) = num {
|
||||||
if unit == "cm" {
|
if unit == "cm" {
|
||||||
return num >= 150 && num <= 193;
|
return (150..=193).contains(&num);
|
||||||
};
|
};
|
||||||
if unit == "in" {
|
if unit == "in" {
|
||||||
return num >= 59 && num <= 76;
|
return (59..=76).contains(&num);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@ -72,7 +68,7 @@ impl Creds {
|
||||||
|
|
||||||
fn validate_ecl(val: &str) -> bool {
|
fn validate_ecl(val: &str) -> bool {
|
||||||
let choices: Vec<&str> = vec!["amb", "blu", "brn", "gry", "grn", "hzl", "oth"];
|
let choices: Vec<&str> = vec!["amb", "blu", "brn", "gry", "grn", "hzl", "oth"];
|
||||||
return choices.iter().find(|&&v| v == val).is_some();
|
return choices.iter().any(|&v| v == val);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn validate_hcl(val: &str) -> bool {
|
fn validate_hcl(val: &str) -> bool {
|
||||||
|
@ -121,10 +117,10 @@ pub fn input_generator(input: &str) -> Vec<Creds> {
|
||||||
let mut ret = vec![];
|
let mut ret = vec![];
|
||||||
for creds in input.split("\n\n") {
|
for creds in input.split("\n\n") {
|
||||||
let creds = creds.replace("\n", " ");
|
let creds = creds.replace("\n", " ");
|
||||||
let creds = creds.split(" ");
|
let creds = creds.split(' ');
|
||||||
let mut cred_data = Creds::default();
|
let mut cred_data = Creds::default();
|
||||||
for cred in creds {
|
for cred in creds {
|
||||||
let cred: Vec<&str> = cred.split(":").collect();
|
let cred: Vec<&str> = cred.split(':').collect();
|
||||||
let (key, value) = (cred[0], cred[1]);
|
let (key, value) = (cred[0], cred[1]);
|
||||||
match key {
|
match key {
|
||||||
"byr" => {
|
"byr" => {
|
||||||
|
@ -162,11 +158,11 @@ pub fn input_generator(input: &str) -> Vec<Creds> {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[aoc(day4, part1)]
|
#[aoc(day4, part1)]
|
||||||
pub fn solve_part1(input: &Vec<Creds>) -> usize {
|
pub fn solve_part1(input: &[Creds]) -> usize {
|
||||||
return input.iter().filter(|v| v.is_valid_part1()).count();
|
return input.iter().filter(|v| v.is_valid_part1()).count();
|
||||||
}
|
}
|
||||||
|
|
||||||
#[aoc(day4, part2)]
|
#[aoc(day4, part2)]
|
||||||
pub fn solve_part2(input: &Vec<Creds>) -> usize {
|
pub fn solve_part2(input: &[Creds]) -> usize {
|
||||||
return input.iter().filter(|v| v.is_valid_part2()).count();
|
return input.iter().filter(|v| v.is_valid_part2()).count();
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,7 +26,7 @@ pub fn input_generator(input: &str) -> Vec<Vec<Direction>> {
|
||||||
.collect()
|
.collect()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn seat_to_pos(seat: &Vec<Direction>) -> (usize, usize) {
|
pub fn seat_to_pos(seat: &[Direction]) -> (usize, usize) {
|
||||||
let mut col_range: (usize, usize) = (0, 8);
|
let mut col_range: (usize, usize) = (0, 8);
|
||||||
let mut row_range: (usize, usize) = (0, 128);
|
let mut row_range: (usize, usize) = (0, 128);
|
||||||
for inst in seat {
|
for inst in seat {
|
||||||
|
@ -57,7 +57,7 @@ pub fn seat_to_pos(seat: &Vec<Direction>) -> (usize, usize) {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[aoc(day5, part1)]
|
#[aoc(day5, part1)]
|
||||||
pub fn solve_part1(input: &Vec<Vec<Direction>>) -> usize {
|
pub fn solve_part1(input: &[Vec<Direction>]) -> usize {
|
||||||
let mut max_seat_id: usize = 0;
|
let mut max_seat_id: usize = 0;
|
||||||
for seat in input {
|
for seat in input {
|
||||||
let pos = seat_to_pos(seat);
|
let pos = seat_to_pos(seat);
|
||||||
|
@ -68,7 +68,7 @@ pub fn solve_part1(input: &Vec<Vec<Direction>>) -> usize {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[aoc(day5, part2)]
|
#[aoc(day5, part2)]
|
||||||
pub fn solve_part2(input: &Vec<Vec<Direction>>) -> usize {
|
pub fn solve_part2(input: &[Vec<Direction>]) -> usize {
|
||||||
let mut seats = [[false; 8]; 128];
|
let mut seats = [[false; 8]; 128];
|
||||||
for seat in input {
|
for seat in input {
|
||||||
let pos = seat_to_pos(seat);
|
let pos = seat_to_pos(seat);
|
||||||
|
|
|
@ -6,7 +6,7 @@ pub fn input_generator(input: &str) -> Vec<Vec<HashSet<char>>> {
|
||||||
.split("\n\n")
|
.split("\n\n")
|
||||||
.map(|block| {
|
.map(|block| {
|
||||||
block
|
block
|
||||||
.split("\n")
|
.split('\n')
|
||||||
.map(|line| line.chars().collect())
|
.map(|line| line.chars().collect())
|
||||||
.collect()
|
.collect()
|
||||||
})
|
})
|
||||||
|
@ -14,7 +14,7 @@ pub fn input_generator(input: &str) -> Vec<Vec<HashSet<char>>> {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[aoc(day6, part1)]
|
#[aoc(day6, part1)]
|
||||||
fn solve_part1(data: &Vec<Vec<HashSet<char>>>) -> usize {
|
fn solve_part1(data: &[Vec<HashSet<char>>]) -> usize {
|
||||||
let mut total = 0;
|
let mut total = 0;
|
||||||
for group in data {
|
for group in data {
|
||||||
let mut answers: HashSet<char> = HashSet::new();
|
let mut answers: HashSet<char> = HashSet::new();
|
||||||
|
@ -27,7 +27,7 @@ fn solve_part1(data: &Vec<Vec<HashSet<char>>>) -> usize {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[aoc(day6, part2)]
|
#[aoc(day6, part2)]
|
||||||
fn solve_part2(data: &Vec<Vec<HashSet<char>>>) -> usize {
|
fn solve_part2(data: &[Vec<HashSet<char>>]) -> usize {
|
||||||
let mut total = 0;
|
let mut total = 0;
|
||||||
for group in data {
|
for group in data {
|
||||||
let mut answers: HashSet<char> = HashSet::new();
|
let mut answers: HashSet<char> = HashSet::new();
|
||||||
|
@ -35,7 +35,7 @@ fn solve_part2(data: &Vec<Vec<HashSet<char>>>) -> usize {
|
||||||
answers.extend(person);
|
answers.extend(person);
|
||||||
}
|
}
|
||||||
for person in group {
|
for person in group {
|
||||||
answers = answers.intersection(&person).map(|v| *v).collect();
|
answers = answers.intersection(&person).copied().collect();
|
||||||
}
|
}
|
||||||
total += answers.len();
|
total += answers.len();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
use aoc_runner_derive::{aoc, aoc_generator};
|
use aoc_runner_derive::{aoc, aoc_generator};
|
||||||
use std::collections::{HashMap, VecDeque};
|
use std::collections::{HashMap, VecDeque};
|
||||||
|
|
||||||
|
#[derive(Default)]
|
||||||
pub struct Data {
|
pub struct Data {
|
||||||
fwd: HashMap<String, Vec<(usize, String)>>,
|
fwd: HashMap<String, Vec<(usize, String)>>,
|
||||||
rev: HashMap<String, Vec<(usize, String)>>,
|
rev: HashMap<String, Vec<(usize, String)>>,
|
||||||
|
@ -8,10 +9,7 @@ pub struct Data {
|
||||||
|
|
||||||
impl Data {
|
impl Data {
|
||||||
pub fn new() -> Data {
|
pub fn new() -> Data {
|
||||||
Data {
|
Default::default()
|
||||||
fwd: HashMap::new(),
|
|
||||||
rev: HashMap::new(),
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -49,10 +49,10 @@ impl From<&str> for Inst {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl CPU {
|
impl CPU {
|
||||||
fn new(pgm: &Vec<Inst>) -> Self {
|
fn new(pgm: &[Inst]) -> Self {
|
||||||
Self {
|
Self {
|
||||||
ip: 0,
|
ip: 0,
|
||||||
program: pgm.clone(),
|
program: pgm.to_vec(),
|
||||||
acc: 0,
|
acc: 0,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -88,7 +88,7 @@ pub fn input_generator(input: &str) -> Vec<Inst> {
|
||||||
|
|
||||||
#[aoc(day8, part1)]
|
#[aoc(day8, part1)]
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
pub fn solve_part1(input: &Vec<Inst>) -> usize {
|
pub fn solve_part1(input: &[Inst]) -> usize {
|
||||||
let mut seen = HashSet::new();
|
let mut seen = HashSet::new();
|
||||||
let mut cpu = CPU::new(input);
|
let mut cpu = CPU::new(input);
|
||||||
loop {
|
loop {
|
||||||
|
@ -103,7 +103,7 @@ pub fn solve_part1(input: &Vec<Inst>) -> usize {
|
||||||
|
|
||||||
#[aoc(day8, part2)]
|
#[aoc(day8, part2)]
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
pub fn solve_part2(input: &Vec<Inst>) -> usize {
|
pub fn solve_part2(input: &[Inst]) -> usize {
|
||||||
for (idx, inst) in input.iter().enumerate() {
|
for (idx, inst) in input.iter().enumerate() {
|
||||||
match inst {
|
match inst {
|
||||||
Inst::Nop { .. } | Inst::Jmp { .. } => {
|
Inst::Nop { .. } | Inst::Jmp { .. } => {
|
||||||
|
|
|
@ -12,8 +12,8 @@ pub fn input_generator(input: &str) -> Vec<usize> {
|
||||||
|
|
||||||
#[aoc(day9, part1)]
|
#[aoc(day9, part1)]
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
pub fn solve_part1(input: &Vec<usize>) -> usize {
|
pub fn solve_part1(input: &[usize]) -> usize {
|
||||||
for (n, win) in input.as_slice().windows(25).enumerate() {
|
for (n, win) in input.windows(25).enumerate() {
|
||||||
let n = n + 25;
|
let n = n + 25;
|
||||||
if n >= input.len() {
|
if n >= input.len() {
|
||||||
continue;
|
continue;
|
||||||
|
@ -39,7 +39,7 @@ pub fn solve_part1(input: &Vec<usize>) -> usize {
|
||||||
|
|
||||||
#[aoc(day9, part2)]
|
#[aoc(day9, part2)]
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
pub fn solve_part2_fast(input: &Vec<usize>) -> usize {
|
pub fn solve_part2_fast(input: &[usize]) -> usize {
|
||||||
let target_num = solve_part1(input);
|
let target_num = solve_part1(input);
|
||||||
for i in 2..=input.len() {
|
for i in 2..=input.len() {
|
||||||
if let Some(w) = input.windows(i).find(|w| target_num == w.iter().sum()) {
|
if let Some(w) = input.windows(i).find(|w| target_num == w.iter().sum()) {
|
||||||
|
|
|
@ -45,7 +45,7 @@ impl Data {
|
||||||
let mut nodes = self.0.clone();
|
let mut nodes = self.0.clone();
|
||||||
nodes.push(0);
|
nodes.push(0);
|
||||||
nodes.push(nodes.iter().max().unwrap() + 3);
|
nodes.push(nodes.iter().max().unwrap() + 3);
|
||||||
nodes.sort();
|
nodes.sort_unstable();
|
||||||
let goal = *nodes.last().unwrap();
|
let goal = *nodes.last().unwrap();
|
||||||
let mut map: HashMap<u16, HashSet<u16>> = HashMap::new();
|
let mut map: HashMap<u16, HashSet<u16>> = HashMap::new();
|
||||||
for n in &nodes {
|
for n in &nodes {
|
||||||
|
|
|
@ -137,7 +137,7 @@ pub fn input_generator(input: &str) -> Vec<Command> {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[aoc(day12, part1)]
|
#[aoc(day12, part1)]
|
||||||
pub fn solve_part1(input: &Vec<Command>) -> usize {
|
pub fn solve_part1(input: &[Command]) -> usize {
|
||||||
let mut ship = Ship::new();
|
let mut ship = Ship::new();
|
||||||
for cmd in input {
|
for cmd in input {
|
||||||
ship.cmd_p1(cmd);
|
ship.cmd_p1(cmd);
|
||||||
|
@ -146,7 +146,7 @@ pub fn solve_part1(input: &Vec<Command>) -> usize {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[aoc(day12, part2)]
|
#[aoc(day12, part2)]
|
||||||
pub fn solve_part2(input: &Vec<Command>) -> usize {
|
pub fn solve_part2(input: &[Command]) -> usize {
|
||||||
let mut ship = Ship::new();
|
let mut ship = Ship::new();
|
||||||
for cmd in input {
|
for cmd in input {
|
||||||
ship.cmd_p2(cmd);
|
ship.cmd_p2(cmd);
|
||||||
|
|
|
@ -52,10 +52,10 @@ pub fn solve_part2(input: &Data) -> i64 {
|
||||||
.map(|(a, b)| (a as i64, *b as i64))
|
.map(|(a, b)| (a as i64, *b as i64))
|
||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
let mut t = 0;
|
let mut t = 0;
|
||||||
let target = b.iter().map(|(_, b)| b).fold(1, |a, b| a * b);
|
let target: i64 = b.iter().map(|(_, b)| b).product();
|
||||||
loop {
|
loop {
|
||||||
let mut cnt = 0;
|
let mut cnt = 0;
|
||||||
let dt = b
|
let dt: i64= b
|
||||||
.iter()
|
.iter()
|
||||||
.filter_map(|(i, n)| {
|
.filter_map(|(i, n)| {
|
||||||
if (t + i) % n == 0 {
|
if (t + i) % n == 0 {
|
||||||
|
@ -65,7 +65,7 @@ pub fn solve_part2(input: &Data) -> i64 {
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.fold(1, |a, b| a * b);
|
.product();
|
||||||
if dt == target {
|
if dt == target {
|
||||||
return t % dt;
|
return t % dt;
|
||||||
}
|
}
|
||||||
|
|
12
src/day14.rs
12
src/day14.rs
|
@ -27,8 +27,8 @@ impl Command {
|
||||||
panic!("Can't apply non-mask command");
|
panic!("Can't apply non-mask command");
|
||||||
}
|
}
|
||||||
|
|
||||||
fn apply_mask_v2_inner(&self, addr: &mut u64, s: &Vec<char>, ret: &mut Vec<u64>) {
|
fn apply_mask_v2_inner(&self, addr: &mut u64, s: &[char], ret: &mut Vec<u64>) {
|
||||||
let mut s_c = s.clone();
|
let mut s_c = s.to_vec();
|
||||||
for (idx, c) in s.iter().enumerate() {
|
for (idx, c) in s.iter().enumerate() {
|
||||||
match *c {
|
match *c {
|
||||||
'0' => (),
|
'0' => (),
|
||||||
|
@ -55,7 +55,7 @@ impl Command {
|
||||||
raw.reverse();
|
raw.reverse();
|
||||||
let mut ret = vec![];
|
let mut ret = vec![];
|
||||||
self.apply_mask_v2_inner(&mut addr, &raw, &mut ret);
|
self.apply_mask_v2_inner(&mut addr, &raw, &mut ret);
|
||||||
ret.sort();
|
ret.sort_unstable();
|
||||||
ret.dedup();
|
ret.dedup();
|
||||||
return ret;
|
return ret;
|
||||||
};
|
};
|
||||||
|
@ -73,7 +73,7 @@ pub fn input_generator(input: &str) -> Data {
|
||||||
let mut mask_and = 0;
|
let mut mask_and = 0;
|
||||||
let mut mask_or = 0;
|
let mut mask_or = 0;
|
||||||
let mut char_buf = vec![];
|
let mut char_buf = vec![];
|
||||||
for (_, c) in line.split("=").nth(1).unwrap().trim().chars().enumerate() {
|
for (_, c) in line.split('=').nth(1).unwrap().trim().chars().enumerate() {
|
||||||
char_buf.push(c);
|
char_buf.push(c);
|
||||||
mask_and <<= 1;
|
mask_and <<= 1;
|
||||||
mask_or <<= 1;
|
mask_or <<= 1;
|
||||||
|
@ -126,7 +126,7 @@ pub fn input_generator(input: &str) -> Data {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[aoc(day14, part1)]
|
#[aoc(day14, part1)]
|
||||||
pub fn solve_part1(input: &Data) -> u64 {
|
pub fn solve_part1(input: &[Command]) -> u64 {
|
||||||
let mut mem = HashMap::new();
|
let mut mem = HashMap::new();
|
||||||
let mut mask = Command::Mask {
|
let mut mask = Command::Mask {
|
||||||
and: std::u64::MAX,
|
and: std::u64::MAX,
|
||||||
|
@ -147,7 +147,7 @@ pub fn solve_part1(input: &Data) -> u64 {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[aoc(day14, part2)]
|
#[aoc(day14, part2)]
|
||||||
pub fn solve_part2(input: &Data) -> u64 {
|
pub fn solve_part2(input: &[Command]) -> u64 {
|
||||||
let mut mem = HashMap::new();
|
let mut mem = HashMap::new();
|
||||||
let mut mask = Command::Mask {
|
let mut mask = Command::Mask {
|
||||||
and: std::u64::MAX,
|
and: std::u64::MAX,
|
||||||
|
|
|
@ -36,7 +36,7 @@ impl Seen {
|
||||||
#[aoc_generator(day15)]
|
#[aoc_generator(day15)]
|
||||||
pub fn input_generator(input: &str) -> Data {
|
pub fn input_generator(input: &str) -> Data {
|
||||||
input
|
input
|
||||||
.split(",")
|
.split(',')
|
||||||
.map(|num| num.parse())
|
.map(|num| num.parse())
|
||||||
.collect::<Result<Vec<usize>, _>>()
|
.collect::<Result<Vec<usize>, _>>()
|
||||||
.unwrap()
|
.unwrap()
|
||||||
|
@ -56,11 +56,11 @@ fn get_number(start: &[usize], num_turns: usize) -> usize {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[aoc(day15, part1)]
|
#[aoc(day15, part1)]
|
||||||
pub fn solve_part1(input: &Data) -> usize {
|
pub fn solve_part1(input: &[usize]) -> usize {
|
||||||
return get_number(input, 2020);
|
return get_number(input, 2020);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[aoc(day15, part2)]
|
#[aoc(day15, part2)]
|
||||||
pub fn solve_part2(input: &Data) -> usize {
|
pub fn solve_part2(input: &[usize]) -> usize {
|
||||||
return get_number(input, 30_000_000);
|
return get_number(input, 30_000_000);
|
||||||
}
|
}
|
||||||
|
|
10
src/day16.rs
10
src/day16.rs
|
@ -13,7 +13,7 @@ type Data = Input;
|
||||||
pub fn input_generator(input: &str) -> Data {
|
pub fn input_generator(input: &str) -> Data {
|
||||||
let l = input.lines();
|
let l = input.lines();
|
||||||
let ranges: HashMap<String, Vec<(usize, usize)>> = l
|
let ranges: HashMap<String, Vec<(usize, usize)>> = l
|
||||||
.take_while(|l| l.trim().len() != 0)
|
.take_while(|l| !l.trim().is_empty())
|
||||||
.map(|s| {
|
.map(|s| {
|
||||||
let parts: Vec<_> = s.to_owned().split(": ").map(|v| v.to_owned()).collect();
|
let parts: Vec<_> = s.to_owned().split(": ").map(|v| v.to_owned()).collect();
|
||||||
let name = parts.get(0).unwrap().trim().to_owned();
|
let name = parts.get(0).unwrap().trim().to_owned();
|
||||||
|
@ -25,7 +25,7 @@ pub fn input_generator(input: &str) -> Data {
|
||||||
.map(|l| {
|
.map(|l| {
|
||||||
let r: Vec<usize> = l
|
let r: Vec<usize> = l
|
||||||
.to_owned()
|
.to_owned()
|
||||||
.split("-")
|
.split('-')
|
||||||
.map(|v| v.to_owned().parse().unwrap())
|
.map(|v| v.to_owned().parse().unwrap())
|
||||||
.collect();
|
.collect();
|
||||||
(r[0], r[1])
|
(r[0], r[1])
|
||||||
|
@ -38,12 +38,12 @@ pub fn input_generator(input: &str) -> Data {
|
||||||
let my_ticket = l
|
let my_ticket = l
|
||||||
.next()
|
.next()
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.split(",")
|
.split(',')
|
||||||
.map(|v| v.parse().unwrap())
|
.map(|v| v.parse().unwrap())
|
||||||
.collect();
|
.collect();
|
||||||
let other_tickets = l
|
let other_tickets = l
|
||||||
.skip(2)
|
.skip(2)
|
||||||
.map(|nums| nums.split(",").map(|v| v.parse().unwrap()).collect())
|
.map(|nums| nums.split(',').map(|v| v.parse().unwrap()).collect())
|
||||||
.collect();
|
.collect();
|
||||||
Data {
|
Data {
|
||||||
ranges,
|
ranges,
|
||||||
|
@ -52,7 +52,7 @@ pub fn input_generator(input: &str) -> Data {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn in_ranges(num: usize, ranges: &Vec<(usize, usize)>) -> bool {
|
fn in_ranges(num: usize, ranges: &[(usize, usize)]) -> bool {
|
||||||
let mut in_range = false;
|
let mut in_range = false;
|
||||||
for (min, max) in ranges {
|
for (min, max) in ranges {
|
||||||
in_range |= (num >= *min) && (num <= *max);
|
in_range |= (num >= *min) && (num <= *max);
|
||||||
|
|
|
@ -37,9 +37,7 @@ impl Data {
|
||||||
}
|
}
|
||||||
let nb = self.count_neighbors(nx, ny, nz);
|
let nb = self.count_neighbors(nx, ny, nz);
|
||||||
let is_active = self.active.contains(&(nx, ny, nz));
|
let is_active = self.active.contains(&(nx, ny, nz));
|
||||||
if is_active && (nb == 2 || nb == 3) {
|
if nb == 3 || is_active && nb == 2 {
|
||||||
next_active.insert((nx, ny, nz));
|
|
||||||
} else if !is_active && nb == 3 {
|
|
||||||
next_active.insert((nx, ny, nz));
|
next_active.insert((nx, ny, nz));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,9 +40,7 @@ impl Data {
|
||||||
}
|
}
|
||||||
let nb = self.count_neighbors(nx, ny, nz, nw);
|
let nb = self.count_neighbors(nx, ny, nz, nw);
|
||||||
let is_active = self.active.contains(&(nx, ny, nz, nw));
|
let is_active = self.active.contains(&(nx, ny, nz, nw));
|
||||||
if is_active && (nb == 2 || nb == 3) {
|
if nb == 3 || is_active && nb == 2 {
|
||||||
next_active.insert((nx, ny, nz, nw));
|
|
||||||
} else if !is_active && nb == 3 {
|
|
||||||
next_active.insert((nx, ny, nz, nw));
|
next_active.insert((nx, ny, nz, nw));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
#![allow(clippy::clippy::needless_return)]
|
||||||
use aoc_runner_derive::aoc_lib;
|
use aoc_runner_derive::aoc_lib;
|
||||||
pub mod day01;
|
pub mod day01;
|
||||||
pub mod day02;
|
pub mod day02;
|
||||||
|
|
Loading…
Reference in a new issue