Alfabeto diagonal a la entrada

26

Inspirado en esta publicación . Para aquellos que marcan esta pregunta como un duplicado, les insto a que realmente lean la pregunta para ver que la mía es una modificación de la vinculada. El que está vinculado no solicita una entrada y solo imprime el alfabeto en diagonal.

El reto

Dada una entrada entre 1-26 inclusive, imprima el alfabeto en diagonal, pero comience a imprimir verticalmente en el índice de la entrada dada.

Ejemplos

Dada la entrada:

16

Su programa debería generar:

a
 b
  c
   d
    e
     f
      g
       h
        i
         j
          k
           l
            m
             n
              o
               p
               q
               r
               s
               t
               u
               v
               w
               x
               y
               z

Entrada:

4

Salida:

a
 b
  c
   d
   e
   f
   g
   h
   i
   j
   k
   l
   m
   n
   o
   p
   q
   r
   s
   t
   v
   w
   x
   y
   z

Entrada:

1

Salida:

a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z

Entrada:

26

Salida:

a
 b
  c
   d
    e
     f
      g
       h
        i
         j
          k
           l
            m
             n
              o
               p
                q
                 r
                  s
                   t
                    u
                     v
                      w
                       x
                        y
                         z

Tanteo

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

¡Buena suerte!

SpookyGengar
fuente
66
¿Podemos elegir usar indexación 0 o 1?
notjagan
¿Es aceptable un espacio inicial consistente?
Giuseppe
¿Son aceptables los espacios finales?
Dom Hastings
¿Podemos usar mayúsculas?
Adám
¿Podemos devolver una lista de cadenas?
Adám

Respuestas:

13

Carbón de leña , 9 bytes

↘✂β⁰N↓✂βη

Pruébalo en línea!

Cómo funciona

↘✂β⁰N↓✂βη
 ✂β⁰N         the alphabet from position 0 to the input
↘               print diagonally, down and to the right
        ✂βη    the alphabet starting from the position of the input
       ↓        print downwards

Esta solución ya no funciona en la versión actual de Charcoal (probablemente debido a una corrección de errores), pero el problema se resuelve con 10 bytes ↘✂β⁰N↓✂βIθ.

notjagan
fuente
2
No estoy seguro de por qué eso funciona; Puede ser un error que se introdujo hace un par de semanas. (Normalmente tendría que usar en Iθlugar de η).
Neil
@Neil Parece roto hoy. Usar Iθ lo resuelve.
JP de la Torre
Ahorre 1 byte usando en …βNlugar de ✂β⁰N.
Neil
7

05AB1E , 11 bytes

AvNI<‚Wysú,

La primera vez que intento 05AB1E, así que estoy abierto a consejos.

Pruébalo en línea!

Si se permite una entrada indexada desde cero desde 0hasta 25, esto puede ser de 10 bytes omitiendo <.

Justin Mariner
fuente
Niiice! Exactamente lo que tengo. Intenté "levantar" pero no funciona como estaba planeado. Creo que es bastante óptimo :).
Urna mágica del pulpo
4

JavaScript (ES2017), 73 72 71 66 bytes

Ahorré algunos bytes gracias a @JustinMariner

