Бросать кости
Итак, я катал кости недавно и подумал о вызове.
Учитывая куб с сеткой, взятой из входных данных и списком ходов, найдите квадрат внизу в конце.
Я буду использовать это изображение для примеров здесь.
вход
Вы берете в строку со списком ходов. Строка содержит только заглавные буквы ASCII N, S, W и E. Они соответствуют повороту куба на один шаг в этом направлении.
На снимке один N сделал бы нижнюю грань а 6. На этом изображении север удален от камеры, юг направлен в сторону, восток направлен, а запад оставлен.
Вы также берете строку в следующем формате: 1P 2P 3P 4P 5P 6P, где каждый P - это позиция из N, S, W, E, T и B. T & B - это низ и верх.
Числа - это лицо с этим номером, а буква представляет позицию, в которой находится лицо. Если неясно, сеть всегда будет упорядочена по номеру, поэтому 1P 2P 3P 4P 5P 6P, а не 2B 1T 3N 4S 5W 6E.
Положение на изображении 1S 2B 3E 4W 5T 6N.
Выход
Ваша программа должна вывести число, представляющее нижнюю сторону.
Тестовые случаи
(nothing), 1S 2B 3E 4W 5T 6N -> 2
N, 1S 2B 3E 4W 5T 6N -> 6
NS, 1S 2B 3E 4W 5T 6N -> 2
NWS, 1S 2B 3E 4W 5T 6N -> 2
NWSNWS, 1S 2B 3E 4W 5T 6N -> 2
NWSS, 1S 2B 3E 4W 5T 6N -> 3
NNNNNN, 1S 2B 3E 4W 5T 6N -> 5
SNWEEWS, 1N 2T 3E 4W 5B 6S, 6
SNEEWS, 1N 2T 3W 4S 5B 6E, 4
Другие правила
Вы также можете предположить, что куб находится в бесконечной плоской плоскости, возможно, с каким-то трением.
Стандартные лазейки запрещены, хотя я не могу их найти.
Для неверного ввода ваш код может делать все, кроме запуска апокалипсиса.
Поскольку эта программа должна уместиться на моей кости, она должна быть как можно меньше. Я считаю в байтах, с некоторыми исключениями для языков, таких как папки .
(nothing) -> 2
что сеть не предоставлена, или где-то должна быть сеть?Ответы:
CJam,
43403734 байтаСпасибо Деннису за помощь в экономии 6 байтов.
Проверьте это здесь.
объяснение
Что касается того, как работает отображение символов инструкции в перестановки, вот удобная таблица:
Я включил
5%
столбец, потому что это то, что циклическое индексирование в строке делает неявно. Для четырех перестановок мы видим, что каждая из них оставляет две (противоположные) стороны нетронутыми и циклически переставляет остальные четыре.источник
Ĕ
-276
.6e!
дает вам список всех 720 перестановок[0 1 2 3 4 5]
. И276
случается, что индекс[2 1 4 0 3 5]
в этом списке.Perl
166158154144139135134132116 байтвключает +1 для
-p
С комментариями:
Входной файл:
Бежать с
Выход:
262223564
обновление 158 Использование
$N, $S, $E, $W
глобальных переменных вместо%t = {N=>, S=>, E=>, $W=>}
сохранения 8 байтов.обновление 154 С требованием является то , что программа выведет число, не печатает символ новой строки
print "$h{B}\n"
сохраняет 4 байта:print $h{B}
.обновить 144 Сохранить 10 байтов, выполнив
вместо того
update 139 Переместите регулярное выражение для команды в конец, чтобы исключить переменную, сохранив 6 байтов.
обновление 135 Сохранить 4 байта
@l[0..3,0]
вместо@l[1..3],$l[0]
.update 134 Сохраните 1 байт, используя присвоение в
@l=split//,$$_
качестве значения.обновить 132 Сохранить 2 байта, выполнив
/^\w+/ && $&
вместо/^(\w+)/ && $1
.update 129 Сохраните 3 байта, используя
-p
вместо-n
и назначая $ _ для печати.обновить 116 Сохранить 13 байтов, переписав
split//, /^\w+/ && $&
в/^\w+/g
.источник
Python 2, 204 байта
Думал, что пришло время ответить на мой собственный вопрос.
Не очень коротко, но работает.
Беги как:
Редактировать : неправильно подсчитано байтов. Теперь дольше. :(
источник