Dutch national flag problem: Difference between revisions
Content added Content deleted
No edit summary |
(Add Factor) |
||
Line 1,130: | Line 1,130: | ||
<pre>Sort the sequence of 10 balls: [Red; White; Red; Blue; White; White; Blue; Blue; White; White] |
<pre>Sort the sequence of 10 balls: [Red; White; Red; Blue; White; White; Blue; Blue; White; White] |
||
The sequence [Red; Red; White; White; White; White; White; Blue; Blue; Blue] is sorted: true</pre> |
The sequence [Red; Red; White; White; White; White; White; Blue; Blue; Blue] is sorted: true</pre> |
||
=={{header|Factor}}== |
|||
{{works with|Factor|0.99 2020-01-23}} |
|||
<lang factor>USING: combinators grouping kernel math prettyprint random |
|||
sequences ; |
|||
: sorted? ( seq -- ? ) [ <= ] monotonic? ; |
|||
: random-non-sorted-integers ( length n -- seq ) |
|||
2dup random-integers |
|||
[ dup sorted? ] [ drop 2dup random-integers ] while 2nip ; |
|||
: dnf-sort! ( seq -- seq' ) |
|||
[ 0 0 ] dip [ length 1 - ] [ ] bi |
|||
[ 2over <= ] [ |
|||
pick over nth { |
|||
{ 0 [ reach reach pick exchange [ [ 1 + ] bi@ ] 2dip ] } |
|||
{ 1 [ [ 1 + ] 2dip ] } |
|||
[ drop 3dup exchange [ 1 - ] dip ] |
|||
} case |
|||
] while 3nip ; |
|||
10 3 random-non-sorted-integers dup . dnf-sort! .</lang> |
|||
{{out}} |
|||
<pre> |
|||
{ 1 2 2 0 0 0 1 0 0 1 } |
|||
{ 0 0 0 0 0 1 1 1 2 2 } |
|||
</pre> |
|||
=={{header|Forth}}== |
=={{header|Forth}}== |