W grze 2048 masz siatkę i możesz przenosić elementy w czterech kierunkach. Wszystkie poruszają się w tym kierunku tak daleko, jak to możliwe. Do tego wyzwania otrzymasz wyściełany, kwadratowy ciąg 2D (albo z nowymi liniami, albo z listą ciągów), w następujący sposób:
ab cd e
f ghij
kl
mno p
q r st
u v
w x y
z
lub
['ab cd e ', ' f ghij ', ' kl', 'mno p ', ' q r st ', 'u v', ' w x y ', 'z ']
Cztery operacje są left
, right
, up
, i down
. Wynik każdego z powyższych danych wejściowych:
Lewo:
abcde
fghij
kl
mnop
qrst
uv
wxy
z
lub
['abcde ', 'fghij ', 'kl ', 'mnop ', 'qrst ', 'uv ', 'wxy ', 'z ']
Dobrze:
abcde
fghij
kl
mnop
qrst
uv
wxy
z
lub
[' abcde', ' fghij', ' kl', ' mnop', ' qrst', ' uv', ' wxy', ' z']
W górę:
abocdiel
mf ghsjv
un rp k
zq x t
w y
lub
['abocdiel', 'mf ghsjv', 'un rp k ', 'zq x t ', ' w y ', ' ', ' ', ' ']
Na dół:
b e
af c j
mn gd k
uq rhitl
zwoxpsyv
lub
[' ', ' ', ' ', ' b e ', 'af c j ', 'mn gd k ', 'uq rhitl', 'zwoxpsyv']
Twoim celem jest obrócenie, która operacja jest wykonywana podczas każdej iteracji, wykonując je w czasie wejściowym n
. Więc jeśli twoje zamówienie jest URDL
, a dane wejściowe mówią, aby zacząć od D
( 2
, indeksowane 0), a potrzebujesz 5
operacji, wykonujesz D-L-U-R-D
, a następnie drukujesz.
Wejście:
- Ciąg w formacie jak wyżej
- Spacje końcowe nie są wymagane (ale prawdopodobnie są pomocne)
- Będzie to co najmniej 2x2
- Będzie zawierać tylko drukowalne ASCII i spacje (oraz znaki nowego wiersza według formatu wejściowego)
- Powinieneś teoretycznie obsługiwać dowolną długość, ale ograniczenia pamięci są w porządku
- Nieujemna liczba całkowita,
n
dla liczby operacji, które zostaną wykonane - Liczba całkowita
0-3
lub1-4
literaUDLR
opisująca operację na początek.- Twój program musi być w stanie rozpocząć lub zakończyć się dowolną operacją
- Możesz zdefiniować je w dowolnej kolejności dla celów początkowych, ale musi to być spójna kolejność, więc
U
czasami nie można wykonać,R
a czasem także wykonaćL
.
- Operacje muszą być wykonywane nietrywialnie
- Możesz wykonywać operacje w kolejności
LDRU
(w lewo, w dół, w prawo, w górę) wielokrotnie, ale nieDLRU
lubUDLR
(ponieważUD
jest taki sam, jakD
iLR
robi to samoR
.)
- Możesz wykonywać operacje w kolejności
Wynik:
- Łańcuch po wykonaniu czterech operacji
n
razy - Format wyjściowy musi być taki sam jak format wejściowy
- Spacje końcowe nie są wymagane (ale prawdopodobnie są pomocne)
Przykład:
W tym przykładzie użyto zamówienia URDL
.
Wejście:
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
Dane wyjściowe dla n = 0-5: (wystarczy wydrukować wynik końcowy)
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
Moja ładna, nie golfowa implementacja
Odpowiedzi:
Galaretka , 23 bajty
Wypróbuj online!
Jestem trochę niezadowolony, ale MATL potrzebował trochę konkurencji. : P
Używa kolejności
URDL
. Wejścia:U
, 2 =R
, 3 =D
, 4 =L
)Wyjaśnienie
źródło
JavaScript (ES6), 168 bajtów
Nie golfowany:
d
jest początkowym indeksem w kierunkach, które sąURDL
.źródło
Python 2 ,
226224204193 bajtów-1 bajt dzięki Trelzevirowi
Wypróbuj online!
Funkcja, która usuwa wszystkie spacje każdego elementu na liście i uzupełnia spacje po lewej lub prawej stronie.
Ma to na celu transpozycję (obrót o 90º), gdy wejście jest
0
lub1
(U
lubD
) i zastosowanieg
źródło
for i in (...)
.MATL ,
2423 bajtyZamówienie jest
URDL
,1
-na. Więc1
jest Ù,
2is
R` etc.Dane wejściowe to: liczba razy, kierunek początkowy, macierz
;
znaków (przy użyciu jako separator wierszy).Wypróbuj online!
źródło