Tudo bem, minha segunda tentativa de um código de golfe, vamos ver como isso acontece.
Finja que você tem uma matriz de 9 valores. Agora imagine essa matriz em uma grade 3x3.
Você precisa retornar aos vizinhos esse número como índices da matriz.
0 1 | 2
3 4 5
6 7 8
Regras:
- É código de golfe, portanto, a resposta mais curta vence.
- O índice da matriz fingida pode começar em 0 ou 1. (embora todos os exemplos usem 0)
- Apenas retornar valores é desaprovado (como
if 3: return 046
) - A submissão pode ser apenas um procedimento / função / método, mas um exemplo seria bom
- O valor retornado pode estar em qualquer ordem (como se a entrada fosse 0, poderia ser 13 ou 31)
- se desejar, a saída pode ser uma lista de números, por exemplo, em
[0,4,6]
vez de046
- diagonais não contam, como visto nos exemplos.
Exemplos:
entrada:
0 0
resultado:
13
entrada:
3
resultado:
046
entrada:
4
resultado:
1357
[0,4,6]
vez de046
?Respostas:
Geléia ,
1613 bytesExperimente online!
Como funciona
fonte
MATL ,
1716 bytesA matriz é baseada em 1, ou seja, contém números de
1
até9
.Experimente online! Ou verifique todos os casos de teste .
Explicação
Considere a entrada
2
como um exemplo.fonte
Mathematica, 32 bytes
Usa um gráfico em vez de uma matriz.
GridGraph@{3,3}
constrói um gráfico em forma de grade 3x3, mostrado abaixo, que o Mathematica rotula com os números de 1 a 9 para os vértices por padrão. Em seguida,~AdjacencyList~#&
informa os vizinhos de um vértice.fonte
Mathematica, 40 bytes
1 indexado. Apenas procura a resposta. Alguém pode fazer melhor no Mathematica?
fonte
31[420,51,...,75][[#]]&
.GridGraph@{3,3}~AdjacencyList~#&
para 32 bytes, com 1 indexação.Oitava,
424039 bytesÍndice baseado em 1.
Verifique todos os casos de teste.
Explicação:
Exemplo:
n = 2
(No Octave, os dados são armazenados em colunas.)
índice lógico em que a distância é 1:
fonte
Python 2, 71 bytes
1-indexado
Experimente online!
Obter o resultado de uma lista predefinida de resultados é mais curto (46 bytes):
0-indexado
Experimente online!
fonte
Haskell ,
74 7168 bytesExperimente online! Usa uma grade indexada 1. Exemplo de uso:
f 3
retorna[2,6]
.Edit: Salvo
36 bytes graças a Ørjan Johansen!Para
7775 bytes, a seguinte função#
funciona para um tamanho de grade arbitráriom
:Experimente online! Para cada uma,
n
a lista[n-m,n-1,n+1,n+m]
contém todos os quatro vizinhos. Para cada entradax
nesta lista, verificamos-1<x
ex<m*m
garantimos quex
não esteja acima ou abaixo da grade,mod n 3>0||n-1/=x
para aplicar a borda esquerda da grade emod(n+1)m>0||n+1/=x
a borda esquerda.fonte
[n-3,n-1..n+3]
egcd 3n>1
.gcd
parte. Deveria ter sido<3
, e então quebran==0
. Você poderá usar esse truque se alterar tudo para1
-indexed.n/=2&&n/=5
pode ser substituído pormod x 3>0
. (Ou agcd
versão com reindexing, que agora pode ser usada duas vezes.) #Ruby ,
51 4845 bytesExperimente online!
Crie 2 matrizes, com vizinhos verticais e horizontais, depois selecione uma ou mais delas.
Ruby codificado, 44 bytes
... Não vale a pena.
fonte
C,
1009291837874 bytes1 indexado. Obrigado a @Neil por salvar 4 bytes.
Experimente online!
Versão codificada, 56 bytes
Indexado a 0
fonte
n>3&&p(n-3)
etc. para salvar 4 bytes? Na segunda versão, você não pode escreverl[]=
para salvar um byte?Python 2, 51 bytes
Com base em uma versão anterior da minha resposta Ruby , achei interessante porque era basicamente o mesmo código, usando um truque diferente e produz o mesmo resultado. Conseguir este direito me ajudou a responder um pouco mais à resposta do rubi.
Basicamente, o ruby é mais curto porque o índice de fatia da matriz é inclusivo, o python precisa de um
+1
para compensar.Explicação
Obtenha as 2 matrizes (vizinhos verticais e horizontais) e selecione uma ou ambas com base em alguns cálculos.
fonte
Java 7, 63 bytes (codificado)
0-indexados
(saída ordem inversa porque
024
e046
não são inteiros válidos.)Ainda trabalhando em uma versão não-codificado, masposso garantir-vos que não será mais curto ..Experimente aqui.
82 bytes
1 indexado com
base na resposta C do @Steadybox '
Experimente aqui.
fonte
JavaScript + lodash, 71 bytes
fonte
Lote, 116 bytes
Indexado a 0.
fonte