Сейсмометры USGS только что обнаружили сильное землетрясение! Чрезвычайные группы реагирования нуждаются в быстрой оценке числа пострадавших. Напишите программу для расчета этой оценки.
Ваша программа получает 2 входа. Первый - это подробности самого землетрясения. Землетрясение моделируется как отрезок, вдоль которого разрывается земля, а также критическое расстояние от разлома, в пределах которого можно ожидать повреждения. Второй вход представляет собой список местоположения и населения городов в этом районе. Ваша программа должна вычислить количество людей, живущих в зоне поражения, то есть сумму населения всех городов в пределах критического расстояния сегмента разлома.
вход
Сначала строка, описывающая землетрясение, содержащая координаты x, y начальной и конечной точек разлома, а также критическое расстояние. Формат есть A_x A_y B_x B_y D
. Например:
3.0 3.0 7.0 4.0 2.5
кодирует ошибку, простирающуюся от (3.0,3.0) до (7.0,4.0) и критическое расстояние 2,5.
Во-вторых, одна строка на город в области, содержащая координаты x, y города и его населения. Например:
1.0 1.0 2500
5.0 7.0 8000
3.0 4.0 7500
9.0 6.0 3000
4.0 2.0 1000
Выход
Количество людей, проживающих в пострадавшем районе. Для приведенного выше примера только третий и пятый города находятся в опасной зоне, поэтому результат будет
8500
Самый короткий код выигрывает.
Пример 2
0.0 0.0 10.0 0.0 5.0
5.0 4.0 10000
5.0 -4.0 1000
5.0 6.0 100
11.0 2.0 10
-4.0 4.0 1
генерирует
11010
8500.0
нормально для примера? И можем ли мы получить еще несколько тестов?Ответы:
Рубин,
171152155153Это моя первая заявка на рубин и вообще мой первый код-гольф. Прямая реализация задачи. Пожалуйста, дайте мне несколько советов, как улучшить (должен быть более короткий способ читать числа с плавающей точкой ...).
источник
map
иeval
вставив ихt
. И так как вы уже используете eval'ing, вы можете использовать строки формата вместо.to_f
, чтобы последний блок можно было сократить доp eval$<.map{|l|"(x=%f-u;t=(x*a+b*y=%f-v)/(a**2+b**2);d*d<(x-t=t<0?0:t>1?1:t)**2+(y-t*b)**2?0:%d)"%l.split}*'+'
t
сохраняет еще два.undefined method > for nil:NilClass (NoMethodError)
Javascript (437)
Вероятно, это можно значительно улучшить, но этого недостаточно, чтобы обойти решение Ruby.
Вы можете увидеть это в действии здесь .
источник
b-0
вместо(b*1)
1 символа, удаляя завершающую точку с запятой. Наконец, начните сM=Math
и замените всеMath
sM
, сохранив 6 символов. Использование Prototype и.value
сохраняет 2 символа (#
и одну круглую скобку).C # -
743715Non-Golfed:
источник
quake.cs(1,254): error CS1525: Unexpected symbol ',', expecting 'from', 'group', 'join', 'let', 'orderby', 'select', or 'where'
). Версия без гольфа работает нормально.с - 471 символов
Предполагается, что ваша стандартная библиотека имеет
getline
.Метод немного поясняется в комментарии к разглаженной версии:
источник
Скала: 660 символов:
ungolfed:
источник