X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/rocl/blobdiff_plain/161e6ada263c291ff3a49b1d9f371ca5f6a1751f..856cfd5372e79d637d0bd6b5fb6ab57c859b6222:/elite-prices diff --git a/elite-prices b/elite-prices index 07ad778..2e555f2 100755 --- a/elite-prices +++ b/elite-prices @@ -1,14 +1,21 @@ #! /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) @@ -39,40 +46,21 @@ proc get-world {p} { 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 @@ -120,11 +108,21 @@ for {set i 0} {$i < [llength $argv]} {incr i} { 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 @@ -137,12 +135,23 @@ switch -exact -- [llength $argv] { } } -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}]] }