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.


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.


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).


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"

* 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!


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.


@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!


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>


6

Excel VBA, 38 bytes

Usando a janela imediata. :)

[A1:A26]="=REPT(CHAR(96+ROW()),ROW())"

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

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.


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

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

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

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)


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'

@ 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++))};

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.


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

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
}


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.


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

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 .


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!



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.


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!


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)

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.