код для кубиков
Jan. 1st, 2020 09:21 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Взял со стола у сослуживца головоломку на составление куба 3x3x3 из семи частей. Позже прочитал, что она знаменита, но как-то мне не приходилось решать раньше. Долго тупил и не мог составить.

Наконец это меня так разозлило, что написал сегодня код, который находит решение.
Если кому-то интересно, вот он. Около 50 строк. Если вы программист, то перед чтением кода подумайте несколько минут о том, как бы вы сами такое написали, составьте хотя бы в уме план. Если вы знаете, как это сделать заметно короче и/или элегантнее, чем у меня, расскажите, мне любопытно. У меня получилось заметно проще, чем то, как думал вначале сделать (хранить фигуры как множества из 3 или 4 трехмерных точек, получать варианты вращением и двигать туда-сюда, пересекая с целочисленной решеткой точек куба), но не то чтобы нравится.
P.S. Он находит все решения, включая повороты и отражения; при желании можно додавить, чтобы находил только уникальные, но мне уже лень было.

Наконец это меня так разозлило, что написал сегодня код, который находит решение.
Если кому-то интересно, вот он. Около 50 строк. Если вы программист, то перед чтением кода подумайте несколько минут о том, как бы вы сами такое написали, составьте хотя бы в уме план. Если вы знаете, как это сделать заметно короче и/или элегантнее, чем у меня, расскажите, мне любопытно. У меня получилось заметно проще, чем то, как думал вначале сделать (хранить фигуры как множества из 3 или 4 трехмерных точек, получать варианты вращением и двигать туда-сюда, пересекая с целочисленной решеткой точек куба), но не то чтобы нравится.
P.S. Он находит все решения, включая повороты и отражения; при желании можно додавить, чтобы находил только уникальные, но мне уже лень было.