@ 2013-06-25T08:51:41Z <?php
function getPoints() {
$data= "41.892694,-87.670898
42.056048,-88.000488
41.941744,-88.000488
42.072361,-88.209229
42.091933,-87.982635
42.149994,-88.133698
42.171371,-88.286133
42.23241,-88.305359
42.196811,-88.099365
42.189689,-88.188629
42.17646,-88.173523
42.180531,-88.209229
42.18168,-88.187943
42.185496,-88.166656
42.170485,-88.150864
42.150634,-88.140564
42.156743,-88.123741
42.118555,-88.105545
42.121356,-88.112755
42.115499,-88.102112
42.119319,-88.112411
42.118046,-88.110695
42.117791,-88.109322
42.182189,-88.182449
42.194145,-88.183823
42.189057,-88.196182
42.186513,-88.200645
42.180917,-88.197899
42.178881,-88.192062
41.881656,-87.6297
41.875521,-87.6297
41.87872,-87.636566
41.872073,-87.62661
41.868239,-87.634506
41.86875,-87.624893
41.883065,-87.62352
41.881021,-87.619743
41.879998,-87.620087
41.8915,-87.633476
41.875163,-87.620773
41.879125,-87.62558
41.862763,-87.608757
41.858672,-87.607899
41.865192,-87.615795
41.87005,-87.62043
42.073061,-87.973022
42.317241,-88.187256
42.272546,-88.088379
42.244086,-87.890625
42.044512,-88.28064
39.754977,-86.154785
39.754977,-89.648437
41.043369,-85.12207
43.050074,-89.406738
43.082179,-87.912598
42.7281,-84.572754
39.974226,-83.056641
38.888093,-77.01416
39.923692,-75.168457
40.794318,-73.959961
40.877439,-73.146973
40.611086,-73.740234
40.627764,-73.234863
41.784881,-71.367187
42.371988,-70.993652
35.224587,-80.793457
36.753465,-76.069336
39.263361,-76.530762
25.737127,-80.222168
26.644083,-81.958008
30.50223,-87.275391
29.436309,-98.525391
30.217839,-97.844238
29.742023,-95.361328
31.500409,-97.163086
32.691688,-96.877441
32.691688,-97.404785
35.095754,-106.655273
33.425138,-112.104492
32.873244,-117.114258
33.973545,-118.256836
33.681497,-117.905273
33.622982,-117.734985
33.741828,-118.092041
33.64585,-117.861328
33.700707,-118.015137
33.801189,-118.251343
33.513132,-117.740479
32.777244,-117.235107
32.707939,-117.158203
32.703317,-117.268066
32.610821,-117.075806
34.419726,-119.701538
37.750358,-122.431641
37.50673,-122.387695
37.174817,-121.904297
37.157307,-122.321777
37.271492,-122.033386
37.435238,-122.217407
37.687794,-122.415161
37.542025,-122.299805
37.609506,-122.398682
37.544203,-122.0224
37.422151,-122.13501
37.395971,-122.080078
45.485651,-122.739258
47.719463,-122.255859
47.303913,-122.607422
45.176713,-122.167969
39.566,-104.985352
39.124201,-94.614258
35.454518,-97.426758
38.473482,-90.175781
45.021612,-93.251953
42.417881,-83.056641
41.371141,-81.782227
33.791132,-84.331055
30.252543,-90.439453
37.421248,-122.174835
37.47794,-122.181702
37.510628,-122.254486
37.56943,-122.346497
37.593373,-122.384949
37.620571,-122.489319
36.984249,-122.03064
36.553017,-121.893311
36.654442,-121.772461
36.482381,-121.876831
36.15042,-121.651611
36.274518,-121.838379
37.817717,-119.569702
39.31657,-120.140991
38.933041,-119.992676
39.13785,-119.778442
39.108019,-120.239868
38.586082,-121.503296
38.723354,-121.289062
37.878444,-119.437866
37.782994,-119.470825
37.973771,-119.685059
39.001377,-120.17395
40.709076,-73.948975
40.846346,-73.861084
40.780452,-73.959961
40.778829,-73.958931
40.78372,-73.966012
40.783688,-73.965325
40.783692,-73.965615
40.783675,-73.965741
40.783835,-73.965873";
$linesdata = explode("\n", $data);
$coordinateArr= array();
foreach ($linesdata as $strpoint) {
$strpoint = explode(',',$strpoint);
$strpoint=array_map('floatval', $strpoint);
array_push($coordinateArr,$strpoint);
}
return $coordinateArr;
}
function halfMassRadius($coordinateArr) {
// tuning
$deltar = 0.1;
$massRatio = 0.2;
// init
$halfRMin = null;
$centroidKey = null;
foreach ($coordinateArr as $i => $c) {
$radius = 0;
$stayHere = true;
while ($stayHere) {
$radius = $radius + $deltar;
$nInside = count(getCoordinatesWithinRadius($coordinateArr,$c,$radius));
if ($nInside >= count($coordinateArr)*$massRatio) {
if (is_null($halfRMin) || $radius < $halfRMin) {
$halfRMin = $radius;
$centroidKey = $i;
}
$stayHere = false;
}
}
}
return $coordinateArr[$centroidKey][0] . ',' . $coordinateArr[$centroidKey][0];
}
function getCoordinatesWithinRadius ($coordinateArray, $center, $radius) {
$resultArray= array();
$lat1 = $center[0];
$long1 = $center[1];
foreach ($coordinateArray as $coordinate) {
$lat2 = $coordinate[0];
$long2 = $coordinate[1];
$distance = 3959 * acos(cos(radians($lat1)) * cos(radians($lat2)) * cos(radians($long2) - radians($long1)) + sin(radians($lat1)) * sin(radians($lat2)));
if ($distance < $radius) array_push($resultArray, $coordinate);
}
return $resultArray;
}
function radians($deg) {
return $deg * M_PI / 180;
}
function main(){
print 'ecchime'
$data=getPoints();
print halfMassRadius($data);
}
main()
Enable javascript to submit You have javascript disabled. You will not be able to edit any code.
Here you find the average performance (time & memory) of each version. A grayed out version indicates it didn't complete successfully (based on exit-code).
Version System time (s) User time (s) Memory (MiB) 5.4.16 0.027 0.061 12.41 5.4.15 0.014 0.044 12.41 5.4.14 0.014 0.043 12.10 5.4.13 0.012 0.045 12.08 5.4.12 0.031 0.072 12.04 5.4.11 0.018 0.053 12.04 5.4.10 0.013 0.045 12.04 5.4.9 0.019 0.040 12.04 5.4.8 0.016 0.041 12.04 5.4.7 0.014 0.042 12.03 5.4.6 0.015 0.039 12.04 5.4.5 0.021 0.066 12.04 5.4.4 0.018 0.038 12.02 5.4.3 0.015 0.042 12.02 5.4.2 0.015 0.042 12.02 5.4.1 0.014 0.044 12.02 5.4.0 0.014 0.041 11.51 5.3.26 0.019 0.043 12.72 5.3.25 0.016 0.043 12.72 5.3.24 0.015 0.044 12.72 5.3.23 0.014 0.046 12.71 5.3.22 0.021 0.067 12.68 5.3.21 0.022 0.069 12.68 5.3.20 0.015 0.045 12.68 5.3.19 0.016 0.046 12.68 5.3.18 0.019 0.041 12.68 5.3.17 0.029 0.061 12.68 5.3.16 0.023 0.052 12.68 5.3.15 0.015 0.043 12.68 5.3.14 0.015 0.045 12.66 5.3.13 0.015 0.045 12.66 5.3.12 0.014 0.046 12.66 5.3.11 0.012 0.046 12.66 5.3.10 0.027 0.077 12.15 5.3.9 0.015 0.042 12.13 5.3.8 0.020 0.038 12.11 5.3.7 0.014 0.044 12.10 5.3.6 0.028 0.091 12.10 5.3.5 0.012 0.046 12.04 5.3.4 0.011 0.047 12.04 5.3.3 0.016 0.042 12.01 5.3.2 0.014 0.043 11.79 5.3.1 0.012 0.043 11.75 5.3.0 0.010 0.045 11.73
preferences:dark mode live preview
142.82 ms | 1394 KiB | 7 Q