]> git.scottworley.com Git - planeteer/blobdiff - planeteer.go
Remove 'or any later version' license choice
[planeteer] / planeteer.go
index 71a85dc9158e235dd508cf6fd1ebe18e59682c61..cf00d563a5cc02a4c1a7dab59839d95bbb303175 100644 (file)
@@ -3,8 +3,7 @@
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU Affero General Public License as
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
+ * published by the Free Software Foundation, version 3.
  *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -146,12 +145,13 @@ func json_slurp(filename string, receptacle interface{}) error {
        return nil
 }
 
        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)
        }
        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
 }
 
 /* This program operates by filling in a state table representing the best
@@ -193,7 +193,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.)
  *    * 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:
  */
 
 // The official list of dimensions:
@@ -325,7 +325,7 @@ func CreateStateTable(data planet_data, dims LogicalIndex) []State {
        addr[Edens] = *start_edens
        addr[Location] = PlanetIndex(data, *start)
        if *start_hold != "" {
        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)
        }
        start_index := EncodeIndex(dims, addr)
        table[start_index].value = Value(*funds)
@@ -373,14 +373,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 */
                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]++ {
                        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]
                                }
                        }
                        other[Location] = addr[Location]
@@ -401,7 +399,7 @@ func CellValue(data planet_data, dims LogicalIndex, table []State, addr LogicalI
                }
 
                /* Travel here via Eden Warp Unit */
                }
 
                /* 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
                        _, available := data.Planets[data.i2p[addr[Location]]].RelativePrices["Eden Warp Units"]
                        if !available {
                                other[Edens] = addr[Edens] + 1
@@ -608,7 +606,8 @@ func FindBestState(data planet_data, dims LogicalIndex, table []State, addr Logi
        return max_index
 }
 
        return max_index
 }
 
-func Commas(n Value) (s string) {
+func Commas(n Value) string {
+       var s string
        if n < 0 {
                panic(n)
        }
        if n < 0 {
                panic(n)
        }
@@ -620,7 +619,7 @@ func Commas(n Value) (s string) {
                n /= 1000
        }
        s = fmt.Sprint(r) + s
                n /= 1000
        }
        s = fmt.Sprint(r) + s
-       return
+       return s
 }
 
 func FighterAndShieldCost(data planet_data, dims LogicalIndex, table []State, best PhysicalIndex) {
 }
 
 func FighterAndShieldCost(data planet_data, dims LogicalIndex, table []State, best PhysicalIndex) {
@@ -633,14 +632,14 @@ func FighterAndShieldCost(data planet_data, dims LogicalIndex, table []State, be
                final_state[BuyFighters] = 0
                alt_best := FindBestState(data, dims, table, final_state)
                cost := table[alt_best].value - table[best].value
                final_state[BuyFighters] = 0
                alt_best := FindBestState(data, dims, table, final_state)
                cost := table[alt_best].value - table[best].value
-               fmt.Println("\rDrones were", float64(cost)/float64(*drones), "each")
+               fmt.Printf("\rDrones were %.2f each\n", float64(cost)/float64(*drones))
        }
        if *batteries > 0 {
                final_state := FinalState(dims)
                final_state[BuyShields] = 0
                alt_best := FindBestState(data, dims, table, final_state)
                cost := table[alt_best].value - table[best].value
        }
        if *batteries > 0 {
                final_state := FinalState(dims)
                final_state[BuyShields] = 0
                alt_best := FindBestState(data, dims, table, final_state)
                cost := table[alt_best].value - table[best].value
-               fmt.Println("\rBatteries were", float64(cost)/float64(*batteries), "each")
+               fmt.Printf("\rBatteries were %.2f each\n", float64(cost)/float64(*batteries))
        }
 }
 
        }
 }
 
@@ -690,7 +689,8 @@ func EndLocationCost(data planet_data, dims LogicalIndex, table []State, best Ph
        *end_string = save_end_string
 }
 
        *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)
        for index := start; table[index].from > FROM_ROOT; index = table[index].from {
                if table[index].from == FROM_UNINITIALIZED {
                        panic(index)
@@ -747,7 +747,7 @@ func DescribePath(data planet_data, dims LogicalIndex, table []State, start Phys
                }
                description = append(description, fmt.Sprintf("%13v ", Commas(table[index].value))+line)
        }
                }
                description = append(description, fmt.Sprintf("%13v ", Commas(table[index].value))+line)
        }
-       return
+       return description
 }
 
 // (Example of a use case for generics in Go)
 }
 
 // (Example of a use case for generics in Go)
@@ -807,7 +807,7 @@ func main() {
        best := FindBestState(data, dims, table, final_state)
        print("\n")
        if best == -1 {
        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)
                return
        }
        description := DescribePath(data, dims, table, best)