Escadaria do alfabeto

30

O desafio

Sua tarefa é criar um programa ou função que produza o seguinte sem entrada:

a
bb
ccc
dddd
eeeee
ffffff
ggggggg
hhhhhhhh
iiiiiiiii
jjjjjjjjjj
kkkkkkkkkkk
llllllllllll
mmmmmmmmmmmmm
nnnnnnnnnnnnnn
ooooooooooooooo
pppppppppppppppp
qqqqqqqqqqqqqqqqq
rrrrrrrrrrrrrrrrrr
sssssssssssssssssss
tttttttttttttttttttt
uuuuuuuuuuuuuuuuuuuuu
vvvvvvvvvvvvvvvvvvvvvv
wwwwwwwwwwwwwwwwwwwwwww
xxxxxxxxxxxxxxxxxxxxxxxx
yyyyyyyyyyyyyyyyyyyyyyyyy
zzzzzzzzzzzzzzzzzzzzzzzzzz

Pontuação

Isso é , então a resposta mais curta em cada idioma vence.

SpookyGengar
fonte
4
Saída como lista de linhas?
totallyhuman
5
Podemos usar o alfabeto maiúsculo?
Uriel
9
Eu estava perdendo os desafios do alfabeto! (mas não deixe Leaky Nun saber)
Luis Mendo
9
Eu trabalhei muito duro verificando se era um idiota e, aparentemente, não é #
Blue
4
@totallyhuman isso é com você.
SpookyGengar

Respostas:

14

05AB1E , 2 bytes

Experimente online!

Observe que isso gera como uma lista de linhas, conforme o OP explicitamente permitido. O link usa uma versão com impressão bonita (unida por novas linhas).

Como funciona

  • A produz o alfabeto em minúsculas.
  • ƶ levanta o alfabeto (multiplica cada elemento pelo seu índice).
  • » junta-se por novas linhas.
Mr. Xcoder
fonte
9

APL (Dyalog) , 12 8 5 bytes SBCS

3 bytes salvos graças a @ngn

4 bytes salvos graças a @ Adám

⍴⍨⌸⎕A

As letras maiúsculas esclarecidas OP são válidas, assim como a saída como uma matriz de strings.

Experimente online!

Quão?

nos fornece todas as letras do ⎕Aalfabeto com seus índices, entregues à função ⍴⍨com a letra como argumento à esquerda e o índice es como argumento à direita.

⍴⍨Resha es seu argumento direito do comprimento fornecido pela sua esquerda. alterna a esquerda e a direita (portanto, o símbolo dela, parecendo o rosto de alguém lendo esta explicação).

Uriel
fonte
819⌶↑⎕A⍴¨⍨⍳26
Adám 8/17/17
@ Adám obrigado! Eu tentei todas as variações de / e \, completamente ignorado forma ⍨
Uriel
Você pode remover o também.
Adám 8/11
@ Adão, mas ele ficaria mais feio ⍨
Uriel
Ligue o boxe!
Adám 8/11
8

Haskell , 27 bytes

[c<$['a'..c]|c<-['a'..'z']]

Experimente online! Retorna uma lista de linhas. (Obrigado a @totallyhuman por apontar que isso agora é permitido)

Explicação:

             c<-['a'..'z']  -- for each character c from 'a' to 'z'
[           |c<-['a'..'z']] -- build the list of
[   ['a'..c]|c<-['a'..'z']] -- the lists from 'a' to c, e.g. "abcd" for c='d'
[c<$['a'..c]|c<-['a'..'z']] -- with each element replaced by c itself, e.g. "dddd"
Laikoni
fonte
* arcos * Explicação para um noob? Será que <$repetir seu primeiro argumento n vezes, onde n é o comprimento do seu segundo argumento?
totallyhuman
@totallyhuman Lá vai você. Sinta-se à vontade para perguntar em Mônadas e Homens se tiver mais perguntas.
Laikoni
Existem operadores muito interessantes no Prelude ... Obrigado pela explicação!
totallyhuman
7

brainfuck , 74 bytes

++++++++[>+>+++>++++++++++++<<<-]>++>++>+>+<<[->>[->+<<.>]>[-<+>]<+<+<<.>]

Experimente online!

Explicação

++++++++[>+>+++>++++++++++++<<<-]>++>++>+>+
TAPE:
  000
  010   C_NEWLINE
  026   V_ITERCOUNT
  097   V_ALPHA
 >001<  V_PRINTCOUNT
  000   T_PRINTCOUNT

V_ITERCOUNT TIMES:      <<[-   

  V_PRINTCOUNT TIMES:     >>[-
    INC T_PRINTCOUNT        >+
    OUTPUT V_ALPHA          <<.
                          >]

  RESTORE V_PRINTCOUNT    >[-<+>]
  INC V_PRINTCOUNT        <+
  INC V_ALPHA             <+
  OUTPUT C_NEWLINE        <<.
                        >]

