¡Los sismómetros de USGS acaban de detectar un gran terremoto! Los equipos de respuesta a emergencias necesitan una estimación rápida del número de personas afectadas. Escribe un programa para calcular esta estimación.
Su programa recibe 2 entradas. El primero son los detalles del terremoto en sí. El terremoto se modeló como un segmento de línea a lo largo del cual se rompió la tierra, junto con la distancia crítica desde la falla dentro de la cual se podría esperar un daño. La segunda entrada es una lista de la ubicación y la población de las ciudades en el área. Su programa debe calcular el número de personas que viven en el área afectada, es decir, la suma de la población de todas las ciudades dentro de la distancia crítica del segmento de falla.
Entrada
Primero, una línea que describe el terremoto, que contiene las coordenadas x, y de los puntos inicial y final de la falla, más la distancia crítica. El formato es A_x A_y B_x B_y D
. Por ejemplo:
3.0 3.0 7.0 4.0 2.5
codifica la falla que se extiende desde (3.0,3.0) a (7.0,4.0) y una distancia crítica de 2.5.
Segundo, una línea por ciudad en el área, que contiene las coordenadas x, y de la ciudad y su población. Por ejemplo:
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
Salida
El número de personas que viven en el área afectada. Para el ejemplo anterior, solo las ciudades tercera y quinta están en el área de peligro, por lo que la salida sería
8500
El código más corto gana.
Ejemplo 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
genera
11010
8500.0
bien para el ejemplo? ¿Y podríamos obtener más casos de prueba?Respuestas:
Rubí,
171152155153Esta es mi primera presentación de ruby y mi primer código de golf. Implementación directa de la tarea. Por favor, dame algunos consejos sobre cómo mejorar (debe haber una forma más corta de leer las carrozas ...).
fuente
map
yeval
, y inliningt
. Y puesto que ya está eval'ing, puede utilizar formato de cadenas en lugar de.to_f
, por lo que el último bloque se puede acortar ap 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
nuevamente se salvan otros dos.undefined method > for nil:NilClass (NoMethodError)
Javascript (437)
Esto probablemente se puede jugar significativamente, pero no lo suficiente como para vencer a la solución Ruby.
Puedes verlo en acción aquí .
fuente
b-0
lugar de(b*1)
1 carácter eliminando el punto y coma final. Finalmente, comienceM=Math
y reemplace todas lasMath
s conM
, guardando 6 caracteres. Usa Prototype y.value
guarda 2 caracteres (el#
y un paréntesis).C # -
743715No golfizado:
fuente
quake.cs(1,254): error CS1525: Unexpected symbol ',', expecting 'from', 'group', 'join', 'let', 'orderby', 'select', or 'where'
). La versión sin golf funciona bien.c - 471 caracteres
Asume que su biblioteca estándar tiene
getline
.El método se aclara un poco en el comentario a la versión sin golf:
fuente
scala: 660 caracteres:
sin golf:
fuente