52 lines
1.1 KiB
Rust
52 lines
1.1 KiB
Rust
pub fn calculate_ratio(matches: usize, length: usize) -> f32 {
|
|
if length != 0 {
|
|
return 2.0 * matches as f32 / length as f32;
|
|
}
|
|
return 1.0;
|
|
}
|
|
|
|
|
|
pub fn str_with_similar_chars(c: char, length: usize) -> String {
|
|
let mut s = String::new();
|
|
for _ in 0..length {
|
|
s.push_str(&c.to_string());
|
|
}
|
|
s
|
|
}
|
|
|
|
|
|
pub fn count_leading(line: &str, c: char) -> usize {
|
|
let (mut i, n) = (0, line.len());
|
|
let line: Vec<char> = line.chars().collect();
|
|
while (i < n) && line[i] == c {
|
|
i += 1;
|
|
}
|
|
return i;
|
|
}
|
|
|
|
|
|
pub fn format_range_unified(start: usize, end: usize) -> String {
|
|
let mut beginning = start + 1;
|
|
let length = end - start;
|
|
if length == 1 {
|
|
return beginning.to_string();
|
|
}
|
|
if length == 0 {
|
|
beginning -= 1;
|
|
}
|
|
format!("{},{}", beginning, length)
|
|
}
|
|
|
|
|
|
pub fn format_range_context(start: usize, end: usize) -> String {
|
|
let mut beginning = start + 1;
|
|
let length = end - start;
|
|
if length == 0 {
|
|
beginning -= 1
|
|
}
|
|
if length <= 1 {
|
|
return beginning.to_string();
|
|
}
|
|
format!("{},{}", beginning, beginning + length - 1)
|
|
}
|