Получить минимальное и максимальное из «запретных» чисел.
Начиная от 36 двигаться вниз. Если больше max, можно брать.
Если меньше max, то берём уже ниже min.
const ban = arr.flat().sort((a, b) => a - b);
const mm = {min: Math.min(...ban), max: Math.max(...ban)};
const result = [...new Array(15)].map((_, i) => 36 - i > mm.max ? 36 - i : mm.min - i );
Да, есть риск уехать в отрицательные, но условия этого не запрещают.
Да, не используются «дырки» в запретных числах.
Ничто не совершенно, кроме кода 0xD34F