Seu objetivo é escrever um programa que cria um 10x10 mapa aleatório usando 0
, 1
e 2
, e encontra o caminho mais curto de canto superior esquerdo para canto inferior direito, assumindo que:
0 representa um campo de grama: qualquer um pode andar sobre ele;
1 representa um muro: você não pode atravessá-lo;
2 representa um portal: ao entrar em um portal, você pode mover para qualquer outro portal no mapa.
Especificações:
- O elemento superior esquerdo e o inferior direito devem ser 0 ;
- Ao criar o mapa aleatório, todo campo deve ter 60% de chance de ser 0 , 30% de ser 1 e 10% de ser 2 ;
- Você pode mover-se em qualquer campo adjacente (mesmo na diagonal);
- Seu programa deve gerar o mapa e o número de etapas do caminho mais curto;
- Se não houver um caminho válido que leve ao campo inferior direito, seu programa deve gerar apenas o mapa;
- Você pode usar qualquer recurso que desejar;
- O menor código vence.
Cálculo de etapas:
Uma etapa é um movimento real; toda vez que você altera o campo, você incrementa o contador.
Resultado:
0000100200
0100100010
1000000111
0002001000
1111100020
0001111111
0001001000
0020001111
1100110000
0000020100
9
code-golf
path-finding
maze
Vereos
fonte
fonte
Respostas:
GolfScript, 182 caracteres
Exemplos:
fonte
Mathematica (344)
Bônus: destaque do caminho
Crio o gráfico de todos os filmes possíveis para os vértices vizinhos e adiciono todos os "teleports" possíveis.
fonte
Mathematica,
208202 caracteresBaseie-se nas soluções de David Carraher e ybeltukov. E graças à sugestão de ybeltukov.
fonte
n/n
em vez den/10
:)〚 〛
para suportes (é símbolos unicode corretos)Norm[# - #2] & @@ # < 2 || # \[Union] u == u &
Norm[# - #2] & @@ # < 2
significa que a distância entre dois pontos é menor que 2, então eles devem estar adjacentes.# ⋃ u == u
significa que ambos os pontos estão em u.Python 3, 279
Alguma variante Dijkstra. Feio, mas jogou golfe o máximo que pude ...
Execução de amostra
fonte
Mathematica
316 279275O objeto básico é uma matriz 10x10 com aproximadamente 60 0, 30 1 e 10 2. A matriz é usada para modificar um 10x10
GridGraph
, com todas as arestas conectadas. Os nós que correspondem às células que contêm 1 na matriz são removidos do gráfico. Esses nós "segurando 2" estão todos conectados um ao outro. Em seguida, o Caminho Mais Curto é procurado entre o vértice 1 e o vértice 100. Se esse caminho não existir, o mapa será retornado; se esse caminho existir, o mapa e o menor comprimento do caminho serão mostrados.Exemplo de execução :
fonte
Python (1923)
Pesquisa de retornoÉ certo que não é o mais curto nem o mais eficiente, embora exista alguma memoização.
fonte
JavaScript (541)
A geração de gráficos ocorre nas cinco primeiras linhas.
f
contém os campos,p
mantém os portais. A pesquisa real é implementada via BFS.Exemplo de saída:
fonte
Python 3 (695)
Dijkstra!
Exemplo de saída:
fonte
Python, 314
É uma implementação nojenta da Bellman-Ford. Este algoritmo é O (n ^ 6)! (O que é aceitável para n = 10)
fonte
print '\n'.join(map(str,a))
; Eu fizprint a
pelo bem do golfe.r*10
tem 100 elementos).