parent
fea6adcf63
commit
8872c7cbc7
@ -0,0 +1,29 @@
|
|||||||
|
use std::collections::HashSet;
|
||||||
|
use failure::Error;
|
||||||
|
|
||||||
|
pub fn solve(input: &str) -> Result<String, Error> {
|
||||||
|
Ok(input
|
||||||
|
.trim()
|
||||||
|
.lines()
|
||||||
|
.map(|line| Passphrase { words: line.into() })
|
||||||
|
.filter(Passphrase::is_valid)
|
||||||
|
.count()
|
||||||
|
.to_string())
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Passphrase {
|
||||||
|
words: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Passphrase {
|
||||||
|
fn is_valid(&self) -> bool {
|
||||||
|
let mut words = HashSet::new();
|
||||||
|
return !self.words.split_whitespace().any(|word| {
|
||||||
|
if words.contains(word) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
words.insert(word);
|
||||||
|
return false;
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,36 @@
|
|||||||
|
use std::collections::HashSet;
|
||||||
|
use failure::Error;
|
||||||
|
|
||||||
|
pub fn solve(input: &str) -> Result<String, Error> {
|
||||||
|
Ok(input
|
||||||
|
.trim()
|
||||||
|
.lines()
|
||||||
|
.map(|line| Passphrase { words: line.into() })
|
||||||
|
.filter(Passphrase::is_valid)
|
||||||
|
.count()
|
||||||
|
.to_string())
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Passphrase {
|
||||||
|
words: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Passphrase {
|
||||||
|
fn is_valid(&self) -> bool {
|
||||||
|
let mut words = HashSet::new();
|
||||||
|
return !self.words
|
||||||
|
.split_whitespace()
|
||||||
|
.map(|word| {
|
||||||
|
let mut chars: Vec<String> = word.chars().map(|x| x.to_string()).collect();
|
||||||
|
chars.sort();
|
||||||
|
chars.as_slice().join("")
|
||||||
|
})
|
||||||
|
.any(|word| {
|
||||||
|
if words.contains(&word) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
words.insert(word);
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in new issue