Узнай мой номер соседей

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

Правила:

  • Тестовые случаи разделены одной пустой строкой . Вывод различных тестовых случаев также должен быть разделен одной пустой строкой.
  • Выходной график всегда подключен. Вы не собираетесь иметь только 1 соседа на 2, а также только 3 соседа на 4 (изолированные из 1-2 компонентов).
  • Все записи действительны. Пример неверных записей:
    • Записи, содержащие буквы или любые символы, отличные от пробелов, разрывов строк и цифр (0-9).
    • я - й строке , содержащей я е значение (потому что не может быть своим собственным соседом).
    • отрицательное значение или значение выше, чем 65 535.
    • Менее четырех значений подряд.
    • Более четырех значений подряд.
    • Один и тот же сосед указывает на два разных направления (например: 0 1 1 0).

Применяются стандартные лазейки, и выигрывает самый короткий ответ в байтах.

хаотичный
источник
4
Контрольные примеры разделены одной пустой строкой - это необычное требование. Обычно считается, что записи вызова будут обрабатывать один тестовый сценарий за раз (по одному на вызов). Если записи запроса могут обрабатывать более одного тестового случая за один раз, то это здорово, но нет особого смысла строго указывать, как должны быть отформатированы несколько записей тестового случая.
Цифровая травма
1
@ Хаотично, вы можете удалить его полностью (если хотите), история изменений позаботится о журнале изменений
Rod
1
Я не понимаю, как выход связан с выходом. Можете ли вы объяснить более подробно, что означает «массив соседей» и по каким правилам этот массив должен быть создан?
Стьюи Гриффин
3
А-а-а-а-а, думаю, я понял. Соседи перечислены 1,2,.... Я думал, что у них есть сосед 2 единицы на восток и 1 юг на юг и так далее. Не могу понять это.
Стьюи Гриффин
2
@ StewieGriffin Да, я должен был прочитать это несколько раз, прежде чем это стало ясно
Цифровая Травма

Ответы:

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]]
Хаотично
@ Хаотик мне кажется нормальным, возможно, формат вывода неудовлетворительный?
Род
Хорошо, я заблудился со всеми этими нулями там. Я думаю, что было бы лучше удалить их, но я не привык кодировать стандартные правила игры в гольф.
Хаотично
Вы просто остаетесь неиспользованным пространством?
14 м2, 18
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

Попробуйте онлайн!

DanielIndie
источник