Sua tarefa é encontrar o destino total dos objetos que estão caindo em um planeta; você obterá entradas como esta:
7
...#...
.......
#..O..#
.......
...#...
.......
.......
onde O é o planeta e # são os objetos, observe que o planeta atrairá objetos das direções básicas (NEWS). Você deve produzir:
#
#O#
#
ou seja, os objetos depois de chegarem ao seu destino.
O primeiro número fornecido como entrada é o comprimento da grade (nxn); no exemplo acima, é 7.
O objeto sempre deve se mover na direção mais curta (observe que as direções permitidas são apenas horizontais e verticais; o objeto não pode se mover na diagonal)
Se um objeto é equidistante de duas direções, ele deve ir no sentido horário:
..#
...
O..
Chegará a este lado:
...
...
O#.
Se um objeto colidir com o planeta, ele irá parar. Se colidir com outro objeto, eles se tornam um objeto,
4
.#..
#...
....
.O..
se tornaria:
....
....
.#..
.O..
Um exemplo final:
6
..#...
.#....
......
.#O...
....#.
......
Resultado:
......
......
..#...
.#O#..
......
......
Nota: Você deve exibir a forma final, para que todas as saídas sejam aceitas desde que mostrem a forma final do planeta.
por exemplo para esta entrada:
...#
....
.O..
....
Saída deve:
O#
ou
....
....
.O#.
....
Ambos são aceitos.
Isso é código-golfe, então a resposta mais curta será ganha
Nota 2:
Como você deve ter notado, a .
representa o vácuo, portanto, o caminho mais curto é o menor número de pontos.
Por exemplo:
.#.
...
.O.
Não é aceito para ser
O#
já que o caminho mais curto é vertical. Nota 3:
O objeto deve sempre se mover para estar na mesma linha do planeta em uma das quatro direções (escolhendo a mais curta)
|<#
|
|
-----O------
|
Restrições:
2 <= n <= 100
Respostas:
Perl,
156 153148Novas linhas de legibilidade. Execute com
-0777p
(5 adicionados à contagem), insira através de STDIN.Mais legível:
fonte
$=
a variável 'magick' (que pode ser apenas um número inteiro - economiza 5 caracteres 'int ()') e usar\G
âncora no padrão de pesquisa. Aqui, definimos sua posição atribuindo apos
function (cujo argumento padrão é$_
).Mathematica, 206 bytes
Um pouco mais legível:
Como você pode ver, apenas tomo uma entrada que é a string que contém o mapa de entrada. Isso ocorre porque eu não usaria o tamanho inteiro de qualquer maneira. Se você insistir no formato de entrada, eu posso alterar a sequência de entrada para o segundo argumento para mais um caractere.
Quanto ao algoritmo, estou apenas coletando todos os
{Δx, Δy}
pares dos objetos e procuro um par em cada quadrante com as condições passadas parah
. Suspeito que essa também seja a parte que poderia ser jogada ainda mais.fonte
perl, 270 caracteres
3 etapas: 1) encontre o planeta e os satélites na entrada, 2) determine o quadrante para cada satélite, 3) a saída
Menos golfe:
fonte