Edição importante: Anteriormente, havia um valor incorreto no Exemplo 1. Foi corrigido.
Você recebe uma matriz bidimensional na qual cada célula contém um dos quatro valores.
Exemplos:
1 2 2 2 2 1 @ . . X X V
1 3 1 4 1 4 e . @ I C V
2 3 1 3 4 2 H H @ X I V
1 4 4 2 1 3 V C C
2 2 2 3 2 3 X X X
Os quatro valores representam setas direcionais (para cima, para baixo, esquerda e direita), embora você não saiba qual valor representa qual direção.
As setas direcionais formam um caminho ininterrupto que inclui todas as células da matriz, embora você não saiba onde estão os pontos inicial e final.
Escreva um código que determine qual direção cada um dos quatro valores representa e onde estão os pontos inicial e final.
Um valor de retorno aceitável para uma matriz que contém os valores A, B, C e D seria algo como:
{ up: A, down: C, left: D, right: B, start: [2, 0], end: [4, 2] }
Como você pode percorrer o caminho nos dois sentidos (do início ao fim e do fim ao início), sempre haverá mais de uma solução correta e pode haver mais de duas. Suponha que as entradas que você recebe (como nos exemplos acima) sempre tenham pelo menos uma solução correta. Nos casos em que há mais de uma solução correta, basta retornar uma das soluções corretas.
O menor código vence. Escolherei o vencedor após 7 dias ou 24 horas sem uma nova inscrição, o que ocorrer primeiro.
Estou incluindo soluções para os exemplos acima, mas recomendamos que você as verifique somente depois de escrever seu código:
1:
{para cima: 3, para baixo: 1, para a esquerda: 4, para a direita: 2, início: [0,0], final: [2,5]}
Dois:
{acima: '@', abaixo: 'e', esquerda: '.', direita: 'H', início: [1,1], final: [0,0]}
Três:
{acima: 'I', abaixo: 'V', esquerda: 'C', direita: 'X', início: [0,2], final: [4,2]}
Respostas:
C #
EDIT: Corrigida uma divisão e formatação. E adicionou a classe auxiliar.
Este é o código do golfe, 807 caracteres
Resultados para os três casos de teste:
Este é o código bruto sem "golf", com quase 4.000 caracteres:
Estes são os resultados para os três exemplos:
fonte
Mathematica 278
Espaços adicionados para "clareza"
Sessão e Saída:
Qual é o vértice inicial, o vértice final e as regras de transição associadas a cada símbolo.
Aqui está o código complementar para mostrar o gráfico orientado:
fonte
Mathematica (151)
Retorna o ponto inicial, o ponto final e as regras de transição. O primeiro índice é linha, o segundo é coluna
Observe que meu código funciona mesmo com
{-1,0,1}~Tuples~{4,2}
. Para acelerar, você pode usarPermutations@{{1, 0}, {0, 1}, {-1, 0}, {0, -1}}
.fonte
APL (207)
Eu não poderia torná-lo mais curto que o Mathematica, porque não conseguia raciocinar em termos de TopologicalSort e tal. Pessoas mais inteligentes são bem-vindas para apertar ainda mais.
Golfe:
Ungolfed:
Exemplos:
(Os índices começam em 1)
fonte