USGS-Seismometer haben gerade ein schweres Erdbeben festgestellt! Notfallteams benötigen eine schnelle Schätzung der Anzahl der betroffenen Personen. Schreiben Sie ein Programm, um diese Schätzung zu berechnen.
Ihr Programm erhält 2 Eingaben. Das erste sind die Details des Erdbebens. Das Erdbeben wurde als ein Liniensegment modelliert, entlang dessen die Erde zerbrach, zusammen mit der kritischen Entfernung von der Verwerfung, innerhalb derer ein Schaden zu erwarten war. Die zweite Eingabe ist eine Liste des Standorts und der Bevölkerung der Städte in der Region. Ihr Programm sollte die Anzahl der in dem betroffenen Gebiet lebenden Personen berechnen, dh die Summe der Bevölkerung aller Städte innerhalb der kritischen Entfernung des Fehlersegments.
Eingang
Zuerst eine Linie, die das Erdbeben beschreibt und die x-, y-Koordinaten des Start- und Endpunkts des Fehlers sowie die kritische Entfernung enthält. Das Format ist A_x A_y B_x B_y D
. Beispielsweise:
3.0 3.0 7.0 4.0 2.5
codiert den Fehler von (3.0.3.0) bis (7.0.4.0) und einen kritischen Abstand von 2,5.
Zweitens eine Zeile pro Stadt in dem Gebiet, die die x, y-Koordinaten der Stadt und ihrer Bevölkerung enthält. Beispielsweise:
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
Ausgabe
Die Anzahl der Personen, die in dem betroffenen Gebiet leben. Für das obige Beispiel befinden sich nur die dritte und fünfte Stadt im Gefahrenbereich, die Ausgabe wäre also
8500
Kürzester Code gewinnt.
Beispiel 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
erzeugt
11010
8500.0
das für das Beispiel in Ordnung? Und könnten wir vielleicht noch mehr Testfälle bekommen?Antworten:
Ruby,
171152155153Dies ist meine erste Ruby-Einsendung und mein erstes Code-Golf überhaupt. Einfache Umsetzung der Aufgabe. Bitte geben Sie mir einige Hinweise zur Verbesserung (es muss einen kürzeren Weg zum Lesen von Floats geben ...).
quelle
map
undeval
und das Inlining entfernent
. Und da Sie bereits evaluieren, können Sie anstelle von Format-Strings verwenden.to_f
, sodass der letzte Block aufp 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
erneutes Inlining werden zwei weitere gespart.undefined method > for nil:NilClass (NoMethodError)
Javascript (437)
Damit kann man wahrscheinlich deutlich Golf spielen, aber nicht genug, um die Ruby-Lösung zu übertreffen.
Sie können es hier in Aktion sehen .
quelle
b-0
anstelle von(b*1)
1 Zeichen das abschließende Semikolon entfernen. Beginnen Sie schließlich mitM=Math
und ersetzen Sie alleMath
s durchM
, wobei Sie 6 Zeichen speichern. Mit Prototype und.value
speichert 2 Zeichen (die#
und eine Klammer).C # -
743715Nicht Golfspieler:
quelle
quake.cs(1,254): error CS1525: Unexpected symbol ',', expecting 'from', 'group', 'join', 'let', 'orderby', 'select', or 'where'
). Die ungolfed Version funktioniert gut.c - 471 Zeichen
Es wird davon ausgegangen, dass Ihre Standardbibliothek hat
getline
.Die Methode wird im Kommentar zur ungolfed version ein wenig erklärt:
quelle
Scala: 660 Zeichen:
ungolfed:
quelle