| 1 | 1 | def rows(letter): |
| 2 | | pass |
| 2 | # Edge Case: invalid input characters (non-alphabetic) |
| 3 | if not letter.isalpha(): |
| 4 | raise ValueError("Input must be a letter") |
| 5 | |
| 6 | # Edge Case: single letter input ('A') |
| 7 | if letter.upper() == 'A': |
| 8 | return ['A'] |
| 9 | |
| 10 | letter = letter.upper() |
| 11 | n = ord(letter) - ord('A') |
| 12 | result = [] |
| 13 | |
| 14 | # Generate top half including middle row |
| 15 | for i in range(n + 1): |
| 16 | current_char = chr(ord('A') + i) |
| 17 | |
| 18 | # Edge Case: first row contains one 'A' |
| 19 | if i == 0: |
| 20 | row = ' ' * n + current_char + ' ' * n |
| 21 | else: |
| 22 | # All rows, except the first and last, have exactly two identical letters |
| 23 | left_spaces = ' ' * (n - i) |
| 24 | middle_spaces = ' ' * (2 * i - 1) |
| 25 | row = left_spaces + current_char + middle_spaces + current_char + left_spaces |
| 26 | |
| 27 | result.append(row) |
| 28 | |
| 29 | # Generate bottom half (mirror of top half, excluding middle row) |
| 30 | for i in range(n - 1, -1, -1): |
| 31 | result.append(result[i]) |
| 32 | |
| 33 | # Handled Edge Cases: single letter input ('A'), invalid input characters (non-alphabetic), first row contains one 'A' |
| 34 | return result |