Experimente online!

Conor O'Brien
fonte
7

Befunge-98 (FBBI) , 27 bytes

1+:0\::'`j'@+\k:$$>:#,_$a,

onde é um caractere de substituição (ASCII 26)

Experimente online!

Usa letras maiúsculas e tem uma nova linha à direita.

Explicação

O código funciona armazenando um contador (0 inicialmente) e em cada loop:

  • 1+ - Incrementa em 1
  • :0\:: - Empurra as coisas para que a pilha fique assim: bottom [N, 0, N, N, N] top
  • '`j'@ - Verifica se o contador é maior que 26
    • j'@- Se for, pulamos e saímos 'usando@
    • j'@- Caso contrário, executamos o ', que envia o valor ASCII @para a pilha

Agora a pilha fica assim: bottom [N, 0, N, N, 64] top

  • +\- Adiciona e depois alterna entre as 2 principais: na bottom [N, 0, (N+64), N] top primeira vez, é ASCII 65 ouA
  • k:- Duplicatas a segunda das principais (N+1)vezes - agora há (N+2)valores de (N+64)na pilha (mais o Ne 0de mais cedo)
  • $$- Jogue fora os 2 principais valores - agora existem apenas Nvalores de(N+64)
  • >:#,_- Imprime cada valor máximo até chegar a 0- isso significa Ncópias de (N+64)impressões
  • $- Joga fora o 0- Agora a pilha é apenasN
  • a, - Imprime uma entrada

E repete


Eu gosto de como usei os @dois para finalizar o programa e adicionar ao contador.

MildlyMilquetoast
fonte
@JamesHolderness Yep. Obrigado por capturar isso!
MildlyMilquetoast
7

Ruby , 32 30 bytes

-2 bytes graças a @EricDuminil.

27.times{|n|puts (n+96).chr*n}

Experimente online!

Jordânia
fonte
1
Excelente. De acordo com um comentário do OP, novas linhas à direita / à direita são permitidas. Nesse caso, 27.times{|n|puts (n+96).chr*n}estaria correto com 30 bytes
Eric Duminil
6

JavaScript (ES6), 54 bytes

f=(n=9)=>++n<36?n.toString(36).repeat(n-9)+`
`+f(n):''

O.innerText = f()
<pre id=O></pre>

Arnauld
fonte
6

Excel VBA, 38 bytes

Usando a janela imediata. :)

[A1:A26]="=REPT(CHAR(96+ROW()),ROW())"
remoel
fonte
Ah Minha culpa. Eu pensei que era o Excel porque usei as Funções do Excel usando a Janela Imediata.
Remoel
Você pode deixar cair um byte, removendo o terminal"
Taylor Scott
5

BASH, 59 54 40 bytes

