Описание задачи
В метрике такси расстояние между двумя точками определяется как:
Рассмотрим матрицу только с нулями и единицами:
0 0 0 1 0
1 0 0 0 0
0 0 0 0 0
1 0 0 1 0
1 0 0 0 0
Давайте отобразим каждое 1
на расстояние до ближайшего разного 1
в матрице (конечно, если предположить, что расстояние между двумя соседними строками / столбцами равно 1):
0 0 0 3 0
2 0 0 0 0
0 0 0 0 0
1 0 0 3 0
1 0 0 0 0
Для этого задания с учетом матрицы найдите карту расстояний, как показано выше.
Примеры
0 0 1
0 0 0
0 0 0
0 1 0
0 0 0
0 0 4
0 0 0
0 0 0
0 4 0
0 0 0
-----
0 0 0 0 0 0 1
0 1 0 1 0 0 0
1 1 0 0 0 0 1
0 0 1 0 0 0 0
0 0 0 0 0 1 0
0 1 0 0 0 0 0
1 0 0 0 0 0 0
0 0 0 1 0 0 1
0 0 0 0 0 0 2
0 1 0 2 0 0 0
1 1 0 0 0 0 2
0 0 2 0 0 0 0
0 0 0 0 0 3 0
0 2 0 0 0 0 0
2 0 0 0 0 0 0
0 0 0 3 0 0 3
-----
1 1 1
1 1 1
1 1 1
1 1 1
1 1 1
1 1 1
-----
1 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 1
22 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 22
-----
0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 1
0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
0 0 9 0 0 0 0 0 0 0 0 2 0 0 0 4
0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0
-----
1 1
1 1
Примечания
- Вы можете принять участие в любом разумном формате
- Помимо
0
и1
вы можете выбрать любые два различных значения - Вы можете предположить, что матрица непуста (содержит по крайней мере одну строку длины больше или равна 1), а также является прямоугольной
- Вы также можете предположить, что в матрице присутствует как минимум два истинных значения (в противном случае вывод не определен)
- Вы можете написать полную программу или функцию
- Вместо того, чтобы возвращать новую матрицу, вы можете изменить существующую
- Это код-гольф , поэтому сделайте так, чтобы ваш счетчик байтов был как можно меньше!
code-golf
matrix
binary-matrix
shooqie
источник
источник
Ответы:
MATL ,
2322 байтаПопробуйте онлайн! Или проверьте все тестовые случаи .
объяснение
Чтобы увидеть промежуточные результаты, может быть полезно вставить
X#
(отобразить стек) между любыми двумя показателями.источник
t
с и нетM
Такси , 14652 байта
Попробуйте онлайн!
Я предполагаю, что ни один человек не хочет пытаться прочитать этот код, так что попробуйте его онлайн с комментариями, значимыми ярлыками и более читабельным выводом!
Вход: строка, представляющая массив. Строка должна состоять из 3 -х символов:
0
,|
представляющие разрывы строки, и любая положительная цифра больше , чем один (PDGTO). Я люблю использовать8
. ОП позволяет вводить данные в любом разумном формате, и я считаю, что это имеет смысл. Строка не имеет формат для прямоугольного массива , но она будет считать выравнивается по левому краю бы то ни было.Вывод: массив значений, показывающих минимальное расстояние такси от каждого
PDGTO
до ближайшего другогоPDGTO
.Пример:
Второй формат вывода явно намного легче читать , но он также добавляет 7 байт в программу , и это является код-гольф , в конце концов. Можно было бы вернуться в конце и удалить все конечные нули вместо простого дополнения
0
значений, но это добавило бы еще больше байтов и было бы признано неприемлемой стоимостью.Вот текст кода без гольфа с комментариями, улучшенными метками и более четким выводом:
(Это то же самое, что вы получаете по ссылке выше.)
источник
Python 3 + NumPy , 102 байта
Попробуйте онлайн!
Принимает ввод в виде
numpy
массива.Python 3 , 127 байт
Попробуйте онлайн!
источник
Perl 5 , 197 байт
Попробуйте онлайн!
источник
$#
, в основном ...JavaScript (ES6), 97 байт
Принимает ввод в синтаксисе карри
(w)(a)
, где w - ширина матрицы, а a - плоский массив нулей и единиц. Возвращает другой плоский массив.Контрольные примеры
Этот фрагмент включает вспомогательную функцию для форматирования вывода для удобства чтения.
Показать фрагмент кода
источник
Октава, 59 байт
Принимает ввод в виде 2D-массива.
Попробуйте онлайн!
Объяснение:
Для каждого местоположения 1 с, найденного в массиве, установите его в ноль и вычислите преобразование расстояния в городских кварталах массива и, наконец, установите местоположение в вычисленное расстояние.
источник
Python 3 с Numpy ,
106101 байт5 байтов от благодаря @notjagan
Функция, которая вводит массив Numpy и выводит путем изменения этого массива (что разрешено по умолчанию ).
Попробуйте онлайн!
источник
Желе , 27 байт
Попробуйте онлайн!
источник