-
Notifications
You must be signed in to change notification settings - Fork 520
/
main.rs
81 lines (69 loc) · 2.04 KB
/
main.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
#![feature(test)]
extern crate test;
use test::Bencher;
fn main() {
println!("Hello, world!");
}
use std::collections::HashSet;
pub fn is_pangram_all_contains(sentence: &str) -> bool {
let sentence_lowered = sentence.to_lowercase();
('a'..='z').all(|ltr| sentence_lowered.contains(ltr))
}
pub fn is_pangram_hash_is_subset(sentence: &str) -> bool {
let all: HashSet<char> = HashSet::from_iter("abcdefghijklmnopqrstuvwxyz".chars());
let used: HashSet<char> = HashSet::from_iter(sentence.to_lowercase().chars());
all.is_subset(&used)
}
pub fn is_pangram_hashset_len(sentence: &str) -> bool {
sentence
.to_lowercase()
.chars()
.filter(|c| c.is_ascii_alphabetic())
.collect::<HashSet<char>>()
.len()
== 26
}
const A_LCASE: u8 = 97;
const A_UCASE: u8 = 65;
const ALL_26_BITS_SET: u32 = 67108863;
pub fn is_pangram_bitfield(sentence: &str) -> bool {
let mut letter_flags = 0;
for letter in sentence.chars() {
if letter >= 'a' && letter <= 'z' {
letter_flags |= 1 << (letter as u8 - A_LCASE);
} else if letter >= 'A' && letter <= 'Z' {
letter_flags |= 1 << (letter as u8 - A_UCASE);
}
}
letter_flags == ALL_26_BITS_SET
}
#[bench]
fn is_pangram_all_contains(b: &mut Bencher) {
b.iter(|| {
is_pangram_all_contains(
"Victor jagt zwölf_(12) Boxkämpfer quer über den großen Sylter Deich.",
)
});
}
#[bench]
fn is_pangram_hash_is_subset(b: &mut Bencher) {
b.iter(|| {
is_pangram_hash_is_subset(
"Victor jagt zwölf_(12) Boxkämpfer quer über den großen Sylter Deich.",
)
});
}
#[bench]
fn is_pangram_hashset_len(b: &mut Bencher) {
b.iter(|| {
is_pangram_hashset_len(
"Victor jagt zwölf_(12) Boxkämpfer quer über den großen Sylter Deich.",
)
});
}
#[bench]
fn is_pangram_bitfield(b: &mut Bencher) {
b.iter(|| {
is_pangram_bitfield("Victor jagt zwölf_(12) Boxkämpfer quer über den großen Sylter Deich.")
});
}