В игре 2048 у вас есть сетка, и вы можете перемещать элементы в четырех направлениях. Все они движутся в этом направлении так далеко, как могут. Для этого задания вам будет предоставлена квадратная 2D-строка с добавками (либо с символами новой строки, либо со списком строк), например:
ab cd e
f ghij
kl
mno p
q r st
u v
w x y
z
или
['ab cd e ', ' f ghij ', ' kl', 'mno p ', ' q r st ', 'u v', ' w x y ', 'z ']
Четыре операции left
, right
, up
, и down
. Результат каждого на приведенном выше входе:
Осталось:
abcde
fghij
kl
mnop
qrst
uv
wxy
z
или
['abcde ', 'fghij ', 'kl ', 'mnop ', 'qrst ', 'uv ', 'wxy ', 'z ']
Правильно:
abcde
fghij
kl
mnop
qrst
uv
wxy
z
или
[' abcde', ' fghij', ' kl', ' mnop', ' qrst', ' uv', ' wxy', ' z']
Up:
abocdiel
mf ghsjv
un rp k
zq x t
w y
или
['abocdiel', 'mf ghsjv', 'un rp k ', 'zq x t ', ' w y ', ' ', ' ', ' ']
Вниз:
b e
af c j
mn gd k
uq rhitl
zwoxpsyv
или
[' ', ' ', ' ', ' b e ', 'af c j ', 'mn gd k ', 'uq rhitl', 'zwoxpsyv']
Ваша цель состоит в том, чтобы чередовать, какая операция выполняется на каждой итерации, выполняя их во время ввода n
. Так что, если ваш заказ URDL
, и ввод говорит начать с D
( 2
, 0-индексированный), и вам нужны 5
операции, вы выполняете D-L-U-R-D
, а затем печатаете.
Входные данные:
- Строка в формате, как указано выше
- Конечные пробелы не требуются (но они, вероятно, полезны)
- Это будет как минимум 2х2
- Будет содержать только печатные ASCII и пробелы (и переводы строк в соответствии с вашим форматом ввода)
- Вы должны теоретически поддерживать любую длину, но ограничения памяти в порядке
- Неотрицательное целое число,
n
для количества операций, которые будут выполнены - Целое число
0-3
или1-4
, или букваUDLR
, описывающая операцию, с которой нужно начать.- Таким образом, ваша программа должна иметь возможность начинать или заканчивать любую операцию
- Вы можете определить их в любом порядке для начальных целей, но это должен быть последовательный порядок, поэтому
U
иногда нельзя следовать,R
а иногда и следоватьL
.
- Операции должны выполняться нетривиально
- Вы можете выполнять операции в порядке
LDRU
(влево, вниз, вправо, вверх) несколько раз, но неDLRU
илиUDLR
(потому чтоUD
это то же самоеD
, что иLR
то же самое, что и выполнениеR
).
- Вы можете выполнять операции в порядке
Выход:
- Строка после выполнения четырех операций
n
раз - Формат вывода должен совпадать с форматом ввода
- Конечные пробелы не требуются (но они, вероятно, полезны)
Пример:
В этом примере используется порядок URDL
.
Входные данные:
10 (number of times operations are applied)
0 (starts with Up)
ab cd e
f ghij
kl
mno p
q r st
u v
w x y
z
Выходы для n = 0-5: (просто выведите конечный результат)
ab cd e
f ghij
kl
mno p
q r st
u v
w x y
z
---------------
abocdiel
mf ghsjv
un rp k
zq x t
w y
---------------
abocdiel
mfghsjv
unrpk
zqxt
wy
---------------
el
dijv
chspk
bognrxt
amfuzqwy
---------------
el
dijv
chspk
bognrxt
amfuzqwy
---------------
eljvkxty
disprqw
chgnz
bofu
am
Моя симпатичная, не одураченная реализация
Ответы:
Желе , 23 байта
Попробуйте онлайн!
Я немного неудовлетворен, но MATL нужна была конкуренция. :П
Использует заказ
URDL
. Входы:U
, 2 =R
, 3 =D
, 4 =L
)объяснение
источник
JavaScript (ES6), 168 байт
Ungolfed:
d
это начальный индекс в направлениях, которыеURDL
.источник
Python 2 ,
226224204193 байта-1 байт благодаря Trelzevir
Попробуйте онлайн!
Функция, которая удаляет все пробелы каждого элемента в списке и дополняет пробелы слева или справа.
Это для транспонирования (поворота на 90º), когда ввод
0
или1
(U
илиD
) и применитьg
источник
for i in (...)
.MATL ,
2423 байтаЗаказ
URDL
,1
-. Так же1
это R,
2is
R` и т. Д.Входные данные: количество раз, начальное направление, матрица символов (используется в
;
качестве разделителя строк).Попробуйте онлайн!
источник