Dutch national flag problem: Difference between revisions
Content added Content deleted
m (→{{header|Phix}}: bugfix (j<n ==> j<=n), added syntax colouring, made p2js compatible) |
|||
Line 2,765: | Line 2,765: | ||
Unsorted: blue blue blue blue red white white red white red white blue |
Unsorted: blue blue blue blue red white white red white red white blue |
||
Sorted: red red red white white white white blue blue blue blue blue |
Sorted: red red red white white white white blue blue blue blue blue |
||
</pre> |
|||
=={{header|Picat}}== |
|||
<lang Picat>go => |
|||
_ = random2(), % random seed |
|||
N=21, |
|||
Map = new_map([1=red,2=white,3=blue]), |
|||
[Rand,Sorted] = dutch_random_sort(N,Map,Map.inverse()), |
|||
println('rand '=Rand), |
|||
println(sorted=Sorted), |
|||
nl. |
|||
% generate a random order and ensure it's not already dutch sorted |
|||
dutch_random_sort(N,Map,MapInv) = [Rand,Sorted] => |
|||
Rand = dutch_random1(N,Map), |
|||
Sorted = dutch_sort(Rand,MapInv), |
|||
while (Rand == Sorted) |
|||
println("Randomize again"), |
|||
Rand := dutch_random1(N,Map), |
|||
Sorted := dutch_sort(Rand,MapInv) |
|||
end. |
|||
dutch_random1(N,Map) = [Map.get(1+(random() mod Map.map_to_list().length)) : _I in 1..N]. |
|||
dutch_sort(L,MapInv) = [R : _=R in [MapInv.get(R)=R : R in L].sort()]. |
|||
inverse(Map) = new_map([V=K : K=V in Map]).</lang> |
|||
Output: |
|||
<pre>rand = [red,blue,white,white,white,blue,blue,blue,red,red,blue,white,blue,blue,red,white,blue,blue,white,white,red] |
|||
sorted = [red,red,red,red,red,white,white,white,white,white,white,white,blue,blue,blue,blue,blue,blue,blue,blue,blue] |
|||
</pre> |
</pre> |
||