Всякий раз, когда вы делаете ход на кубике Рубика, есть обратный ход, который отменяет первый ход. Из-за этого каждый алгоритм (набор ходов) имеет обратный алгоритм, который отменяет первый алгоритм.
Цель этой задачи - найти обратную сторону заданного алгоритма.
Спецификация:
Вход состоит из массива отдельных ходов. Каждый шаг представляет собой строку длиной 1 или 2. Конечно, вы можете использовать любой формат ввода, наиболее подходящий для вашего языка. Каждый ход состоит из структуры X
или X'
или X2
, где X
есть заглавные или строчные буквы.
Чтобы полностью изменить X
, просто замените это X'
. Аналогично X'
становится X
. X2
с другой стороны не меняется.
Чтобы создать вывод, поменяйте местами каждое движение, а затем обратный массив.
Примеры (строки, разделенные пробелами):
R
=> R'
D U'
=> U D'
S T A C K
=> K' C' A' T' S'
A2 B2
=> B2 A2
Подсчет очков:
Это код-гольф, поэтому выигрывает наименьшее количество байтов. Стандартные лазейки не допускаются.
источник
R2
->R2'
илиB
->B3
разрешено?X3
илиX1
была бы хорошим дополнением к вызову.D2R2
в качестве контрольного примера ...Ответы:
Python 2 ,
71575453 байта-15 байт благодаря овсам! -3 байта благодаря Роду.
Попробуйте онлайн!
Строковый ввод / вывод, 70 байт
Попробуйте онлайн!
источник
V ,
1310 байтПопробуйте онлайн!
3 байта сохранены благодаря @nmjmcman, указывающему на мою любимую функцию. Объяснение:
источник
ä
Нравится ли представлять регулярное выражение при компиляции в vim?:g!/\d/norm A'<CR>:%s/''//g<CR>gg:g/^/m0<CR>
Подробнее о том, как V сжимает регулярные выражения, можно найти здесьСетчатка 0.8.2 ,
2726 байтПопробуйте онлайн! Ссылка включает в себя тестовые случаи. Пояснение: Первый этап добавляет апостроф после каждого буквенно-цифрового. Это приводит к двойным апострофам (с или без включительно 2), которые должны быть удалены. Финальный этап меняет ходы.
источник
O$^
на самом деле это лучший способ перевернуть список совпадений, поэтому количество байтов в Retina 1 фактически не изменяетсяJavaScript (ES6), 45 байт
Самое короткое решение - взять Array IO. Простое и правильное использование аргумента уничтожения.
Вывод строки составляет +8 байт для
.join` `
.Строковый ввод, вывод массива: 69 байт
источник
.reverse()
с::reverse
сохранением 1 байта, но сделав ES7Желе , 11 байт
Монадическая ссылка, возвращающая список списков символов («массив» из «строк»).
Попробуйте онлайн! (Нижний колонтитул избегает разрушения вывода, отображая список разделенным пробелами.)
Как?
источник
JavaScript (ES6), 46 байт
Принимает ввод как массив ходов.
Проверь это
Введите разделенный запятыми список ходов.
объяснение
Анонимная функция, принимающая массив ходов в качестве аргумента через параметр
a
.Отобразить массив, передав каждую строку через функцию, где
m
находится текущая строка.Проверьте, содержит ли строка второй второй символ (
"'"
или"2"
).Если это так, попробуйте привести эту строку символов к целому числу. Если строка есть
"2"
, она становится2
правдивой. Если строка"'"
, это становитсяNaN
, что ложно.Если предыдущий тест верен, просто вернитесь
m
.В противном случае верните первый символ
m
.Если строка не содержит второй символ, возвращаемое
m
с добавлением'
.Переверните измененный массив.
источник
Python ,
5148 байтБезымянная функция, принимающая и возвращающая списки строк.
Попробуйте онлайн!
Переворачивает список ввода с помощью
a[::-1]
; добавляет'
к каждой записи сv+"'"
; заголовки каждого из них на 1 или 2 символа в зависимости от того, был ли оригинал с'
или нет[:2-("'"in v)]
.источник
Python 3 ,
918972706965 байтПопробуйте онлайн! (С тестами)
Очевидно, вам не нужно принимать ввод и вывод в виде строк, поэтому возможно 69-байтовое решение
источник
len(i)==1
len(i)-2
корочеlen(i)==1
(помните, 0 - фальсификация)Haskell , 43 байта
Попробуйте онлайн! Объявляет анонимную функцию
map f.reverse
. Привязатьg
и использовать какg["S","T","A","C","K"]
.источник
PHP , 81 байт
Попробуйте онлайн!
источник
05AB1E , 13 байтов
Попробуйте онлайн!
объяснение
источник
J, 25 байт
J хорошо с этим справляется, кроме неудачной escape-последовательности, необходимой для представления одной кавычки:
Нам нужно представить список с помощью данных в штучной упаковке, так как это набор из одного и двух символов, следовательно:
&.>
- «under unbox», что означает «распаковать каждый элемент», выполнить следующую операцию (т. е. символы, описанные ниже), а затем перезагрузить, когда закончите(''''={:)
"если 2-ой символ - одинарная кавычка" ....@.
(Глагол повестки дня J, своего рода обобщенное троичное утверждение или падежное утверждение) «затем выполните 2-й пункт в списке повестки дня, в противном случае выполните первый»}:
(2-ой пункт в списке повестки дня), «удалить последний символ», то есть, одиночная кавычка`(Галстук глагола J) Вы можете рассматривать это как разделитель пунктов повестки дня
,&''''
(первый пункт в списке повестки дня) "добавить одну цитату в конец"|.
"задний ход"Попробуйте онлайн!
источник
R , 51 байт
Попробуйте онлайн!
источник
Рубин , 44 байта
Попробуйте онлайн!
источник
Java 8,
141128,126 байтПринимает ввод как один
String
без пробелов (т.е.RUR'URU2R'U
).Объяснение:
Попробуйте онлайн.
Пример описанных выше шагов с заданным вводом:
RUR'URU2R'U
RUR'URU2R'U
→R'U'R'''U'R'U'2'R'''U'
R'U'R'''U'R'U'2'R'''U'
→R'U'RU'R'U'2'RU'
R'U'RU'R'U'2'RU'
→'R'UR'U'R'U'2R'U
'R'UR'U'R'U'2R'U
→'R'UR'U'R2UR'U
'R'UR'U'R2UR'U
→U'RU2R'U'RU'R'
источник