# Diagonal Alphabet To the Input

Inspired by this post. For those marking this question as a duplicate I urge you to actually read the question to see that mine is a modification of the one linked. The one linked does not ask for an input and is to just print the alphabet diagonally.

The Challenge

Given an input between 1-26 inclusively, print the alphabet diagonally, but begin printing vertically at the index of the given input.

Examples

Given the input:

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

Input:

4

Output:

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

Input:

1

Output:

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

Input:

26

Output:

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

Scoring

This is , so the shortest answer in each language wins.

Good luck!

• May we choose to use either 0- or 1-indexing? Aug 19, 2017 at 3:45
• Is a consistent leading space acceptable? Aug 19, 2017 at 6:26
• @Giuseppe sure, no problem! Aug 22, 2017 at 17:33
• @DomHastings yes, they are! Aug 22, 2017 at 17:34
• @Adám yes to both of your questions! Aug 22, 2017 at 17:34

# Charcoal, 9 bytes

↘✂β⁰Ｎ↓✂βη

Try it online!

### How it works

↘✂β⁰Ｎ↓✂βη
✂β⁰Ｎ         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

This solution no longer works in the current version of Charcoal (most likely due to a bug fix), but the issue is resolved for 10 bytes with ↘✂β⁰Ｎ↓✂βＩθ.

• I'm not sure why that works; it may be a bug that was introduced a couple of weeks ago. (You'd normally have to use Ｉθ instead of η.)
– Neil
Aug 19, 2017 at 10:07
• @Neil It seem broken today. Using Ｉθ solves it. Aug 19, 2017 at 21:56
• Save 1 byte by using …βＮ instead of ✂β⁰Ｎ.
– Neil
Dec 21, 2017 at 15:31

# 05AB1E, 11 bytes

AvNI<‚Wysú,

First time trying 05AB1E, so I'm open to tips.

Try it online!

If a zero-indexed input from 0 to 25 is allowed, this can be 10 bytes by omitting the <.

• Niiice! Exactly what I got. I tried "lift" but it's not working as planned. I think that's pretty optimal :). Aug 22, 2017 at 19:22

## JavaScript (ES2017), 737271 66 bytes

Saved some bytes thanks to @JustinMariner

f=(n,x=26)=>x?f(n,x-1)+(x+9).toString(36).padStart(x<n?x:n)+
:''
• This adds a 10 after z at the end due to having ++x before x.toString(). Bugfixed and golfed to 68 bytes using padStart: TIO Aug 19, 2017 at 2:29
• @JustinMariner Thanks, I think I might switch to ES8 for that... Aug 19, 2017 at 2:45
• Can you save anything by currying? n=>g=(x=26)=>x?f(x-1)+(x+9).toString(36).padStart(x<n?x:n)+'\n':"" Aug 19, 2017 at 10:07
• @Shaggy Perhaps, I don't know if that type of currying is allowed though. Aug 19, 2017 at 17:06
• Ah, nuts, looks like your proposal to allow this is no longer a consensus :( Aug 21, 2017 at 8:59

# Ruby, 5146 43 bytes

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

Returns a list of strings.

Looks like the Python guys were on to something with their subscripts. -5 bytes by taking inspiration from Mr. Xcoder's improvement of ppperry's solution.

Previous solution with rjust (51 bytes):

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

# Python 2, 61 58 57 56 bytes

def f(i,j=0):exec"print(' '*~-i)[:j]+chr(97+j);j+=1;"*26

-3 bytes thanks to Rod

-2 more bytes thanks to Mr. Xcoder

• same answer, but with input/print to save few bytes
– Rod
Aug 19, 2017 at 2:08
• @Pavel That wouldn't work since then input would be called every time the for loop iterates, even though there's only one line of input. Aug 19, 2017 at 2:54
• 57 bytes using exec Aug 19, 2017 at 2:56
• 57 bytes using subscripting. Aug 19, 2017 at 7:13
• 56 bytes Aug 19, 2017 at 21:57

# Python 2, 6250 57 bytes

x=input();n=m=1
exec"print'%*c'%(m,n+96);n+=1;m+=x>m;"*26

Try it online!

Steals heavily from this answer by Dennis.

# R, 99 89 bytes

@MickeyT saved 10 bytes

### function

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

### demo

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)
• A couple of little savings. Rather then the ifelse try min. print.noquote can be replaced with cat with a '\n' in the paste. The \n can be a straight carriage return. Curly braces for the function body can be dropped. Aug 21, 2017 at 0:02
• You can save some more by using write rather than cat and paste: write(c(rep(" ",min(x,i)),letters[i]),"",26,,"") Aug 21, 2017 at 10:18

