# Print/Output the L-phabet

Inspired by George Gibson's Print a Tabula Recta.

You are to print/output this exact text:

ABCDEFGHIJKLMNOPQRSTUVWXYZ
BBCDEFGHIJKLMNOPQRSTUVWXYZ
CCCDEFGHIJKLMNOPQRSTUVWXYZ
DDDDEFGHIJKLMNOPQRSTUVWXYZ
EEEEEFGHIJKLMNOPQRSTUVWXYZ
FFFFFFGHIJKLMNOPQRSTUVWXYZ
GGGGGGGHIJKLMNOPQRSTUVWXYZ
HHHHHHHHIJKLMNOPQRSTUVWXYZ
IIIIIIIIIJKLMNOPQRSTUVWXYZ
JJJJJJJJJJKLMNOPQRSTUVWXYZ
KKKKKKKKKKKLMNOPQRSTUVWXYZ
LLLLLLLLLLLLMNOPQRSTUVWXYZ
MMMMMMMMMMMMMNOPQRSTUVWXYZ
NNNNNNNNNNNNNNOPQRSTUVWXYZ
OOOOOOOOOOOOOOOPQRSTUVWXYZ
PPPPPPPPPPPPPPPPQRSTUVWXYZ
QQQQQQQQQQQQQQQQQRSTUVWXYZ
RRRRRRRRRRRRRRRRRRSTUVWXYZ
SSSSSSSSSSSSSSSSSSSTUVWXYZ
TTTTTTTTTTTTTTTTTTTTUVWXYZ
UUUUUUUUUUUUUUUUUUUUUVWXYZ
VVVVVVVVVVVVVVVVVVVVVVWXYZ
WWWWWWWWWWWWWWWWWWWWWWWXYZ
XXXXXXXXXXXXXXXXXXXXXXXXYZ
YYYYYYYYYYYYYYYYYYYYYYYYYZ
ZZZZZZZZZZZZZZZZZZZZZZZZZZ


(Yes, I typed that by hand)

You are allowed to use all lowercase instead of all uppercase.

However, your choice of case must be consistent throughout the whole text.

### Rules/Requirements

• Each submission should be either a full program or function. If it is a function, it must be runnable by only needing to add the function call to the bottom of the program. Anything else (e.g. headers in C), must be included.
• If it is possible, provide a link to a site where your program can be tested.
• Your program must not write anything to STDERR.
• Standard Loopholes are forbidden.
• Your program can output in any case, but it must be printed (not an array or similar).

### Scoring

Programs are scored according to bytes, in UTF-8 by default or a different character set of your choice.

Eventually, the answer with the least bytes will win.

## Submissions

# Language Name, N bytes


where N is the size of your submission. If you improve your score, you can keep old scores in the headline, by striking them through. For instance:

# Ruby, <s>104</s> <s>101</s> 96 bytes


If there you want to include multiple numbers in your header (e.g. because your score is the sum of two files or you want to list interpreter flag penalties separately), make sure that the actual score is the last number in the header:

# Perl, 43 + 2 (-p flag) = 45 bytes


You can also make the language name a link which will then show up in the leaderboard snippet:

# [><>](http://esolangs.org/wiki/Fish), 121 bytes


Here is a Stack Snippet to generate both a regular leaderboard and an overview of winners by language.

/* Configuration */

var QUESTION_ID = 87064; // Obtain this from the url
// It will be like https://XYZ.stackexchange.com/questions/QUESTION_ID/... on any question page
var COMMENT_FILTER = "!)Q2B_A2kjfAiU78X(md6BoYk";
var OVERRIDE_USER = 48934; // This should be the user ID of the challenge author.

/* App */

return "https://api.stackexchange.com/2.2/questions/" +  QUESTION_ID + "/answers?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + ANSWER_FILTER;
}

}

jQuery.ajax({
method: "get",
dataType: "jsonp",
crossDomain: true,
success: function (data) {
data.items.forEach(function(a) {
});
comment_page = 1;
}
});
}

jQuery.ajax({
method: "get",
dataType: "jsonp",
crossDomain: true,
success: function (data) {
data.items.forEach(function(c) {
if (c.owner.user_id === OVERRIDE_USER)
});
else process();
}
});
}

var SCORE_REG = /<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/;

function getAuthorName(a) {
return a.owner.display_name;
}