for l in {a..z};{
a+=a
echo ${a//a/$l}
}

Experimente online!

THX. 5 bytes para @Justin Mariner

Ipor Sircer
fonte
1
O forloop pode ser reduzido usando esta dica para 54 bytes: Experimente online!
9788 Justin Mariner às
5

Ruby, 38 bytes

Retorna uma matriz de strings

->{(a=*?a..?z).map{|x|x*-~a.index(x)}}

-5 bytes graças a totallyhuman

* -11 bytes graças a um excelente golfe da Jordânia.

Mostrar nome
fonte
Isso é apenas 48 bytes pela minha contagem .
Jordan
1
Você não precisa de "\n"nada; putsfaz isso por você (embora, para referência futura, $/seja 2 bytes mais curto) - mas você pode se livrar putscompletamente disso se fizer disso um lambda que apenas retorna uma matriz de linhas. Você também pode mudar a=[*?a..?z];puts a.mappara puts (a=*?a..?z).mape x*(a.index(x)+1)para x*-~a.index(x). No total, são 38 bytes .
Jordan
A versão de 38 bytes funciona bem no TiO (veja o link no comentário anterior). Observe que ele (a=*?a..?z)está dentro do bloco, não os argumentos que fazem parte do lambda.
Jordânia
4

V , 9 bytes

¬az\ÓÎÛäl

Experimente online!

Hexdump:

00000000: ac61 7a5c d3ce dbe4 6c                   .az\....l
DJMcMayhem
fonte
4

MATL , 9 bytes

2Y2"@X@Y"

Experimente online!

Explicação

2Y2     % Push string 'abc...z'
"       % For char in that string each
  @     %   Push current char
  X@    %   Push iteration index (1-based)
  Y"    %   Run-length decoding: repeat char that many times
        % Implicit end. Implicit display
Luis Mendo
fonte
Você sabe por &que não pode ser usado para duplicar e transpor2Y2 ?
Stewie Griffin
O @StewieGriffin &, na verdade, não duplica e transpõe, embora às vezes produza o mesmo resultado. O que ele faz é modificar o número de entradas / saídas da próxima função. Por exemplo, se você usar &+, a +função agora pega uma entrada em vez de duas e gera a soma da entrada com ela própria transposta. Mas isso é só porque é assim que + trabalho com 1 entrada (o mesmo para =, >e alguns outros)
Luis Mendo
4

Python 3 , 37 bytes

for k in range(27):print(chr(k+96)*k)

Imprime uma nova linha inicial (o que é permitido).

Experimente online!

Luis Mendo
fonte
4

Geléia ,  5  4 bytes

abuso sorrateiro de implementação de Python

-1 byte graças a Adám (a saída de uma lista de linhas foi permitida; como, agora, está escrevendo uma função em vez de um programa)

Øa×J

Um link niládico que retorna uma lista de strings, as linhas
(para imprimi-lo com as novas linhas como um programa completo, basta adicionar Ynovamente ).

Experimente online! (o rodapé chama o link como nilad (¢) e obtém a representação em Python do resultado (ŒṘ) para maior clareza, pois o comportamento padrão do programa completo esmagaria o resultado como se fosseabbccc...)

Quão?

Øa×J - main link: no arguments
Øa   - yield the alphabet = ['a','b','c',...,'z']
   J - range of length    = [1,2,3,...,26]
  ×  - multiplication     = ["a","bb","ccc",...,"zzzzzzzzzzzzzzzzzzzzzzzzzz"]
     - (Python multiplication lengthens chars to strings - not usually a Jelly thing)
Jonathan Allan
fonte
1
Øa×J deve ser suficiente .
Adám 8/11
hmm, talvez - podemos "emitir" uma lista de linhas, mas precisamos "criar um programa" - ao executar como programa, a saída do quatro bytes é esmagada para não ter indicação da natureza da lista.
Jonathan Allan
programa ou função
Adám
4

MATL , 11 bytes

2Y2t!g*!YRc

Experimente online!

Utiliza a multiplicação de difusão com uns para obter uma grande matriz quadrada 26x26 das letras desejadas. Em seguida, a parte triangular inferior é obtida e impressa implicitamente.

Também 11 bytes:

2Y2!t~!+YRc  % Using broadcast addition with zeroes
2Y2!l26X"YR  % Using 'repmat'
Sanchises
fonte
@ StewieGriffin Na verdade, eu estava meio comentando sua resposta do Octave sobre a coincidência de encontrar a mesma solução.
Sanchises
4

Javascript, 87 bytes , 72 bytes (Muito obrigado a @steenbergh)

Minha primeira resposta também:

for(i=1,j=97;j<123;){console.log(String.fromCharCode(j++).repeat(i++))};
NTCG
fonte
Bem vinda! Parece que você pode reduzi-lo um pouco removendo os espaços ao redor ind=1no início, o ponto i<123e vírgula após e o ponto e vírgula final. além disso, torne seu cabeçalho um pouco mais claro, declarando o idioma - bytecount, prefixado com um #.
steenbergh
Você pode salvar seis bytes largando jcompletamente:for(i=1;i<27;){console.log(String.fromCharCode(i+96).repeat(i++))}
steenbergh
@steenbergh obrigado mais uma vez, como você é gentil em me ajudar.
NTCG
4

Japonês , 9 7 bytes

Produz uma matriz de linhas

;C¬Ëp°E

Tente


Explicação

Divida ( ¬) o alfabeto em minúsculas ( ;C) em uma matriz de caracteres, mapeie sobre a matriz ( Ë) e repita ( p) o elemento atual pelo índice atual ( E) incrementado ( °) vezes.

Shaggy
fonte
Exatamente o que eu tinha, a não ser que eu usei®p°Y
ETHproductions
3

Pip , 9 bytes

FczPcX++i

Experimente online!

No pseudocódigo, isso é

For-each c in z
    Print (c string-multiply ++i)

onde zé predefinido para o alfabeto em minúsculas e ié predefinido para 0.


As soluções baseadas em mapas usam um byte extra porque precisam que o -nsinalizador seja exibido em várias linhas:

{aX++i}Mz
B X_+1MEz
DLosc
fonte
3

Acc !! , 66 bytes

Count i while 26-i {
Count j while i+1-j {
Write 97+i
}
Write 10
}

Experimente online!

Com comentários

# Loop i from 0 to 25
Count i while 26-i {
    # Loop j from 0 to i (inclusive)
    Count j while i+1-j {
        # Print a letter
        Write 97+i
    }
    # Print a newline
    Write 10
}
DLosc
fonte
3

Haskell , 31 bytes

-12 bytes graças a nimi.

zipWith replicate[1..26]['a'..]

Experimente online!

Este não é um trecho, é uma função nula (que não aceita argumentos) que gera uma lista de linhas permitidas devido a esse meta consenso .

totalmente humano
fonte
3

R , 38 bytes

Uma resposta relativamente desinteressante. Itere ide 1 a 26, imprima a iletra th dos itempos do alfabeto (com uma quebra de linha implícita).

for(i in 1:26)print(rep(letters[i],i))

Experimente online!

Uma abordagem mais interessante pode ser usar algo como o seguinte:

cat(letters[(1:351*2)^.5+.5])

Isso nos dá todas as letras na quantidade certa, mas não há quebras de linha. Talvez alguém mais esperto que eu possa descobrir uma maneira de usá-la para obter uma resposta mais eficiente.

rturnbull
fonte
2
Não tenho certeza de como usar a sua segunda abordagem, também, mas eu sei que rep(letters, 1:26)é muito mais curto ...
Giuseppe
@Giuseppe Hah! Como eu disse, "alguém mais inteligente que eu" é definitivamente necessário.
rturnbull
3

Ferrugem , 82 bytes

||for i in 1..27u8{println!("{}",((i+96) as char).to_string().repeat(i as usize))}

Eu esperava que fosse muito mais curto, mas a conversão / conversão explícita entre tipos requer muitos bytes :(

Experimente online!

Wakawakamush
fonte
1
Eu tenho 76 bytes: Experimente online!
Conor O'Brien
3

PHP, 47 46 bytes

for($c=a;$i<26;)echo"
",str_pad($c,++$i,$c++);

ou

for($c=a;$i<26;)echo str_pad("
",++$i+1,$c++);

Corra com -nrou experimente online .

Titus
fonte
3

J , 18 17 bytes

a.{~(#"0+&96)i.27

Explicação:

              i.27      - list of integers 0 - 26
     (   +&96)          - adds 96 to the above list (starting offset of 'a')
      #"0               - copies the right argument left argument times  
  {~                    - select items from a list (arguments reversed)
a.                      - the whole alphabet


#"0 +&96 is a hook, which means that at first +96 is applied to the list i.27,
resulting in a list 96, 97, 98... 122, then #"0 is applied to this result. 
So it is evaluated as ((i.27)#"0(96+i.27)){a:

Experimente online!

Galen Ivanov
fonte
3

Perl 6 ,  24  23 bytes

.say for 'a'..'z'Zx 1..*

Tente

.say for 'a'..*Zx 1..26

Tente

Brad Gilbert b2gills
fonte
3

Oitava , 25 24 bytes

['',tril((x=65:90)'+~x)]

Experimente online!

Economizei um byte graças a Giuseppe, que me informou que o OP permite letras maiúsculas.

Explicação:

Crie um vetor xcom os valores ASCII do alfabeto maiúsculo e transponha-o. Adicione o negado x(assim, 26 zeros, em um vetor de linha, para criar uma grade com (os valores ASCII de):

AAAA
BBBB
CCCC

Pegue a matriz triangular inferior e converta em caracteres concatenando com a sequência vazia.

Stewie Griffin
fonte
3

C (gcc) , 48 bytes 50 bytes

Versão re-executável, conforme cleblanc e Steadybox nos comentários abaixo.

s[9];main(i){for(;i<27;)puts(memset(s,i+95,i++));}

Experimente online!

gastropner
fonte
1
Boa resposta. Acho que sua função falhará na próxima vez que for chamada e, de acordo com este link, deverá ser reutilizável; codegolf.meta.stackexchange.com/questions/4939/…
cleblanc
Aqui está uma versão fixa em 50 bytes: s[9];main(i){for(;i<27;)puts(memset(s,i+95,i++));}ainda bate a minha resposta por alguns bytes :)
Steadybox
3

Japonês, 17 16 11 bytes

-5 bytes graças a Oliver

Na ISO-8859-1

;26ÆCgX pXÄ

Não é a melhor pontuação, mas ainda sou um novato. Todas as sugestões são bem-vindas.

Lista de linhas de saída, conforme OP permitido. O link contém mais 3 bytes para novas linhas.

Experimente online!

;                      - Use string variables
 26                    - Literal 26
   Æ                   - For range 0..26
    C                  - Alphabet
     gX                -         . character at index X
        pXÄ            - Duplicate X+1 times
                       - End function (implicit)
Trevo vermelho
fonte
1
Agradável! 1oBÊÄpode ser substituído por 26õ. Você pode salvar mais alguns bytes fazendo algo como;26ÆCgX pXÄ
Oliver
@ Oliver Como diabos eu não vi que 26 é menor que o comprimento do alfabeto ?! Obrigado. Além disso, meu mal, eu não encontrei que oleva o fargumento ... #
1111 RedClover