pub fn generate_pattern(input: &str) -> String {
let mut result = String::new();
if let Some((text, symbol)) = input.split_once('-') {
let symbol = symbol.trim().to_string(); let text = text.trim().to_uppercase();
let cols = text.len() * 6 + 1;
let mut grid = vec![vec![String::from(" "); cols]; 6]; let mut col = 0;
for ch in text.chars() {
draw_character(&mut grid, ch, &symbol, col);
col += 6;
}
for row in 0..6 {
for col in 0..cols {
result.push_str(&grid[row][col]);
}
result.push('\n');
}
} else {
result.push_str("Invalid input format. Use 'Text - *'.\n");
}
result
}
fn draw_character(grid: &mut Vec<Vec<String>>, ch: char, symbol: &str, col: usize) {
match ch {
'A' => {
for row in 0..6 {
grid[row][col] = symbol.to_string();
grid[row][col + 4] = symbol.to_string();
if row == 0 || row == 2 {
grid[row][col + 1] = symbol.to_string();
grid[row][col + 2] = symbol.to_string();
grid[row][col + 3] = symbol.to_string();
}
}
}
'B' => {
for row in 0..6 {
grid[row][col] = symbol.to_string();
if row == 0 || row == 2 || row == 5 {
grid[row][col + 1] = symbol.to_string();
grid[row][col + 2] = symbol.to_string();
grid[row][col + 3] = symbol.to_string();
}
grid[row][col + 4] = symbol.to_string();
}
}
'C' => {
for row in 0..6 {
grid[row][col] = symbol.to_string();
if row == 0 || row == 5 {
grid[row][col + 1] = symbol.to_string();
grid[row][col + 2] = symbol.to_string();
grid[row][col + 3] = symbol.to_string();
}
}
}
'D' => {
for row in 0..6 {
grid[row][col] = symbol.to_string();
if row == 0 || row == 5 {
grid[row][col + 1] = symbol.to_string();
grid[row][col + 2] = symbol.to_string();
}
grid[row][col + 3] = symbol.to_string();
}
}
'E' => {
for row in 0..6 {
grid[row][col] = symbol.to_string();
if row == 0 || row == 2 || row == 5 {
grid[row][col + 1] = symbol.to_string();
grid[row][col + 2] = symbol.to_string();
grid[row][col + 3] = symbol.to_string();
}
}
}
'F' => {
for row in 0..6 {
grid[row][col] = symbol.to_string();
if row == 0 || row == 2 {
grid[row][col + 1] = symbol.to_string();
grid[row][col + 2] = symbol.to_string();
grid[row][col + 3] = symbol.to_string();
}
}
}
'G' => {
for row in 0..6 {
grid[row][col] = symbol.to_string();
if row == 0 || row == 5 {
grid[row][col + 1] = symbol.to_string();
grid[row][col + 2] = symbol.to_string();
grid[row][col + 3] = symbol.to_string();
}
if row >= 2 {
grid[row][col + 3] = symbol.to_string();
}
}
}
'H' => {
for row in 0..6 {
grid[row][col] = symbol.to_string();
grid[row][col + 4] = symbol.to_string();
if row == 2 {
grid[row][col + 1] = symbol.to_string();
grid[row][col + 2] = symbol.to_string();
grid[row][col + 3] = symbol.to_string();
}
}
}
'I' => {
for row in 0..6 {
grid[row][col + 2] = symbol.to_string();
if row == 0 || row == 5 {
grid[row][col] = symbol.to_string();
grid[row][col + 1] = symbol.to_string();
grid[row][col + 3] = symbol.to_string();
grid[row][col + 4] = symbol.to_string();
}
}
}
'J' => {
for row in 0..6 {
grid[row][col + 3] = symbol.to_string();
if row == 5 {
grid[row][col] = symbol.to_string();
grid[row][col + 1] = symbol.to_string();
grid[row][col + 2] = symbol.to_string();
}
if row == 0 {
grid[row][col + 1] = symbol.to_string();
grid[row][col + 2] = symbol.to_string();
}
}
}
'K' => {
for row in 0..6 {
grid[row][col] = symbol.to_string();
if row < 3 {
grid[row][col + 4 - row] = symbol.to_string();
} else {
grid[row][col + row - 1] = symbol.to_string();
}
}
}
'L' => {
for row in 0..6 {
grid[row][col] = symbol.to_string();
if row == 5 {
grid[row][col + 1] = symbol.to_string();
grid[row][col + 2] = symbol.to_string();
grid[row][col + 3] = symbol.to_string();
}
}
}
'M' => {
for row in 0..6 {
grid[row][col] = symbol.to_string();
grid[row][col + 4] = symbol.to_string();
if row == 1 {
grid[row][col + 1] = symbol.to_string();
grid[row][col + 3] = symbol.to_string();
}
if row == 2 {
grid[row][col + 2] = symbol.to_string();
}
}
}
'N' => {
for row in 0..6 {
grid[row][col] = symbol.to_string();
grid[row][col + 4] = symbol.to_string();
grid[row][col + row] = symbol.to_string();
}
}
'O' => {
for row in 0..6 {
grid[row][col] = symbol.to_string();
grid[row][col + 4] = symbol.to_string();
if row == 0 || row == 5 {
grid[row][col + 1] = symbol.to_string();
grid[row][col + 2] = symbol.to_string();
grid[row][col + 3] = symbol.to_string();
}
}
}
'P' => {
for row in 0..6 {
grid[row][col] = symbol.to_string();
if row <= 2 {
grid[row][col + 4] = symbol.to_string();
}
if row == 0 || row == 2 {
grid[row][col + 1] = symbol.to_string();
grid[row][col + 2] = symbol.to_string();
grid[row][col + 3] = symbol.to_string();
}
}
}
'Q' => {
for row in 0..6 {
if row < 4 {
grid[row][col] = symbol.to_string();
grid[row][col + 4] = symbol.to_string();
}
if row == 0 || row == 3 {
grid[row][col + 1] = symbol.to_string();
grid[row][col + 2] = symbol.to_string();
grid[row][col + 3] = symbol.to_string();
}
if row >= 3 {
grid[row][col + row - 2] = symbol.to_string();
}
}
}
'R' => {
for row in 0..6 {
grid[row][col] = symbol.to_string();
if row <= 2 {
grid[row][col + 4] = symbol.to_string();
}
if row == 0 || row == 2 {
grid[row][col + 1] = symbol.to_string();
grid[row][col + 2] = symbol.to_string();
grid[row][col + 3] = symbol.to_string();
}
if row >= 3 {
grid[row][col + row - 1] = symbol.to_string();
}
}
}
'S' => {
for row in 0..6 {
if row == 0 || row == 2 || row == 5 {
grid[row][col] = symbol.to_string();
grid[row][col + 1] = symbol.to_string();
grid[row][col + 2] = symbol.to_string();
grid[row][col + 3] = symbol.to_string();
}
if row < 2 {
grid[row][col] = symbol.to_string();
}
if row > 2 && row < 5 {
grid[row][col + 3] = symbol.to_string();
}
}
}
'T' => {
for row in 0..6 {
grid[row][col + 2] = symbol.to_string();
if row == 0 {
grid[row][col] = symbol.to_string();
grid[row][col + 1] = symbol.to_string();
grid[row][col + 3] = symbol.to_string();
grid[row][col + 4] = symbol.to_string();
}
}
}
'U' => {
for row in 0..6 {
grid[row][col] = symbol.to_string();
grid[row][col + 4] = symbol.to_string();
if row == 5 {
grid[row][col + 1] = symbol.to_string();
grid[row][col + 2] = symbol.to_string();
grid[row][col + 3] = symbol.to_string();
}
}
}
'V' => {
for row in 0..6 {
if row < 4 {
grid[row][col] = symbol.to_string();
grid[row][col + 4] = symbol.to_string();
} else {
grid[row][col + (row - 3)] = symbol.to_string();
grid[row][col + 4 - (row - 3)] = symbol.to_string();
}
}
}
'W' => {
for row in 0..6 {
grid[row][col] = symbol.to_string();
grid[row][col + 4] = symbol.to_string();
if row >= 3 {
grid[row][col + 2] = symbol.to_string();
}
if row == 4 {
grid[row][col + 1] = symbol.to_string();
grid[row][col + 3] = symbol.to_string();
}
}
}
'X' => {
for row in 0..6 {
grid[row][col + row] = symbol.to_string();
grid[row][col + 4 - row] = symbol.to_string();
}
}
'Y' => {
for row in 0..6 {
if row < 3 {
grid[row][col + row] = symbol.to_string();
grid[row][col + 4 - row] = symbol.to_string();
} else {
grid[row][col + 2] = symbol.to_string();
}
}
}
'Z' => {
for row in 0..6 {
if row == 0 || row == 5 {
grid[row][col] = symbol.to_string();
grid[row][col + 1] = symbol.to_string();
grid[row][col + 2] = symbol.to_string();
grid[row][col + 3] = symbol.to_string();
grid[row][col + 4] = symbol.to_string();
} else {
grid[row][col + 4 - row] = symbol.to_string();
}
}
}
_ => {}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_basic_pattern() {
let result = generate_pattern("HI - *");
assert!(result.contains('*'));
}
#[test]
fn test_invalid_input() {
let result = generate_pattern("invalid");
assert!(result.contains("Invalid input format"));
}
}