Descrição do Desafio
Na métrica do táxi , uma distância entre dois pontos é definida como:
Considere uma matriz com apenas zeros e uns:
0 0 0 1 0
1 0 0 0 0
0 0 0 0 0
1 0 0 1 0
1 0 0 0 0
Vamos mapear cada um 1
para a distância mais próxima da diferente 1
na matriz (é claro, assumindo que a distância entre duas linhas / colunas adjacentes seja igual a 1):
0 0 0 3 0
2 0 0 0 0
0 0 0 0 0
1 0 0 3 0
1 0 0 0 0
Para esse desafio, dada uma matriz, encontre seu mapa de distâncias, como mostrado acima.
Exemplos
0 0 1
0 0 0
0 0 0
0 1 0
0 0 0
0 0 4
0 0 0
0 0 0
0 4 0
0 0 0
-----
0 0 0 0 0 0 1
0 1 0 1 0 0 0
1 1 0 0 0 0 1
0 0 1 0 0 0 0
0 0 0 0 0 1 0
0 1 0 0 0 0 0
1 0 0 0 0 0 0
0 0 0 1 0 0 1
0 0 0 0 0 0 2
0 1 0 2 0 0 0
1 1 0 0 0 0 2
0 0 2 0 0 0 0
0 0 0 0 0 3 0
0 2 0 0 0 0 0
2 0 0 0 0 0 0
0 0 0 3 0 0 3
-----
1 1 1
1 1 1
1 1 1
1 1 1
1 1 1
1 1 1
-----
1 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 1
22 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 22
-----
0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 1
0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
0 0 9 0 0 0 0 0 0 0 0 2 0 0 0 4
0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0
-----
1 1
1 1
Notas
- Você pode receber informações em qualquer formato razoável
- Além de
0
e1
você pode escolher dois valores distintos - Você pode assumir que uma matriz não está vazia (contém pelo menos uma linha de comprimento maior ou igual a 1), além de ser retangular
- Você também pode assumir que há pelo menos dois valores reais presentes na matriz (caso contrário, a saída é indefinida)
- Você pode escrever um programa completo ou uma função
- Em vez de retornar uma nova matriz, você pode modificar uma existente
- Isso é código-golfe , então faça sua contagem de bytes o mais baixa possível!
code-golf
matrix
binary-matrix
shooqie
fonte
fonte
Respostas:
MATL ,
2322 bytesExperimente online! Ou verifique todos os casos de teste .
Explicação
Para ver resultados intermediários, pode ser útil inserir
X#
(pilha de exibição) entre duas declarações.fonte
t
nãoM
Táxi , 14652 bytes
Experimente online!
Estou presumindo que nenhum ser humano queira tentar ler esse código, então tente online com comentários, rótulos significativos e resultados mais legíveis!
Entrada: String que representa uma matriz. A cadeia deve ser composta de 3 caracteres:
0
,|
representando quebras de linha, e qualquer maior dígitos positivo do que um (PDGTO). Eu gosto de usar8
. O OP permite entrada em qualquer formato razoável e acredito que isso se qualifique. A sequência não precisa ser formatada para uma matriz retangular, mas será assumido como alinhado à esquerda, seja qual for.Saída: matriz de valores que mostram a distância mínima do táxi de um
PDGTO
para o outro mais próximoPDGTO
.Exemplo:
O segundo formato de saída é claramente muito mais fácil de ler, mas também adiciona 7 bytes ao programa e , afinal, é um código de golfe . Teria sido possível voltar no final e remover todos os zeros à direita, em vez de simplesmente preencher os
0
valores, mas isso acrescentaria ainda mais bytes e seria considerado um custo inaceitável.Aqui está o texto do código não golfe com comentários, melhores marcadores e resultados mais claros:
(É o mesmo que você obtém no link acima.)
fonte
Python 3 + numpy , 102 bytes
Experimente online!
Recebe entrada como uma
numpy
matriz.Python 3 , 127 bytes
Experimente online!
fonte
Perl 5 , 197 bytes
Experimente online!
fonte
$#
, basicamente ...JavaScript (ES6), 97 bytes
Recebe entrada na sintaxe de curry
(w)(a)
, em que w é a largura da matriz e a é uma matriz plana de zeros e uns. Retorna outra matriz plana.Casos de teste
Esse trecho inclui uma função auxiliar para formatar a saída para facilitar a leitura.
Mostrar snippet de código
fonte
Oitava, 59 bytes
Toma a entrada como uma matriz 2D.
Experimente online!
Explicação:
Para cada localização de 1s encontrada na matriz, defina-a como zero e calcule a transformação de distância do bloco da cidade da matriz e, finalmente, defina a localização para a distância calculada.
fonte
Python 3 com Numpy ,
106101 bytes5 bytes de desconto graças a @notjagan
Função que insere uma matriz Numpy e sai modificando essa matriz (que é permitida por padrão ).
Experimente online!
fonte
Gelatina , 27 bytes
Experimente online!
fonte