-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathpuzzler.rs
88 lines (86 loc) · 2.41 KB
/
puzzler.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
use std::env;
use std::fs::File;
use std::io::{self, BufRead};
fn matches(word:&String) -> bool {
let mut prev = ' ';
for c in word.to_lowercase().chars() {
match prev {
' ' => match c {
'b'|'c'|'e'|'g'|'h'|'l'|'n'|'o'|'r'|'s'|'t'|'w'|'y' => (),
_ => return false
},
'b' => match c {
'r'|'l'|'o'|'t'|'y' => (),
_ => return false
},
'r' => match c {
'c'|'e'|'o'|'l'|'b' => (),
_ => return false
},
'c' => match c {
'h'|'g'|'o'|'e'|'r' => (),
_ => return false
},
'h' => match c {
's'|'w'|'o'|'g'|'c' => (),
_ => return false
},
's' => match c {
'y'|'n'|'o'|'w'|'h' => (),
_ => return false
},
'y' => match c {
'b'|'t'|'o'|'n'|'s' => (),
_ => return false
},
'l' => match c {
'b'|'r'|'e'|'o'|'t' => (),
_ => return false
},
'e' => match c {
'r'|'c'|'g'|'o'|'l' => (),
_ => return false
},
'g' => match c {
'e'|'c'|'h'|'w'|'o' => (),
_ => return false
},
'w' => match c {
'o'|'g'|'h'|'s'|'n' => (),
_ => return false
},
'n' => match c {
't'|'o'|'w'|'s'|'y' => (),
_ => return false
},
't' => match c {
'b'|'l'|'o'|'n'|'y' => (),
_ => return false
},
'o' => match c {
'b'|'l'|'r'|'e'|'c'|'g'|'h'|'w'|'s'|'n'|'y'|'t' => (),
_ => return false
},
_ => return false
}
prev = c
}
return true
}
fn main() {
let args: Vec<String> = env::args().collect();
let filename = if args.len() > 1 {
args[1].to_string()
} else {
"/usr/share/dict/words".to_string()
};
let file = File::open(filename).unwrap();
let lines = io::BufReader::new(file).lines();
for line in lines {
if let Ok(word) = line {
if matches(&word) {
println!("{}", word);
}
}
}
}