Scopri i miei vicini numero


11

L'input è costituito da i file con le informazioni sui vicini. Ogni i esima riga contiene 4 valori, che rappresenta il vicino di casa che agli Nord , Est , Sud e Ovest direzioni, rispettivamente. Così ogni valore rappresenta un vicino alla direzione data della i esima riga, a partire dalla riga 1, e può arrivare fino a 65.535 righe. Il valore 0 indica nessun vicino di quella direzione.

Ad esempio, se la prima riga è "0 2 3 10" significa che il vicino i ha altri tre vicini: nessuno a nord, il vicino 2 a est, il vicino 3 a sud e il vicino 10 a ovest.

È necessario generare la matrice dei vicini, a partire dal valore più a nord-ovest. Ogni vicino verrà visualizzato una sola volta, nella sua posizione rispetto agli altri. Vediamo alcuni esempi:

Ingresso:

0 0 0 0

Nessun vicino (caso vuoto), output:

1

Ingresso:

0 2 0 0 
0 0 0 1

1 ha il vicino 2 ad est. 2 ha il vicino 1 ad ovest

Produzione:

1 2

Ingresso:

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

1 ha il vicino 2 ad est. 2 ha il vicino 1 a ovest e 3 a sud. 3 ha il vicino 2 a nord

Produzione:

1 2
  3

Ingresso:

2 0 0 0
0 0 1 0

Produzione:

2
1

Ingresso:

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

Produzione:

1 2
3 4

Regole:

  • I casi di test sono separati da una riga vuota . Anche l'output di diversi casi di test deve essere separato da una riga vuota.
  • Il grafico di output è sempre collegato. Non avrai 1 solo vicino a 2, insieme a 3 vicino solo a 4 (isolato dal componente 1-2).
  • Tutte le voci sono valideEsempio di voci non valide:
    • Voci contenenti lettere o simboli diversi da spazi, interruzioni di riga e cifre (0-9).
    • la i esima riga contenente la i esima valore (perché non si può essere proprio prossimo).
    • un valore negativo o un valore superiore a 65.535.
    • Meno di quattro valori di fila.
    • Più di quattro valori di fila.
    • Lo stesso vicino che punta verso due direzioni diverse (es: 0 1 1 0).

Si applicano scappatoie standard e vince la risposta più breve in byte.


4
I casi di test sono separati da una riga vuota : si tratta di un requisito insolito. Normalmente viene dato che le voci di sfida gestiranno un testcase alla volta (uno per chiamata). Se le voci sfida possono gestire più di un testcase alla volta, allora è fantastico, ma c'è poco valore nel specificare rigorosamente come formattare più voci testcase.
Trauma digitale

1
@Chaotic puoi rimuoverlo completamente (se vuoi), la cronologia delle revisioni si occupa del log delle modifiche
Rod

1
Non capisco come l'output sia correlato all'output. Puoi spiegare più in dettaglio che cosa significa "array di vicini" e con quali regole questo array dovrebbe essere creato?
Stewie Griffin,

3
Aaaaah, penso di averlo capito. I vicini sono elencati 1,2,.... Pensavo che avessero un vicino 2 "unità" ad est e 1 "unità" a sud e così via. Non ha avuto senso.
Stewie Griffin,

2
@StewieGriffin sì, ho dovuto leggerlo alcune volte prima che fosse chiaro
Digital Trauma

Risposte:


2

Python 2 , 152 byte

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

Provalo online!

L'ordine di input NESW
fè una funzione ricorsiva per popolare le case


Siamo spiacenti, non funziona. Ho anche provato con il tuo formato di input (che suppongo sia perfetto): [[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]]
Caotico

@Chaotic mi sembra perfetto, forse il formato di output non è soddisfacente?
Rod

Ok, mi sono perso con tutti quegli zeri lì. Penso che sarebbe meglio rimuoverli, ma non sono abituato a codificare le regole standard del golf.
Caotico

Rimani solo lo spazio inutilizzato?
l4m2

2
  • ancora giocare a golf :)

JavaScript (Node.js) , 135 byte

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

Provalo online!

_______________________________________________________________

Secondo approccio

JavaScript (Node.js) , 130 byte

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

Provalo online!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.