Escalera del alfabeto


30

El reto

Su tarea es crear un programa o función que genere lo siguiente sin 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

Tanteo

Este es el , por lo que gana la respuesta más corta en cada idioma.


44
Salida como lista de líneas?
Totalmente humano el

55
¿Podemos usar el alfabeto en mayúsculas en su lugar?
Uriel

99
¡Me faltaban los desafíos del alfabeto! (pero no dejes que Leaky Nun sepa)
Luis Mendo

99
Trabajé muy duro comprobando si era un engañado y aparentemente no lo es
Azul

44
@totallyhuman eso depende de ti.
SpookyGengar

Respuestas:


14

05AB1E , 2 bytes

Pruébalo en línea!

Tenga en cuenta que esto se muestra como una lista de líneas, como lo permite explícitamente el OP. El enlace utiliza una versión con letra bonita (unida por líneas nuevas).

Cómo funciona

  • A produce el alfabeto en minúsculas.
  • ƶ levanta el alfabeto (multiplica cada elemento por su índice).
  • » se une por nuevas líneas.


9

APL (Dyalog) , 12 8 5 bytes SBCS

3 bytes guardados gracias a @ngn

4 bytes guardados gracias a @ Adám

⍴⍨⌸⎕A

Las letras mayúsculas clarificadas por OP son válidas, así como las salidas como una matriz de cadenas.

Pruébalo en línea!

¿Cómo?

nos da todas las letras del ⎕Aalfabeto con sus índices, entregados a la función ⍴⍨con la letra como argumento izquierdo y el índice es como argumento derecho.

⍴⍨resha es su argumento de la derecha a la longitud suministrada por su izquierda. cambia la izquierda y la derecha (por lo tanto, el símbolo de la misma, se parece a la cara de alguien que lee esta explicación).


819⌶↑⎕A⍴¨⍨⍳26
Adám

@ Adám gracias! Intenté todas las variaciones de / y \, ignoré completamente la forma ⍨
Uriel el

Puedes quitar el también.
Adám

@ Adám pero se vería más feo ⍨
Uriel

¡Enciende el boxeo!
Adám

8

Haskell , 27 bytes

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

Pruébalo en línea! Devuelve una lista de líneas. (Gracias a @totallyhuman por señalar que esto ahora está permitido)

Explicación:

             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"

* reverencias * ¿ Explicación para un novato? ¿ <$Repite su primer argumento n veces, donde n es la longitud de su segundo argumento?
Totalmente humano el

@totallyhuman Ahí tienes. No dude en preguntar en Of Monads and Men si tiene más preguntas.
Laikoni

Hay algunos operadores muy interesantes en Prelude ... ¡Gracias por la explicación!
Totalmente humano el

7

brainfuck , 74 bytes

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

Pruébalo en línea!

Explicación

++++++++[>+>+++>++++++++++++<<<-]>++>++>+>+
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        <<.
                        >]

Pruébalo en línea!


7

Befunge-98 (FBBI) , 27 bytes

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

donde es un carácter de sustitución (ASCII 26)

Pruébalo en línea!

Utiliza letras mayúsculas y tiene una nueva línea final.

Explicación

El código funciona almacenando un contador (0 inicialmente) y en cada bucle:

  • 1+ - Incrementa en 1
  • :0\:: - Empuja cosas para que la pila se vea así: bottom [N, 0, N, N, N] top
  • '`j'@ - Comprueba si el contador es mayor que 26
    • j'@ - Si es así, saltamos sobre el ' y usando@
    • j'@- Si no es así, ejecutamos el ', que empuja el valor ASCII @a la pila

Ahora la pila se ve así: bottom [N, 0, N, N, 64] top

  • +\ - Agrega, luego cambia los 2 principales: bottom [N, 0, (N+64), N] top la primera vez, esto es ASCII 65, oA
  • k:- Duplica el segundo de los mejores (N+1)tiempos: ahora hay (N+2)valores de (N+64)en la pila (más el Ny0 de antes)
  • $$ - Deseche los 2 valores principales: ahora solo hay N valores de(N+64)
  • >:#,_- Imprime cada valor superior hasta llegar a un 0- esto significa Ncopias de(N+64) obtener impreso
  • $ - Tira la 0 - Ahora la pila es soloN
  • a, - Imprime una entrada

