Non-transitive dice: Difference between revisions

Content added Content deleted
(→‎{{header|F_Sharp|F#}}: Neater nicer naming)
Line 88: Line 88:
=={{header|F_Sharp|F#}}==
=={{header|F_Sharp|F#}}==
<lang fsharp>
<lang fsharp>
// Non-transitive diceNigel Galloway: August 9th., 2020
// Find all 3(d1,d2,d3) four sided dice with faces valued 1,2,3,or 4 such that over a run d1 beats d2, d2 betas d3, but d3 beats d1.
let die=let g=[for n0 in [1..4] do for n1 in [n0..4] do for n2 in [n1..4] do for n3 in [n2..4]->[n0;n1;n2;n3]]
// Nigel Galloway: August 9th., 2020
let fN(n,g)=let n=seq{for n in n do for g in g->compare n g}|>Seq.countBy id|>Map.ofSeq
[for n in g do for g in g->(n,g)]|>List.filter(fun(n,g)->seq{for n in n do for g in g->compare n g}|>Seq.sum<0)

match Map.tryFind -1 n,Map.tryFind 1 n with (Some n,Some g)->n>g |(Some _,_)->true |_->false
let e=[for n0 in [1..4] do for n1 in [n0..4] do for n2 in [n1..4] do for n3 in [n2..4]->[n0;n1;n2;n3]]
let n3=seq{for d1,d2 in die do for _,d3 in die|>List.filter(fun(n,g)->n=d2 && List.contains (g,d1) die)->(d1,d2,d3)}
let i=[for n in e do for g in e->(n,g)]|>List.filter fN
let n4=seq{for d1,d2 in die do for _,d3 in die|>List.filter(fun(n,_)->n=d2) do for _,d4 in die|>List.filter(fun(n,g)->n=d3 && List.contains (g,d1) die)->(d1,d2,d3,d4)}
n3|>Seq.iter(fun((d1,d2),(_,d3))->printfn "%A<%A; %A<%A; %A>%A\n" d1 d2 d2 d3 d1 d3)
let l3=seq{for n in i do for g in i->(n,g)}|>Seq.filter(fun((a,n),(g,b))->n=g && List.contains (b,a) i)
l3|>Seq.iter(fun((n,g),(_,g'))->printfn "%A<%A; %A<%A; %A>%A\n" n g g g' n g')
n4|>Seq.iter(fun(d1,d2,d3,d4)->printfn "%A<%A; %A<%A; %A<%A; %A>%A" d1 d2 d2 d3 d3 d4 d1 d4)</lang>
let l4=seq{for n in i do for g in i do for i in i->(n,g,i)}|>Seq.filter(fun((a,n),(g,b),(x,y))->n=g && b=x && List.contains (y,a) i)
l4|>Seq.iter(fun((n,g),(_,g'),(_,b))->printfn "%A<%A; %A<%A; %A<%A; %A>%A" n g g g' g' b n b)
</lang>
{{out}}
{{out}}
<pre>
<pre>
Line 104: Line 101:
[1; 3; 3; 3]<[1; 1; 4; 4]; [1; 1; 4; 4]<[2; 2; 2; 4]; [1; 3; 3; 3]>[2; 2; 2; 4]
[1; 3; 3; 3]<[1; 1; 4; 4]; [1; 1; 4; 4]<[2; 2; 2; 4]; [1; 3; 3; 3]>[2; 2; 2; 4]
[2; 2; 2; 4]<[1; 3; 3; 3]; [1; 3; 3; 3]<[1; 1; 4; 4]; [2; 2; 2; 4]>[1; 1; 4; 4]
[2; 2; 2; 4]<[1; 3; 3; 3]; [1; 3; 3; 3]<[1; 1; 4; 4]; [2; 2; 2; 4]>[1; 1; 4; 4]
Real: 00:00:00.830


[1; 1; 4; 4]<[2; 2; 2; 4]; [2; 2; 2; 4]<[2; 2; 3; 3]; [2; 2; 3; 3]<[1; 3; 3; 3]; [1; 1; 4; 4]>[1; 3; 3; 3]
[1; 1; 4; 4]<[2; 2; 2; 4]; [2; 2; 2; 4]<[2; 2; 3; 3]; [2; 2; 3; 3]<[1; 3; 3; 3]; [1; 1; 4; 4]>[1; 3; 3; 3]
Line 109: Line 107:
[2; 2; 2; 4]<[2; 2; 3; 3]; [2; 2; 3; 3]<[1; 3; 3; 3]; [1; 3; 3; 3]<[1; 1; 4; 4]; [2; 2; 2; 4]>[1; 1; 4; 4]
[2; 2; 2; 4]<[2; 2; 3; 3]; [2; 2; 3; 3]<[1; 3; 3; 3]; [1; 3; 3; 3]<[1; 1; 4; 4]; [2; 2; 2; 4]>[1; 1; 4; 4]
[2; 2; 3; 3]<[1; 3; 3; 3]; [1; 3; 3; 3]<[1; 1; 4; 4]; [1; 1; 4; 4]<[2; 2; 2; 4]; [2; 2; 3; 3]>[2; 2; 2; 4]
[2; 2; 3; 3]<[1; 3; 3; 3]; [1; 3; 3; 3]<[1; 1; 4; 4]; [1; 1; 4; 4]<[2; 2; 2; 4]; [2; 2; 3; 3]>[2; 2; 2; 4]
Real: 00:00:05.867
</pre>
</pre>