Znajdź moich sąsiadów

11

Dane wejściowe składają się z i wierszy z informacjami o sąsiadach. Każdy i- ty wiersz zawiera 4 wartości reprezentujące sąsiada i odpowiednio w kierunku północnym , wschodnim , południowym i zachodnim . Tak więc każda wartość reprezentuje sąsiada w danym kierunku i- tego rzędu, zaczynając od rzędu 1, i może wzrosnąć do 65 535 wierszy. Wartość 0 wskazuje brak sąsiada w tym kierunku.

Na przykład, jeśli pierwszym rzędem jest „0 2 3 10”, oznacza to, że sąsiad i ma trzech innych sąsiadów: nikt na północy, sąsiad 2 na wschodzie, sąsiad 3 na południu i sąsiad 10 na zachodzie.

Musisz wyprowadzić tablicę sąsiadów, zaczynając od wartości najbardziej na północny zachód. Każdy sąsiad będzie wyświetlany tylko raz, w jego pozycji względem innych. Zobaczmy kilka przykładów:

Wejście:

0 0 0 0

Brak sąsiadów (pusta skrzynka), wyjście:

1

Wejście:

0 2 0 0 
0 0 0 1

1 ma sąsiada 2 na wschodzie. 2 ma sąsiad 1 na zachodzie

Wynik:

1 2

Wejście:

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

1 ma sąsiada 2 na wschodzie. 2 ma sąsiad 1 na zachodzie i 3 na południu. 3 ma sąsiada 2 na północy

Wynik:

1 2
  3

Wejście:

2 0 0 0
0 0 1 0

Wynik:

2
1

Wejście:

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

Wynik:

1 2
3 4

Zasady:

  • Przypadki testowe są oddzielone jedną pustą linią . Dane wyjściowe różnych przypadków testowych należy również oddzielić jednym pustym wierszem.
  • Wykres wyjściowy jest zawsze podłączony. Nie będziesz mieć tylko 1 sąsiada do 2, razem z 3 sąsiadami tylko do 4 (izolowanych od 1-2 komponentu).
  • Wszystkie wpisy są prawidłowe. Przykład nieprawidłowych wpisów:
    • Wpisy zawierające litery lub dowolny symbol inny niż spacja, podział wiersza i cyfry (0–9).
    • i ty rząd zawierający ı th wartość (ponieważ nie może być swoim własnym sąsiadów).
    • wartość ujemna lub wartość wyższa niż 65 535.
    • Mniej niż cztery wartości z rzędu.
    • Więcej niż cztery wartości z rzędu.
    • Ten sam sąsiad wskazuje dwa różne kierunki (np .: 0 1 1 0).

Obowiązują standardowe luki, a najkrótsza odpowiedź w bajtach wygrywa.

Chaotyczny
źródło
4
Przypadki testowe są oddzielone jedną pustą linią - jest to niezwykły wymóg. Zazwyczaj podaje się, że wpisy wyzwania będą obsługiwać jedną walizkę testową na raz (jedną na wywołanie). Jeśli wpisy wyzwania mogą obsługiwać więcej niż jedną walizkę testową na raz, to świetnie, ale nie ma ścisłej wartości, aby ściśle określać, jak należy sformatować wiele pozycji testowych.
Digital Trauma
1
@ Chaotyczny możesz go całkowicie usunąć (jeśli chcesz), historia zmian zajmie się dziennikiem zmian
Rod
1
Nie rozumiem, w jaki sposób dane wyjściowe odnoszą się do danych wyjściowych. Czy możesz wyjaśnić bardziej szczegółowo, co oznacza „tablica sąsiadów” i na jakich zasadach powinna być tworzona ta tablica?
Stewie Griffin
3
Aaaaah, chyba to rozumiem. Sąsiedzi są wyliczeni 1,2,.... Myślałem, że mieli sąsiada 2 „jednostki” na wschodzie i 1 „jednostkę” na południu i tak dalej. Nie mogłem tego zrozumieć.
Stewie Griffin
2
@StewieGriffin tak, musiałem ją przeczytać kilka razy, zanim stało się jasne
Digital Trauma

Odpowiedzi:

2

Python 2 , 152 bajty

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

Wypróbuj online!

Kolejność wprowadzania jest NESW
ffunkcją rekurencyjną, która wypełnia domy

Pręt
źródło
Przepraszamy, to nie działa. Próbowałem nawet z twoim formatem wejściowym (który, jak sądzę, jest w porządku): [[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]]
Chaotyczny
@Chaotic wydaje mi się w porządku, może format wyjściowy nie jest zadowalający?
Rod
Ok, zgubiłem się z tymi wszystkimi zerami. Myślę, że lepiej byłoby je usunąć, ale nie jestem przyzwyczajony do kodowania standardowych zasad golfa.
Chaotyczny
Czy po prostu pozostajesz niewykorzystaną przestrzenią?
l4m2
2
  • wciąż gra w golfa :)

JavaScript (Node.js) , 135 bajtów

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

Wypróbuj online!

_______________________________________________________________

Drugie podejście

JavaScript (Node.js) , 130 bajtów

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

Wypróbuj online!

DanielIndie
źródło