]> git.scottworley.com Git - planeteer/blobdiff - planeteer.go
Prefer to not name return values
[planeteer] / planeteer.go
index c17496de0f740897f5e79fa7c13cba3f05429952..187da80034e77aa6de1596e37058002f94103fff 100644 (file)
@@ -146,12 +146,13 @@ func json_slurp(filename string, receptacle interface{}) error {
        return nil
 }
 
-func ReadData() (data planet_data) {
+func ReadData() planet_data {
+       var data planet_data
        err := json_slurp(*planet_data_file, &data)
        if err != nil {
                panic(err)
        }
-       return
+       return data
 }
 
 /* This program operates by filling in a state table representing the best
@@ -193,7 +194,7 @@ func ReadData() (data planet_data) {
  *    * Reduce the size of the Edens dimension from 3 to 2, for the
  *      same reasons as Fuel above.  33% savings.
  *    * Buy more ram.  (Just sayin'.  It's cheaper than you think.)
- *      
+ *
  */
 
 // The official list of dimensions:
@@ -325,7 +326,7 @@ func CreateStateTable(data planet_data, dims LogicalIndex) []State {
        addr[Edens] = *start_edens
        addr[Location] = PlanetIndex(data, *start)
        if *start_hold != "" {
-               addr[Hold] = CommodityIndex(data,*start_hold)
+               addr[Hold] = CommodityIndex(data, *start_hold)
        }
        start_index := EncodeIndex(dims, addr)
        table[start_index].value = Value(*funds)
@@ -373,14 +374,12 @@ func CellValue(data planet_data, dims LogicalIndex, table []State, addr LogicalI
                other[Traded] = 1 /* Travel from states that have done trading. */
 
                /* Travel here via a 2-fuel unit jump */
-               if addr[Fuel]+2 < dims[Fuel] {
+               if data.Planets[data.i2p[addr[Location]]].BeaconOn && addr[Fuel]+2 < dims[Fuel] {
                        other[Fuel] = addr[Fuel] + 2
                        hole_index := (dims[Fuel] - 1) - (addr[Fuel] + 2)
                        if hole_index >= len(flight_plan()) || addr[Location] != PlanetIndex(data, flight_plan()[hole_index]) {
                                for other[Location] = 0; other[Location] < dims[Location]; other[Location]++ {
-                                       if data.Planets[data.i2p[addr[Location]]].BeaconOn {
-                                               Consider(data, dims, table, other, 0, &best_value, best_source)
-                                       }
+                                       Consider(data, dims, table, other, 0, &best_value, best_source)
                                }
                        }
                        other[Location] = addr[Location]
@@ -401,7 +400,7 @@ func CellValue(data planet_data, dims LogicalIndex, table []State, addr LogicalI
                }
 
                /* Travel here via Eden Warp Unit */
-               if addr[Edens]+1 < dims[Edens] && addr[UnusedCargo] > 0 {
+               if addr[Edens]+1 < dims[Edens] && (addr[Hold] == 0 || addr[UnusedCargo] > 0) {
                        _, available := data.Planets[data.i2p[addr[Location]]].RelativePrices["Eden Warp Units"]
                        if !available {
                                other[Edens] = addr[Edens] + 1
@@ -608,7 +607,8 @@ func FindBestState(data planet_data, dims LogicalIndex, table []State, addr Logi
        return max_index
 }
 
-func Commas(n Value) (s string) {
+func Commas(n Value) string {
+       var s string
        if n < 0 {
                panic(n)
        }
@@ -620,7 +620,7 @@ func Commas(n Value) (s string) {
                n /= 1000
        }
        s = fmt.Sprint(r) + s
-       return
+       return s
 }
 
 func FighterAndShieldCost(data planet_data, dims LogicalIndex, table []State, best PhysicalIndex) {
@@ -690,7 +690,8 @@ func EndLocationCost(data planet_data, dims LogicalIndex, table []State, best Ph
        *end_string = save_end_string
 }
 
-func DescribePath(data planet_data, dims LogicalIndex, table []State, start PhysicalIndex) (description []string) {
+func DescribePath(data planet_data, dims LogicalIndex, table []State, start PhysicalIndex) []string {
+       var description []string
        for index := start; table[index].from > FROM_ROOT; index = table[index].from {
                if table[index].from == FROM_UNINITIALIZED {
                        panic(index)
@@ -747,7 +748,7 @@ func DescribePath(data planet_data, dims LogicalIndex, table []State, start Phys
                }
                description = append(description, fmt.Sprintf("%13v ", Commas(table[index].value))+line)
        }
-       return
+       return description
 }
 
 // (Example of a use case for generics in Go)
@@ -807,7 +808,7 @@ func main() {
        best := FindBestState(data, dims, table, final_state)
        print("\n")
        if best == -1 {
-               print("Cannot acheive success criteria\n")
+               print("Cannot achieve success criteria\n")
                return
        }
        description := DescribePath(data, dims, table, best)