# ARI -- inputs: Cont, Country # cqz ; call area calc # TODO: input: CQZ, Cont, Country, Call Area # http://www.contestvolta.com/point%20table.htm my %pts_table = map { my @v = split /,\s*/, $_; my $z = shift @v; $z => \@v } split "\n", < '02', contest_name => 'Alessandro Volta RTTY Contest', contest_id => 'VOLTA-RTTY', filter => { mode => \"IN ('RTTY')", band => \"IN('80M','40M','20M','15M','10M')", }, defaults => { contest_url => 'http://www.contestvolta.com/44volta-e.pdf', log_cols => [qw/ mycall call qso_date time_on freq band mode rst_sent stx rst_rcvd srx cqz cont pfx dxccprefix calc2 /], dropbox_options => { cont => [qw/ AF AN AS EU NA OC SA /], cqz => [ 1 .. 40 ], country => [ ( map { "K$_" } 1..9, 0 ), ( map { "VE$_" } 1..9, 0 ), ( map { "VK$_" } 1..8 ), ( map { "JA$_" } 1..9, 0 ), ( map { "ZL$_" } 1..4 ), '', ( grep { ! /^(K|VE|JA|VK|ZL)$/ } sort keys %{{ do 'dxcc.inc' }} ), ], 'ARRL-SECTION' => [ 'DX', '', do 'arrl-sections.inc' ], CATEGORY => [ 'SINGLE-OP ALL', ( map { "SINGLE-OP ${_}M" } 10, 15, 20, 40, 80 ), 'MULTI-OP', 'SWL', 'CHECKLOG', ], }, update => sub { my $row = shift; my $s = $row->{dxccprefix}; if( $s =~ /^(K|VE|JA|VK|ZL)$/ ){ my $n = ( $row->{pfx} =~ /(\d+)/g )[-1]; ($n) = ( $row->{call} =~ /\D(\d)\D/ ) unless length $n; $s .= $n; } my $pts = $s eq $INPUT{country} ? 0 : $pts_table[ $row->{cqz} - 1 ]; $pts *=2 if $row->{cont} ne $INPUT{cont} && $row->{band} =~ /^(80M|10M)$/; return { calc1 => $s, # the "country". DXCC, or Call area (e.g. K4) for K/VE/JA/VK/ZL. calc2 => $pts, # Q-pts }; }, placeholders => [qw/ cont cqz country Email /], # TODO --- support scoring of single-band class, # where qso's on other bands count as 0 points, 0 # multipliers, 0 QSOs. Qs => [ { label => 'Own DXCC/Call Area', weight => 0, group_by => 'call, band', where => {calc1=>$INPUT{country}} }, (map { my $z = $_; { label => "Zone $z", weight => $pts_table[$_-1], group_by => 'call, band', where => {cqz=>$z,calc1=>{'!='=>$INPUT{country}}} }, { label => "Zone $z, 80M/10M Intercontinent Extra", weight => $pts_table[$_-1], group_by => 'call, band', where => {cqz=>$z,cont=>{'!='=>$INPUT{cont}}, band=>[qw/80M 10M/] } }, } 1..40), { label => "ERRORS - unknown DXCC; no mult credit", weight => 0, group_by => 'qso_date,time_on,band,call', where => {dxccprefix=>'??'} }, { label => "ERRORS - unknown CQZ; no qso-points", weight => 0, group_by => 'qso_date,time_on,band,call', where => {cqz=>\"NOT BETWEEN 1 AND 40"} }, ], mults => [ { label => 'DXCC', group_by => 'calc1,band' }, { label => 'Intercontinental DX', group_by => 'dxccprefix', having => 'count(distinct band)>=4', where => {cont=>{'!=',$INPUT{cont}}} }, ], cabrillo => { cabrillo_url => 'http://www.contestvolta.com/voltaCabrillo.htm', version => '2.0', headers => [qw/ ARRL-SECTION CATEGORY CLUB NAME ADDRESS OPERATORS SOAPBOX /], qso_cols => [qw/cab_freq cab_mode cab_date cab_time mycall rst_sent stx call rst_rcvd srx cqz calc2 /], qso_fmt => do { my $zn = sprintf '%02d', $INPUT{cqz}; "%-5s %-2s %-10s %-04s %-13s %-3s %04d $zn %-13s %-3s %04d %02d %03d" }, # Cabrillo QSO data format (for VOLTA Contest) # --------info sent-------- -------info rcvd---------- # QSO: freq mo date time call rst exch zn call rst exch zn pts # QSO: ***** ** yyyy-mm-dd nnnn ************* nnn ***** ** ************* nnn ***** ** *** # QSO: 3799 RY 1999-03-06 0711 HC8N 599 0004 05 W1AW 599 0026 05 002 # 0000000001111111111222222222233333333334444444444555555555566666666667777777777888888888 # 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 }, }, years => { 2010 => { sample => '6477d7828ba8e42327925cc18c1a1173', filter => { qso_date => { -between => [20100508, 20100509] }, }, }, 2011 => { sample => 'a0d09f47c0769934fa76b503aba1aead', contest_url => 'http://www.contestvolta.com/volta45th.pdf', filter => { qso_date => { -between => [20110514, 20110515] }, }, }, }, }