# Retina, 72 68 bytes

^
z
{2=
$ }Tl_l^. \D$.$*$&¶
\d+
$* s( *)( +)(?=.*¶\1$)
$1 Try it online! Output includes trailing whitespace. Save 1 byte by deleting the space before the$ if zero-indexing is allowed. Edit: Saved 4 bytes by using @MartinEnder's alphabet generator. Explanation:

^
z
{2=
$ }Tl_l^. Insert the alphabet. \D$.$*$&¶

Diagonalise it.

\d+
$* Convert the input to unary as spaces. s( *)( +)(?=.*¶\1$)
$1 Trim overlong lines so that no line is longer than the blank line at the end. # Mathematica, 103 bytes (T=Table;a=Alphabet[];c=Column)[c/@{T[""<>{T[" ",i],a[[i]]},{i,#}],T[""<>{T[" ",#],a[[i]]},{i,#,26}]}]& # Jelly, 11 bytes 26Ḷ«’⁶ẋżØaY Try it online! # Common Lisp, 84 bytes (lambda(x)(dotimes(i 26)(format t"~v,,,@a~%"(if(< i x)(1+ i)x)(code-char(+ i 97))))) Try it online! # Python, 52 bytes Quite surprised nobody noticed the obvious approach was also as short as the others. lambda k:[(i*" ")[:k-1]+chr(i+97)for i in range(26)] Try it online! # Python, 53 bytes lambda k:[min(k-1,i)*" "+chr(i+97)for i in range(26)] Try it online! ## Haskell, 58 54 bytes f n=do m<-[1..26];([2..min n m]>>" ")++[''..]!!m:"\n" Try it online! How it works 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 Edit: @Lynn saved 4 bytes. Thanks! # Java (OpenJDK 8), 69 bytes n->{for(int a=0;a++<26;)System.out.printf("%"+(a<n?a:n)+"c%n",a+96);} Try it online! # Gaia, 12 bytes …26⊃§×¦₵a+†ṣ Try it online! ### Explanation … 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 # APL (Dyalog), 12 11 bytes -1 as OP has now clarified that returning a list of strings is fine. Prompts for input. ⎕A↑¨⍨-⎕⌊⍳26 Try it online! ⍳26 first 26 strictly positive ɩntegers ⎕⌊ minimum of input and those - negate those ⎕A↑⍨¨ for each letter of the Alphabet, take that many characters (from the rear, as all numbers are negative), padding with spaces as necessary convert list of strings into matrix (only in TIO link to enable readable output) # Pyth, 2117 15 bytes VlG+*d?>QNNQ@GN Explanation: 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) Try it online! • Found some considerably shorter approaches, and I decided to post my own answer. Aug 19, 2017 at 8:10 # JavaScript (Node.js), 72 bytes n=>[..."abcdefghijklmnopqrstuvwxyz"].map((e,i)=>" ".repeat(i<n?i:n-1)+e) Returns a list of strings. Try it online! • May I ask why node.js? seems like valid normal JS Aug 19, 2017 at 2:47 • @Downgoat It's the TIO auto formatting Aug 19, 2017 at 2:48 • btw you can save bytes using .padStart Aug 19, 2017 at 2:49 • Wait nvm the way I was thinking basically makes it into ETH's answer Aug 19, 2017 at 2:50 • Switch to ES8 and save a byte with padEnd instead of repeat. Aug 19, 2017 at 8:41 # Mathematica, 67 bytes SparseArray[x=#;{#,#~Min~x}->Alphabet[][[#]]&~Array~26,{26,#}," "]& Returns a SparseArray of strings. To visualize, append Grid@ in front. Try it on Wolfram Sandbox ### Usage Grid@SparseArray[x=#;{#,#~Min~x}->Alphabet[][[#]]&~Array~26,{26,#}," "]&[5] a b c d e f g ⋮ z # Python 2, 52 bytes lambda n:['%*c'%(min(i+1,n),i+97)for i in range(26)] Try it online! I'm assuming a list of strings is fine... Shortest I could get with recursion: f=lambda n,i=0:i<26and['%*c'%(min(i+1,n),i+97)]+f(n,i+1)or[] # SOGL V0.12, 12 bytes z{ē.-.Hχ@*Ot Try it Here! # Python 3, 52 bytes lambda n:[('%*c'%(i,i+96))[-n:]for i in range(1,27)] Try it online! # C (gcc), 50 bytes i;f(n){for(;i<26;printf("%*c\n",i++<n?i:n,i+97));} Try it online! # Proton, 40 bytes Assuming that a list of Strings is fine. k=>[(i*" ")[to~-k]+chr(i+97)for i:0..26] Try it online! # Proton, 49 bytes As ASCII-art instead: k=>'\n'.join((i*" ")[to~-k]+chr(i+97)for i:0..26) Try it online! # C# (.NET Core), 66 + 18 bytes n=>new int[26].Select((x,i)=>$"{(char)(i+97)}".PadLeft(i<n?i+1:n))

