Hourglass puzzle: Difference between revisions
Content added Content deleted
(→{{header|REXX}}: incomplete) |
(Added Wren) |
||
Line 179: | Line 179: | ||
once, then flipping the remaining sand in the seven-minute |
once, then flipping the remaining sand in the seven-minute |
||
glass when the four-minute glass ends. |
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> |
</pre> |