Finde meine Nachbarn heraus

11

Die Eingabe besteht aus i Zeilen mit Nachbarinformationen. Jede i- te Zeile enthält 4 Werte, die den Nachbarn von i in Nord- , Ost- , Süd- und Westrichtung darstellen. Jeder Wert repräsentiert also einen Nachbarn in der angegebenen Richtung der i- ten Zeile, beginnend mit Zeile 1, und kann bis zu 65.535 Zeilen umfassen. Der Wert 0 gibt keinen Nachbarn zu dieser Richtung an.

Wenn zum Beispiel die erste Zeile "0 2 3 10" ist, bedeutet dies, dass der i- Nachbar drei andere Nachbarn hat: niemanden im Norden, Nachbar 2 im Osten, Nachbar 3 im Süden und Nachbar 10 im Westen.

Sie müssen das Array der Nachbarn ausgeben, beginnend mit dem Wert, der am weitesten im Nordwesten liegt. Jeder Nachbar wird nur einmal an seiner Position relativ zu anderen angezeigt. Sehen wir uns einige Beispiele an:

Eingang:

0 0 0 0

Keine Nachbarn (leerer Fall), Ausgabe:

1

Eingang:

0 2 0 0 
0 0 0 1

1 hat Nachbar 2 im Osten. 2 hat Nachbar 1 im Westen

Ausgabe:

1 2

Eingang:

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

1 hat Nachbar 2 im Osten. 2 hat Nachbar 1 im Westen und 3 im Süden. 3 hat Nachbar 2 im Norden

Ausgabe:

1 2
  3

Eingang:

2 0 0 0
0 0 1 0

Ausgabe:

2
1

Eingang:

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

Ausgabe:

1 2
3 4

Regeln:

  • Testfälle werden durch eine leere Zeile getrennt . Die Ausgabe verschiedener Testfälle muss ebenfalls durch eine leere Zeile getrennt werden.
  • Der Ausgangsgraph ist immer verbunden. Sie werden nicht nur 1 Nachbarn zu 2 haben, sondern nur 3 Nachbarn zu 4 (isoliert von 1-2 Komponenten).
  • Alle Einträge sind gültig. Beispiel für ungültige Einträge:
    • Einträge, die Buchstaben oder andere Symbole als Leerzeichen, Zeilenumbrüche und Ziffern enthalten (0-9).
    • Die i- te Zeile enthält den i- ten Wert (weil man nicht sein eigener Nachbar sein kann).
    • ein negativer Wert oder Wert höher als 65.535.
    • Weniger als vier Werte hintereinander.
    • Mehr als vier Werte hintereinander.
    • Derselbe Nachbar zeigt in zwei verschiedene Richtungen (Beispiel: 0 1 1 0).

Es gelten Standardlücken, und die kürzeste Antwort in Byte gewinnt.

Chaotisch
quelle
4
Testfälle werden durch eine leere Zeile getrennt - Dies ist eine ungewöhnliche Anforderung. Normalerweise wird angegeben, dass Challenge-Einträge jeweils einen Testfall behandeln (einen pro Aufruf). Wenn Challenge-Einträge mehr als einen Testfall gleichzeitig verarbeiten können, ist das großartig, aber es ist wenig sinnvoll, genau anzugeben, wie mehrere Testfall-Einträge formatiert werden sollen.
Digitales Trauma
1
@Chaotic können Sie es vollständig entfernen (wenn Sie möchten), die Revisionshistorie kümmern sich um das Changelog
Rod
1
Ich verstehe nicht, wie sich die Ausgabe auf die Ausgabe bezieht. Können Sie genauer erklären, was "Array von Nachbarn" bedeutet und nach welchen Regeln dieses Array erstellt werden soll?
Stewie Griffin
3
Aaaaah, ich glaube ich verstehe. Die Nachbarn werden aufgezählt 1,2,.... Ich dachte, sie hätten einen Nachbarn 2 "Einheiten" im Osten und 1 "Einheit" im Süden und so weiter. Konnte keinen Sinn daraus machen.
Stewie Griffin
2
@StewieGriffin yep Ich musste es ein paar Mal durchlesen, bevor es klar war
Digital Trauma

Antworten:

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

Probieren Sie es online aus!

Die Eingabereihenfolge NESW
fist eine rekursive Funktion zum Auffüllen der Häuser

Stange
quelle
Entschuldigung, es funktioniert nicht. Ich habe es sogar mit Ihrem Eingabeformat versucht (was meiner Meinung nach in Ordnung ist): [[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]]
Chaotisch
@Chaotic scheint mir in Ordnung zu sein, vielleicht ist das Ausgabeformat nicht zufriedenstellend?
Rod
Ok, ich habe mich mit all diesen Nullen dort verlaufen. Ich denke, es wäre besser, sie zu entfernen, aber ich bin es nicht gewohnt, Golf-Standardregeln zu codieren.
Chaotisch
Bleibst du nur der ungenutzte Raum?
14 m2
2
  • immer noch Golf spielen :)

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

Probieren Sie es online aus!

_______________________________________________________________

Zweiter Ansatz

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

Probieren Sie es online aus!

DanielIndie
quelle