function process() {
var valid = [];

var body = a.body;
if(OVERRIDE_REG.test(c.body))
body = '<h1>' + c.body.replace(OVERRIDE_REG, '') + '</h1>';
});

var match = body.match(SCORE_REG);
if (match)
valid.push({
user: getAuthorName(a),
size: +match[2],
language: match[1],
});

});

valid.sort(function (a, b) {
var aB = a.size,
bB = b.size;
return aB - bB
});

var languages = {};
var place = 1;
var lastSize = null;
var lastPlace = 1;
valid.forEach(function (a) {
if (a.size != lastSize)
lastPlace = place;
lastSize = a.size;
++place;

.replace("{{NAME}}", a.user)
.replace("{{LANGUAGE}}", a.language)
.replace("{{SIZE}}", a.size)

var lang = a.language;
if (/<a/.test(lang)) lang = jQuery(lang).text();

languages[lang] = languages[lang] || {lang: a.language, user: a.user, size: a.size, link: a.link};
});

var langs = [];
for (var lang in languages)
if (languages.hasOwnProperty(lang))
langs.push(languages[lang]);

langs.sort(function (a, b) {
if (a.lang > b.lang) return 1;
if (a.lang < b.lang) return -1;
return 0;
});

for (var i = 0; i < langs.length; ++i)
{
var language = jQuery("#language-template").html();
var lang = langs[i];
language = language.replace("{{LANGUAGE}}", lang.lang)
.replace("{{NAME}}", lang.user)
.replace("{{SIZE}}", lang.size)
language = jQuery(language);
jQuery("#languages").append(language);
}

}
body { text-align: left !important}

width: 290px;
float: left;
}

#language-list {
width: 290px;
float: left;
}

font-weight: bold;
}

