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}}==