f=(n,x=26)=>x?f(n,x-1)+(x+9).toString(36).padStart(x<n?x:n)+`
`:''
ETHproducciones
fuente
1
Esto agrega un 10después zal final debido a tener ++xantes x.toString(). Bugfixed y golfed a 68 bytes usando padStart: TIO
Justin Mariner
@JustinMariner Gracias, creo que podría cambiarme a ES8 por eso ...
ETHproductions
¿Se puede guardar algo al curry? n=>g=(x=26)=>x?f(x-1)+(x+9).toString(36).padStart(x<n?x:n)+'\n':""
Shaggy
@ Shaggy Quizás, no sé si ese tipo de curry está permitido.
ETHproductions
Ah, loco, parece que tu propuesta para permitir esto ya no es un consenso :(
Shaggy
4

Ruby, 51 46 43 bytes

->n{(0..25).map{|x|(' '*x)[0,n-1]<<(x+97)}}

Devuelve una lista de cadenas.

Parece que los chicos de Python estaban haciendo algo con sus subíndices. -5 bytes inspirándose en la mejora del Sr. Xcoder de la solución de ppperry.

Solución anterior con rjust(51 bytes):

->n{i=0;(?a..?z).map{|c|c.rjust i+=n>c.ord-97?1:0}}
m-chrzan
fuente
3

R, 99 89 bytes

@MickeyT guardó 10 bytes

función

function(x)for(i in 1:26)cat(paste(c(rep(" ",min(x,i)),letters[i]),collapse=""),sep="\n")

manifestación

f <- function(x)for(i in 1:26)cat(paste(c(rep(" ",min(x,i)),letters[i]),collapse=""),sep="\n")
f(1)
f(10)
f(15)
f(26)
Loris lento
fuente
1
Un par de pequeños ahorros. Más bien el ifelseintento min. print.noquotese puede reemplazar con catun '\n'en la pasta. El \npuede ser un retorno de carro recto. Las llaves para el cuerpo de la función se pueden soltar.
MickyT
Puede ahorrar algo más utilizando en writelugar de caty paste:write(c(rep(" ",min(x,i)),letters[i]),"",26,,"")
user2390246
3

Retina , 72 68 bytes

^
z
{2=`
$`
}T`l`_l`^.
\D
$.`$* $&¶
\d+
$* 
s`( *)( +)(?=.*¶\1 $)
$1

Pruébalo en línea! La salida incluye espacios en blanco al final. Ahorre 1 byte eliminando el espacio antes de $si se permite la indexación cero. Editar: Guardado 4 bytes usando el generador de alfabeto de @ MartinEnder. Explicación:

^
z
{2=`
$`
}T`l`_l`^.

Inserta el alfabeto.

\D
$.`$* $&¶

Diagonalízalo.

\d+
$* 

Convierta la entrada a unario como espacios.

s`( *)( +)(?=.*¶\1 $)
$1

Recorte líneas demasiado largas para que ninguna línea sea más larga que la línea en blanco al final.

Neil
fuente
2

Mathematica, 103 bytes

(T=Table;a=Alphabet[];c=Column)[c/@{T[""<>{T[" ",i],a[[i]]},{i,#}],T[""<>{T[" ",#],a[[i]]},{i,#,26}]}]&
J42161217
fuente
2

Pyth , 21 17 15 bytes

Hecho en un teléfono con 3% de batería.

VlG+*d?>QNNQ@GN

Explicación:

VlG        For each character in the alphabet (G)
+          Concatenate...
 *d        Space (d) times...
   ?>QNNQ  Ternary; if Q (input) is less than N, return N, else Q
 @GN       The Nth character of the alphabet (G)

Pruébalo en línea!

Stan Strum
fuente
1
@totallyhuman Acabo de comer una pizza increíble en Las Vegas, Nuevo México
Stan Strum
Encontré algunos enfoques considerablemente más cortos, y decidí publicar mi propia respuesta .
Sr. Xcoder
@ Mr.Xcoder Sí, buen trabajo en eso.
Stan Strum
2

Lisp común, 84 bytes

(lambda(x)(dotimes(i 26)(format t"~v,,,@a~%"(if(< i x)(1+ i)x)(code-char(+ i 97)))))

Pruébalo en línea!

Renzo
fuente
2

Python , 52 bytes

Muy sorprendido, nadie notó que el enfoque obvio también era tan corto como los demás.

lambda k:[(i*" ")[:k-1]+chr(i+97)for i in range(26)]

Pruébalo en línea!

Python , 53 bytes

lambda k:[min(k-1,i)*" "+chr(i+97)for i in range(26)]

Pruébalo en línea!

Sr. Xcoder
fuente
2

Haskell, 58 54 bytes

f n=do m<-[1..26];([2..min n m]>>" ")++['`'..]!!m:"\n"

Pruébalo en línea!

Cómo funciona

f n=                  -- input number is n
  do m<-[1..26]       -- for each m from [1..26], construct a string and concatenate
                      -- them into a single string. The string is:
   [2..min n m]>>" "  -- min(n,m)-1 spaces,
      ++              -- followed by
   ['`'..]!!m         -- the m-th char after `
      :               -- followed by
   "\n"               -- a newline 

Editar: @Lynn guardó 4 bytes. ¡Gracias!

nimi
fuente
@ Lynn; ¡Gracias! Siempre me olvido de hacer notación para listas.
nimi
2

Gaia , 12 bytes

…26⊃§×¦₵a+†ṣ

Pruébalo en línea!

Explicación

…             Range 0..input-1
 26⊃          Repeat the last number enough times to make it have length 26
    §×¦       Turn each number into a string of that many spaces
       ₵a+†   Add the corresponding letter to each
           ṣ  Join with newlines
Gato de negocios
fuente
1

JavaScript (Node.js) , 72 bytes

n=>[..."abcdefghijklmnopqrstuvwxyz"].map((e,i)=>" ".repeat(i<n?i:n-1)+e)

Devuelve una lista de cadenas.

Pruébalo en línea!

Conor O'Brien
fuente
¿Puedo preguntar por qué node.js? parece un JS normal válido
Downgoat
@Downgoat Es el formato automático de TIO
Conor O'Brien
por cierto, puede guardar bytes usando.padStart
Downgoat
Espera nvm de la forma en que estaba pensando, básicamente, se convierte en la respuesta de ETH
Downgoat
Cambie a ES8 y guarde un byte con en padEndlugar de repeat.
Shaggy
1

Mathematica, 67 bytes

SparseArray[x=#;{#,#~Min~x}->Alphabet[][[#]]&~Array~26,{26,#}," "]&

Devuelve una SparseArrayde cadenas. Para visualizar, anexarGrid@ al frente.

Pruébalo en Wolfram Sandbox

Uso

Grid@SparseArray[x=#;{#,#~Min~x}->Alphabet[][[#]]&~Array~26,{26,#}," "]&[5]
a
 b
  c
   d
    e
    f
    g

    ⋮

    z 
JungHwan Min
fuente
1

Python 2 , 52 bytes

lambda n:['%*c'%(min(i+1,n),i+97)for i in range(26)]

Pruébalo en línea!

Supongo que una lista de cadenas está bien ...

Lo más corto que pude obtener con recursividad:

f=lambda n,i=0:i<26and['%*c'%(min(i+1,n),i+97)]+f(n,i+1)or[]
totalmente humano
fuente
1

C # (.NET Core) , 66 + 18 bytes

n=>new int[26].Select((x,i)=>$"{(char)(i+97)}".PadLeft(i<n?i+1:n))

El recuento de bytes también incluye

using System.Linq;

Pruébalo en línea!

Esto devuelve una colección de cadenas, una para cada línea. Si no está permitido, la respuesta aumentará en 17 bytes para string.Concat()y\n dentro de la cadena

Explicación:

n =>
    new int[26]                      // Create a new collection of size 26
    .Select((x, i) =>                // Replace its members with:
        $"{(char)(i + 97)}"          // String of an alphabet character corresponding to the index
        .PadLeft(i < n ? i + 1 : n)  // Add spaces to the left
    )
Grzegorz Puławski
fuente
1

MATL, 14 bytes

26:tiXl2Y2oZ?c

Pruébalo en MATL Online

Explicación

26      % number literal
:       % range; vector of equally spaced values [1...26]
t       % duplicate
i       % explicitly grab the input
Xl      % clamp the array to have a maximum value of the input
2Y2     % predefined literal: ['a'...'z']
o       % convert to a numeric array
Z?      % create sparse matrix using the first two inputs as the rows/columns 
        % and the letters 'a'...'z' as the values
c       % convert back to character and implicitly display
Suever
fuente
1

Pyth , 12 bytes

j.e+<*kdtQbG

Pruébalo aquí!

Si se permiten listas de cadenas, esto se puede acortar a 11 bytes :

.e+<*kdtQbG

Pyth , 12 bytes

VG+<*dxGNtQN

Pruébalo aquí!

Pyth , 14 bytes

jm+<*d;tQ@Gd26

Pruébalo aquí

Si se permiten listas de cadenas, esto se puede acortar a 13 bytes :

m+<*d;tQ@Gd26

¿Cómo funcionan estos?

A diferencia de la mayoría de las otras respuestas, este mapa / bucles sobre el alfabeto en minúsculas en las 3 soluciones.

Explicación # 1

j.e+<*kdtQbG - Full program.

 .e        G - Enumerated map over "abcdefghijklmnopqrstuvwxyz", with indexes k and values b.
     *kd     - Repeat a space a number of times equal to the letter's index.
    <   tQ   - Crop the spaces after the input.
   +      b  - Concatenate with the letter.
j            - (Optional): Join by newlines.

Explicación # 2

VG+<*dxGNtQN  - Full program.

VG            - For N in "abcdefghijklmnopqrstuvwxyz".
      xGN     - Index of the letter in the alphabet.
    *d        - Repeat the space a number of times equal to the index above.
   <     tQ   - But crop anything higher than the input.
  +        N  - Append the letter (at the end)

Explicación # 3

jm+<*d;tQ@Gd26 - Full program.

 m          26 - Map over [0...26) with a variable d.
    *d;        - Space repeated d times.
   <   tQ      - Crop anything whose length is higher than the input.
  +      @Gd   - Concatenate with the letter at that index in the alphabet.
j              - (Optional): Join by newlines.
Sr. Xcoder
fuente
1

Haskell, 60 bytes

f n=unlines$scanl(\p c->take(n-1)(p>>" ")++[c])"a"['b'..'z']

Esta es una función que devuelve la salida como una cadena.

Pruébalo en línea.

Cristian Lupascu
fuente
1

Japt , 16 13 bytes

Guardado 3 bytes gracias a @Oliver

;C£RiXiYmUÉ î

¡Pruébalo en línea!

ETHproducciones
fuente
@ Oliver Dang, estaba cansado ...
ETHproductions
1

q / kdb +, 33 31 bytes

Solución:

-1{(&[x-1;til 26]#'" "),'.Q.a};

Ejemplo:

q)-1{(&[x-1;til 26]#'" "),'.Q.a}16;
a
 b
  c
   d
    e
     f
      g
       h
        i
         j
          k
           l
            m
             n
              o
               p
               q
               r
               s
               t
               u
               v
               w
               x
               y
               z

Explicación:

Cree una lista de espacios (26) hasta la longitud del mínimo de la entrada y el rango de 0..25), únase con cada letra del alfabeto, imprima en stdout.

-1{(&[x-1;til 26]#'" "),'.Q.a}; / solution
-1                            ; / print result to stdout and swallow return
  {                          }  / lambda function
                         .Q.a   / "abcd..xyz"
                       ,'       / concatenate (,) each
   (                  )         / do all this together
    &[   ;      ]               / minimum of each 
      x-1                       / implicit input (e.g. 10) minus 1 (e.g. 9)
          til 26                / 0 1 2 ... 23 24 25
                   '#" "        / take " " each number of times (0 1 2 )

Notas:

  • -2 bytes reajustando los corchetes
callejero
fuente
1

Java 1.8 (sin Lambda), 98 bytes

void m(int i){int c=0,o=97;String s="";for(;c++<26;s+=c<i?" ":"")System.out.println(s+(char)o++);}

La lógica es directa. No proporciona validación de datos de entrada, ¡muy mal!

  • Actualización: ¡Solo función! Gracias a @Olivier Grégoire
Douglas Held
fuente
1
Para ahorrar algunos bytes, use for(;c++<26;s+=c<i?" ":"")System.out.println(s+(char)o++);También, puede escribir solo una función o una lambda en lugar de un programa completo.
Olivier Grégoire
Si tuviera que incluir solo el cuerpo de una función, ¿cómo sabría el lector a qué se a[0]refiere? Creo que los fragmentos no son justos si no se compilan; El desafío es igual de interesante con un lenguaje rico en constructos.
Douglas celebrada el
1
¡Hola! Dije una función o una lambda, no un fragmento. ;-) Para que pueda escribir void f(int i){...}(no necesita estática) o en i->{...}lugar de todo su programa. Ver todos los consejos de Java . Vea mi respuesta para este mismo desafío , como ejemplo. Diviértete en el sitio! :-)
Olivier Grégoire