No jogo 2048, você tem uma grade e pode mover os elementos em quatro direções. Todos eles se movem nessa direção, na medida do possível. Para esse desafio, você receberá uma string 2D acolchoada e quadrada (com novas linhas ou uma lista de strings), assim:
ab cd e
f ghij
kl
mno p
q r st
u v
w x y
z
ou
['ab cd e ', ' f ghij ', ' kl', 'mno p ', ' q r st ', 'u v', ' w x y ', 'z ']
As quatro operações são left
, right
, up
, e down
. O resultado de cada um na entrada acima:
Esquerda:
abcde
fghij
kl
mnop
qrst
uv
wxy
z
ou
['abcde ', 'fghij ', 'kl ', 'mnop ', 'qrst ', 'uv ', 'wxy ', 'z ']
Certo:
abcde
fghij
kl
mnop
qrst
uv
wxy
z
ou
[' abcde', ' fghij', ' kl', ' mnop', ' qrst', ' uv', ' wxy', ' z']
Acima:
abocdiel
mf ghsjv
un rp k
zq x t
w y
ou
['abocdiel', 'mf ghsjv', 'un rp k ', 'zq x t ', ' w y ', ' ', ' ', ' ']
Baixa:
b e
af c j
mn gd k
uq rhitl
zwoxpsyv
ou
[' ', ' ', ' ', ' b e ', 'af c j ', 'mn gd k ', 'uq rhitl', 'zwoxpsyv']
Seu objetivo é rotacionar qual operação é executada a cada iteração, realizando-a nos n
tempos de entrada . Portanto, se o seu pedido for URDL
e a entrada indicar para começar com D
( 2
, indexado a 0) e você precisar de 5
operações, execute D-L-U-R-D
e imprima.
Entrada:
- Uma string em um formato como acima
- Os espaços à direita não são necessários (mas provavelmente são úteis)
- Será pelo menos 2x2
- Contém apenas ASCII e espaços imprimíveis (e novas linhas de acordo com seu formato de entrada)
- Teoricamente, você deve suportar qualquer tamanho, mas as restrições de memória são aceitáveis
- Um número inteiro não negativo
n
, para o número de operações que serão executadas - Um número inteiro
0-3
ou1-4
, ou uma letraUDLR
, descrevendo a operação para começar.- Portanto, seu programa deve poder iniciar ou terminar com qualquer operação
- Você pode defini-los em qualquer ordem para fins iniciais, mas deve ser uma ordem consistente; portanto,
U
às vezes não pode ser seguido nem àsR
vezes seguidoL
.
- As operações devem ser executadas de maneira não trivial
- Você pode executar operações na ordem
LDRU
(esquerda, baixo, direita, cima) repetidamente, mas nãoDLRU
ouUDLR
(porqueUD
é o mesmo queD
eLR
é o mesmo que fazerR
).
- Você pode executar operações na ordem
Resultado:
- A sequência após executar os quatro
n
tempos de operação - O formato de saída deve ser o mesmo que o formato de entrada
- Os espaços à direita não são necessários (mas provavelmente são úteis)
Exemplo:
Este exemplo usa o pedido URDL
.
Entrada:
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
Saídas para n = 0-5: (apenas imprima o resultado final)
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
Minha implementação bonita e não destruída
Respostas:
Gelatina , 23 bytes
Experimente online!
Estou um pouco insatisfeito, mas o MATL precisava de alguma competição. : P
Usa o pedido
URDL
. Entradas:U
, 2 =R
, 3 =D
, 4 =L
)Explicação
fonte
JavaScript (ES6), 168 bytes
Ungolfed:
d
é o índice inicial nas direções que sãoURDL
.fonte
Python 2 ,
226224204193 bytes-1 byte graças a Trelzevir
Experimente online!
Função que remove todos os espaços de cada elemento da lista e completa com espaços à esquerda ou à direita.
Isso para transpor (girar 90º) quando a entrada é
0
ou1
(U
ouD
) e aplicarg
fonte
for i in (...)
.MATL ,
2423 bytesOrdem é
URDL
,1
baseados. Então1
é,
2is
R` etc.As entradas são: número de vezes, direção inicial, matriz de caracteres (usando
;
como separador de linhas).Experimente online!
fonte