#! /usr/bin/tclsh
#
-# $Id: elite-prices,v 1.4 2003/03/07 00:41:46 mdw Exp $
+# $Id: elite-prices,v 1.5 2003/03/09 23:45:02 mdw Exp $
package require "elite" "1.0.1"
+set i 0
+set allreps {}
foreach-world $galaxy1 p {
- set econame $eco($p(economy))
- if {[info exists rep($econame)]} { continue }
- set rep($econame) $p(seed)
+ set e $eco($p(economy))
+ set s $p(seed)
+ if {[info exists rep($e)]} { continue }
+ set rep($e) $s
+ lappend allreps $s
+ incr i
+ if {$i == 8} { break }
}
+set rep(avg) ""
unset p
set from $rep(poor-agri)
return $s
}
-proc check-profits {from to} {
- global products
- set np [expr {[llength $products]/2}]
- puts -nonewline stderr "Thinking: \[[string repeat { } 32]\] "
- puts -nonewline stderr "\[[string repeat { } $np]\] "
- puts -nonewline stderr "\rThinking: \["
- flush stderr
- foreach {a s} [list l $from e $to] {
- for {set f 0} {$f < 256} {incr f} {
- elite-market m $s $f
- foreach {t p} $products { destructure [list ${a}($f:$t) .] $m($t) }
- if {($f & 15) == 15} { puts -nonewline stderr "."; flush stderr }
+proc get-prices {ss arr} {
+ global products allreps
+ upvar \#0 $arr a
+ foreach {t p} $products { set l($t) {} }
+ foreach s [if {[string equal $ss ""]} { set allreps } { set ss }] {
+ if {![string equal $s ""]} {
+ for {set i 0} {$i < 256} {incr i} {
+ elite-market m $s $i
+ foreach {t p} $products { lappend l($t) [lindex $m($t) 0] }
+ }
}
}
- puts -nonewline stderr "\] \["
- flush stderr
- set r {}
foreach {t p} $products {
- set ll {}
- set ee {}
- for {set f 0} {$f < 256} {incr f} {
- lappend ll $l($f:$t)
- lappend ee $e($f:$t)
- }
- destructure {llo lavg lhi} [loavghi $ll]
- destructure {elo eavg ehi} [loavghi $ee]
- lappend r [list $t \
- [expr {$elo - $lhi}] \
- [expr {int($eavg - $lavg)}] \
- [expr {$ehi - $llo}]]
- puts -nonewline stderr "."; flush stderr
+ set a($t) [loavghi $l($t)]
}
- puts stderr "\] done"
- return $r
-}
+}
set g $galaxy1
set sortcol 0
set argv [lrange $argv $i end]
switch -exact -- [llength $argv] {
0 { }
+ 1 {
+ set w [get-world [lindex $argv 0]]
+ get-prices $w pp
+ foreach {t p} $products {
+ destructure {min avg max} $pp($t)
+ puts [format "%-12s %5.1f %5.1f %5.1f" $t \
+ [expr {$min/10.0}] [expr {$avg/10.0}] [expr {$max/10.0}]]
+ }
+ exit
+ }
2 {
- destructure {fp tp} $argv
- set from [get-world $fp]
- set to [get-world $tp]
- foreach {p s} [list $fp $from $tp $to] {
+ destructure {f t} $argv
+ set from [get-world $f]
+ set to [get-world $t]
+ foreach {p s} [list $f $from $t $to] {
if {[string equal $s ""]} {
puts stderr "$argv0: bad planet spec `$p'"
exit 1
}
}
-set pp [check-profits $from $to]
+get-prices $from fp
+get-prices $to tp
+set pp {}
+foreach {t p} $products {
+ destructure {flo favg fhi} $fp($t)
+ destructure {tlo tavg thi} $tp($t)
+ lappend pp [list $t \
+ [expr {$tlo - $fhi}] \
+ [expr {int($tavg - $favg)}] \
+ [expr {$thi - $flo}]]
+}
+
if {$sortcol} {
set pp [lsort -index $sortcol -real -decreasing $pp]
}
foreach i $pp {
destructure {t min avg max} $i
- puts [format "%-15s %6.1f %5.1f %5.1f" $t \
+ puts [format "%-12s %6.1f %5.1f %5.1f" $t \
[expr {$min/10.0}] [expr {$avg/10.0}] [expr {$max/10.0}]]
}