ποΈ Problems
Recently I saw the following article <br /> Really? Anyway, I tried to solve these.
Must do Pattern Problems before starting DSA
π General guideline
There are 4 general rules for solving a pattern-based question :
- We always use nested loops for printing the patterns.
- For the
outer loop
, wecount the number of lines/rows
and loop for them.
- Next, for the
inner loop
, we focus onthe number of columns
and somehow connect them to the rows by forming a logic such that for each row we get the required number of columns to be printed.
- For the
- We print the numbers inside the
inner loop
. Observe symmetry
in the pattern or check if a pattern is a combination of two or more similar patterns or not.
Pattern-1: Rectangular Star Pattern
const N = 5;
for (let r = 0; r < N; r += 1) {
console.log("*".repeat(N));
}
*****
*****
*****
*****
*****
Pattern-2: Right-Angled Triangle Pattern
const N = 6;
for (let r = 0; r < N; r += 1) {
console.log("*".repeat(r + 1));
}
*
**
***
****
*****
******
Pattern β 3: Right-Angled Number Pyramid
const N = 5;
const genString = (num) => {
let str = "";
for (let i = 1; i <= num; i += 1) {
str += "" + i;
}
return str;
};
for (let i = 1; i <= N; i += 1) {
console.log(genString(i));
}
1
12
123
1234
12345
Pattern β 4: Right-Angled Number Pyramid β II
const N = 5;
const genString = (num) => {
return String(num).repeat(num);
};
for (let i = 1; i <= N; i += 1) {
console.log(genString(i));
}
1
22
333
4444
55555
Pattern-5: Inverted Right Pyramid
const N = 5;
for (let i = N; i >= 1; i -= 1) {
console.log("*".repeat(i));
}
*****
****
***
**
*
Pattern β 6: Inverted Numbered Right Pyramid
const N = 5;
const genString = (num) => {
let str = "";
for (let i = 1; i <= num; i += 1) {
str += "" + i;
}
return str;
};
for (let i = N; i >= 1; i -= 1) {
console.log(genString(i));
}
12345
1234
123
12
1
Pattern β 7: Star Pyramid
||||| * ||||||
* * *
** * **
*** * ***
**** * ****
***** * *****
const N = 5;
const genString = (row) => {
let str = "";
str += " ".repeat(N - row);
str += "*".repeat(row);
str += "*";
str += "*".repeat(row);
str += " ".repeat(N - row);
return str;
};
for (let r = 0; r < N; r += 1) {
console.log(genString(r));
}
*
***
*****
*******
*********
Pattern β 8: Inverted Star Pyramid
const N = 6;
const genString = (row) => {
let str = "";
str += " ".repeat(N - row);
str += "*".repeat(row - 1);
str += "*";
str += "*".repeat(row - 1);
str += " ".repeat(N - row);
return str;
};
for (let r = N; r >= 1; r -= 1) {
console.log(genString(r));
}
***********
*********
*******
*****
***
*
Pattern β 9: Diamond Star Pattern
N = 3
||*
|***
*****
*****
***
*
const N = 6;
const genUpperString = (row) => {
let str = "";
str += " ".repeat(N - row);
str += "*".repeat(row - 1);
str += "*";
str += "*".repeat(row - 1);
str += " ".repeat(N - row);
return str;
};
const genLowerString = (row) => {
let str = "";
str += " ".repeat(row - 1);
str += "*".repeat(N - row);
str += "*";
str += "*".repeat(N - row);
str += " ".repeat(row - 1);
return str;
};
for (let r = 1; r <= N; r += 1) {
console.log(genUpperString(r));
}
for (let r = 1; r <= N; r += 1) {
console.log(genLowerString(r));
}
*
***
*****
*******
*********
***********
***********
*********
*******
*****
***
*
Pattern β 10: Half Diamond Star Pattern
1 23456
1 * |||||
2 * *
3 * **
4 * ***
5 * ****
6 * *****
5 * ****
4 * ***
3 * **
2 * *
1 *
const N = 6;
const genString = (row) => {
let str = "*";
str += "*".repeat(row - 1);
str += " ".repeat(N - row);
return str;
};
for (let r = 1; r < N; r += 1) {
console.log(genString(r));
}
console.log(genString(N));
for (let r = N - 1; r >= 1; r -= 1) {
console.log(genString(r));
}
*
**
***
****
*****
******
*****
****
***
**
*
Pattern β 11: Binary Number Triangle Pattern
const N = 5;
const genString = (num, startFromOdd) => {
let str = "";
let cur = startFromOdd ? 1 : 0;
for (let i = 1; i <= num; i += 1) {
str += "" + cur;
cur = (cur + 1) % 2;
}
return str;
};
for (let i = 1; i <= N; i += 1) {
console.log(genString(i, i % 2));
}
1
01
101
0101
10101
Pattern β 12: Number Crown Pattern
123456
1 1 1
2 12 21
3 12 321
4 1234 4321
5 12345 54321
6 123456 654321
const N = 6;
const genString = (row) => {
let str = "";
for (let c = 1; c <= row; c += 1) {
str += "" + c;
}
str += " ".repeat(N - row);
str += " ".repeat(N - row);
for (let c = row; c >= 1; c -= 1) {
str += "" + c;
}
return str;
};
for (let r = 1; r <= N; r += 1) {
console.log(genString(r));
}
1 1
12 21
123 321
1234 4321
12345 54321
123456654321
Pattern β 13: Increasing Number Triangle Pattern
1 2 3 4 5 6
1 1
2 2 3
3 4 5 6
4 7 8 9 10
5 11 12 13 14 15
6 16 17 18 19 20 21
const N = 6;
let cur = 1;
const genString = (row) => {
const local = [];
for (let c = 1; c <= row; c += 1) {
local.push(cur);
cur += 1;
}
return local.join(" ");
};
for (let r = 1; r <= N; r += 1) {
console.log(genString(r));
}
1
2 3
4 5 6
7 8 9 10
11 12 13 14 15
16 17 18 19 20 21
Pattern-14: Increasing Letter Triangle Pattern
1 2 3 4 5 6
1 A
2 A B
3 A B C
4 A B C D
5 A B C D E
6 A B C D E F
const N = 6;
const genString = (row) => {
const local = [];
for (let c = 0; c < row; c += 1) {
local.push(String.fromCharCode(c + "A".charCodeAt(0)));
}
return local.jon(" ");
};
for (let r = 1; r <= N; r += 1) {
console.log(genString(r));
}
A
A B
A B C
A B C D
A B C D E
A B C D E F
Pattern-15: Reverse Letter Triangle Pattern
1 2 3 4 5 6
1 A B C D E F
2 A B C D E
3 A B C D
4 A B C
5 A B
6 A
const N = 6;
const genString = (row) => {
const local = [];
for (let c = 0; c < row; c += 1) {
local.push(String.fromCharCode(c + "A".charCodeAt(0)));
}
return local.join(" ");
};
for (let r = N; r >= 1; r -= 1) {
console.log(genString(r));
}
A B C D E F
A B C D E
A B C D
A B C
A B
A
Pattern β 16: Alpha-Ramp Pattern
1 2 3 4 5 6
1 A
2 B B
3 C C C
4 D D D D
5 E E E E E
6 F F F F F F
const N = 6;
const genString = (row) => {
const local = [];
for (let c = 0; c < row; c += 1) {
local.push(String.fromCharCode(row - 1 + "A".charCodeAt(0)));
}
return local.join(" ");
};
for (let r = 1; r <= N; r += 1) {
console.log(genString(r));
}
A
B B
C C C
D D D D
E E E E E
F F F F F F
Pattern β 17: Alpha-Hill Pattern
1 A
2 A B A
3 AB C BA
4 ABC D CBA
5 ABCD E DCBA
6 ABCDE F EDCBA
12345 6 78901
const N = 6;
const genString = (row) => {
let str = "";
const spaces = " ".repeat(N - row);
let local = "";
for (let c = 1; c < row; c += 1) {
local += String.fromCharCode(c - 1 + "A".charCodeAt(0));
}
str += spaces;
str += local;
str += String.fromCharCode(row - 1 + "A".charCodeAt(0));
str += local.split("").reverse().join("");
str += spaces;
return str;
};
for (let r = 1; r <= N; r += 1) {
console.log(genString(r));
}
Pattern-18: Alpha-Triangle Pattern
1 F
2 E F
3 D E F
4 C D E F
5 B C D E F
6 A B C D E F
1 2 3 4 5 6
const N = 6;
const genString = (row) => {
const local = [];
for (let c = 0; c <= row; c += 1) {
local.push(String.fromCharCode(N - c - 1 + "A".charCodeAt(0)));
}
return local.reverse().join(" ");
};
for (let r = 0; r < N; r += 1) {
console.log(genString(r));
}
F
E F
D E F
C D E F
B C D E F
A B C D E F
Pattern-19: Symmetric-Void Pattern
123456
1 *** ***
2 **| |**
3 *|| ||*
4 * *
5 ** **
6 ******
const N = 3;
const genString = (row) => {
let str = "";
str += "*".repeat(N + 1 - row);
str += " ".repeat(row - 1);
str += " ".repeat(row - 1);
str += "*".repeat(N + 1 - row);
return str;
};
for (let r = 1; r <= N; r += 1) {
console.log(genString(r));
}
for (let r = N; r >= 1; r -= 1) {
console.log(genString(r));
}
******
** **
* *
* *
** **
******
Pattern β 20: Symmetric-Butterfly Pattern
N = 6
123456 789012
1 *||||| |||||*
2 **|||| ||||**
3 ***||| |||***
4 ****|| ||****
5 *****| |*****
6 ************
7 ***** *****
8 **** ****
9 *** ***
0 ** **
1 * *
const N = 6;
const genString = (row) => {
let str = "";
let local = "";
local += "*".repeat(row);
local += " ".repeat(N - row);
str += local;
str += local.split("").reverse().join("");
return str;
};
for (let r = 1; r < N; r += 1) {
console.log(genString(r));
}
console.log("*".repeat(N * 2));
for (let r = N - 1; r >= 1; r -= 1) {
console.log(genString(r));
}
* *
** **
*** ***
**** ****
***** *****
************
***** *****
**** ****
*** ***
** **
* *
Pattern β 21: Hollow Rectangle Pattern
const N = 4;
const genString = (num) => {
if (num === 1 || num === N) return "*".repeat(N);
return "*" + " ".repeat(N - 2) + "*";
};
for (let i = 1; i <= N; i += 1) {
console.log(genString(i));
}
****
* *
* *
****
ProbPattern β 22: The Number Patternlem
1 2 3 4 5 6 7 8 9 0 1
0 6 6 6 6 6 6 6 6 6 6 6
1 6 5 5 5 5 5 5 5 5 5 6
2 6 5 4 4 4 4 4 4 4 5 6
3 6 5 4 3 3 3 3 3 4 5 6
4 6 5 4 3 2 2 2 3 4 5 6
5 6 5 4 3 2 1 2 3 4 5 6
6 6 5 4 3 2 2 2 3 4 5 6
7 6 5 4 3 3 3 3 3 4 5 6
8 6 5 4 4 4 4 4 4 4 5 6
9 6 5 5 5 5 5 5 5 5 5 6
0 6 6 6 6 6 6 6 6 6 6 6
const N = 6;
const genString = (row) => {
const local = [];
const temp = [];
for (let c = 0; c < N - 1; c += 1) {
temp.push(Math.max(N - row, N - c));
}
local.push(...temp);
local.push(N - row);
local.push(...temp.reverse());
return local.join(" ");
};
for (let r = 0; r < N; r += 1) {
console.log(genString(r));
}
for (let r = N - 2; r >= 0; r -= 1) {
console.log(genString(r));
}
6 6 6 6 6 6 6 6 6 6 6
6 5 5 5 5 5 5 5 5 5 6
6 5 4 4 4 4 4 4 4 5 6
6 5 4 3 3 3 3 3 4 5 6
6 5 4 3 2 2 2 3 4 5 6
6 5 4 3 2 1 2 3 4 5 6
6 5 4 3 2 2 2 3 4 5 6
6 5 4 3 3 3 3 3 4 5 6
6 5 4 4 4 4 4 4 4 5 6
6 5 5 5 5 5 5 5 5 5 6
6 6 6 6 6 6 6 6 6 6 6