Y se repite


Me gusta cómo usé @ambos para terminar el programa y para agregar al contador.


@JamesHolderness Sí. Gracias por atrapar eso!
MildlyMilquetoast

7

rubí , 32 30 bytes

-2 bytes gracias a @EricDuminil.

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

Pruébalo en línea!


1
Excelente. Según un comentario de OP, se permiten nuevas líneas finales / iniciales. En ese caso 27.times{|n|puts (n+96).chr*n}sería correcto con 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 la Ventana Inmediata. :)

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

Ah Mi error. Pensé que era Excel porque usaba las Funciones de Excel usando la Ventana Inmediata.
Remoel

Puede soltar un byte quitando la terminal"
Taylor Scott


5

Rubí, 38 bytes.

Devuelve una matriz de cadenas

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

-5 bytes gracias a totalmente humano

* -11 bytes gracias a algunos excelentes campos de golf de Jordan.


Esto es solo 48 bytes por mi cuenta .
Jordan

1
No necesitas "\n"nada; putslo hace por usted (aunque para futuras referencias $/es 2 bytes más corto), pero puede deshacerse por putscompleto si hace de esto una lambda que solo devuelve una matriz de líneas. También puede cambiar a=[*?a..?z];puts a.mapa puts (a=*?a..?z).mapy x*(a.index(x)+1)para x*-~a.index(x). En total son 38 bytes .
Jordan

La versión de 38 bytes funciona bien en TiO (ver enlace en comentario anterior). Tenga en cuenta que (a=*?a..?z)está dentro del bloque, no los argumentos que forman parte de la lambda.
Jordan


4

MATL , 9 bytes

2Y2"@X@Y"

Pruébalo en línea!

Explicación

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

¿Sabes por qué &no se puede usar para duplicar y transponer2Y2 ?
Stewie Griffin

@StewieGriffin en &realidad no duplica ni transpone, aunque a veces produce el mismo resultado que eso. Lo que hace es modificar el número de entradas / salidas de la siguiente función. Por ejemplo, si usa &+, la +función ahora toma una entrada en lugar de dos, y genera la suma de la entrada con ella misma transpuesta. Pero eso es solo porque así es como + funciona con 1 entrada (igual para =, >y algunos otros)
Luis Mendo


4

Jalea ,  5  4 bytes

abuso de implementación furtiva de Python

-1 byte gracias a Adám (la salida de una lista de líneas se ha permitido; ya que ahora tiene una función de escritura en lugar de un programa)

Øa×J

Un enlace niládico que devuelve una lista de cadenas, las líneas
(para imprimirlo con las nuevas líneas como un programa completo, solo agregue Ynuevamente ).

Pruébalo en línea! (el pie de página llama al enlace como nilad (¢) y obtiene la representación de Python del resultado (ŒṘ) para mayor claridad ya que el comportamiento predeterminado del programa completo aplastaría el resultado comoabbccc...)

¿Cómo?

Ø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, tal vez, podemos "generar" una lista de líneas, pero debemos "crear un programa", cuando se ejecuta como un programa, la salida del cuatro byter se rompe para no tener ninguna indicación de su naturaleza de lista.
Jonathan Allan

programa o función
Adám

4

MATL , 11 bytes

2Y2t!g*!YRc

Pruébalo en línea!

Utiliza la multiplicación de difusión con unos para obtener una matriz cuadrada grande de 26x26 de las letras deseadas. A continuación, se toma la parte triangular inferior y se imprime implícitamente.

También 11 bytes:

2Y2!t~!+YRc  % Using broadcast addition with zeroes
2Y2!l26X"YR  % Using 'repmat'

@StewieGriffin Realmente estaba comentando a medias su respuesta de Octave sobre la coincidencia de encontrar la misma solución.
Sanchises

4

Javascript, 87 bytes , 72 bytes (Muchas gracias a @steenbergh)

Mi primera respuesta también:

for(i=1,j=97;j<123;){console.log(String.fromCharCode(j++).repeat(i++))};

