Descubre mi numero de vecinos

11

La entrada consiste en i filas con información de vecinos. Cada i ª fila contiene 4 valores, lo que representa el vecino de i a los del Norte , Este , Sur y Oeste direcciones, respectivamente. Por lo que cada valor representa un vecino en la dirección dada de la i ª fila, a partir de la fila 1, y puede ir hasta 65.535 filas. El valor 0 indica que no hay vecino en esa dirección.

Por ejemplo, si la primera fila es "0 2 3 10" significa que el vecino i tiene otros tres vecinos: nadie al norte, vecino 2 al este, vecino 3 al sur y vecino 10 al oeste.

Debe generar la matriz de vecinos, comenzando por el valor que está más al noroeste. Cada vecino se mostrará solo una vez, en su posición con respecto a los demás. Veamos algunos ejemplos:

Entrada:

0 0 0 0

Sin vecinos (caso vacío), salida:

1

Entrada:

0 2 0 0 
0 0 0 1

1 tiene vecino 2 al este. 2 tiene vecino 1 al oeste

Salida:

1 2

Entrada:

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

1 tiene vecino 2 al este. 2 tiene vecino 1 al oeste y 3 al sur. 3 tiene vecino 2 al norte

Salida:

1 2
  3

Entrada:

2 0 0 0
0 0 1 0

Salida:

2
1

Entrada:

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

Salida:

1 2
3 4

Reglas:

  • Los casos de prueba están separados por una línea vacía . La salida de diferentes casos de prueba también debe estar separada por una línea vacía.
  • El gráfico de salida siempre está conectado. No va a tener 1 vecino solo para 2, junto con 3 vecinos solo para 4 (aislado del componente 1-2).
  • Todas las entradas son válidas. Ejemplo de entradas inválidas:
    • Entradas que contienen letras o cualquier símbolo diferente de espacios, saltos de línea y dígitos (0-9).
    • el i ª fila que contiene el i ésimo valor (porque no se puede ser su propio vecino).
    • Un valor negativo o superior a 65.535.
    • Menos de cuatro valores seguidos.
    • Más de cuatro valores seguidos.
    • El mismo vecino apunta a dos direcciones diferentes (ej .: 0 1 1 0).

Se aplican las lagunas estándar y gana la respuesta más corta en bytes.

Caótico
fuente
44
Los casos de prueba están separados por una línea vacía : este es un requisito inusual. Normalmente se da que las entradas de desafío manejarán un caso de prueba a la vez (uno por invocación). Si las entradas de desafío pueden manejar más de un caso de prueba a la vez, entonces excelente, pero tiene poco valor especificar estrictamente cómo se deben formatear las entradas de múltiples casos de prueba.
Trauma digital
1
@Chaotic, puede eliminarlo por completo (si lo desea), el historial de revisiones se ocupa del registro de cambios
Rod
1
No entiendo cómo la salida se relaciona con la salida. ¿Puede explicar con más detalle qué significa "conjunto de vecinos" y por qué reglas debería crearse este conjunto?
Stewie Griffin
3
Aaaaah, creo que lo entiendo. Los vecinos están enumerados 1,2,.... Pensé que tenían un vecino 2 "unidades" al este, y 1 "unidad" al sur y así sucesivamente. No podría tener sentido.
Stewie Griffin
2
@StewieGriffin sip Tuve que leerlo varias veces antes de que
Digital Trauma

Respuestas:

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

Pruébalo en línea!

El orden de entrada NESW
fes una función recursiva para poblar las casas.

varilla
fuente
Lo siento, no está funcionando. Incluso intenté con su formato de entrada (que supongo que está bien): [[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]]
Caótico
@Chaotic me parece bien, ¿ tal vez el formato de salida no es satisfactorio?
Rod
Ok, me perdí con todos esos ceros allí. Creo que sería mejor eliminarlos, pero no estoy acostumbrado a codificar las reglas estándar de golf.
Caótico
¿Sigues siendo el espacio no utilizado?
l4m2
2
  • sigue jugando al golf :)

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

Pruébalo en línea!

_______________________________________________________________

Segundo enfoque

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

Pruébalo en línea!

DanielIndie
fuente