Атбаш Шифр ​​в Русте - PullRequest
       2

Атбаш Шифр ​​в Русте

0 голосов
/ 21 октября 2019

Итак, я работаю над реализацией Atbash Cipher для Rust - это упражнение на exercism.io. Я пришел из небольшого опыта C и обнаружил, что мой код довольно округлый и мучительный. Манипулирование str и String в Rust - это то, чего я пока не понял. Похоже, что это заняло бы меньше строк кода на языке C.

Ниже приведен мой код - правильно ли я делаю это для Rust, или я упускаю какую-то важную концепцию или способ сведения данных? ? Это так просто, как должно быть?

Упражнение включает получение ввода &str и вывод String, при этом каждый символ изменяется согласно шифру atbash, добавляя пробел каждые 5 символов. Включена также функция decode. Это все идет в lib.rs.

// "Encipher" with the Atbash cipher.
pub fn encode(plain: &str) -> String {
    let mut coded: String = plain.to_string();

    coded.retain(|c| c.is_ascii_alphanumeric());
    coded.make_ascii_lowercase();

    let coded_no_spacing = String::from_utf8(
        coded
            .bytes()
            .map(|c| {
                if c.is_ascii_alphabetic() {
                    122 - c + 97
                } else {
                    c
                }
            })
            .collect(),
    )
    .unwrap();

    spacer(coded_no_spacing)
}

/// "Decipher" with the Atbash cipher.
pub fn decode(cipher: &str) -> String {
    let mut out = encode(cipher);
    out.retain(|c| c.is_ascii_alphanumeric());
    out
}

fn spacer(coded_no_spacing: String) -> String {
    let mut coded_no_spacing = coded_no_spacing.chars();

    let mut temp_char = coded_no_spacing.next();
    let mut counter = 0;
    let mut coded_with_spaces = "".to_string();
    while temp_char.is_some() {
        if counter % 5 == 0 && counter != 0 {
            coded_with_spaces.push(' ');
        }
        coded_with_spaces.push(temp_char.unwrap());
        temp_char = coded_no_spacing.next();
        counter += 1;
    }
    coded_with_spaces
}

1 Ответ

0 голосов
/ 22 октября 2019

Так что это было неправильное место, чтобы публиковать подобные вещи, но в случае, если другие ученики с физическими упражнениями обнаружат это с помощью поиска в Google, я хочу указать на хороший совет, данный на users.rustlang.org.

Я сделал похожий пост, и люди там сделали несколько действительно хороших предложений .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...