Дізнайтеся мої сусіди за кількістю


11

Вхід складається з i рядків з інформацією про сусідів. Кожен i- й рядок містить 4 значення, що представляють сусід i з північного , східного , південного та західного напрямків відповідно. Таким чином, кожне значення представляє сусід у заданому напрямку i- го ряду, починаючи з рядка 1, і може доходити до 65,535 рядків. Значення 0 вказує, що в цьому напрямку немає сусіда.

Наприклад, якщо перший рядок "0 2 3 10", це означає, що у сусіда i три інші сусіди: ніхто на північ, сусід 2 на схід, сусід 3 на південь і сусід 10 на захід.

Вам потрібно вивести масив сусідів, починаючи від значення, яке найбільше на північний захід. Кожен сусід відображатиметься лише один раз у своєму положенні відносно інших. Давайте подивимось кілька прикладів:

Вхід:

0 0 0 0

Немає сусідів (порожній регістр), вихід:

1

Вхід:

0 2 0 0 
0 0 0 1

1 має сусід 2 на схід. 2 має сусід 1 на захід

Вихід:

1 2

Вхід:

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

1 має сусід 2 на схід. 2 має сусіда 1 на заході і 3 на півдні. 3 має сусід 2 на північ

Вихід:

1 2
  3

Вхід:

2 0 0 0
0 0 1 0

Вихід:

2
1

Вхід:

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

Вихід:

1 2
3 4

Правила:

  • Тестові приклади розділені одним порожнім рядком . Результати різних тестових випадків також повинні бути розділені одним порожнім рядком.
  • Вихідний графік завжди пов'язаний. Ви не збираєтесь мати лише одного сусіда до 2, а також лише 3 сусіда до 4 (ізольованих від 1-2 компонентів).
  • Усі записи дійсні. Приклад недійсних записів:
    • Записи, що містять літери або будь-який символ, відмінний від пробілів, розривів рядків і цифр (0-9).
    • я - й рядку , що містить я е значення (бо не може бути своїм власним сусідом).
    • від’ємне значення або значення вище 65535.
    • Менше чотирьох значень підряд.
    • Більше чотирьох значень поспіль.
    • Той самий сусід вказує на два різні напрямки (напр .: 0 1 1 0).

Застосовуються стандартні лазівки, і найкоротша відповідь у байтах виграє.


4
Тестові приклади розділені одним порожнім рядком - Це незвична вимога. Зазвичай дається, що записи викликів будуть обробляти по одній пробі за раз (по одній на виклик). Якщо виклики можуть одночасно обробляти більше одного тестового зразка, то чудово, але суттєво чітко визначати, як слід відформатувати кілька записів.
Цифрова травма

1
@Chaotic ви можете видалити його повністю (якщо ви хочете), історія редагування подбає про журнал змін
Rod

1
Я не розумію, як вихід відноситься до результату. Чи можете ви пояснити більш докладно, що означає "масив сусідів" і за якими правилами цей масив повинен бути створений?
Стюі Гріффін

3
Ааааа, я думаю, що це зрозуміло. Сусіди перераховуються 1,2,.... Я хоч у них у сусіда були 2 "одиниці" на сході, і 1 "одиниця" на півдні тощо. Не могло це зрозуміти.
Стюі Гріффін

2
@StewieGriffin так, мені довелося прочитати його кілька разів, перш ніж було зрозуміло
Digital Trauma

Відповіді:


2

Python 2 , 152 байти

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

Спробуйте в Інтернеті!

Порядок введення - NESW
fце рекурсивна функція для заселення будинків


Вибачте, це не працює. Я навіть спробував з вашим вхідним форматом (напевне, це добре): [[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 мені здається прекрасним, можливо, формат виводу є незадовільним?
Прут

Гаразд, я загубився з усіма цими нулями там. Я думаю, що було б краще їх видалити, але я не звик кодувати стандартні правила гольфу.
Хаотичний

Ви просто залишаєтесь невикористаним простором?
l4m2

2
  • ще гольф :)

JavaScript (Node.js) , 135 байт

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

Спробуйте в Інтернеті!

_______________________________________________________________

Другий підхід

JavaScript (Node.js) , 130 байт

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

Спробуйте в Інтернеті!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.