1
var pyramidTransition = function (bottom, allowed) {
2
const set = new Set(allowed);
3
const memo = new Map();
4
const chars = ["A", "B", "C", "D", "E", "F"];
5

6
return topDown(bottom, bottom.length - 1);
7

8
function topDown(prev, row) {
9
const key = `${prev}#${row}`;
10

11
if (row === 0) return true;
12
if (memo.has(key)) return memo.get(key);
13

14
let pats = new Set();
15
pats.add("");
16

17
for (let i = 0; i < row; i++) {
18
const tmp = new Set();
19

20
const leftBot = prev.charAt(i);
21
const rightBot = prev.charAt(i + 1);
22

23
for (const char of chars) {
24
const triadStr = leftBot + rightBot + char;
25

26
if (set.has(triadStr)) {
27
for (const pat of pats) {
28
tmp.add(pat + char);
29
}
30
}
31
}
32

33
pats = tmp;
34
}
35

36
for (const pat of pats) {
37
if (topDown(pat, row - 1)) return true;
38
}
39

40
memo.set(key, false);
41
return false;
42
}
43
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0