chiark / gitweb /
Compress flow ids
authorIan Jackson <ian@liberator.relativity.greenend.org.uk>
Sun, 23 Aug 2009 14:39:49 +0000 (15:39 +0100)
committerIan Jackson <ian@liberator.relativity.greenend.org.uk>
Sun, 23 Aug 2009 14:39:49 +0000 (15:39 +0100)
yarrg/web/lookup
yarrg/web/query_route
yarrg/web/routetrade

index 8475f68..cfffd14 100755 (executable)
@@ -139,7 +139,7 @@ foreach my $var (keys %ARGS) {
                        islandid \d |
                        archipelago \d |
                        debug |
-                       rtsel[ag]_\w+
+                       [RT]\w+
                    )$/x;
        my $val= $ARGS{$var};
        next if $val eq 'none';
index 18c3ecb..adcb89d 100644 (file)
@@ -166,7 +166,7 @@ function ms_Setarch(dd) {
 % } #---------- end of dropdowns, now common middle of page code ----------
 
 <input type=submit name=submit value="Go">
-% my $ours= sub { $_[0] =~ m/^island|^archipelago|^routestring|^rtsel[ag]_/; };
+% my $ours= sub { $_[0] =~ m/^island|^archipelago|^routestring|^[RT]/; };
 <& "lookup:formhidden", ours => $ours &>
 
 <%perl>
index dcf3671..e200aa5 100644 (file)
@@ -186,13 +186,66 @@ push @columns,                 qw(commodname
        foreach my $od (qw(org dst)) {
                push @uid,
                        $f->{"${od}_id"},
-                       $f->{"${od}_price"},
-                       $f->{"${od}_stallid"};
+                       $f->{"${od}_price"};
+               push @uid,
+                       $f->{"${od}_stallid"}
+                               if $qa->{ShowStalls};
        }
-       $f->{Uid}= join '_', @uid;
+       $f->{UidLong}= join '_', @uid;
+
+       my $base= 31;
+       my $cmpu= '';
+       map {
+               my $uue= $_;
+               my $first= $base;
+               do {
+                       my $this= $uue % $base;
+print STDERR "uue=$uue this=$this ";
+                       $uue -= $this;
+                       $uue /= $base;
+                       $this += $first;
+                       $first= 0;
+                       $cmpu .= chr($this + ($this < 26 ? ord('a') :
+                                             $this < 52 ? ord('A')-26
+                                                        : ord('0')-52));
+print STDERR " uue=$uue this=$this cmpu=$cmpu\n";
+die "$cmpu $uue ?" if length $cmpu > 20;
+               } while ($uue);
+               $cmpu;
+       } @uid;
+       $f->{UidShort}= $cmpu;
+
+       if ($qa->{'debug'}) {
+               my @outuid;
+               $_= $f->{UidShort};
+               my $mul;
+               while (m/./) {
+                       my $v= m/^[a-z]/ ? ord($&)-ord('a') :
+                              m/^[A-Z]/ ? ord($&)-ord('A')+26 :
+                              m/^[0-9]/ ? ord($&)-ord('0')+52 :
+                              die "$_ ?";
+                       if ($v >= $base) {
+                               push @outuid, 0;
+                               $v -= $base;
+                               $mul= 1;
+#print STDERR "(next)\n";
+                       }
+                       die "$f->{UidShort} $_ ?" unless defined $mul;
+                       $outuid[$#outuid] += $v * $mul;
 
-       if ($qa->{"rtsela_$f->{Uid}"} &&
-           !$qa->{"rtselg_$f->{Uid}"}) {
+#print STDERR "$f->{UidShort}  $_  $&  v=$v  mul=$mul  ord()=".ord($&).
+#                      "[vs.".ord('a').",".ord('A').",".ord('0')."]".
+#                      "  outuid=@outuid\n";
+
+                       $mul *= $base;
+                       s/^.//;
+               }
+               my $recons_long= join '_', @outuid;
+               $f->{UidLong} eq $recons_long or
+                       die "$f->{UidLong} = $f->{UidShort} = $recons_long ?";
+       }
+
+       if ($qa->{"R$f->{UidShort}"} && !$qa->{"T$f->{UidShort}"}) {
                $f->{Suppress}= 1;
        }
 
@@ -228,7 +281,7 @@ Maximize
 
   totalprofit:
                   ".(join " +
-                  ", map { "$_->{unit_profit} $_->{Var}" } @flows)."
+                  ", map { "$_->{unitprofit} $_->{Var}" } @flows)."
 
 Subject To
 ";
@@ -311,8 +364,6 @@ if ($qa->{'debug'}) {
        die unless $found_section;
 };
 
-print join ' ', map { $_->{Optimal} } @flows;
-
 push @columns, qw(OptQty OptCapital OptProfit);
 
 </%perl>
@@ -359,8 +410,8 @@ push @columns, qw(OptQty OptCapital OptProfit);
 
 % foreach my $flow (@flows) {
 <tr>
-<td><input type=hidden   name=rtsela_<% $flow->{Uid} %> value=1>
-    <input type=checkbox name=rtselg_<% $flow->{Uid} %> value=1
+<td><input type=hidden   name=R<% $flow->{UidShort} %> value="">
+    <input type=checkbox name=T<% $flow->{UidShort} %> value=""
        <% $flow->{Suppress} ? '' : 'checked' %> >
 %      foreach my $col (@columns) {
 <td><% $flow->{$col} |h %>