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"];6
return topDown(bottom, bottom.length - 1);8
function topDown(prev, row) {9
const key = `${prev}#${row}`;11
if (row === 0) return true;12
if (memo.has(key)) return memo.get(key);17
for (let i = 0; i < row; i++) {18
const tmp = new Set();20
const leftBot = prev.charAt(i);21
const rightBot = prev.charAt(i + 1);23
for (const char of chars) {24
const triadStr = leftBot + rightBot + char;26
if (set.has(triadStr)) {27
for (const pat of pats) {36
for (const pat of pats) {37
if (topDown(pat, row - 1)) return true;