Regras:
Neste jogo, você começa no topo de uma grade retangular de tamanho N x M, composta por paredes e espaços abertos. A entrada é N linhas de caracteres M, em que a .
especifica um espaço aberto e a x
especifica uma parede. Seu programa deve gerar o menor número K, de forma que exista um caminho do canto superior esquerdo para o canto inferior direito (sem diagonais) que atravesse K paredes.
Por exemplo, dada a entrada:
..x..
..x..
xxxxx
..x..
..x..
seu programa deve sair 2
.
Outros exemplos:
saída 4
:
xxxxx
x.x.x
x.x.x
x..xx
saída 0
:
.xxxxxxxx
.x...x...
.x.x.x.x.
.x.x...x.
...xxxxx.
saída 6
:
xx
xx
xx
xx
xx
Petiscos extras:
Se facilitar sua vida, você pode especificar N e M como parâmetros da linha de comando.
Crédito extra se você puder fazer com que seu programa imprima o caminho de uma forma ou de outra.
Respostas:
Ruby 1.9
(235)(225)(222)(214)Não sei se isso é mais curto que um programa baseado em Dijkstra, mas achei que tentaria uma abordagem diferente. Isso usa regex em um loop para marcar cada espaço com o número mínimo de paredes necessárias para alcançá-lo.
A entrada é especificada como um arquivo na linha de comando, ou seja,
Ungolfed:
fonte
Perl 5,10 (164)
Muito parecido com a solução da migimaru, apenas com o toque extra do Perl. 5.10 é necessário para
\K
noss///
.fonte
Pitão
406378360348418 caracteresDijkstra simplificado, já que os movimentos com peso estão em
x
campo. Isso é feito em "ondas", primeiro loop com a localização de.
campos tocando na frente e definindo-os no mesmo peso, do que uma vez encontrex
campos tocando na frente e definindo-os com+1
peso. Repita enquanto não houver mais campos não visitados.No final, sabemos o peso de cada campo.
A entrada é especificada como um arquivo na linha de comandos:
Atualização: imprime o caminho.
fonte
Versão C ++ (
610607606584)Implementa o algoritmo de Dijkstra.
Sem golfe:
fonte