| 1 | 1 | def rows(letter: str) -> list[str]: |
| 2 | | pass |
| 2 | # Edge Case: Empty or null input |
| 3 | if not letter: |
| 4 | return [] |
| 5 | |
| 6 | # Edge Case: Invalid input characters (non-alphabetic) |
| 7 | if not letter.isalpha() or len(letter) != 1: |
| 8 | raise ValueError("Input must be a single alphabetic character") |
| 9 | |
| 10 | # Edge Case: Case sensitivity issues - convert to uppercase |
| 11 | letter = letter.upper() |
| 12 | |
| 13 | # Edge Case: Single letter input ('A') |
| 14 | if letter == 'A': |
| 15 | return ['A'] |
| 16 | |
| 17 | # Calculate the size of the diamond |
| 18 | n = ord(letter) - ord('A') |
| 19 | |
| 20 | result = [] |
| 21 | |
| 22 | # Generate top half including middle row |
| 23 | for i in range(n + 1): |
| 24 | current_char = chr(ord('A') + i) |
| 25 | |
| 26 | if i == 0: |
| 27 | # First row: only one 'A' |
| 28 | line = ' ' * n + 'A' + ' ' * n |
| 29 | else: |
| 30 | # Other rows: two identical letters with increasing spacing |
| 31 | left_spaces = n - i |
| 32 | middle_spaces = 2 * i - 1 |
| 33 | line = ' ' * left_spaces + current_char + ' ' * middle_spaces + current_char + ' ' * left_spaces |
| 34 | |
| 35 | result.append(line) |
| 36 | |
| 37 | # Generate bottom half (mirror of top half, excluding middle row) |
| 38 | for i in range(n - 1, -1, -1): |
| 39 | result.append(result[i]) |
| 40 | |
| 41 | return result |
| 42 | |
| 43 | # Handled Edge Cases: empty or null input, invalid input characters (non-alphabetic), case sensitivity issues, single letter input ('A') |