Fatias de alfabetos triangulares

15

Dado um número de entrada nde 1para 26(ou 0para 25), imprima o alfabeto lendo da esquerda para a direita até e inclusive a letra correspondente, com a=1, b=2, c=3, .... A torção é que as letras também devem ser repetidas verticalmente, correspondendo à sua posição no alfabeto. Os números ímpares (quando 1indexados) devem ser equilibrados na linha horizontal, enquanto os números pares devem alternar entre favorecer a parte superior ou inferior (você pode escolher qual direção seguir primeiro). Se você estiver indexando 0, troque ímpar / par na frase anterior.

Redigido de outra maneira - se o valor alfabético de uma letra ? for #, deve haver #cópias dessa letra na saída, todas elas na #quinta coluna. Essas letras devem ser equilibradas acima e abaixo da linha horizontal que possui o a. Se as letras não puderem ser equilibradas uniformemente, alterne com a letra "extra" acima e abaixo dessa linha.

Aqui estão as seis primeiras saídas (n = 1,2,3,4,5,6 indexadas em 1, escolhendo alternar primeiro para a parte inferior), separadas por novas linhas, para que você possa ver o padrão. Comentários explicando o padrão começam com #.

a         # On a line by itself

ab
 b        # The "extra" letter is below the horizontal

  c
abc       # The 'c' splits evenly
 bc

   d      # Because the 'b' was below, the extra 'd' must be above
  cd
abcd
 bcd


   de
  cde
abcde     # The 'e' balances
 bcde
    e

   def
  cdef
abcdef
 bcdef
    ef
     f    # Since the 'd' was above, the extra 'f' must be below

(pule alguns para n=26)

                       xyz
                      wxyz
                   tuvwxyz
                  stuvwxyz
               pqrstuvwxyz
              opqrstuvwxyz
           lmnopqrstuvwxyz
          klmnopqrstuvwxyz
       hijklmnopqrstuvwxyz
      ghijklmnopqrstuvwxyz
   defghijklmnopqrstuvwxyz
  cdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
 bcdefghijklmnopqrstuvwxyz
    efghijklmnopqrstuvwxyz
     fghijklmnopqrstuvwxyz
        ijklmnopqrstuvwxyz
         jklmnopqrstuvwxyz
            mnopqrstuvwxyz
             nopqrstuvwxyz
                qrstuvwxyz
                 rstuvwxyz
                    uvwxyz
                     vwxyz
                        yz
                         z

Regras

  • Você pode optar por imprimir em maiúsculas ou minúsculas, mas deve ser consistente.
  • A saída não pode ter espaços em branco externos, exceto uma nova linha à direita opcional.
  • Um programa completo ou uma função são aceitáveis.
  • O número de entrada pode ser obtido através de qualquer formato adequado .
  • As brechas padrão são proibidas.
  • Isso é portanto todas as regras usuais de golfe se aplicam e o código mais curto (em bytes) vence.
AdmBorkBork
fonte

Respostas:

5

Geléia ,2018 bytes

Ḷ&2’×ḶỤØaḣ⁸¤ṫW€UGU

Porta da minha resposta Python. Experimente online.

EDIT: Dennis salvou dois bytes usando (classificar) em vez de Þ(classificar por)!

Lynn
fonte
8

Python 2, 101 99 bytes

r=range(input())
for x in sorted(r,key=lambda x:x*-(x&2)):print bytearray([97+i,32][i<x]for i in r)

O xsot salvou dois bytes ao realizar o x*-(x&2)suficiente como uma chave de classificação - a metade inferior da imagem resultante não é afetada devido à sortedgarantia de uma classificação estável.

Lynn
fonte
Você não pode soltar a -para produzir as linhas na ordem inversa, o que eu acredito que é permitido?
Neil
Eu acho que x*-(x&2)funciona.
xsot
2

JavaScript (ES6), 127 126 bytes

n=>[...Array(n).keys()].sort((a,b)=>a*~-(a&2)-b*~-(b&2)).map(i=>` `.repeat(i)+`abcdefghijklmnopqrstuvwxyz`.slice(i,n)).join`\n`

Usa o truque de classificação de @ Lynn. Escrever o alfabeto inteiro era dois bytes mais barato que calculá-lo. Edit: Salvo 1 byte graças a @ETHproductions, porque esqueci de observar que, \nna verdade, representa o caractere literal de nova linha. (Não gosto de inserir novas linhas literais na minha resposta quando a linha é tão longa.)

Neil
fonte
Salve dois bytes no alfabeto: btoa`...` where ...é substituído pelo resultado de atob`abcdefghijklmnopqrstuvwxyzz` . (Além disso, você pode substituir \npor uma nova linha literal).
ETHproductions
@ETHproductions Suponho que estaria usando codificação ISO, em vez de UTF?
Neil
Sim, seria. É permitido usar o ISO-8859-1 em vez do UTF-8 em JS?
ETHproductions
@ETHproductions Provavelmente, mas não consigo fazê-lo funcionar, por isso não o mostrarei.
Neil