¡Bienvenido! Parece que puedes acortarlo un poco eliminando los espacios ind=1al principio, el punto i<123y coma después y el punto y coma final. también, haga su encabezado un poco más claro indicando el idioma: bytecount, prefijado con un #.
steenbergh el

Puede guardar seis bytes si se jfor(i=1;i<27;){console.log(String.fromCharCode(i+96).repeat(i++))}
elimina

@steenbergh gracias una vez más, eres tan amable de ayudarme.
NTCG

4

Japt , 9 7 bytes

Emite una matriz de líneas

;C¬Ëp°E

Intentalo


Explicación

Divide ( ¬) el alfabeto en minúsculas ( ;C) en una matriz de caracteres, mapea sobre la matriz ( Ë) y repite ( p) el elemento actual por el índice actual ( E) incrementado ( °) veces.


Exactamente lo que tenía, excepto que usé®p°Y
ETHproductions

3

Pip , 9 bytes

FczPcX++i

Pruébalo en línea!

En pseudocódigo, esto es

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

donde zestá preestablecido al alfabeto en minúscula yi está preestablecido a 0.


Las soluciones basadas en mapas toman un byte adicional porque necesitan que el -nindicador se muestre en varias líneas:

{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
}

Pruébalo en línea!

Con comentarios

# 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

Una respuesta relativamente poco interesante. Itere ide 1 a 26, imprima la iletra de la letra del alfabeto iveces (con un salto de línea implícito).

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

Pruébalo en línea!

Un enfoque más interesante podría ser usar algo como lo siguiente:

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

Esto nos da todas las letras en la cantidad correcta, pero sin saltos de línea. Quizás alguien más inteligente que yo pueda encontrar una manera de usar eso para dar una respuesta más golfista.


2
No estoy seguro de cómo utilizar el segundo método, tampoco, pero sé que rep(letters, 1:26)es mucho más corto ...
Giuseppe

@Giuseppe Hah! Como dije, definitivamente se necesita "alguien más inteligente que yo".
rturnbull



3

PHP, 47 46 bytes

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

o

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

Ejecutar -nro probarlo en línea .


3

J , 18 17 bytes

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

Explicación:

              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:

Pruébalo en línea!



3

Octava , 25 24 bytes

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

Pruébalo en línea!

Ahorré un byte gracias a Giuseppe, quien me informó que OP permite letras mayúsculas.

Explicación:

Cree un vector xcon los valores ASCII del alfabeto en mayúsculas y transpórtelo. Agregue el negado x(por lo tanto, 26 ceros, en un vector de fila, para crear una cuadrícula con (los valores ASCII de):

AAAA
BBBB
CCCC

Tome la matriz triangular inferior y conviértala en caracteres concatenando con la cadena vacía.


3

C (gcc) , 48 bytes 50 bytes

Versión re-ejecutable, según cleblanc y Steadybox en los comentarios a continuación.

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

Pruébalo en línea!


1
Buena respuesta. Creo que su función fallará la próxima vez que se llame y de acuerdo con este enlace debería ser reutilizable; codegolf.meta.stackexchange.com/questions/4939/…
cleblanc

Aquí hay una versión fija en 50 bytes: s[9];main(i){for(;i<27;)puts(memset(s,i+95,i++));}Aún supera mi respuesta por unos pocos bytes :)
Steadybox


3

Japt, 17 16 11 bytes

-5 bytes gracias a Oliver

En ISO-8859-1

;26ÆCgX pXÄ

No es el mejor puntaje, pero sigo siendo un novato. Cualquier sugerencia es muy bienvenida.

Lista de salidas de líneas, según OP permitido. El enlace contiene 3 bytes más para líneas nuevas.

Pruébalo en línea!

;                      - 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
¡Agradable! 1oBÊÄpuede ser sustituido por 26õ. Puede guardar un par de bytes más haciendo algo como;26ÆCgX pXÄ
Oliver

@ Oliver ¿Cómo diablos no vi que 26 es más corto que la longitud del alfabeto? Gracias. Además, lo malo que no encontré es oel fargumento ...
RedClover
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.