table td {
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr>

</tbody>
</table>
</div>
<div id="language-list">
<h2>Winners by Language</h2>
<table class="language-list">
<tr><td>Language</td><td>User</td><td>Score</td></tr>
<tbody id="languages">

</tbody>
</table>
</div>
<table style="display: none">
</tbody>
</table>
<table style="display: none">
<tbody id="language-template">
</tbody>
</table>

• – Leaky Nun Jul 31 '16 at 14:03
• Can the output (as the return value from a function) be an array of lines? – Doorknob Jul 31 '16 at 14:55
• @Doorknob I would say no. – Leaky Nun Jul 31 '16 at 14:56
• @GeorgeGibson Yes. – Leaky Nun Jul 31 '16 at 17:36
• I'm tried of the "here's text X. Print this" kind of challenges. – Buffer Over Read Nov 11 '16 at 19:15

# Perl, 31 bytes

-6 byte thanks to @Denis Ibaev

say$_ x$A++,$_..Z for A..Z  Needs -M5.010 to run. So run with : perl -M5.010 -e 'say$_ x$A++,$_..Z for A..Z'

• Nice solution! You can save 1 byte though, using -65+ord instead of (ord)-65! – Dom Hastings Aug 1 '16 at 15:58
• Right, I was looking for a way to get rid of all those parenthesis near ord, and you found it, thanks ! – Dada Aug 1 '16 at 16:58
• Shorter: say$_ x$A++,$_..Z for A..Z. And use -E instead of -M5.010 -e. – Denis Ibaev Nov 3 '16 at 7:15 • @DenisIbaev Nice one, thanks! The -M5.010 doesn't count in the bytecount, so it doesn't really matter whether I use it or -E. – Dada Nov 3 '16 at 9:59 # PHP, 75 71 bytes for($a=join(range(A,Z));$i<26;)printf("%'$a[$i]26s ",substr($a,$i++));  • "A" and "Z" need no quotes. (Notices are not output with the default config.) – Titus Nov 11 '16 at 11:13 # Husk, 7 bytes ´ṪY…"AZ  Try it online! I'm rather surprised there isn't a Husk answer for this already. In any case, all this does is create a table (Ṫ) of the maximum (Y) of each pair of letters A to Z. ## CJam, 13 bytes '[,65>_ffe>N*  Test it here! ### Explanation '[, e# Get character range from null-byte to 'Z'. 65> e# Discard everything up to 'A', so we've got the upper case alphabet. _ e# Duplicate. ffe> e# Nested map: for every pair of letters, computes the maximum and arranges the e# results in a grid. N* e# Join with linefeeds.  # Python 2, 61 bytes a=range(65,91) for c in a:print bytearray(max(c,i)for i in a)  Inspired by (xsot’s improvement to) this answer. # Bash + coreutils, 55 51 bytes Thanks to H Walters for 4 bytes. for i in {A..Z};{ printf %c {A..Z} ' '|tr A-$i $i;}  We output the string ABCDEFGHIJKLMNOPQRSTUVWXYZ (+newline) 26 times, and replace the first $i characters with the $ith on each iteration. We take advantage of tr repeating the last character of the replacement set to extend it as necessary. • Save 4 more bytes; replace do and done with { and } – H Walters Aug 13 '16 at 14:17 # C, 65 63 bytes i,k;a(j){for(;i++^702;j+=putchar(k?(j>k?j:k)+64:10)<11)k=i%27;}  Wandbox • From the challenge: "Each submission should be either a full program or function. If it is a function, it must be runnable by only needing to add the function call to the bottom of the program. Anything else (e.g. headers in C), must be included." I don't know C: does this answer follow that rule? – msh210 Aug 1 '16 at 19:27 # PHP, 65 62 52 bytes for($s=Z;$s++<ZZ;)echo" "[$s[1]>A],max($s[0],$s[1]);


Why use chr when I can increment letters? Try it online.

old solution, 62 bytes:

for(;26>$b+=1/27;)echo chr(($a=++$a%27)?$a>$b?$a+64:$b+65:10);  similar approach as in my Tabula Recta answer # x86 assembly (32-bit), 50 bytes fd 57 c8 00 01 00 89 ef 4f 31 c0 aa b0 5a aa 48 e0 fc b0 41 fd 31 c9 b1 1b 89 ef 4f f2 ae f3 aa 50 47 57 e8 .. .. .. .. 58 58 40 3c 5a 7e e5 c9 5f c3  Might be optimizable further, but I'm tired. Source: /* output the l-phabet (???) - 32 bit */ .globl main main: std push %edi enter$256, $0 /* we're actually going to have to be careful with the stack on this one, since that's where the data is going */ /* first write our initial string */ mov %ebp, %edi dec %edi xor %eax, %eax stosb mov$'Z', %al
str:
stosb
dec %eax
loopnz str

/* now start back at the end */
mov $'A', %al replace: std xor %ecx, %ecx mov$27, %cl
mov %ebp, %edi
dec %edi
repne scasb
rep stosb
/* print */
push %eax
inc %edi
push %edi
call puts
pop %eax    /* caller cleanup */
pop %eax    /* old eax */
inc %eax
cmp $'Z', %al jle replace leave pop %edi ret  # VBA, 60 Bytes an Anonymous VBE immediate window function that outputs the L-phabet the the VBE immediate window. For I=65To 90:For J=65To 90:?Chr(IIf(J>I,J,I));:Next:?:Next  # Pascal (FPC), 106 bytes uses math;var c,d:word;begin for c:=65to 90do begin for d:=65to 90do write(chr(Max(c,d)));writeln;end;end.  Try it online! # Pepe, 88 85 bytes REeEeeeeeErEeEeEEeEerEERREEEEEREEEereeREEEErerEEREEEEEEErereeerEEEEEeeEReeereeERrEree Try it online! # MUMPS, 6356 53 bytes f i=65:1:90 w ! f j=65:1:90 w:j>i$c(j) w:j<=i $c(i)  Can be expanded to: for i=65:1:90 write ! for j=65:1:90 write:j>i$char(j) write:j<=i $char(i)  ! is a new line. write:<condition> only writes if the condition returns true. $char() returns the character for an ASCII value.

## Javascript (using external library) (141 bytes)

w=>_.Range(65,26).WriteLine(x=>(_.Range(0,x-65).Write("",y=>String.fromCharCode(x))||"")+_.Range(x,91-x).Write("",z=>String.fromCharCode(z)))


Code explanation: Create char code range of integers, for each write complex predicate to new line. Predicate will create a range of (currentValue-65) values, which is the part that goes A,BB,CCC,...etc...for the case of A the Write may return null so we coerce that to an empty string. Concatenate that with the remaining sequence of the alphabet. So many bytes are coming from the String.fromCharCode lol... oh well!!!

## ListSharp, 233 bytes

ROWS s=ROWSPLIT "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" BY [","]
[FOREACH NUMB IN 1 TO 26 AS k]
{
STRG t=GETLINE s [k]
[FOREACH NUMB IN 1 TO k AS o]
STRG p=p+t
ROWS x=GETLINES s [k+1 TO 27]
STRG p=p+x+<newline>
}
SHOW=p


There are actually some tricks to get this shorter like directly accessing indexes or using c# queries since you can embed c# code in listsharp with some tricks.

But i kept it as in vanilla as possible

• Can't you split by empty string? Can't you use Egyptian bracket? – Leaky Nun Jul 31 '16 at 18:08
• for egyptian brackets i would need to write {"a","b",..."z"}, which is longer and it uses the c# method String.Split which doesnt work with an empty string, i should probably use Regex.Split for that because that does work. but too late for this challenge.. – downrep_nation Jul 31 '16 at 18:12
• Eh, by "Egyptian brackets" I meant [FOREACH NUMB IN 1 TO 26 AS k]{ – Leaky Nun Jul 31 '16 at 18:14
• ah no you cant do that ;) each line can only perform one function for readability. only few things can be embedded in listsharp but for eaxmple STRG p=p+t cannot be put in line 6 to save the temporary variable t due to the single action per line reason – downrep_nation Jul 31 '16 at 18:18
• I see, thanks for teaching. – Leaky Nun Jul 31 '16 at 18:23

# Perl 6,  67  64 bytes

my @a;@a[.[0]][.[1]]=('A'..'Z')[.max]for ^26 X ^26;.join.put for @a
my @a;@a[.[0];.[1]]=('A'..*)[.max]for ^26 X ^26;.join.put for @a

### Explanation:

my @a;

# @a[ $_.[0] ][$_.[1] ]
@a[ $_.[0] ;$_.[1] ] = (

# infinite Range that produces:
#   'A',  'B',  'C' ...  'Y',  'Z',
#  'AA', 'AB', 'AC' ... 'AY', 'AZ',
#  'BA', 'BB', 'BC' ... 'BY', 'ZZ',
# 'AAA','AAB','AAC' ... *｣
'A' .. *

)[
# index the Range with the max value in the "Tuple" ( 2 element List )
$_.max ] for # do the above with each of the following "Tuples" # ｢(0,0),(0,1),(0,2)...(0,25),(1,0)...(25,25)｣ ^26 X ^26;$_.join.put for @a

• .method where a term is expected is an implicit method call on $_ the "default" scalar. • ^26 is short for 0 ..^ 26 which in this case is effectively the same as 0 .. 25 • The meta infix operator X creates the cross product of two lists ( accepts an optional infix operator which it applies between the elements ) • Do you need my$@? – User112638726 Aug 1 '16 at 13:52
• @User112638726 Perl 6 requires you to declare your variables. – Brad Gilbert b2gills Aug 1 '16 at 18:10

## K, 32 35 Bytes

3 more bytes to print the result without double quotes!

{-1,/[y#x@y-1;y _x]}[b]'1+!#b:.Q.A;
ABCDEFGHIJKLMNOPQRSTUVWXYZ
BBCDEFGHIJKLMNOPQRSTUVWXYZ
CCCDEFGHIJKLMNOPQRSTUVWXYZ
DDDDEFGHIJKLMNOPQRSTUVWXYZ
EEEEEFGHIJKLMNOPQRSTUVWXYZ
FFFFFFGHIJKLMNOPQRSTUVWXYZ
GGGGGGGHIJKLMNOPQRSTUVWXYZ
HHHHHHHHIJKLMNOPQRSTUVWXYZ
IIIIIIIIIJKLMNOPQRSTUVWXYZ
JJJJJJJJJJKLMNOPQRSTUVWXYZ
KKKKKKKKKKKLMNOPQRSTUVWXYZ
LLLLLLLLLLLLMNOPQRSTUVWXYZ
MMMMMMMMMMMMMNOPQRSTUVWXYZ
NNNNNNNNNNNNNNOPQRSTUVWXYZ
OOOOOOOOOOOOOOOPQRSTUVWXYZ
PPPPPPPPPPPPPPPPQRSTUVWXYZ
QQQQQQQQQQQQQQQQQRSTUVWXYZ
RRRRRRRRRRRRRRRRRRSTUVWXYZ
SSSSSSSSSSSSSSSSSSSTUVWXYZ
TTTTTTTTTTTTTTTTTTTTUVWXYZ
UUUUUUUUUUUUUUUUUUUUUVWXYZ
VVVVVVVVVVVVVVVVVVVVVVWXYZ
WWWWWWWWWWWWWWWWWWWWWWWXYZ
XXXXXXXXXXXXXXXXXXXXXXXXYZ
YYYYYYYYYYYYYYYYYYYYYYYYYZ
ZZZZZZZZZZZZZZZZZZZZZZZZZZ


Explanation;

.Q.A                 --> uppercase alphabet
1+!#b:.Q.A           --> Indexes from 0 til (!) count (#) .Q.A (alphabet), and add 1 to them all. Also assign .Q.A to the variable b, so we don't have to type .Q.A again!
{}[b]'1 2 3 4 5....  --> we apply the function to b (alphabet) to each (') number i.e. 1 then 2 then 3 then 4
{,/[y#x@y-1;y _x]}   --> First time, y is 1;
y#x@y-1              --> Use y-1 (0) to index (@) into x (alphabet), then take (#) y (1) of them i.e 1#"A" returns "A", 2#"A" returns "AA" etc.
y _x                 --> drop (_) y many elements from x
,/[y#x@y-1;y _x]     --> flatten the result
-1 res;              --> Print the result


l=['A'..'Z']
m=mapM(putStrLn.(<$>l).max)l  This defines a function that needs no imports and can just be run in a complete program by adding main=m  Of course, we could also just name it main itself, but that is three more bytes. Saved 2 bytes thanks to @wchargin. Depending on the interpretation of the task, we can save 2 more by deleting m= and saying that the remaining part is the function that you can put into main=... • In GHC 7.10, you can replace (mapl) with (<$>l). – wchargin Jul 31 '16 at 18:44
• Oh I see, thanks. – Christian Sievers Jul 31 '16 at 19:52

# Brainfuck, 126 bytes

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


Still couldn't outgolf Dennis. Try it online!

## Explanation

(The random plusses are to offset hyphens/minuses used in the explanation)

+++++ +++++[<+++++ ++++<+>>-]
Set the first cell to 10 (for the newline)
Set the seccond cell to 90 (char code of Z to match the end result of the main loop

>+++++[<+++++>-]<+
Set the third cell to 26 (the number of lines to make)
Tape:
10 90 26
^^

[- Main loop: runs 26 times (represented by n)

>>+++++[-<+++++<<----->>>]<+
Bring the second cell back to 65 (char code of A)
Set the fourth cell to 26 (the number of letters per line)
Tape on first time through loop:
10 65 26-n 26  0  n
+              ^^

>>[-<+<<<+>>>>]<
The sixth cell contains a counter n of the number of lines we've done (initially zero)
Add n to 65 (cell 2) to skip over the letters covered by the repeated letter
Move the counter to cell 5
10 65+n 26-n 26  n  0
^
[->+<<-<<.>>>]>+<<
Move the counter back to cell 6
Output the repeated character n times
Subtract the n from cell 4 to leave room for only the non-repeated characters
Increment n for next time
10 65+n 26-n 26-n  0  n
++                ^^^^

[-<<.+>>]
Fill the remaining spots in the line with the rest of the alphabet by outputting cell 2 and incrementing
10 91 26-n  0  0  n
+               ^

<<<.>-
Put a newline (cell 1)
Change 91 to 90 because it's easier to subtract 25 than 26 to reset it
10 90 26-n  0  0  n
+      ^^
>]


# VBA, 88 bytes

Function L:For i=0To 701:m=i Mod 27:d=m-i\27:L=L &IIf(26=m,vbLf,Chr(65+m+d*(d<0))):Next


An extension of my Tabula Recta answer. Again the last byte counted is the enter which generates the End Function statement. Invoke in the VBA editor Immediate window with ?L.

• You don't need the space between 0 and To in For i=0 To 701 – Jerry Jeremiah Jul 31 '16 at 23:52
• @JerryJeremiah - Unexpected... thanks! And I don't need the () after L either, which I usually remember... – Joffan Aug 1 '16 at 0:50

# ><>, 77 bytes

v:1->:    ?!v!
>d2*^   v&:~<&o<
v!?&-1:&<o+'@':a!
>&~&>&:1+&d2*=?^&:&'@'+o43.


Try it online!

# Matricks, 37 bytes

m:26:26;Fs::[m90-Q:26-Q:26-Q;];:1:26;


Simple enough. Sets it to a blank 26x26 matrix, then consecutively overwrites the top left square with the correct ascii value.

Run with python matricks.py lphabet.txt [[]] 0 --asciiprint

## Actually, 13 bytes

5Pτú;∙♂M╪k♂Σi


Try it online!

-4 bytes from Leaky Nun, and the inspiration for 4 more, then 4 more from him, and 1 more from me

Explanation:

5Pτú;∙♂M╪k♂Σi
5Pτ            push 26
ú;∙         Cartesian product of lowercase alphabet with itself
♂M       maximum of each pair
╪k     list of length-26 sublists
♂Σ   concatenate each sublist
i  flatten and implicitly print


# Pyth, 9 bytes

V._GXGNeN


Try it online: Demonstration

### Explanation:

V._GXGNeN   implicit: G = "abc...xyz"
._G        all prefixes of G: ["a", "ab", "abc", ...]
V           for each prefix N:
XGNeN      replace the letters of N in G by the last letter of N


Another pretty interesting solution (12 bytes):

j.uXN.*<{N2G


First time that .* is useful!

# Sprects, 316 bytes

:ABCDlBBCDlCCCDlDDDDlEEEElFFFFFFGcGGGGGGGcHHHHHHHcIIIIIIIIIJq00q11qttttMauuuuMavvvvNarrrrrPQknnnnQkooooQkppppRkmmmmmmSTbiiiiibjjjjjbgggggggVs
hhhhhhhWs
ffffffYZ
dddddZ
eeeeeZ:1KKKKK:0JJJJJ:dYYYYY:eZZZZZ:fXXXX:gVVV:hWWW:iTTTT:jUUUU:lEFGc:cHIJq:mSSS:nPPPP:oQQQQ:pRRRR:qKLMa:aNOPQk:kRSTb:bUVs
:rOOO:sWXYZ:tLLL:uMMM:vNNN


Basically Martin Ender's /// answer ported to Sprects and then golfed. \ns appear as spaces, this is the interpreter's error.

# QB64, 75 bytes

Not a winner, but not bad for BASIC. Too bad it doesn't have a built-in MAX function.

FOR y=65 TO 90
FOR x=65 TO 90
IF x>y THEN?CHR$(x);ELSE?CHR$(y);
NEXT
?
NEXT


## Lua, 81 80 bytes

Saved 1 byte thanks to manatwork

w=io.write for i=65,90 do for j=65,90 do w(('').char(math.max(i,j)))end w'\n'end

• Why not iterate 65 to 90? – manatwork Aug 1 '16 at 11:58

# Pyth - 12 bytes

WG.[hG26G=tG


Explanation:

                    #G is autoinitialized to the lowercase alphabet
WG                  #while G is not empty
G           #G
hG              #with the first letter of G
26            #to a length of 26
#implicitly print that
=tG        #remove the first letter of G

• Nice approach. =tG does not only perform the assignment, it will also return the new value. So you can use this expression during the .[ statement and save one byte: WG.[hG26=tG – Jakube Aug 2 '16 at 9:11

# Ruby, 60 bytes

a=("A".."Z").to_a.join;(0..25).map{|i|puts(a[i]*i+a[i..-1])}

• Save a few bytes by doing [*a..b] instead of (a..b).to_a – Fund Monica's Lawsuit Aug 2 '16 at 6:48
• Also, you can use 25.times instead of (0..25).each – Fund Monica's Lawsuit Aug 2 '16 at 6:49
• Lastly, I think you can get rid of the parens around the arguments to puts if you have a space before them – Fund Monica's Lawsuit Aug 2 '16 at 6:50

# F#, 70 bytes

for i in 'A'..'Z'do(for j in 'A'..'Z'do printf"%c"(max i j));printfn""


Pretty straightforward.

• Can you use their codepoints to replace 'A' and 'Z'? – Leaky Nun Aug 2 '16 at 5:20
• @LeakyNun I would need to cast to char so the net is 74 bytes : for i in 65..90 do(for j in 65..90 do printf"%c"(char<|max i j));printfn"" – asibahi Aug 2 '16 at 5:32
• What does printf"%c"65 do? – Leaky Nun Aug 2 '16 at 5:35
• throw an error. – asibahi Aug 2 '16 at 5:36
• Alright, thanks for teaching. – Leaky Nun Aug 2 '16 at 5:36