29 lines
766 B
Rust
29 lines
766 B
Rust
|
struct Translation<'a> {
|
||
|
find: &'a str,
|
||
|
replacement: &'a str,
|
||
|
}
|
||
|
|
||
|
pub fn replace_chars(input: &str) -> String {
|
||
|
let trs: Vec<Translation<'_>> = input
|
||
|
.lines()
|
||
|
.filter_map(|line| {
|
||
|
line.strip_prefix("#REPLACE ")
|
||
|
.and_then(|l| l.rsplit_once(' '))
|
||
|
.and_then(|(first, second)| {
|
||
|
let length = std::cmp::min(first.len(), second.len());
|
||
|
Some(Translation {
|
||
|
find: &first[0..length],
|
||
|
replacement: &second[0..length],
|
||
|
})
|
||
|
})
|
||
|
})
|
||
|
.collect();
|
||
|
|
||
|
let mut new = input.to_string();
|
||
|
for tr in trs {
|
||
|
new = new.replace(tr.find, tr.replacement);
|
||
|
}
|
||
|
|
||
|
new
|
||
|
}
|