Best shuffle: Difference between revisions
Content added Content deleted
(Added PicoLisp) |
|||
Line 68: | Line 68: | ||
assert(bestShuffle("a") == 1); |
assert(bestShuffle("a") == 1); |
||
}</lang> |
}</lang> |
||
=={{header|PicoLisp}}== |
|||
<lang PicoLisp>(de bestShuffle (Str) |
|||
(let Lst NIL |
|||
(for C (setq Str (chop Str)) |
|||
(if (assoc C Lst) |
|||
(con @ (cons C (cdr @))) |
|||
(push 'Lst (cons C)) ) ) |
|||
(setq Lst (apply conc (flip (by length sort Lst)))) |
|||
(let Res |
|||
(mapcar |
|||
'((C) |
|||
(prog1 (or (find <> Lst (circ C)) C) |
|||
(setq Lst (delete @ Lst)) ) ) |
|||
Str ) |
|||
(prinl Str " " Res " (" (cnt = Str Res) ")") ) ) )</lang> |
|||
Output: |
|||
<pre>: (bestShuffle "abracadabra") |
|||
abracadabra raarababadc (0) |
|||
: (bestShuffle "seesaw") |
|||
seesaw essewa (0) |
|||
: (bestShuffle "elk") |
|||
elk lke (0) |
|||
: (bestShuffle "grrrrrr") |
|||
grrrrrr rgrrrrr (5) |
|||
: (bestShuffle "up") |
|||
up pu (0) |
|||
: (bestShuffle "a") |
|||
a a (1)</pre> |