Veja a seguinte string. Observe um padrão?
ABEFNOPEFGH DC GQI MHRJ LKJI SK DTL PORRA BAZYXWV N EO DP CQ BAZYXWVUTSR
Como alguns devem ter notado, é basicamente uma espiral do alfabeto, onde as distâncias entre linhas / colunas aumentam gradualmente em 1 espaço / nova linha.
Definição rigorosa
- Vamos ter um contador c , que é inicialmente 0.
- Nós escrevemos a primeira c + 1 letras do alfabeto da esquerda para a direita:
A
. Em seguida, de cima para baixo a próxima (c + 1) (c + 2) / 2 letras (ADD
B
):AB
.Da esquerda para a direita, o próximo (c + 1) (c + 2) / 2 (adicionar
C
):AB C
E de baixo para cima, as próximas c + 1 letras (adicionar
D
):AB DC
Atingiu o final do ciclo. Portanto, vamos incrementar c (que se torna 1). Em seguida, ele começa a partir do primeiro passo, a única diferença é que, em vez de usar as primeiras letras c + 1 do alfabeto, usamos as próximas letras c + 1 , começando no último elemento desse ciclo (
D
neste caso, então continuamos comEFG...
). QuandoZ
é atingido, volta a partir deA
.
Tarefa
Dado um número inteiro N (que é positivo para indexação 1 ou não negativo para indexação 0), produz os primeiros N ciclos da espiral.
Regras
Você pode usar o alfabeto minúsculo ou maiúsculo, mas sua escolha deve ser consistente (use apenas um deles, a mistura não é permitida).
Você pode obter entrada e fornecer saída através de qualquer um dos métodos padrão , em qualquer linguagem de programação , observando que essas brechas são proibidas por padrão.
Formatos de saída aceitáveis: sequência multilinha, uma lista de sequências representando linhas, uma lista contendo várias listas de caracteres, cada uma representando uma linha ou qualquer outra coisa que você achar adequado. Caso você não escolha o primeiro formato, seria bom incluir uma versão bonita do seu código.
Isso é código-golfe , portanto o código mais curto em bytes (em cada idioma) que atende aos requisitos vence!
Casos de teste
O número inteiro de entrada será separado por sua saída correspondente por meio de uma nova linha e os testes serão separados usando traços. Observe que estes são indexados em 1.
1 AB DC -------- 2 ABEF DC G MH LKJI -------- 3 ABEFNOP DC GQ MHR LKJI S DT CU BAZYXWV ------- 4 ABEFNOPEFGH DC GQI MHRJ LKJI SK DTL PORRA BAZYXWV N EO DP CQ BAZYXWVUTSR ------- 5 ABEFNOPEFGHFGHIJ DC GQIK MHRJL LKJI SKM DTLN CUMO BAZYXWV NP EOQ DPR CQS BAZYXWVUTSR T RU QV PW BOI NMLKJIHGFEDCBAZY ------ 6 ABEFNOPEFGHFGHIJSTUVWX DC GQIKY MHRJLZ LKJI SKMA DTLNB CUMOC BAZYXWV NPD EOQE DPRF CQSG BAZYXWVUTSR TH RUI QVJ PWK OXL NMLKJIHGFEDCBAZY M SN RO QP PQ OU NMLKJIHGFEDCBAZYXWVUTS