Towers of Hanoi: Difference between revisions

→‎JS ES6: Updated function and output, tidied.
(→‎JS ES6: Updated function and output, tidied.)
Line 3,197:
 
===ES6===
 
<lang JavaScript>(() => {
'"use strict'";
 
// ----------------- TOWERS OF HANOI -----------------
// hanoi :: Int -> String -> String -> String -> [[String, String]]
const hanoi = (n, a, b, c) =>
n ? hanoi(n - 1, a, c, b)
.concat([
[a, b]
])
.concat(hanoi(n - 1, c, b, a)) : [];
 
// showhanoi :: aInt -> String -> String ->
// hanoi :: Int -> String -> String -> String -> [[String, String]]
const show = x => JSON.stringify(x, null, 2);
const hanoi = (n, => (a, b, c) => {
nconst ?go = hanoi(n - 1, a, c, b);
 
return show(n ? [
hanoi ...go(3a, 'left'c, 'right', 'mid'b),
.map(d => d[0] + ' -> ' + d...[1])
[a, b]
);
]),
...go(c, b, a)
.concat(] : [];
)};
 
// ---------------------- TEST -----------------------
return hanoi(3)("left", "right", "mid")
.map(d => `${d[0]} -> ${d[1]}`)
.join("\n");
})();</lang>
 
{{Out}}
<pre>[left -> right
"left -> right",mid
"leftright -> mid",
"rightleft -> mid",right
"leftmid -> right",left
"mid -> left",right
"midleft -> right",</pre>
"left -> right"
]</pre>
 
=={{header|Joy}}==
9,655

edits