Shape Rule
Wide first, letters forward
Row 1 prints AAAAA, then BBBB, down to a single E.

Row width shrinks from five to one, but the letter moves forward each row: AAAAA, BBBB, CCC, DD, E. Compare with Program 11 (same shape, letters step down) and worked JavaScript examples, live preview, edge cases, and complexity.
Wide first, letters forward
Row 1 prints AAAAA, then BBBB, down to a single E.
Letter advance
for (let i = "A".charCodeAt(0); i <= "E".charCodeAt(0); i++) picks the letter for each row.
Width 5…1
for (let j = "E".charCodeAt(0); j >= i; j--) shrinks as i rises - print String.fromCharCode(i), not the inner counter.
Same line / next line
Letters use line += ch; end each row with console.log(line).
1–26 rows
Pick a row count and draw the inverted forward triangle in the browser.
Complexity
Total letters = n(n+1)/2; extra memory stays O(1).
An inverted forward repeating alphabet triangle starts wide and shrinks by one repeated letter on each new line, while letters advance from A toward the top of the range. With the right angle on the left, the console shows an upside-down staircase of identical letters per row.
In JavaScript you usually solve it with two nested for loops: the outer loop picks the row letter (counting up), the inner loop prints that same letter fewer times each row, then console.log(line) moves to the next line.
It shows that letter direction and width direction are independent knobs. Flip only the outer loop (A→E vs E→A) and you move between Program 12 and Program 11 without rewriting the shape idea.
Top row repeats A exactly n times.
Rows go A, B, C, … while widths go n…1.
line += String.fromCharCode(i) in the inner loop; console.log(line) after.
Same widths - opposite letter direction.
In short: for each letter i from A up to top, print i repeatedly (top - i + 1) times, then call console.log(line).
Given a positive integer rows (or a fixed top letter like 'E'), print a left-aligned inverted triangle where letters advance from A and widths shrink from rows down to 1.
// First 5 rows (conceptual shape)
// AAAAA
// BBBB
// CCC
// DD
// E | Item | Type | Description |
|---|---|---|
rows | int | Number of triangle lines (typically 1–26). Top letter = String.fromCharCode("A".charCodeAt(0) + rows - 1). |
| Printed output | text | Left-aligned rows; row r (0-based) prints letter String.fromCharCode("A".charCodeAt(0) + r) exactly rows - r times. |
for row from 0 to rows - 1:
ch = String.fromCharCode("A".charCodeAt(0) + row)
repeat = rows - row
for k from 1 to repeat:
append ch (no newline)
console.log the row | Approach | Idea | Best for |
|---|---|---|
| Nested char loops | Outer A…top + inner top…i width | Learning and interviews |
ch.repeat(repeat) | Build a whole row in one call | Shorter production-style demos |
| Goal | Pattern |
|---|---|
| Walk letters forward | for (let i = "A".charCodeAt(0); i <= "E".charCodeAt(0); i++) |
| Shrink repeat count | for (let j = "E".charCodeAt(0); j >= i; j--) |
| Print row letter | line += String.fromCharCode(i) — not the inner counter |
| End the row | console.log(line) |
| One-line row shortcut | console.log(ch.repeat(repeat)) |
| Letters step down | See Program 11 (EEEEE, DDDD, …) |
Same triangle - different ways to emit characters.
same linePrints a letter without moving to the next line
new lineEnds the current row after all repeats are printed
whole rowBuilds n copies of ch at once - skip the inner loop
print String.fromCharCode(i)Master printing the outer letter before the string shortcut
Reach for this triangle when practicing inverted widths with forward letters.
Keep shrinking widths; flip only the letter direction to A→E.
Letter direction and width direction can flip separately.
Practice ch = String.fromCharCode("A".charCodeAt(0) + row) and repeat = rows - row.
Next: sequential letters that keep advancing across rows.
This is a console teaching pattern - not how you build modern app screens.
Key benefit: one small program that proves letter direction is independent of inverted width - a core alphabet-pattern skill.
Choose a row count between 1 and 26 and draw the inverted forward repeating alphabet triangle in the browser.
Three complete JavaScript programs - fixed A-to-E range, prompt input, and a ch.repeat(repeat) shortcut. Click View Output to reveal sample console results, or Try it Yourself to run in the browser editor.
Print five shrinking rows with letters advancing from A.
'A' up to 'E'Hard-coded range - ideal for first demos and screenshots.
const base = "A".charCodeAt(0);
const top = "E".charCodeAt(0);
for (let i = base; i <= top; i++) {
const ch = String.fromCharCode(i);
let line = "";
for (let j = top; j >= i; j--) {
line += ch;
}
console.log(line);
} When i is "A".charCodeAt(0), the inner loop runs from E down to A (5 times) and builds AAAAA. When i is "B".charCodeAt(0), it builds BBBB, and so on until a single E. Appending ch from the outer letter (not the inner counter) keeps each row uniform.
Let the user choose the height at runtime.
Use row index: ch = String.fromCharCode(base + row) and repeat = rows - row. Validate parseInt(prompt()) with Number.isFinite in real apps.
const rowsInput = prompt("Enter the number of rows:");
let rows = parseInt(rowsInput, 10);
rows = Math.max(1, Math.min(rows, 26));
const base = "A".charCodeAt(0);
for (let row = 0; row < rows; row++) {
const ch = String.fromCharCode(base + row);
const repeat = rows - row;
let line = "";
for (let k = 0; k < repeat; k++) {
line += ch;
}
console.log(line);
} For rows = 4, row 0 builds A four times, row 1 builds B three times, and so on. Clamp rows to 1-26 so letters stay within A-Z.
Same shape without an explicit inner append loop.
ch.repeat(repeat)Build each repeated-letter row in one call, then log it.
const rows = 5;
const base = "A".charCodeAt(0);
for (let row = 0; row < rows; row++) {
const ch = String.fromCharCode(base + row);
const repeat = rows - row;
console.log(ch.repeat(repeat));
} ch.repeat(repeat) creates a string of length repeat filled with that letter. Great once you understand the nested-loop idea; keep the two-loop version for exams that ask you to show both bounds.
Use prompt() when reading input. Fix the top letter or compute it from rows.
for (let i = "A".charCodeAt(0); i <= "E".charCodeAt(0); i++) selects the character printed on the row.
for (let j = "E".charCodeAt(0); j >= i; j--) runs 5, 4, 3… times; print String.fromCharCode(i) with line += String.fromCharCode(i).
console.log(line) ends the row so the next outer iteration starts fresh.
Total letters: n+(n-1)+…+1 = n(n+1)/2 — O(n²) time, O(1) extra memory.
'A' up to 'E'Trace each outer-loop value of i and count how many times the inner loop runs.
i | Inner j range | Printed row | Repeats |
|---|---|---|---|
'A' | 'E'..'A' | AAAAA | 5 |
'B' | 'E'..'B' | BBBB | 4 |
'C' | 'E'..'C' | CCC | 3 |
'D' | 'E'..'D' | DD | 2 |
'E' | 'E'..'E' | E | 1 |
Total letter prints: 5 + 4 + 3 + 2 + 1 = 15 = 5×6/2.
Where this tiny pattern (and its loop structure) shows up beyond the homework prompt.
Clearest demo that forward letters can pair with shrinking widths.
Example: swap only the outer loop direction to get Program 11.
Teach letter direction as a one-line change.
Example: side-by-side EEEEE/DDDD vs AAAAA/BBBB.
Practice String.fromCharCode("A".charCodeAt(0) + row) and rows - row without char countdown tricks.
Example: row 2 → letter C, repeat = n-2.
Swap to lowercase or mix digits once the loops work.
Example: start from 'a' + row.
Descending triangular totals still make O(n²) concrete.
Example: 5+4+…+1 = 15 for n = 5.
Pair the pattern with Number.isFinite and 1–26 clamps.
Example: reject rows <= 0 or rows > 26.
Pro Tip: say “letters go up, width goes down” before coding - that story prevents mixing Program 11’s countdown letter with this page.
Why this pattern earns a spot right after the inverted countdown triangle.
Wrong letter direction shows up immediately as EEEEE instead of AAAAA.
Only loops, chars, and console output - no arrays required.
Flip to Program 11 by counting letters downward instead.
Streaming output needs no storage beyond loop counters.
Pro Tip: learn the nested-loop version first; treat ch.repeat(repeat) as a polish shortcut afterward.
Small habits that keep alphabet-pattern code clean.
Use ch = String.fromCharCode("A".charCodeAt(0) + row) and repeat = rows - row - clearer than overloaded char bounds alone.
Avoid crashes when the user types letters instead of a number.
Only call console.log(line) after the inner loop finishes the row.
For A–Z demos, reject or clamp rows > 26.
Trace rows = 3 (AAA, BB, C) on paper before coding larger demos.
Pro Tip: if you get EEEEE, DDDD, CCC instead of AAAAA, BBBB, CCC, you reused Program 11’s countdown outer loop.
Mistakes that commonly break inverted forward repeating alphabet patterns.
j Instead of iRows become countdown sequences instead of repeated letters.
→ Always line += String.fromCharCode(i) (or ch) for this shape.
Counting i from top down to A prints EEEEE first instead of AAAAA.
→ Keep i (or row) advancing from A upward.
Each letter lands on its own line - you get a column, not a triangle.
→ Use line += ch for letters; console.log(line) only after the inner loop.
Non-numeric input yields NaN with bare parseInt(prompt()).
→ Validate parseInt(prompt()) with Number.isFinite and validate range.
String.fromCharCode("A".charCodeAt(0) + rows - 1) can leave the A–Z range.
→ Clamp to 26 or define wrap/error behavior explicitly.
Check these inputs before calling the solution done.
Output is just A on one line.
Treat as invalid; re-prompt instead of silent empty output.
rows < 0Invalid height - validate before looping.
Clamp or error - char math leaves A–Z.
Non-numeric input becomes 0 - check Number.isFinite first.
Same loops work with 'a' + row.
Try these variations to lock in the pattern.
Number.isFinite until 1 <= rows <= 26'a' + row as the row lettern(n+1)/2 - hence O(n²) time.1 <= rows <= 26 for interactive A–Z programs.Quick Takeaway: outer loop advances the letter (A→top), inner loop shrinks the width, then break the line - that is the whole pattern.
| Program | Time | Extra space |
|---|---|---|
| Nested loops (Examples 1-2) | O(rows²) | O(1) |
ch.repeat(repeat) (Example 3) | O(rows²) | O(rows) per row string (temporary) |
The inverted forward repeating alphabet triangle is a small nested-loop exercise with lasting payoff: forward letters vs shrinking width, and O(n²) intuition. Master the classic two-loop version, then optionally shorten rows with ch.repeat(repeat).
Practice the three examples above, then compare with Program 11 or continue to Program 13’s sequential letters.
Print the outer letter with line += ch, end rows with console.log(line), and use repeat = rows - row (not Program 11’s countdown letter) for this shape.
line += String.fromCharCode(i) for letters and console.log(line) after each row1 <= rows <= 26 for interactive programsNumber.isFinite after prompt()console.log(line) inside the inner letter looprows > 26 without a clear policyPrint the inverted forward repeating triangle the beginner-friendly way.
Letters up, width down
DefinitionAdvances A→top
CodeShrinks with line += String.fromCharCode(i)
Ends each row
I/OO(n²) time
AnalysisThis is the forward-letter twin of Program 11: same inverted widths (5…1), but letters advance A→E instead of stepping down. Append the outer loop letter inside the inner loop so each row stays uniform.
Next up: sequential letters that keep advancing across the whole triangle.
12 people found this page helpful