Задний план:
Джек - тыква, которая любит пугать жителей деревень возле тыквенного участка каждый Хэллоуин. Однако каждый год после того, как кто-то зажигает свечу внутри него, у него есть ограниченное количество времени, чтобы напугать всех до того, как свеча сгорит, таким образом, он не может больше напугать жителей деревни, потому что никто его не видит. В прошлые годы он смог напугать лишь небольшое количество деревень из-за своего плохого принятия решений, но теперь, когда он попросил вас помочь ему, он сможет напугать как можно больше деревень!
Задача:
Учитывая список населенных пунктов и продолжительность жизни свечей, выведите максимальное количество деревень, которые Джек может посетить. Вам не нужно печатать сам путь.
Входные данные:
Срок службы свечи и список населенных пунктов в декартовой системе координат. Тыквенный патч, из которого происходит Джек, всегда будет в 0,0. Вы можете отформатировать ввод по своему усмотрению. Чтобы упростить движения Джека, он может двигаться только горизонтально, вертикально или по диагонали, а это означает, что его свеча будет терять 1 или 1,5 (по диагонали) единицы жизни за каждый ход. Свеча перегорает, когда срок службы меньше или равен 0.
Выход:
Целое число, равное максимальному количеству деревень, которые Джек может посетить, прежде чем погаснет свеча.
Правила:
Это код-гольф , поэтому выигрывает самый короткий код в байтах. Стандартные лазейки не допускаются.
Тестовые случаи:
// Format [lifespan] [list of village coordinates] -> [maximum visit-able villages]
4 -1,0 1,0 2,0 3,0 4,0 5,0 -> 3
4 1,1 2,2 3,3 -> 2
5 1,1 2,1 3,1 4,1 5,0 5,1 -> 4
источник
Ответы:
Желе,
30292725 байтПопробуйте онлайн!
По-видимому, точечный продукт Jelly просто игнорирует несоответствие размера списка и не умножает дополнительные элементы другого массива, просто добавляет их. Сбривает 2 байта
объяснение
источник
Java 7,
206201 байтСпасибо @KevinCruijssen за сохранение 5 байтов
Ungolfed
источник
i-x
два иb[c]-y
два раза, так что вы можете добавить,t
в поля, а затем использовать это:Math.sqrt((t=i-x)*t+(t=b[c]-y)*t)*1
вместоMath.sqrt((i-x)*(i-x)+(b[c]-y)*(b[c]-y))*1
.Scala, 196 байт
Ungolfed:
Explanantion:
источник
JavaScript (ES6), 145
Анонимная рекурсивная функция, параметр
s
- срок жизни свечи, параметрl
- список координат деревни.Depth First Search , остановка , когда расстояние reachs свечи срок службы
Меньше в гольфе, смотрите фрагмент ниже
Тест
источник
MATL , 27 байт
РЕДАКТИРОВАТЬ (26 ноября 2016 г.): Из-за изменений в
Xl
функции, она должна быть заменена в приведенном выше коде на2$X>
. Ссылки ниже включают эту модификацию.Попробуйте онлайн! Или проверьте все тестовые случаи .
объяснение
Расстояние тыквы между двумя городами, разделенными Δ x и Δ y в каждой координате, может быть получено как (| Δ x | + | Δ y | + max (| Δ x |, | Δ y |)) / 2.
Код следует за этими шагами:
Код комментария:
источник
Python 2.7 , 422 байта
спасибо NoOneIsHere за указание на дополнительные улучшения!
спасибо edc65 за то, что он не сохранил список, а использовал итераторы!
Попробуйте онлайн!
Объяснение:
Функция вычисляет расстояние между двумя точками в соответствии с заданными правилами, цикл перебирает все перестановки, сгенерированные генератором входных данных, и вычисляет расстояние, если расстояние меньше продолжительности жизни свечи, вычитает его и добавляет место к счетчик, если этот счетчик больше текущего максимума, он заменяет его.
ungolfed:
источник
current
c
, иll
m
.PHP, 309 байт
Абсолютно грубая сила и даже не очень короткая. Используйте как:
С большим количеством пробелов и сохранено в файле:
источник
Python, 175 байт
c
время жизни свечи,l
список кортежей - координаты деревни,v
количество посещенных деревень,(x,y)
пара координат деревни, в которой находится Джек.r(t)
это функция, которая вычисляет расстояние до текущей позиции и используется для сортировки списка так, чтобы ближайшим становитсяl[0]
. Используемая формула: | Δx | + | Δy | - мин (| Δx |, | Δy |) / 2.Попробуй это здесь!
источник
рэкет
Тестирование:
Выход:
Однако приведенный выше код не работает для отрицательных значений x и y.
источник