Hourglass puzzle: Difference between revisions
Content added Content deleted
m (→{{header|Wren}}: Tweak.) |
(Added Go) |
||
Line 8: | Line 8: | ||
;Notes |
;Notes |
||
Implemented as a 1-player game. |
Implemented as a 1-player game. |
||
=={{header|Go}}== |
|||
{{trans|Julia}} |
|||
<lang go>package main |
|||
import ( |
|||
"fmt" |
|||
"log" |
|||
) |
|||
func minimum(a []int) int { |
|||
min := a[0] |
|||
for i := 1; i < len(a); i++ { |
|||
if a[i] < min { |
|||
min = a[i] |
|||
} |
|||
} |
|||
return min |
|||
} |
|||
func sum(a []int) int { |
|||
s := 0 |
|||
for _, i := range a { |
|||
s = s + i |
|||
} |
|||
return s |
|||
} |
|||
func hourglassFlipper(hourglasses []int, target int) (int, []int) { |
|||
flippers := make([]int, len(hourglasses)) |
|||
copy(flippers, hourglasses) |
|||
var series []int |
|||
for iter := 0; iter < 10000; iter++ { |
|||
n := minimum(flippers) |
|||
series = append(series, n) |
|||
for i := 0; i < len(flippers); i++ { |
|||
flippers[i] -= n |
|||
} |
|||
for i, flipper := range flippers { |
|||
if flipper == 0 { |
|||
flippers[i] = hourglasses[i] |
|||
} |
|||
} |
|||
for start := len(series) - 1; start >= 0; start-- { |
|||
if sum(series[start:]) == target { |
|||
return start, series |
|||
} |
|||
} |
|||
} |
|||
log.Fatal("Unable to find an answer within 10,000 iterations.") |
|||
return 0, nil |
|||
} |
|||
func main() { |
|||
fmt.Print("Flip an hourglass every time it runs out of grains, ") |
|||
fmt.Println("and note the interval in time.") |
|||
hgs := [][]int{{4, 7}, {5, 7, 31}} |
|||
ts := []int{9, 36} |
|||
for i := 0; i < len(hgs); i++ { |
|||
start, series := hourglassFlipper(hgs[i], ts[i]) |
|||
end := len(series) - 1 |
|||
fmt.Println("\nSeries:", series) |
|||
fmt.Printf("Use hourglasses from indices %d to %d (inclusive) to sum ", start, end) |
|||
fmt.Println(ts[i], "using", hgs[i]) |
|||
} |
|||
}</lang> |
|||
{{out}} |
|||
<pre> |
|||
Flip an hourglass every time it runs out of grains, and note the interval in time. |
|||
Series: [4 3 1 4 2 2] |
|||
Use hourglasses from indices 2 to 5 (inclusive) to sum 9 using [4 7] |
|||
Series: [5 2 3 4 1 5 1 4 3 2 1 4 5 2 3 4 1] |
|||
Use hourglasses from indices 4 to 16 (inclusive) to sum 36 using [5 7 31] |
|||
</pre> |
|||
=={{header|Julia}}== |
=={{header|Julia}}== |