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? – notjagan Aug 19 '17 at 3:45
• Is a consistent leading space acceptable? – Giuseppe Aug 19 '17 at 6:26
• Are trailing spaces acceptable? – Dom Hastings Aug 19 '17 at 13:20
• May we use uppercase? – Adám Aug 20 '17 at 22:29
• May we return a list of strings? – Adám Aug 21 '17 at 11:15

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 '17 at 10:07
• @Neil It seem broken today. Using Ｉθ solves it. – JP de la Torre Aug 19 '17 at 21:56
• Save 1 byte by using …βＮ instead of ✂β⁰Ｎ. – Neil Dec 21 '17 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 :). – Magic Octopus Urn Aug 22 '17 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 – Justin Mariner Aug 19 '17 at 2:29
• @JustinMariner Thanks, I think I might switch to ES8 for that... – ETHproductions Aug 19 '17 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':"" – Shaggy Aug 19 '17 at 10:07
• @Shaggy Perhaps, I don't know if that type of currying is allowed though. – ETHproductions Aug 19 '17 at 17:06
• Ah, nuts, looks like your proposal to allow this is no longer a consensus :( – Shaggy Aug 21 '17 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

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. – MickyT Aug 21 '17 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,,"") – user2390246 Aug 21 '17 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}]}]&  Pyth, 2117 15 bytes Done on a phone with 3% battery. 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! • @totallyhuman I just had some amazing pizza in Las Vegas, New Mexico – Stan Strum Aug 19 '17 at 4:36 • Found some considerably shorter approaches, and I decided to post my own answer. – Mr. Xcoder Aug 19 '17 at 8:10 • @Mr.Xcoder Yeah, good job on that. – Stan Strum Aug 19 '17 at 14:29 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  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 – Downgoat Aug 19 '17 at 2:47 • @Downgoat It's the TIO auto formatting – Conor O'Brien Aug 19 '17 at 2:48 • btw you can save bytes using .padStart – Downgoat Aug 19 '17 at 2:49 • Wait nvm the way I was thinking basically makes it into ETH's answer – Downgoat Aug 19 '17 at 2:50 • Switch to ES8 and save a byte with padEnd instead of repeat. – Shaggy Aug 19 '17 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 )  MATL, 14 bytes 26:tiXl2Y2oZ?c  Try it at MATL Online Explanation 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  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... – ETHproductions Aug 19 '17 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

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. – Olivier Grégoire Aug 20 '17 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. – Douglas Held Aug 21 '17 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! :-) – Olivier Grégoire Aug 21 '17 at 18:31