Os sismômetros do USGS acabaram de detectar um grande terremoto! As equipes de resposta a emergências precisam de uma estimativa rápida do número de pessoas afetadas. Escreva um programa para calcular essa estimativa.
Seu programa recebe 2 entradas. O primeiro são os detalhes do próprio terremoto. O terremoto foi modelado como um segmento de linha ao longo do qual a terra se rompeu, juntamente com a distância crítica da falha na qual se poderia esperar danos. A segunda entrada é uma lista da localização e população das cidades na área. Seu programa deve calcular o número de pessoas que vivem na área afetada, ou seja, a soma da população de todas as cidades dentro da distância crítica do segmento de falha.
Entrada
Primeiro, uma linha que descreve o terremoto, contendo as coordenadas x, y dos pontos inicial e final da falha, mais a distância crítica. O formato é A_x A_y B_x B_y D
. Por exemplo:
3.0 3.0 7.0 4.0 2.5
codifica a falha que se estende de (3.0,3.0) a (7.0,4.0) e uma distância crítica de 2,5.
Segundo, uma linha por cidade na área, contendo as coordenadas x, y da cidade e sua população. Por exemplo:
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
Resultado
O número de pessoas que vivem na área afetada. Para o exemplo acima, apenas a terceira e a quinta cidades estão na área de perigo, portanto a produção seria
8500
O menor código vence.
Exemplo 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
gera
11010
8500.0
aceitável para o exemplo? E poderíamos conseguir mais alguns casos de teste?Respostas:
Ruby,
171152155153Este é meu primeiro envio de rubi e meu primeiro código-golfe. Implementação direta da tarefa. Por favor, me dê algumas dicas de como melhorar (deve haver uma maneira mais curta de ler os carros alegóricos ...).
fonte
map
eeval
, e inliningt
. E uma vez que você já está eval'ing, você pode usar o formato de-cordas em vez de.to_f
, por isso, o último bloco pode ser encurtado parap 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
novamente salva outros dois.undefined method > for nil:NilClass (NoMethodError)
Javascript (437)
Provavelmente isso pode ser jogado de maneira significativa, mas não o suficiente para vencer a solução Ruby.
Você pode vê-lo em ação aqui .
fonte
b-0
vez de(b*1)
1 caractere removendo o ponto e vírgula à direita. Por fim, comece comM=Math
e substitua todos osMath
s porM
, salvando 6 caracteres. Usando Prototype e.value
salva 2 caracteres (o#
parêntese e um).C # -
743715Não golfe:
fonte
quake.cs(1,254): error CS1525: Unexpected symbol ',', expecting 'from', 'group', 'join', 'let', 'orderby', 'select', or 'where'
). A versão ungolfed funciona bem.c - 471 caracteres
Ele assume que sua biblioteca padrão possui
getline
.O método é esclarecido um pouco no comentário para a versão não destruída:
fonte
scala: 660 caracteres:
ungolfed:
fonte