Супер Марио Галактика имеет две ромбоубооктаэдрические * планеты, облицованные плитками с платформами, которые сжимаются, когда Марио пересекает. Если Марио упадет в треугольную дыру или пробел, оставленный плиткой, к которой он ранее прикоснулся, он будет поглощен черной дырой в ядре. (Часы: суматошный Galaxy , море Slide Galaxy )
Изображение: MarioWiki.com
(Вы можете думать о планете как о кубе 2x2x2, грани которого были отделены и соединены друг с другом 2x3 "мостами".)
К сожалению, так как мой контроллер очень сломан, Марио не может прыгать и ограничен четырьмя основными направлениями. Кроме того, Марио движется очень медленно и не может проследить даже один шаг без предварительного исчезновения платформы позади него.
Давайте предположим, что камера всегда находится над головой Марио, и он начинает в правом нижнем углу лица 2х2:
■ ■
■ ■
■ ■
■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ M ■ ■ ■
■ ■
■ ■
■ ■
Ваша программа будет принимать список или строку направлений U
D
L
R
(вверх, вниз, влево, вправо), представляющих прогулку Марио по планете в виде последовательности шагов. Программа может выводить один из двух различных выходных данных: один, представляющий, что Марио все еще жив, и другой, представляющий, что где-то вдоль его пути, Марио упал в Сокращающийся Спутник.
RR: ■ ■ RRD: ■ ■ RRL: ■ ■
■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ □ □ M ■ ■ ■ ■ ■ □ □ □ ■ ■ ■ ■ ■ □ M □ ■
■ ■ \ ■ ■ M ■ ■ \
■ ■ Let's-a go! ■ ■ \ ■ ■ W-aaaaaaaaaahh!
■ ■ ■ ■ W-aaaaaaaaaahh! ■ ■
Конечно, в отличие от приведенных выше диаграмм, вам придется учитывать 3D. Вот диаграмма, которая может помочь вам лучше представить сценарий:
Top 2x2 face
<- clockwise anticlockwise ->
- ■ - ■ - ■ - ■ -
/ \ / \ / \ / \
■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ Left and right
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ M ■ ■ ■ ■ ■ ■ ■ ■ ■ edges wrap around.
■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■
\ / \ / \ / \ /
- ■ - ■ - ■ - ■ -
<- anticlockwise clockwise ->
Bottom 2x2 face
Таким образом, согласно этой схеме, UUUUURRRR
может выглядеть так:
- ■ - ■ - □ - ■ -
/ \ / \ / \ / \
■ ■ ■ ■ □ □ ■ ■
■ ■ ■ ■ □ □ ■ ■
■ ■ ■ ■ □ □ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ M ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■
\ / \ / \ / \ /
- ■ - ■ - ■ - ■ -
И UUUUUUUUULURRRRRR
может выглядеть так:
- ■ - ■ - □ - □ -
/ \ / \ / \ / \
■ ■ ■ ■ □ ■ ■ □
■ ■ ■ ■ □ ■ ■ □
-> □ ■ ■ ■ □ ■ ■ □ ->
<- □ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ M □ □ □ □ □ <-
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■
\ / \ / \ / \ /
- ■ - ■ - ■ - ■ -
Пусть самая короткая программа в байтах w-aaaaaaaaaahh!
Тестовые случаи
Выход 1: все еще жив
DDDDDLUUUUU
- Марио ходит по мосту и обратно.
RRRRDDDDLLL
- Марио ходит в треугольнике.
LLLLLLUUUUUURRRRR
- Марио ходит в большем треугольнике.
ULLDRDDDRU
- Марио подвергает себя опасности.
RURDRURDRDLDRDLDLDLULDLLLLLLLLLLLLLLLLURRRRRRRRRRRRRR
- Марио идет нетрадиционным путем ... и подвергает себя опасности.
Марио пересекает каждую плитку ровно один раз.
DDDDLUUUULLLLDDDLUUULLLLDDDDLUUUULLLLDDDLUUULLLURRRUUURDDDRRRRUUURDDDRRRRUUURDDDRRRRUUUUURDDDDD
DLDRDLDLLLDRRRDDDDLLLLLLLLLDRRRRRRRRRDDDDLLLDRRRDDDRUUURRRRULLLLUUUURRRULLLUUUUURDRURDRUURULURU
Выход 2: W-аааааааааахх!
LLR
- Марио пытается сделать шаг назад и падает.
UULDR
- Марио дважды пытается пересечь плитку и выходит в воздух.
RRDDDDD
- Марио уходит с моста на первом D (игнорируйте любые последующие шаги).
RRRRDDDDLLLL
- Марио ходит в треугольнике и падает сквозь стартовую плитку.
LLLLLLUUUUUURRRRRR
- Марио ходит в большем треугольнике и падает сквозь стартовую клетку.
UUUUUUUUUUUUUUUUUUUU
- Марио ходит по планете и проваливается сквозь стартовую плитку.
RURDRURDRDLDRDLDLDLULDLLUU
- Марио идет нетрадиционным путем и становится дезориентированным.
Марио, понимая, в какой опасности он находится, не имеет выбора.
ULLDRDDDRUUU
ULLDRDDDRUUL
ULLDRDDDRUUR
ULLDRDDDRUUD
RURDRURDRDLDRDLDLDLULDLLLLLLLLLLLLLLLLURRRRRRRRRRRRRRR
RURDRURDRDLDRDLDLDLULDLLLLLLLLLLLLLLLLURRRRRRRRRRRRRRU
RURDRURDRDLDRDLDLDLULDLLLLLLLLLLLLLLLLURRRRRRRRRRRRRRL
RURDRURDRDLDRDLDLDLULDLLLLLLLLLLLLLLLLURRRRRRRRRRRRRRD
Наконец, скопируйте любой контрольный пример из «Марио пересекает каждую плитку ровно один раз» и измените или добавьте один шаг наугад. Марио должен упасть. (Если вы добавите шаг до конца, Марио падает, чтобы схватить Звезду власти!)
* Cantellated cube был бы более правильным термином, так как некоторые грани не квадратные, но вы должны признать, что «ромбикубоктаэдр» выглядит лучше.
R
. Я разработал это на бумаге, чтобы убедиться, что мой код правильный.