Boxes in boxes, Или что застряло у меня в голове
Я периодически решаю задачи на leetcode или codewars, и недавно наткнулась на кату “Boxes in boxes”.
Это вроде бы не то чтобы сложная задача, но я застряла. Для начала, у меня есть проблемы с пространственным мышлением, так что я не сразу поняла сам паттерн с рисованием этих ящиков.
И даже когда я поняла паттерн, я… не смогла написать решение. Понимала, что нужно рисовать ящики от первого и затем с повторением уже существующих нарисованных, но как? Это просто не укладывалось в моей голове.
После двух вечеров размышлений, я была вынуждена посмотреть чужие решения (эта задача просто сводила меня с ума). И знаете что? Даже после того, как я увидела код и поняла, что он должен делать, я так и не могла осознать, а каким же образом это приводит нас к нужному результату.
В итоге я написала свой вариант, основываясь на идеях из одного решения, и дебажила его, пока вроде не поняла, как именно мы рисуем эти ящики.
Оставлю мой код с комментами здесь, чтобы если можно было вспомнить ход мысли:
function draw(n) { // all for one box, our start let res = [" _ ", "|_|"];
for (let i = 1; i < n; i++) { res = [ // top line - just add tops of boxes ' _' + res[0], // draw existing boxes without left border (top 1/2 part is repeat existing but partially) ...res.slice(1).map(str => '| ' + str.slice(1)), // draw existing with left border and without bottom ...res.slice(1, -1).map(str => '| ' + str), // draw bottom '|_' + res[res.length-1], ] }
return res.join('\n');}
Остаётся только надеяться, что на интервью мне эта задача не попадётся 🤪