Hourglass puzzle: Difference between revisions

Added Wren
(→‎{{header|REXX}}: incomplete)
(Added Wren)
Line 179:
once, then flipping the remaining sand in the seven-minute
glass when the four-minute glass ends.
</pre>
 
=={{header|Wren}}==
{{trans|Julia}}
<lang ecmascript>import "/math" for Nums
 
var hourglassFlipper = Fn.new { |hourglasses, target|
var flippers = hourglasses.toList
var series = []
var iter = 0
while (iter < 10000) {
var n = Nums.min(flippers)
series.add(n)
for (i in 0...flippers.count) flippers[i] = flippers[i] - n
var i = 0
for (flipper in flippers) {
if (flipper == 0) flippers[i] = hourglasses[i]
i = i + 1
}
for (start in series.count-1..0) {
if (Nums.sum(series[start..-1]) == target) return [start, series]
}
iter = iter + 1
}
Fiber.abort("Unable to find an answer within 10,000 iterations.")
}
 
System.write("Flip an hourglass every time it runs out of grains, ")
System.print("and note the interval in time.")
var tests = [ [[4, 7], 9], [[5, 7, 31], 36] ]
for (test in tests) {
var hourglasses = test[0]
var target = test[1]
var res = hourglassFlipper.call(hourglasses, target)
var start = res[0]
var series = res[1]
var end = series.count - 1
System.print("\nSeries: %(series)")
System.write("Use hourglasses from indices %(start) to %(end) (inclusive) to sum ")
System.print("%(target) using %(hourglasses)")
}</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>
9,476

edits