1pub fn generate_pattern(input: &str) -> String {
2 let mut result = String::new();
3
4 if let Some((text, symbol)) = input.split_once('-') {
5 let symbol = symbol.trim().to_string(); let text = text.trim().to_uppercase();
7
8 let cols = text.len() * 6 + 1;
10 let mut grid = vec![vec![String::from(" "); cols]; 6]; let mut col = 0;
14
15 for ch in text.chars() {
16 draw_character(&mut grid, ch, &symbol, col);
17 col += 6;
18 }
19
20 for row in 0..6 {
22 for col in 0..cols {
23 result.push_str(&grid[row][col]);
24 }
25 result.push('\n');
26 }
27 } else {
28 result.push_str("Invalid input format. Use 'Text - *'.\n");
29 }
30
31 result
32}
33
34fn draw_character(grid: &mut Vec<Vec<String>>, ch: char, symbol: &str, col: usize) {
35 match ch {
36 'A' => {
37 for row in 0..6 {
38 grid[row][col] = symbol.to_string();
39 grid[row][col + 4] = symbol.to_string();
40 if row == 0 || row == 2 {
41 grid[row][col + 1] = symbol.to_string();
42 grid[row][col + 2] = symbol.to_string();
43 grid[row][col + 3] = symbol.to_string();
44 }
45 }
46 }
47 'B' => {
48 for row in 0..6 {
49 grid[row][col] = symbol.to_string();
50 if row == 0 || row == 2 || row == 5 {
51 grid[row][col + 1] = symbol.to_string();
52 grid[row][col + 2] = symbol.to_string();
53 grid[row][col + 3] = symbol.to_string();
54 }
55 grid[row][col + 4] = symbol.to_string();
56 }
57 }
58 'C' => {
59 for row in 0..6 {
60 grid[row][col] = symbol.to_string();
61 if row == 0 || row == 5 {
62 grid[row][col + 1] = symbol.to_string();
63 grid[row][col + 2] = symbol.to_string();
64 grid[row][col + 3] = symbol.to_string();
65 }
66 }
67 }
68 'D' => {
69 for row in 0..6 {
70 grid[row][col] = symbol.to_string();
71 if row == 0 || row == 5 {
72 grid[row][col + 1] = symbol.to_string();
73 grid[row][col + 2] = symbol.to_string();
74 }
75 grid[row][col + 3] = symbol.to_string();
76 }
77 }
78 'E' => {
79 for row in 0..6 {
80 grid[row][col] = symbol.to_string();
81 if row == 0 || row == 2 || row == 5 {
82 grid[row][col + 1] = symbol.to_string();
83 grid[row][col + 2] = symbol.to_string();
84 grid[row][col + 3] = symbol.to_string();
85 }
86 }
87 }
88 'F' => {
89 for row in 0..6 {
90 grid[row][col] = symbol.to_string();
91 if row == 0 || row == 2 {
92 grid[row][col + 1] = symbol.to_string();
93 grid[row][col + 2] = symbol.to_string();
94 grid[row][col + 3] = symbol.to_string();
95 }
96 }
97 }
98 'G' => {
99 for row in 0..6 {
100 grid[row][col] = symbol.to_string();
101 if row == 0 || row == 5 {
102 grid[row][col + 1] = symbol.to_string();
103 grid[row][col + 2] = symbol.to_string();
104 grid[row][col + 3] = symbol.to_string();
105 }
106 if row >= 2 {
107 grid[row][col + 3] = symbol.to_string();
108 }
109 }
110 }
111 'H' => {
112 for row in 0..6 {
113 grid[row][col] = symbol.to_string();
114 grid[row][col + 4] = symbol.to_string();
115 if row == 2 {
116 grid[row][col + 1] = symbol.to_string();
117 grid[row][col + 2] = symbol.to_string();
118 grid[row][col + 3] = symbol.to_string();
119 }
120 }
121 }
122 'I' => {
123 for row in 0..6 {
124 grid[row][col + 2] = symbol.to_string();
125 if row == 0 || row == 5 {
126 grid[row][col] = symbol.to_string();
127 grid[row][col + 1] = symbol.to_string();
128 grid[row][col + 3] = symbol.to_string();
129 grid[row][col + 4] = symbol.to_string();
130 }
131 }
132 }
133 'J' => {
134 for row in 0..6 {
135 grid[row][col + 3] = symbol.to_string();
136 if row == 5 {
137 grid[row][col] = symbol.to_string();
138 grid[row][col + 1] = symbol.to_string();
139 grid[row][col + 2] = symbol.to_string();
140 }
141 if row == 0 {
142 grid[row][col + 1] = symbol.to_string();
143 grid[row][col + 2] = symbol.to_string();
144 }
145 }
146 }
147 'K' => {
148 for row in 0..6 {
149 grid[row][col] = symbol.to_string();
150 if row < 3 {
151 grid[row][col + 4 - row] = symbol.to_string();
152 } else {
153 grid[row][col + row - 1] = symbol.to_string();
154 }
155 }
156 }
157 'L' => {
158 for row in 0..6 {
159 grid[row][col] = symbol.to_string();
160 if row == 5 {
161 grid[row][col + 1] = symbol.to_string();
162 grid[row][col + 2] = symbol.to_string();
163 grid[row][col + 3] = symbol.to_string();
164 }
165 }
166 }
167 'M' => {
168 for row in 0..6 {
169 grid[row][col] = symbol.to_string();
170 grid[row][col + 4] = symbol.to_string();
171 if row == 1 {
172 grid[row][col + 1] = symbol.to_string();
173 grid[row][col + 3] = symbol.to_string();
174 }
175 if row == 2 {
176 grid[row][col + 2] = symbol.to_string();
177 }
178 }
179 }
180 'N' => {
181 for row in 0..6 {
182 grid[row][col] = symbol.to_string();
183 grid[row][col + 4] = symbol.to_string();
184 grid[row][col + row] = symbol.to_string();
185 }
186 }
187 'O' => {
188 for row in 0..6 {
189 grid[row][col] = symbol.to_string();
190 grid[row][col + 4] = symbol.to_string();
191 if row == 0 || row == 5 {
192 grid[row][col + 1] = symbol.to_string();
193 grid[row][col + 2] = symbol.to_string();
194 grid[row][col + 3] = symbol.to_string();
195 }
196 }
197 }
198 'P' => {
199 for row in 0..6 {
200 grid[row][col] = symbol.to_string();
201 if row <= 2 {
202 grid[row][col + 4] = symbol.to_string();
203 }
204 if row == 0 || row == 2 {
205 grid[row][col + 1] = symbol.to_string();
206 grid[row][col + 2] = symbol.to_string();
207 grid[row][col + 3] = symbol.to_string();
208 }
209 }
210 }
211 'Q' => {
212 for row in 0..6 {
213 if row < 4 {
214 grid[row][col] = symbol.to_string();
215 grid[row][col + 4] = symbol.to_string();
216 }
217 if row == 0 || row == 3 {
218 grid[row][col + 1] = symbol.to_string();
219 grid[row][col + 2] = symbol.to_string();
220 grid[row][col + 3] = symbol.to_string();
221 }
222 if row >= 3 {
223 grid[row][col + row - 2] = symbol.to_string();
224 }
225 }
226 }
227 'R' => {
228 for row in 0..6 {
229 grid[row][col] = symbol.to_string();
230 if row <= 2 {
231 grid[row][col + 4] = symbol.to_string();
232 }
233 if row == 0 || row == 2 {
234 grid[row][col + 1] = symbol.to_string();
235 grid[row][col + 2] = symbol.to_string();
236 grid[row][col + 3] = symbol.to_string();
237 }
238 if row >= 3 {
239 grid[row][col + row - 1] = symbol.to_string();
240 }
241 }
242 }
243 'S' => {
244 for row in 0..6 {
245 if row == 0 || row == 2 || row == 5 {
246 grid[row][col] = symbol.to_string();
247 grid[row][col + 1] = symbol.to_string();
248 grid[row][col + 2] = symbol.to_string();
249 grid[row][col + 3] = symbol.to_string();
250 }
251 if row < 2 {
252 grid[row][col] = symbol.to_string();
253 }
254 if row > 2 && row < 5 {
255 grid[row][col + 3] = symbol.to_string();
256 }
257 }
258 }
259 'T' => {
260 for row in 0..6 {
261 grid[row][col + 2] = symbol.to_string();
262 if row == 0 {
263 grid[row][col] = symbol.to_string();
264 grid[row][col + 1] = symbol.to_string();
265 grid[row][col + 3] = symbol.to_string();
266 grid[row][col + 4] = symbol.to_string();
267 }
268 }
269 }
270 'U' => {
271 for row in 0..6 {
272 grid[row][col] = symbol.to_string();
273 grid[row][col + 4] = symbol.to_string();
274 if row == 5 {
275 grid[row][col + 1] = symbol.to_string();
276 grid[row][col + 2] = symbol.to_string();
277 grid[row][col + 3] = symbol.to_string();
278 }
279 }
280 }
281 'V' => {
282 for row in 0..6 {
283 if row < 4 {
284 grid[row][col] = symbol.to_string();
285 grid[row][col + 4] = symbol.to_string();
286 } else {
287 grid[row][col + (row - 3)] = symbol.to_string();
288 grid[row][col + 4 - (row - 3)] = symbol.to_string();
289 }
290 }
291 }
292 'W' => {
293 for row in 0..6 {
294 grid[row][col] = symbol.to_string();
295 grid[row][col + 4] = symbol.to_string();
296 if row >= 3 {
297 grid[row][col + 2] = symbol.to_string();
298 }
299 if row == 4 {
300 grid[row][col + 1] = symbol.to_string();
301 grid[row][col + 3] = symbol.to_string();
302 }
303 }
304 }
305 'X' => {
306 for row in 0..6 {
307 grid[row][col + row] = symbol.to_string();
308 grid[row][col + 4 - row] = symbol.to_string();
309 }
310 }
311 'Y' => {
312 for row in 0..6 {
313 if row < 3 {
314 grid[row][col + row] = symbol.to_string();
315 grid[row][col + 4 - row] = symbol.to_string();
316 } else {
317 grid[row][col + 2] = symbol.to_string();
318 }
319 }
320 }
321 'Z' => {
322 for row in 0..6 {
323 if row == 0 || row == 5 {
324 grid[row][col] = symbol.to_string();
325 grid[row][col + 1] = symbol.to_string();
326 grid[row][col + 2] = symbol.to_string();
327 grid[row][col + 3] = symbol.to_string();
328 grid[row][col + 4] = symbol.to_string();
329 } else {
330 grid[row][col + 4 - row] = symbol.to_string();
331 }
332 }
333 }
334 _ => {}
335 }
336}
337
338#[cfg(test)]
340mod tests {
341 use super::*;
342
343 #[test]
344 fn test_basic_pattern() {
345 let result = generate_pattern("HI - *");
346 assert!(result.contains('*'));
347 }
348
349 #[test]
350 fn test_invalid_input() {
351 let result = generate_pattern("invalid");
352 assert!(result.contains("Invalid input format"));
353 }
354}