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!


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


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


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)+`
`:''

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


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)

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.


2

Mathematica, 103 bytes

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

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!


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

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!



@ 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

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!


¿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 

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





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
    )

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

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.



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

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

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