Merge pull request #2 from svost/master
[novacoin-seeder.git] / combine.pl
1 #!/usr/bin/perl -w
2
3 use strict;
4
5 sub loadFile {
6   my ($file) = @_;
7   my %ret;
8   my $max = 0;
9   open FILE,$file;
10   while (<FILE>) {
11     my ($addr,$p2h,$p8h,$p1d,$p1w,$p1m) = split(/\s+/,$_);
12     if ($p1m =~ /\A([1-9.]+)%\Z/) {
13       my $x = $1*0.01;
14       $max=$x if ($x > $max);
15       $ret{$addr} = $x;
16     }
17   }
18   for my $k (keys %ret) {
19     $ret{$k} /= $max;
20   }
21   close FILE;
22   return \%ret;
23 }
24
25 sub merge {
26   my ($a,$b) = @_;
27   return 1-(1-$a)*(1-$b);
28 }
29
30 sub combine {
31   my ($f1,$f2) = @_;
32   my %ret;
33   for my $k1 (keys %{$f1}) {
34     if (defined $f2->{$k1}) {
35       $ret{$k1} = merge($f1->{$k1}, $f2->{$k1});
36     } else {
37       $ret{$k1} = merge($f1->{$k1}, 0);
38     }
39   }
40   for my $k2 (keys %{$f2}) {
41     if (!defined $f1->{$k2}) {
42       $ret{$k2} = merge(0, $f2->{$k2});
43     }
44   }
45   return \%ret;
46 }
47
48 my $res;
49 my $n=0;
50 for my $file (@ARGV) {
51   my $r = loadFile($file);
52   if ($res) {
53     $res = combine($res,$r);
54   } else {
55     $res = $r;
56   }
57   $n++;
58 }
59
60 for my $addr (sort { $res->{$b} <=> $res->{$a} } (keys %{$res})) {
61   if ($addr =~ /\A(\d+)\.(\d+)\.(\d+)\.(\d+):8333/) {
62     my $a = $1*0x1000000 + $2*0x10000 + $3*0x100 + $4;
63     printf "0x%08x %s %g%%\n",$a,$addr,(1-((1-$res->{$addr}) ** (1/$n)))*100;
64   }
65 }