Descobrir meu número de vizinhos

11

A entrada consiste em i linhas com informações de vizinhos. Cada i th linha contém 4 valores, representando o vizinho de i para os norte , leste , sul e oeste direções, respectivamente. Assim, cada valor representa um vizinho na direção dada do i th linha, a partir de linha 1, e pode ir até 65.535 linhas. O valor 0 indica nenhum vizinho nessa direção.

Por exemplo, se a primeira linha for "0 2 3 10", significa que o vizinho i tem três outros vizinhos: ninguém ao norte, vizinho 2 ao leste, vizinho 3 ao sul e vizinho 10 ao oeste.

Você precisa gerar a matriz de vizinhos, começando pelo valor mais ao noroeste. Cada vizinho será exibido apenas uma vez, em sua posição em relação aos outros. Vamos ver alguns exemplos:

Entrada:

0 0 0 0

Sem vizinhos (caixa vazia), saída:

1

Entrada:

0 2 0 0 
0 0 0 1

1 tem o vizinho 2 ao leste. 2 tem o vizinho 1 a oeste

Resultado:

1 2

Entrada:

0 2 0 0
0 0 3 1
2 0 0 0

1 tem o vizinho 2 ao leste. 2 tem o vizinho 1 ao oeste e 3 ao sul. 3 tem vizinho 2 ao norte

Resultado:

1 2
  3

Entrada:

2 0 0 0
0 0 1 0

Resultado:

2
1

Entrada:

0 2 3 0
0 0 4 1
1 4 0 0
2 0 0 3

Resultado:

1 2
3 4

Regras:

  • Os casos de teste são separados por uma linha vazia . A saída de diferentes casos de teste também deve ser separada por uma linha vazia.
  • O gráfico de saída está sempre conectado. Você não terá apenas 1 vizinho para 2, juntamente com 3 vizinhos para apenas 4 (isolado do componente 1-2).
  • Todas as entradas são válidas. Exemplo de entradas inválidas:
    • Entradas contendo letras ou qualquer símbolo diferente de espaços, quebras de linha e dígitos (0 a 9).
    • o i th linha que contém o i th valor (porque não se pode ter o seu próprio vizinho).
    • um valor negativo ou superior a 65.535.
    • Menos de quatro valores seguidos.
    • Mais de quatro valores seguidos.
    • O mesmo vizinho apontando para duas direções diferentes (ex: 0 1 1 0).

As brechas padrão se aplicam e a resposta mais curta em bytes vence.

Caótico
fonte
4
Os casos de teste são separados por uma linha vazia - este é um requisito incomum. Normalmente, é dado que as entradas de desafio manipularão um caso de teste por vez (um por invocação). Se as entradas de desafio puderem lidar com mais de um testcase de cada vez, então é ótimo, mas há pouco valor em especificar estritamente como várias entradas do testcase devem ser formatadas.
Digital Trauma
1
@Chaotic você pode removê-la completamente (se você quiser), a revisão história cuidar do changelog
Rod
1
Não entendo como a saída se relaciona com a saída. Você pode explicar com mais detalhes o que significa "matriz de vizinhos" e por quais regras essa matriz deve ser criada?
Stewie Griffin
3
Aaaaah, acho que entendi. Os vizinhos são enumerados 1,2,.... Eu achava que eles tinham um vizinho 2 "unidades" ao leste, e 1 "unidade" ao sul e assim por diante. Não conseguia entender o sentido.
Stewie Griffin
2
@StewieGriffin Sim eu tive que lê-lo algumas vezes antes, ficou claro
Digital Trauma

Respostas:

2

Python 2 , 152 bytes

l=input()
def f(x,y,n):
 if m[x][y]<n:m[x][y]=n;[f(i%3-1+x,i/3-1+y,h)for h,i in zip(l[n-1],[3,7,5,1])]
e=len(l)
m=eval(`[[0]*e*2]*e*2`)
f(e,e,1)
print m

Experimente online!

A ordem de entrada NESW
fé uma função recursiva para preencher as casas

Cajado
fonte
Desculpe, não está funcionando. Eu até tentei com o seu formato de entrada (o que acho bom): [[0, 5, 2, 0], [1, 6, 3, 0], [2, 7, 4, 0], [3, 8 , 0, 0], [0, 9, 6, 1], [5, 10, 7, 2], [6, 11, 8, 3], [7, 12, 0, 4], [0, 13 , 10, 5], [9, 14, 11, 6], [10, 15, 12, 7], [11, 16, 0, 8], [0, 17, 14, 9], [13, 18 , 15, 10], [14, 19, 16, 11], [15, 20, 0, 12], [0, 21, 18, 13], [17, 22, 19, 14], [18, 23 , 20, 15], [19, 24, 0, 16], [0, 0, 22, 17], [21, 0, 23, 18], [22, 0, 24, 19], [23, 0 , 0, 20]]
Chaotic
@ Caotic parece bom para mim, talvez o formato de saída não seja satisfatório?
Rod
Ok, eu me perdi com todos esses zeros lá. Eu acho que seria melhor removê-los, mas não estou acostumado a codificar regras padrão de golfe.
Chaotic
Você apenas permanece o espaço não utilizado?
L4m2
2
  • ainda jogando golfe :)

JavaScript (Node.js) , 135 bytes

R=>R.map((t,y)=>r.map((T,Y)=>T.map((X,I)=>X==y+1?[-1,1,1,-1].map((x,i)=>t[i]?(r[a=Y+x*-~i%2]=r[a]||[])[I+x*i%2]=t[i]:0):0)),r=[[1]])&&r

Experimente online!

_______________________________________________________________

Segunda abordagem

JavaScript (Node.js) , 130 bytes

f=(R,x=0,y=0,c=1,r=[[]])=>[-1,1,1,-1].map((d,i)=>(t=R[c-1][i])&&!(r[Y=y+d*-~i%2]=r[Y]||[])[X=x+d*i%2]?f(R,X,Y,t,r):0,r[y][x]=c)&&r

Experimente online!

DanielIndie
fonte