fn encrypt(plaintext: &str, key: usize) -> String {
let mut ciphertext = String::new();
let padded_length = (plaintext.len() + key - 1) / key * key;
let mut padded_plaintext = plaintext.to_string();
padded_plaintext.extend(std::iter::repeat('.').take(padded_length - plaintext.len()));
let mut grid = vec![vec!['.'; key]; padded_length / key];
for (i, ch) in padded_plaintext.chars().enumerate() {
let row = i / key;
let col = i % key;
grid[row][col] = ch;
}
for col in 0..key {
for row in &grid {
ciphertext.push(row[col]);
}
}
ciphertext
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn simple_encrypt() {
let result = encrypt("Hello, world!", 4);
assert_eq!(result, "Hoo!e,r.l l.lwd.");
}
}