Order by pair comparisons: Difference between revisions

(Added Quackery.)
Line 306:
 
=={{header|F_Sharp|F#}}==
{{incorrect|F_Sharp|Does not prompt user}}
<lang fsharp>
// Order by pair comparisons. Nigel Galloway: April 23rd., 2021
type colours= Violet |Red |Green |Indigo |Blue |Yellow |Orange
let clrs=printfn "Enter colours seperated by spaces"; System.Console.ReadLine()
let fN,fG=let mutable z=0 in ((fun()->z),(fun n g->z<-z+1; compare n g))
let fN g=match g with "Violet"->Some(Violet) |"Red"->Some(Red) |"Green"->Some(Green) |"Indigo"->Some(Indigo) |"Blue"->Some(Blue) |"Yellow"->Some(Yellow) |"Orange"->Some(Orange) |_->None
printfn "[Red;Orange;Yellow;Green;Blue;Indigo;Violet] sorted to %A using %d comparisons" ([Red;Orange;Yellow;Green;Blue;Indigo;Violet]|>List.sortWith(fun n g->fG n g)) (fN())
let mutable z=0 in printfn "%s sorted to %A using %d comparisons" clrs (clrs.Split ' '|>Array.choose fN|>Array.sortWith(fun n g->z<-z+1; compare n g)) z
</lang>
{{out}}
Typical outputs:
<pre>
Enter colours seperated by spaces
[Red;Orange;Yellow;Green;Blue;Indigo;Violet] sorted to [Violet; Red; Green; Indigo; Blue; Yellow; Orange] using 25 comparisons
Blue Red Yellow
Blue Red Yellow sorted to [|Red; Blue; Yellow|] using 3 comparisons
 
Enter colours seperated by spaces
Red Orange Yellow Green Blue Indigo Violet
[Red; Orange; Yellow; Green; Blue; Indigo; Violet] sorted to [|Violet; Red; Green; Indigo; Blue; Yellow; Orange|] using 2519 comparisons
</pre>
 
2,172

edits