From: Ian Jackson Date: Sun, 2 Feb 2014 21:32:53 +0000 (+0000) Subject: wip, graph vertex name fixes, etc. X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=appendix-a6.git;a=commitdiff_plain;h=c4f77b4c8d5bca1059b91c4b35fc5e83cbe1f376;ds=sidebyside wip, graph vertex name fixes, etc. --- diff --git a/parse b/parse index a1ce9c5..f629457 100755 --- a/parse +++ b/parse @@ -27,6 +27,7 @@ while (<>) { s/\s+$//; next if m/^\s*\#/; next unless m/\S/; + next if m/^\s/; if (m/^([A-Z]+)\s*\=\s*(\S.*)$/) { my ($choname, $desc) = ($1,$2); my $cho = addchoice($choname, Desc => $desc); @@ -159,14 +160,17 @@ foreach my $ia (chremain()) { my $vab = scalar @{ $vab[$ia][$ib] }; my $vba = scalar @{ $vab[$ib][$ia] }; next unless $vab > $vba; - print "defeat: $choices[$ia] beats $choices[$ib] ($vab > $vba)\n"; - $defeats->add_vertex($choices[$ia],$choices[$ib]); + my $diff = $vab - $vba; + print "defeat: $choices[$ia] beats $choices[$ib]", + " ($vab > $vba: $diff)\n"; + $defeats->add_edge($choices[$ia],$choices[$ib]); } } sub chvab ($$) { my ($ca,$cb) = @_; - return $vab[ $choices{$ca}{Index} ][ $choices{$cb}{Index} ]; + my $v = $vab[ $choices{$ca}{Index} ][ $choices{$cb}{Index} ]; + return scalar @$v; } sub weaker ($$) { @@ -202,7 +206,7 @@ for (;;) { next if $tdefeats->has_edge($choices[$ia],$choices[$ib]); next if !$tdefeats->has_edge($choices[$ib],$choices[$ia]); print "not in Schwartz set: $choices[$ia] because $choices[$ib]\n"; - $schwartz->delete_vertex($ia); + $schwartz->delete_vertex($choices[$ia]); last; } } @@ -212,6 +216,7 @@ for (;;) { our @weakest = (); foreach my $edge ($schwartz->edges()) { +# print " considering @$edge\n"; if (!@weakest) { # no weakest edges yet } elsif (weaker($edge, $weakest[0])) { @@ -227,14 +232,15 @@ for (;;) { } last unless @weakest; - - printf "weakest defeats %d > %d", - (scalar @{ $vab[$_->[0]][$_->[1]] }), - (scalar @{ $vab[$_->[1]][$_->[0]] }); + + my $w = $weakest[0]; + printf "weakest defeats %d > %d\n", + chvab($w->[0], $w->[1]), + chvab($w->[1], $w->[0]); foreach my $weakest (@weakest) { - my ($ia,$ib) = @$weakest; - print "weakest defeat $choices[$ia] > $choices[$ib]\n"; - $defeats->delete_edge($choices[$ia],$choices[$ib]); + my ($ca,$cb) = @$weakest; + print "weakest defeat $ca > $cb\n"; + $defeats->delete_edge($ca,$cb); } print "defeats within the Schwartz set, round again\n";