Byte count also includes

using System.Linq;

Try it online!

This returns a collection of strings, one for each line. If it's not allowed, the answer will swell by 17 bytes for string.Concat() and \n inside string

Explanation:

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 ) # Pyth, 12 bytes j.e+<*kdtQbG Try it here! If lists of Strings are allowed, this can be shortened to 11 bytes: .e+<*kdtQbG # Pyth, 12 bytes VG+<*dxGNtQN Try it here! # Pyth, 14 bytes jm+<*d;tQ@Gd26 Try it here. If lists of Strings are allowed, this can be shortened to 13 bytes: m+<*d;tQ@Gd26 # How do these work? Unlike most of the other answers, this maps / loops over the lowercase alphabet in all 3 solutions. ### Explanation #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. ### Explanation #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) ### Explanation #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. # Haskell, 60 bytes f n=unlines$scanl(\p c->take(n-1)(p>>" ")++[c])"a"['b'..'z']

This is a function that returns the output as a String.

Try it online.

# Japt, 16 13 bytes

Saved 3 bytes thanks to @Oliver

;C£RiXiYmUÉ î

Test it online!

• @Oliver Dang, I was tired... Aug 19, 2017 at 17:04

# q/kdb+, 33 31 bytes

Solution:

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

Example:

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

Explanation:

Create a list of spaces (26) up to the length of the minimum of the input and the range of 0..25), join with each letter of the alphabet, print to 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 )

Notes:

• -2 bytes by rejigging the brackets
• While I couldn't find a shorter q answer, the following is only 22 bytes in k4: {-1(-x&1+!26)$'$.Q.a;}. Nov 10, 2020 at 19:17
• don't think you need the '? {-1(-x&1+!26).Q.a;} for 21 bytes.
– mkst
Nov 11, 2020 at 20:50
• Ooh, good catch! Did not realize \$ (pad) accepts a list left-hand argument. Nov 11, 2020 at 23:08

# Java 1.8 (without 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++);}

The logic is straightforward. Provides no input data validation, very bad!

• Update: Function only! Thank you to @Olivier Grégoire
• To spare some bytes, use for(;c++<26;s+=c<i?" ":"")System.out.println(s+(char)o++); Also, you can write only a function, or a lambda instead of a full program. Aug 20, 2017 at 23:18
• If I were to include only the body of a function, then how would the reader know what a[0] refers to? I think snippets are not fair if they do not compile; the challenge is just as interesting with a language rich in constructs. Aug 21, 2017 at 16:10
• Hello! I did say a function or a lambda, not a snippet. ;-) So you can write void f(int i){...} (no static needed) or i->{...} instead of your whole program. See all Java tips. See my answer for this same challenge, as example. Have fun on the site! :-) Aug 21, 2017 at 18:31