Advent of Code 2020 day02
29643 단어 Rustadventofcodetech
part1
1-3 a: abcde
1-3 b: cdefg
2-9 c: ccccccccc
의 형식으로 PARse를 입력하여 조건의 줄 수를 되돌려줍니다.파트1
1-3 a
에서는'a
출현1
회 이상3
회 이하'라는 뜻이다.그냥 설치해.정규 표현을 사용했지만 캡처의 추출 방법이 더 좋은가...
fn solve_1(&self) -> usize {
let re: Regex = Regex::new(r"^(\d+)\-(\d+) (.): (.+)$").unwrap();
self.inputs
.iter()
.filter(|&input| {
if let Some(cap) = re.captures(input) {
let min = cap[1].parse::<usize>().unwrap();
let max = cap[2].parse::<usize>().unwrap();
let chr = cap[3].chars().next().unwrap();
let appear = cap[4].chars().filter(|&c| c == chr).count();
(min..=max).contains(&appear)
} else {
false
}
})
.count()
}
part2
해석 변경
1-3 a
은 "1
두 번째 문자나 제3
문자만 a
"임을 의미한다.index는 0-origin이 아닙니다.그 중 한 가지 조건만 만족하는 곳
matches
에서 맥로를 사용해 보았다. fn solve_2(&self) -> usize {
let re: Regex = Regex::new(r"^(\d+)\-(\d+) (.): (.+)$").unwrap();
self.inputs
.iter()
.filter(|&input| {
if let Some(cap) = re.captures(input) {
let pos1 = cap[1].parse::<usize>().unwrap();
let pos2 = cap[2].parse::<usize>().unwrap();
let chr = cap[3].chars().next().unwrap();
matches!(
(
cap[4].chars().nth(pos1 - 1) == Some(chr),
cap[4].chars().nth(pos2 - 1) == Some(chr),
),
(true, false) | (false, true),
)
} else {
false
}
})
.count()
}
code
use regex::Regex;
use std::io::{BufRead, BufReader};
struct Solution {
inputs: Vec<String>,
re: Regex,
}
impl Solution {
fn new(inputs: Vec<String>) -> Self {
Self {
inputs,
re: Regex::new(r"^(\d+)\-(\d+) (.): (.+)$").unwrap(),
}
}
fn solve_1(&self) -> usize {
self.inputs
.iter()
.filter(|&input| {
if let Some(cap) = self.re.captures(input) {
let min = cap[1].parse::<usize>().unwrap();
let max = cap[2].parse::<usize>().unwrap();
let chr = cap[3].chars().next().unwrap();
let appear = cap[4].chars().filter(|&c| c == chr).count();
(min..=max).contains(&appear)
} else {
false
}
})
.count()
}
fn solve_2(&self) -> usize {
self.inputs
.iter()
.filter(|&input| {
if let Some(cap) = self.re.captures(input) {
let pos1 = cap[1].parse::<usize>().unwrap();
let pos2 = cap[2].parse::<usize>().unwrap();
let chr = cap[3].chars().next().unwrap();
matches!(
(
cap[4].chars().nth(pos1 - 1) == Some(chr),
cap[4].chars().nth(pos2 - 1) == Some(chr),
),
(true, false) | (false, true),
)
} else {
false
}
})
.count()
}
}
Reference
이 문제에 관하여(Advent of Code 2020 day02), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/sugyan/articles/6398cd48d55174텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)