Data update

This commit is contained in:
Ingy döt Net 2024-10-16 18:07:41 -07:00
parent 81fd053722
commit 52a6ef48dd
10248 changed files with 63654 additions and 6775 deletions

View file

@ -0,0 +1,124 @@
#include <algorithm>
#include <cstdint>
#include <iostream>
#include <set>
#include <vector>
void print_vector(const std::vector<uint32_t>& list) {
std::cout << "[";
for ( uint64_t i = 0; i < list.size() - 1; ++i ) {
std::cout << list[i] << ", ";
}
std::cout << list.back() << "]";
}
void display_table(const std::vector<std::vector<uint32_t>> table) {
std::cout << "[";
for ( uint64_t i = 0; i < table.size() - 1; ++i ) {
print_vector(table[i]);
std::cout << ", ";
}
print_vector(table.back());
std::cout << "]" << "\n";
}
std::vector<std::vector<uint32_t>> four_face_combinations() {
std::vector<std::vector<uint32_t>> result = { };
std::set<uint32_t> found = { };
for ( uint32_t i = 1; i <= 4; ++i ) {
for ( uint32_t j = 1; j <= 4; ++j ) {
for ( uint32_t k = 1; k <= 4; ++k ) {
for ( uint32_t l = 1; l <= 4; ++l ) {
std::vector<uint32_t> combo = { i, j, k, l };
std::sort(combo.begin(), combo.end());
const uint32_t key = 64 * combo[0] + 16 * combo[1] + 4 * combo[2] + combo[3];
if ( found.insert(key).second ) {
result.emplace_back(combo);
}
}
}
}
}
return result;
}
bool comparator(const std::vector<uint32_t>& one, const std::vector<uint32_t>& two) {
uint32_t one_wins = 0;
uint32_t two_wins = 0;
for ( uint32_t i = 0; i < 4; ++i ) {
for ( uint32_t j = 0; j < 4; ++j ) {
if ( one[i] > two[j] ) {
one_wins++;
} else if ( one[i] < two[j] ) {
two_wins++;
}
}
}
return ( one_wins < two_wins );
}
std::vector<std::vector<std::vector<uint32_t>>> find_intransitive_3(
const std::vector<std::vector<uint32_t>>& combos) {
std::vector<std::vector<std::vector<uint32_t>>> result = { };
for ( uint64_t i = 0; i < combos.size(); ++i ) {
for ( uint64_t j = 0; j < combos.size(); ++j ) {
if ( comparator(combos[i], combos[j]) ) {
for ( const std::vector<uint32_t>& combo : combos ) {
if ( comparator(combos[j], combo) && comparator(combo, combos[i]) ) {
std::vector<std::vector<uint32_t>> entry = { combos[i], combos[j], combo };
result.emplace_back(entry);
}
}
}
}
}
return result;
}
std::vector<std::vector<std::vector<uint32_t>>> find_intransitive_4(
const std::vector<std::vector<uint32_t>>& combos) {
std::vector<std::vector<std::vector<uint32_t>>> result = { };
for ( uint64_t i = 0; i < combos.size(); ++i ) {
for ( uint64_t j = 0; j < combos.size(); ++j ) {
if ( comparator(combos[i], combos[j]) ) {
for ( uint64_t k = 0; k < combos.size(); ++k ) {
if ( comparator(combos[j], combos[k]) ) {
for ( const std::vector<uint32_t>& combo : combos ) {
if ( comparator(combos[k], combo) && comparator(combo, combos[i]) ) {
std::vector<std::vector<uint32_t>> entry =
{ combos[i], combos[j], combos[k], combo };
result.emplace_back(entry);
}
}
}
}
}
}
}
return result;
}
int main() {
std::vector<std::vector<uint32_t>> combinations = four_face_combinations();
std::cout << "The number of eligible 4-faced dice: " << combinations.size() << "\n\n";
std::vector<std::vector<std::vector<uint32_t>>> intransitive_3 = find_intransitive_3(combinations);
std::cout << intransitive_3.size() << " ordered lists of 3 non-transitive dice found, namely:" << "\n";
for ( const std::vector<std::vector<uint32_t>>& table : intransitive_3 ) {
display_table(table);
}
std::cout << "\n";
std::vector<std::vector<std::vector<uint32_t>>> intransitive_4 = find_intransitive_4(combinations);
std::cout << intransitive_4.size() << " ordered lists of 4 non-transitive dice found, namely:" << "\n";
for ( const std::vector<std::vector<uint32_t>>& table : intransitive_4 ) {
display_table(table);
}
}

View file

@ -0,0 +1,145 @@
'#include "sort.bas"
Sub fourFaceCombs(res() As Integer Ptr, found() As Boolean)
Dim As Integer i, j, k, l, m, index, key
index = 0
For i = 1 To 4
For j = 1 To 4
For k = 1 To 4
For l = 1 To 4
Dim As Integer c(3) = {i, j, k, l}
Sort(c())
key = 64 * (c(0) - 1) + 16 * (c(1) - 1) + 4 * (c(2) - 1) + (c(3) - 1)
If Not found(key) Then
found(key) = true
Redim Preserve res(index)
res(index) = Callocate(4 * Sizeof(Integer))
For m = 0 To 3
res(index)[m] = c(m)
Next
index += 1
End If
Next
Next
Next
Next
End Sub
Function cmp(x As Integer Ptr, y As Integer Ptr) As Integer
Dim As Integer i, j, xw, yw
xw = 0
yw = 0
For i = 0 To 3
For j = 0 To 3
If x[i] > y[j] Then
xw += 1
Elseif y[j] > x[i] Then
yw += 1
End If
Next
Next
Return Sgn(xw - yw)
End Function
Sub findIntransitive3(cs() As Integer Ptr, res() As Integer Ptr Ptr)
Dim As Integer i, j, k, c, index
c = Ubound(cs)
index = 0
For i = 0 To c
For j = 0 To c
For k = 0 To c
If cmp(cs(i), cs(j)) = -1 Then
If cmp(cs(j), cs(k)) = -1 Then
If cmp(cs(i), cs(k)) = 1 Then
Redim Preserve res(index)
res(index) = Callocate(3 * Sizeof(Integer Ptr))
res(index)[0] = cs(i)
res(index)[1] = cs(j)
res(index)[2] = cs(k)
index += 1
End If
End If
End If
Next
Next
Next
End Sub
Sub findIntransitive4(cs() As Integer Ptr, res() As Integer Ptr Ptr)
Dim As Integer i, j, k, l, c, index
c = Ubound(cs)
index = 0
For i = 0 To c
For j = 0 To c
For k = 0 To c
For l = 0 To c
If cmp(cs(i), cs(j)) = -1 Then
If cmp(cs(j), cs(k)) = -1 Then
If cmp(cs(k), cs(l)) = -1 Then
If cmp(cs(i), cs(l)) = 1 Then
Redim Preserve res(index)
res(index) = Callocate(4 * Sizeof(Integer Ptr))
res(index)[0] = cs(i)
res(index)[1] = cs(j)
res(index)[2] = cs(k)
res(index)[3] = cs(l)
index += 1
End If
End If
End If
End If
Next
Next
Next
Next
End Sub
Sub Main()
Dim As Integer i, j, k
Dim As Integer Ptr combs()
Dim As Boolean found(255)
fourFaceCombs(combs(), found())
Print "Number of eligible 4-faced dice"; Ubound(combs) + 1
Dim it3() As Integer Ptr Ptr
findIntransitive3(combs(), it3())
Print
Print Ubound(it3) + 1; " ordered lists of 3 non-transitive dice found, namely:"
For i = 0 To Ubound(it3)
Print "[";
For j = 0 To 2
Print "[";
For k = 0 To 3
Print it3(i)[j][k]; ",";
Next
Print Chr(8); " ], ";
Next
Print Chr(8); Chr(8); "]"
Next
Dim it4() As Integer Ptr Ptr
findIntransitive4(combs(), it4())
Print
Print Ubound(it4) + 1; " ordered lists of 4 non-transitive dice found, namely:"
For i = 0 To Ubound(it4)
Print "[";
For j = 0 To 3
Print "[";
For k = 0 To 3
Print it4(i)[j][k]; ",";
Next
Print Chr(8); " ], ";
Next
Print Chr(8); Chr(8); "]"
Next
End Sub
Main()
Sleep

View file

@ -1,221 +1,217 @@
(phixonline)-->
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
<span style="color: #7060A8;">requires</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"0.8.2"</span><span style="color: #0000FF;">)</span> <span style="color: #000080;font-style:italic;">-- (added sq_cmp() builtin that returns nested -1/0/+1 compare() results, just like the existing sq_eq() does for equal().)</span>
with javascript_semantics
integer mx = 4, -- max number of a die side (later set to 6)
mn = 1 -- min number of a die side (later set to 0)
<span style="color: #004080;">integer</span> <span style="color: #000000;">mx</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">4</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- max number of a die side (later set to 6)</span>
<span style="color: #000000;">mn</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">1</span> <span style="color: #000080;font-style:italic;">-- min number of a die side (later set to 0)</span>
function possible_dice(integer sides)
--
-- construct all non-descending permutes of mn..mx,
-- ie/eg {1,1,1,1}..{4,4,4,4} with (say), amongst
-- others, {1,1,2,4} but not {1,1,4,2}.
--
sequence die = repeat(mn,sides), -- (main work area)
res = {deep_copy(die)}
while true do
-- find rightmost incrementable side
-- ie/eg {1,2,4,4} -> set rdx to 2 (if 1-based indexing)
integer rdx = rfind(true,sq_lt(die,mx))
if rdx=0 then exit end if
-- set that and all later to that incremented
-- ie/eg {1,2,4,4} -> {1,3,3,3}
die[rdx..$] = die[rdx]+1
res = append(res,deep_copy(die))
end while
printf(1,"There are %d possible %d..%d %d-sided dice\n",{length(res),mn,mx,sides})
return res
end function
<span style="color: #008080;">function</span> <span style="color: #000000;">possible_dice</span><span style="color: #0000FF;">(</span><span style="color: #004080;">integer</span> <span style="color: #000000;">sides</span><span style="color: #0000FF;">)</span>
<span style="color: #000080;font-style:italic;">--
-- construct all non-descending permutes of mn..mx,
-- ie/eg {1,1,1,1}..{4,4,4,4} with (say), amongst
-- others, {1,1,2,4} but not {1,1,4,2}.
--</span>
<span style="color: #004080;">sequence</span> <span style="color: #000000;">die</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">repeat</span><span style="color: #0000FF;">(</span><span style="color: #000000;">mn</span><span style="color: #0000FF;">,</span><span style="color: #000000;">sides</span><span style="color: #0000FF;">),</span> <span style="color: #000080;font-style:italic;">-- (main work area)</span>
<span style="color: #000000;">res</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #7060A8;">deep_copy</span><span style="color: #0000FF;">(</span><span style="color: #000000;">die</span><span style="color: #0000FF;">)}</span>
<span style="color: #008080;">while</span> <span style="color: #004600;">true</span> <span style="color: #008080;">do</span>
<span style="color: #000080;font-style:italic;">-- find rightmost incrementable side
-- ie/eg {1,2,4,4} -&gt; set rdx to 2 (if 1-based indexing)</span>
<span style="color: #004080;">integer</span> <span style="color: #000000;">rdx</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">rfind</span><span style="color: #0000FF;">(</span><span style="color: #004600;">true</span><span style="color: #0000FF;">,</span><span style="color: #7060A8;">sq_lt</span><span style="color: #0000FF;">(</span><span style="color: #000000;">die</span><span style="color: #0000FF;">,</span><span style="color: #000000;">mx</span><span style="color: #0000FF;">))</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">rdx</span><span style="color: #0000FF;">=</span><span style="color: #000000;">0</span> <span style="color: #008080;">then</span> <span style="color: #008080;">exit</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #000080;font-style:italic;">-- set that and all later to that incremented
-- ie/eg {1,2,4,4} -&gt; {1,3,3,3}</span>
<span style="color: #000000;">die</span><span style="color: #0000FF;">[</span><span style="color: #000000;">rdx</span><span style="color: #0000FF;">..$]</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">die</span><span style="color: #0000FF;">[</span><span style="color: #000000;">rdx</span><span style="color: #0000FF;">]+</span><span style="color: #000000;">1</span>
<span style="color: #000000;">res</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">append</span><span style="color: #0000FF;">(</span><span style="color: #000000;">res</span><span style="color: #0000FF;">,</span><span style="color: #7060A8;">deep_copy</span><span style="color: #0000FF;">(</span><span style="color: #000000;">die</span><span style="color: #0000FF;">))</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">while</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"There are %d possible %d..%d %d-sided dice\n"</span><span style="color: #0000FF;">,{</span><span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">res</span><span style="color: #0000FF;">),</span><span style="color: #000000;">mn</span><span style="color: #0000FF;">,</span><span style="color: #000000;">mx</span><span style="color: #0000FF;">,</span><span style="color: #000000;">sides</span><span style="color: #0000FF;">})</span>
<span style="color: #008080;">return</span> <span style="color: #000000;">res</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
function Dnn(sequence die)
-- reconstruct the python die numbering (string)
-- essentially just treat it as a base-N number.
integer l = length(die), -- (sides)
N = mx-mn+1, -- (base)
n = 0 -- (result)
for k=1 to l do
n += (die[k]-mn)*power(N,l-k)
end for
return sprintf("D%d",n+1)
end function
<span style="color: #008080;">function</span> <span style="color: #000000;">Dnn</span><span style="color: #0000FF;">(</span><span style="color: #004080;">sequence</span> <span style="color: #000000;">die</span><span style="color: #0000FF;">)</span>
<span style="color: #000080;font-style:italic;">-- reconstruct the python die numbering (string)
-- essentially just treat it as a base-N number.</span>
<span style="color: #004080;">integer</span> <span style="color: #000000;">l</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">die</span><span style="color: #0000FF;">),</span> <span style="color: #000080;font-style:italic;">-- (sides)</span>
<span style="color: #000000;">N</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">mx</span><span style="color: #0000FF;">-</span><span style="color: #000000;">mn</span><span style="color: #0000FF;">+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- (base)</span>
<span style="color: #000000;">n</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0</span> <span style="color: #000080;font-style:italic;">-- (result)</span>
<span style="color: #008080;">for</span> <span style="color: #000000;">k</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #000000;">l</span> <span style="color: #008080;">do</span>
<span style="color: #000000;">n</span> <span style="color: #0000FF;">+=</span> <span style="color: #0000FF;">(</span><span style="color: #000000;">die</span><span style="color: #0000FF;">[</span><span style="color: #000000;">k</span><span style="color: #0000FF;">]-</span><span style="color: #000000;">mn</span><span style="color: #0000FF;">)*</span><span style="color: #7060A8;">power</span><span style="color: #0000FF;">(</span><span style="color: #000000;">N</span><span style="color: #0000FF;">,</span><span style="color: #000000;">l</span><span style="color: #0000FF;">-</span><span style="color: #000000;">k</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
<span style="color: #008080;">return</span> <span style="color: #7060A8;">sprintf</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"D%d"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">n</span><span style="color: #0000FF;">+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
function cmpd(sequence die1, die2)
-- compares two die returning -1, 0, or +1 for <, =, >
integer res = 0
for i=1 to length(die1) do
res += sum(sq_cmp(die1[i],die2))
end for
return sign(res)
end function
<span style="color: #008080;">function</span> <span style="color: #000000;">cmpd</span><span style="color: #0000FF;">(</span><span style="color: #004080;">sequence</span> <span style="color: #000000;">die1</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">die2</span><span style="color: #0000FF;">)</span>
<span style="color: #000080;font-style:italic;">-- compares two die returning -1, 0, or +1 for &lt;, =, &gt;</span>
<span style="color: #004080;">integer</span> <span style="color: #000000;">res</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0</span>
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">die1</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">do</span>
<span style="color: #000000;">res</span> <span style="color: #0000FF;">+=</span> <span style="color: #7060A8;">sum</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">sq_cmp</span><span style="color: #0000FF;">(</span><span style="color: #000000;">die1</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">],</span><span style="color: #000000;">die2</span><span style="color: #0000FF;">))</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
<span style="color: #008080;">return</span> <span style="color: #7060A8;">sign</span><span style="color: #0000FF;">(</span><span style="color: #000000;">res</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
function low_rotation(sequence set)
integer k = find(min(set),set)
return set[k..$]&set[1..k-1]
end function
<span style="color: #008080;">function</span> <span style="color: #000000;">low_rotation</span><span style="color: #0000FF;">(</span><span style="color: #004080;">sequence</span> <span style="color: #000000;">set</span><span style="color: #0000FF;">)</span>
<span style="color: #004080;">integer</span> <span style="color: #000000;">k</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">find</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">min</span><span style="color: #0000FF;">(</span><span style="color: #000000;">set</span><span style="color: #0000FF;">),</span><span style="color: #000000;">set</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">return</span> <span style="color: #000000;">set</span><span style="color: #0000FF;">[</span><span style="color: #000000;">k</span><span style="color: #0000FF;">..$]&</span><span style="color: #000000;">set</span><span style="color: #0000FF;">[</span><span style="color: #000000;">1</span><span style="color: #0000FF;">..</span><span style="color: #000000;">k</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">]</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
integer rotations
function find_non_trans(sequence dice, integer n=3)
atom t1 = time()+1
integer l = length(dice), sk, sk1, c
sequence set = repeat(1,n), -- (indexes to dice)
cache = repeat(repeat(-2,l),l),
res = {}
while true do
bool valid = true
for k=1 to n-1 do
sk = set[k]
sk1 = set[k+1]
c = cache[sk][sk1]
if c=-2 then
c = cmpd(dice[sk],dice[sk1])
cache[sk][sk1] = c
end if
if c!=-1 then
valid = false
-- force k+1 to be incremented next:
set[k+2..$] = l
exit
end if
end for
if valid then
sk = set[1]
sk1 = set[$]
c = cache[sk][sk1]
if c=-2 then
c = cmpd(dice[sk],dice[sk1])
cache[sk][sk1] = c
end if
if c=+1 then
res = append(res,low_rotation(set))
end if
end if
-- find rightmost incrementable die index
-- ie/eg if l is 35 and set is {1,2,35,35}
-- -> set rdx to 2 (if 1-based indexing)
integer rdx = rfind(true,sq_lt(set,l))
if rdx=0 then exit end if
-- increment that and reset all later
-- ie/eg {1,2,35,35} -> {1,3,1,1}
set[rdx] += 1
set[rdx+1..$] = 1
if time()>t1 and platform()!=JS then
progress("working... (%d/%d)\r",{set[1],l})
t1 = time()+1
end if
end while
if platform()!=JS then
progress("")
end if
rotations = length(res)
res = unique(res)
rotations -= length(res)
return res
end function
<span style="color: #004080;">integer</span> <span style="color: #000000;">rotations</span>
<span style="color: #008080;">function</span> <span style="color: #000000;">find_non_trans</span><span style="color: #0000FF;">(</span><span style="color: #004080;">sequence</span> <span style="color: #000000;">dice</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">integer</span> <span style="color: #000000;">n</span><span style="color: #0000FF;">=</span><span style="color: #000000;">3</span><span style="color: #0000FF;">)</span>
<span style="color: #004080;">atom</span> <span style="color: #000000;">t1</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">time</span><span style="color: #0000FF;">()+</span><span style="color: #000000;">1</span>
<span style="color: #004080;">integer</span> <span style="color: #000000;">l</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">dice</span><span style="color: #0000FF;">),</span> <span style="color: #000000;">sk</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">sk1</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">c</span>
<span style="color: #004080;">sequence</span> <span style="color: #000000;">set</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">repeat</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">n</span><span style="color: #0000FF;">),</span> <span style="color: #000080;font-style:italic;">-- (indexes to dice)</span>
<span style="color: #000000;">cache</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">repeat</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">repeat</span><span style="color: #0000FF;">(-</span><span style="color: #000000;">2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">l</span><span style="color: #0000FF;">),</span><span style="color: #000000;">l</span><span style="color: #0000FF;">),</span>
<span style="color: #000000;">res</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{}</span>
<span style="color: #008080;">while</span> <span style="color: #004600;">true</span> <span style="color: #008080;">do</span>
<span style="color: #004080;">bool</span> <span style="color: #000000;">valid</span> <span style="color: #0000FF;">=</span> <span style="color: #004600;">true</span>
<span style="color: #008080;">for</span> <span style="color: #000000;">k</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #000000;">n</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span> <span style="color: #008080;">do</span>
<span style="color: #000000;">sk</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">set</span><span style="color: #0000FF;">[</span><span style="color: #000000;">k</span><span style="color: #0000FF;">]</span>
<span style="color: #000000;">sk1</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">set</span><span style="color: #0000FF;">[</span><span style="color: #000000;">k</span><span style="color: #0000FF;">+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">]</span>
<span style="color: #000000;">c</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">cache</span><span style="color: #0000FF;">[</span><span style="color: #000000;">sk</span><span style="color: #0000FF;">][</span><span style="color: #000000;">sk1</span><span style="color: #0000FF;">]</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">c</span><span style="color: #0000FF;">=-</span><span style="color: #000000;">2</span> <span style="color: #008080;">then</span>
<span style="color: #000000;">c</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">cmpd</span><span style="color: #0000FF;">(</span><span style="color: #000000;">dice</span><span style="color: #0000FF;">[</span><span style="color: #000000;">sk</span><span style="color: #0000FF;">],</span><span style="color: #000000;">dice</span><span style="color: #0000FF;">[</span><span style="color: #000000;">sk1</span><span style="color: #0000FF;">])</span>
<span style="color: #000000;">cache</span><span style="color: #0000FF;">[</span><span style="color: #000000;">sk</span><span style="color: #0000FF;">][</span><span style="color: #000000;">sk1</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">c</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">c</span><span style="color: #0000FF;">!=-</span><span style="color: #000000;">1</span> <span style="color: #008080;">then</span>
<span style="color: #000000;">valid</span> <span style="color: #0000FF;">=</span> <span style="color: #004600;">false</span>
<span style="color: #000080;font-style:italic;">-- force k+1 to be incremented next:</span>
<span style="color: #000000;">set</span><span style="color: #0000FF;">[</span><span style="color: #000000;">k</span><span style="color: #0000FF;">+</span><span style="color: #000000;">2</span><span style="color: #0000FF;">..$]</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">l</span>
<span style="color: #008080;">exit</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">valid</span> <span style="color: #008080;">then</span>
<span style="color: #000000;">sk</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">set</span><span style="color: #0000FF;">[</span><span style="color: #000000;">1</span><span style="color: #0000FF;">]</span>
<span style="color: #000000;">sk1</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">set</span><span style="color: #0000FF;">[$]</span>
<span style="color: #000000;">c</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">cache</span><span style="color: #0000FF;">[</span><span style="color: #000000;">sk</span><span style="color: #0000FF;">][</span><span style="color: #000000;">sk1</span><span style="color: #0000FF;">]</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">c</span><span style="color: #0000FF;">=-</span><span style="color: #000000;">2</span> <span style="color: #008080;">then</span>
<span style="color: #000000;">c</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">cmpd</span><span style="color: #0000FF;">(</span><span style="color: #000000;">dice</span><span style="color: #0000FF;">[</span><span style="color: #000000;">sk</span><span style="color: #0000FF;">],</span><span style="color: #000000;">dice</span><span style="color: #0000FF;">[</span><span style="color: #000000;">sk1</span><span style="color: #0000FF;">])</span>
<span style="color: #000000;">cache</span><span style="color: #0000FF;">[</span><span style="color: #000000;">sk</span><span style="color: #0000FF;">][</span><span style="color: #000000;">sk1</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">c</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">c</span><span style="color: #0000FF;">=+</span><span style="color: #000000;">1</span> <span style="color: #008080;">then</span>
<span style="color: #000000;">res</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">append</span><span style="color: #0000FF;">(</span><span style="color: #000000;">res</span><span style="color: #0000FF;">,</span><span style="color: #000000;">low_rotation</span><span style="color: #0000FF;">(</span><span style="color: #000000;">set</span><span style="color: #0000FF;">))</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #000080;font-style:italic;">-- find rightmost incrementable die index
-- ie/eg if l is 35 and set is {1,2,35,35}
-- -&gt; set rdx to 2 (if 1-based indexing)</span>
<span style="color: #004080;">integer</span> <span style="color: #000000;">rdx</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">rfind</span><span style="color: #0000FF;">(</span><span style="color: #004600;">true</span><span style="color: #0000FF;">,</span><span style="color: #7060A8;">sq_lt</span><span style="color: #0000FF;">(</span><span style="color: #000000;">set</span><span style="color: #0000FF;">,</span><span style="color: #000000;">l</span><span style="color: #0000FF;">))</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">rdx</span><span style="color: #0000FF;">=</span><span style="color: #000000;">0</span> <span style="color: #008080;">then</span> <span style="color: #008080;">exit</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #000080;font-style:italic;">-- increment that and reset all later
-- ie/eg {1,2,35,35} -&gt; {1,3,1,1}</span>
<span style="color: #000000;">set</span><span style="color: #0000FF;">[</span><span style="color: #000000;">rdx</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">+=</span> <span style="color: #000000;">1</span>
<span style="color: #000000;">set</span><span style="color: #0000FF;">[</span><span style="color: #000000;">rdx</span><span style="color: #0000FF;">+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">..$]</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">1</span>
<span style="color: #008080;">if</span> <span style="color: #7060A8;">time</span><span style="color: #0000FF;">()></span><span style="color: #000000;">t1</span> <span style="color: #008080;">and</span> <span style="color: #7060A8;">platform</span><span style="color: #0000FF;">()!=</span><span style="color: #004600;">JS</span> <span style="color: #008080;">then</span>
<span style="color: #7060A8;">progress</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"working... (%d/%d)\r"</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">set</span><span style="color: #0000FF;">[</span><span style="color: #000000;">1</span><span style="color: #0000FF;">],</span><span style="color: #000000;">l</span><span style="color: #0000FF;">})</span>
<span style="color: #000000;">t1</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">time</span><span style="color: #0000FF;">()+</span><span style="color: #000000;">1</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">while</span>
<span style="color: #008080;">if</span> <span style="color: #7060A8;">platform</span><span style="color: #0000FF;">()!=</span><span style="color: #004600;">JS</span> <span style="color: #008080;">then</span>
<span style="color: #7060A8;">progress</span><span style="color: #0000FF;">(</span><span style="color: #008000;">""</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #000000;">rotations</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">res</span><span style="color: #0000FF;">)</span>
<span style="color: #000000;">res</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">unique</span><span style="color: #0000FF;">(</span><span style="color: #000000;">res</span><span style="color: #0000FF;">)</span>
<span style="color: #000000;">rotations</span> <span style="color: #0000FF;">-=</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">res</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">return</span> <span style="color: #000000;">res</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
function verbose_cmp(sequence die1, die2)
-- compares two die returning their relationship of their names as a string
integer c = cmpd(die1,die2)
string op = {"<","=",">"}[c+2],
n1 = Dnn(die1),
n2 = Dnn(die2)
return sprintf("%s %s %s",{n1,op,n2})
end function
<span style="color: #008080;">function</span> <span style="color: #000000;">verbose_cmp</span><span style="color: #0000FF;">(</span><span style="color: #004080;">sequence</span> <span style="color: #000000;">die1</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">die2</span><span style="color: #0000FF;">)</span>
<span style="color: #000080;font-style:italic;">-- compares two die returning their relationship of their names as a string</span>
<span style="color: #004080;">integer</span> <span style="color: #000000;">c</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">cmpd</span><span style="color: #0000FF;">(</span><span style="color: #000000;">die1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">die2</span><span style="color: #0000FF;">)</span>
<span style="color: #004080;">string</span> <span style="color: #000000;">op</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #008000;">"&lt;"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"="</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"&gt;"</span><span style="color: #0000FF;">}[</span><span style="color: #000000;">c</span><span style="color: #0000FF;">+</span><span style="color: #000000;">2</span><span style="color: #0000FF;">],</span>
<span style="color: #000000;">n1</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">Dnn</span><span style="color: #0000FF;">(</span><span style="color: #000000;">die1</span><span style="color: #0000FF;">),</span>
<span style="color: #000000;">n2</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">Dnn</span><span style="color: #0000FF;">(</span><span style="color: #000000;">die2</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">return</span> <span style="color: #7060A8;">sprintf</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"%s %s %s"</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">n1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">op</span><span style="color: #0000FF;">,</span><span style="color: #000000;">n2</span><span style="color: #0000FF;">})</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
function verbose_dice_cmp(sequence dice, set)
sequence c = {}, d1, d2
for j=1 to length(set)-1 do
d1 = dice[set[j]]
d2 = dice[set[j+1]]
c = append(c,verbose_cmp(d1,d2))
end for
d1 = dice[set[1]]
d2 = dice[set[$]]
c = append(c,verbose_cmp(d1,d2))
return join(c,", ")
end function
<span style="color: #008080;">function</span> <span style="color: #000000;">verbose_dice_cmp</span><span style="color: #0000FF;">(</span><span style="color: #004080;">sequence</span> <span style="color: #000000;">dice</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">set</span><span style="color: #0000FF;">)</span>
<span style="color: #004080;">sequence</span> <span style="color: #000000;">c</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{},</span> <span style="color: #000000;">d1</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">d2</span>
<span style="color: #008080;">for</span> <span style="color: #000000;">j</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">set</span><span style="color: #0000FF;">)-</span><span style="color: #000000;">1</span> <span style="color: #008080;">do</span>
<span style="color: #000000;">d1</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">dice</span><span style="color: #0000FF;">[</span><span style="color: #000000;">set</span><span style="color: #0000FF;">[</span><span style="color: #000000;">j</span><span style="color: #0000FF;">]]</span>
<span style="color: #000000;">d2</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">dice</span><span style="color: #0000FF;">[</span><span style="color: #000000;">set</span><span style="color: #0000FF;">[</span><span style="color: #000000;">j</span><span style="color: #0000FF;">+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">]]</span>
<span style="color: #000000;">c</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">append</span><span style="color: #0000FF;">(</span><span style="color: #000000;">c</span><span style="color: #0000FF;">,</span><span style="color: #000000;">verbose_cmp</span><span style="color: #0000FF;">(</span><span style="color: #000000;">d1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">d2</span><span style="color: #0000FF;">))</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
<span style="color: #000000;">d1</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">dice</span><span style="color: #0000FF;">[</span><span style="color: #000000;">set</span><span style="color: #0000FF;">[</span><span style="color: #000000;">1</span><span style="color: #0000FF;">]]</span>
<span style="color: #000000;">d2</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">dice</span><span style="color: #0000FF;">[</span><span style="color: #000000;">set</span><span style="color: #0000FF;">[$]]</span>
<span style="color: #000000;">c</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">append</span><span style="color: #0000FF;">(</span><span style="color: #000000;">c</span><span style="color: #0000FF;">,</span><span style="color: #000000;">verbose_cmp</span><span style="color: #0000FF;">(</span><span style="color: #000000;">d1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">d2</span><span style="color: #0000FF;">))</span>
<span style="color: #008080;">return</span> <span style="color: #7060A8;">join</span><span style="color: #0000FF;">(</span><span style="color: #000000;">c</span><span style="color: #0000FF;">,</span><span style="color: #008000;">", "</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
procedure show_dice(sequence dice, non_trans, integer N)
integer l = length(non_trans),
omissions = 0,
last = 0
if N then
printf(1,"\n Non_transitive length-%d combinations found: %d\n",{N,l+rotations})
end if
for i=1 to l do
object ni = non_trans[i]
if sequence(ni) then
if i<5 then
printf(1,"\n")
for j=1 to length(ni) do
sequence d = dice[ni[j]]
printf(1," %s:%v\n",{Dnn(d),d})
end for
last = i
else
omissions += 1
end if
end if
end for
if omissions then
printf(1," (%d omitted)\n",omissions)
end if
if rotations then
printf(1," (%d rotations omitted)\n",rotations)
end if
if last then
printf(1,"\n")
if mx<=6 and mn=1 then
printf(1," More verbose comparison of last result:\n")
end if
printf(1," %s\n",{verbose_dice_cmp(dice,non_trans[last])})
printf(1,"\n ====\n")
end if
printf(1,"\n")
end procedure
<span style="color: #008080;">procedure</span> <span style="color: #000000;">show_dice</span><span style="color: #0000FF;">(</span><span style="color: #004080;">sequence</span> <span style="color: #000000;">dice</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">non_trans</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">integer</span> <span style="color: #000000;">N</span><span style="color: #0000FF;">)</span>
<span style="color: #004080;">integer</span> <span style="color: #000000;">l</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">non_trans</span><span style="color: #0000FF;">),</span>
<span style="color: #000000;">omissions</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0</span><span style="color: #0000FF;">,</span>
<span style="color: #000000;">last</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">N</span> <span style="color: #008080;">then</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"\n Non_transitive length-%d combinations found: %d\n"</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">N</span><span style="color: #0000FF;">,</span><span style="color: #000000;">l</span><span style="color: #0000FF;">+</span><span style="color: #000000;">rotations</span><span style="color: #0000FF;">})</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #000000;">l</span> <span style="color: #008080;">do</span>
<span style="color: #004080;">object</span> <span style="color: #000000;">ni</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">non_trans</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">]</span>
<span style="color: #008080;">if</span> <span style="color: #004080;">sequence</span><span style="color: #0000FF;">(</span><span style="color: #000000;">ni</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">then</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">i</span><span style="color: #0000FF;"><</span><span style="color: #000000;">5</span> <span style="color: #008080;">then</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"\n"</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">for</span> <span style="color: #000000;">j</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">ni</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">do</span>
<span style="color: #004080;">sequence</span> <span style="color: #000000;">d</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">dice</span><span style="color: #0000FF;">[</span><span style="color: #000000;">ni</span><span style="color: #0000FF;">[</span><span style="color: #000000;">j</span><span style="color: #0000FF;">]]</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">" %s:%v\n"</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">Dnn</span><span style="color: #0000FF;">(</span><span style="color: #000000;">d</span><span style="color: #0000FF;">),</span><span style="color: #000000;">d</span><span style="color: #0000FF;">})</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
<span style="color: #000000;">last</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">i</span>
<span style="color: #008080;">else</span>
<span style="color: #000000;">omissions</span> <span style="color: #0000FF;">+=</span> <span style="color: #000000;">1</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">omissions</span> <span style="color: #008080;">then</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">" (%d omitted)\n"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">omissions</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">rotations</span> <span style="color: #008080;">then</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">" (%d rotations omitted)\n"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">rotations</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">last</span> <span style="color: #008080;">then</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"\n"</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">mx</span><span style="color: #0000FF;"><=</span><span style="color: #000000;">6</span> <span style="color: #008080;">and</span> <span style="color: #000000;">mn</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">then</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">" More verbose comparison of last result:\n"</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">" %s\n"</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">verbose_dice_cmp</span><span style="color: #0000FF;">(</span><span style="color: #000000;">dice</span><span style="color: #0000FF;">,</span><span style="color: #000000;">non_trans</span><span style="color: #0000FF;">[</span><span style="color: #000000;">last</span><span style="color: #0000FF;">])})</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"\n ====\n"</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"\n"</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span>
atom t0 = time()
sequence dice = possible_dice(4)
for N=3 to 4 do
show_dice(dice,find_non_trans(dice,N),N)
end for
<span style="color: #004080;">atom</span> <span style="color: #000000;">t0</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">time</span><span style="color: #0000FF;">()</span>
<span style="color: #004080;">sequence</span> <span style="color: #000000;">dice</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">possible_dice</span><span style="color: #0000FF;">(</span><span style="color: #000000;">4</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">for</span> <span style="color: #000000;">N</span><span style="color: #0000FF;">=</span><span style="color: #000000;">3</span> <span style="color: #008080;">to</span> <span style="color: #000000;">4</span> <span style="color: #008080;">do</span>
<span style="color: #000000;">show_dice</span><span style="color: #0000FF;">(</span><span style="color: #000000;">dice</span><span style="color: #0000FF;">,</span><span style="color: #000000;">find_non_trans</span><span style="color: #0000FF;">(</span><span style="color: #000000;">dice</span><span style="color: #0000FF;">,</span><span style="color: #000000;">N</span><span style="color: #0000FF;">),</span><span style="color: #000000;">N</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
-- From the numberphile video (Efron's dice):
mx = 6
mn = 0
dice = possible_dice(6)
--show_dice(dice,find_non_trans(dice,4),4)
-- ok, dunno about you but I'm not waiting for power(924,4) permutes...
-- limit to the ones discussed, plus another 4 random ones
-- (hopefully it'll just pick out the right ones...)
printf(1,"\nEfron's dice\n")
dice = {{0,0,4,4,4,4},
{1,1,1,1,1,1}, -- (rand)
{1,1,1,5,5,5},
{1,2,3,4,5,6}, -- (rand)
{2,2,2,2,6,6},
{5,5,5,6,6,6}, -- (rand)
{3,3,3,3,3,3},
{6,6,6,6,6,6}} -- (rand)
<span style="color: #000080;font-style:italic;">-- From the numberphile video (Efron's dice):</span>
<span style="color: #000000;">mx</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">6</span>
<span style="color: #000000;">mn</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0</span>
<span style="color: #000000;">dice</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">possible_dice</span><span style="color: #0000FF;">(</span><span style="color: #000000;">6</span><span style="color: #0000FF;">)</span>
<span style="color: #000080;font-style:italic;">--show_dice(dice,find_non_trans(dice,4),4)
-- ok, dunno about you but I'm not waiting for power(924,4) permutes...
-- limit to the ones discussed, plus another 4 random ones
-- (hopefully it'll just pick out the right ones...)</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"\nEfron's dice\n"</span><span style="color: #0000FF;">)</span>
<span style="color: #000000;">dice</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{{</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">4</span><span style="color: #0000FF;">,</span><span style="color: #000000;">4</span><span style="color: #0000FF;">,</span><span style="color: #000000;">4</span><span style="color: #0000FF;">,</span><span style="color: #000000;">4</span><span style="color: #0000FF;">},</span>
<span style="color: #0000FF;">{</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1</span><span style="color: #0000FF;">},</span> <span style="color: #000080;font-style:italic;">-- (rand)</span>
<span style="color: #0000FF;">{</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">5</span><span style="color: #0000FF;">,</span><span style="color: #000000;">5</span><span style="color: #0000FF;">,</span><span style="color: #000000;">5</span><span style="color: #0000FF;">},</span>
<span style="color: #0000FF;">{</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">3</span><span style="color: #0000FF;">,</span><span style="color: #000000;">4</span><span style="color: #0000FF;">,</span><span style="color: #000000;">5</span><span style="color: #0000FF;">,</span><span style="color: #000000;">6</span><span style="color: #0000FF;">},</span> <span style="color: #000080;font-style:italic;">-- (rand)</span>
<span style="color: #0000FF;">{</span><span style="color: #000000;">2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">6</span><span style="color: #0000FF;">,</span><span style="color: #000000;">6</span><span style="color: #0000FF;">},</span>
<span style="color: #0000FF;">{</span><span style="color: #000000;">5</span><span style="color: #0000FF;">,</span><span style="color: #000000;">5</span><span style="color: #0000FF;">,</span><span style="color: #000000;">5</span><span style="color: #0000FF;">,</span><span style="color: #000000;">6</span><span style="color: #0000FF;">,</span><span style="color: #000000;">6</span><span style="color: #0000FF;">,</span><span style="color: #000000;">6</span><span style="color: #0000FF;">},</span> <span style="color: #000080;font-style:italic;">-- (rand)</span>
<span style="color: #0000FF;">{</span><span style="color: #000000;">3</span><span style="color: #0000FF;">,</span><span style="color: #000000;">3</span><span style="color: #0000FF;">,</span><span style="color: #000000;">3</span><span style="color: #0000FF;">,</span><span style="color: #000000;">3</span><span style="color: #0000FF;">,</span><span style="color: #000000;">3</span><span style="color: #0000FF;">,</span><span style="color: #000000;">3</span><span style="color: #0000FF;">},</span>
<span style="color: #0000FF;">{</span><span style="color: #000000;">6</span><span style="color: #0000FF;">,</span><span style="color: #000000;">6</span><span style="color: #0000FF;">,</span><span style="color: #000000;">6</span><span style="color: #0000FF;">,</span><span style="color: #000000;">6</span><span style="color: #0000FF;">,</span><span style="color: #000000;">6</span><span style="color: #0000FF;">,</span><span style="color: #000000;">6</span><span style="color: #0000FF;">}}</span> <span style="color: #000080;font-style:italic;">-- (rand)</span>
show_dice(dice,find_non_trans(dice,4),0)
<span style="color: #000000;">show_dice</span><span style="color: #0000FF;">(</span><span style="color: #000000;">dice</span><span style="color: #0000FF;">,</span><span style="color: #000000;">find_non_trans</span><span style="color: #0000FF;">(</span><span style="color: #000000;">dice</span><span style="color: #0000FF;">,</span><span style="color: #000000;">4</span><span style="color: #0000FF;">),</span><span style="color: #000000;">0</span><span style="color: #0000FF;">)</span>
-- and from wp:
mx = 9
mn = 1
dice = possible_dice(6)
printf(1,"\nFrom wp\n")
dice = {{1,1,6,6,8,8},
{2,2,4,4,9,9},
{3,3,5,5,7,7}}
<span style="color: #000080;font-style:italic;">-- and from wp:</span>
<span style="color: #000000;">mx</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">9</span>
<span style="color: #000000;">mn</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">1</span>
<span style="color: #000000;">dice</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">possible_dice</span><span style="color: #0000FF;">(</span><span style="color: #000000;">6</span><span style="color: #0000FF;">)</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"\nFrom wp\n"</span><span style="color: #0000FF;">)</span>
<span style="color: #000000;">dice</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{{</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">6</span><span style="color: #0000FF;">,</span><span style="color: #000000;">6</span><span style="color: #0000FF;">,</span><span style="color: #000000;">8</span><span style="color: #0000FF;">,</span><span style="color: #000000;">8</span><span style="color: #0000FF;">},</span>
<span style="color: #0000FF;">{</span><span style="color: #000000;">2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">4</span><span style="color: #0000FF;">,</span><span style="color: #000000;">4</span><span style="color: #0000FF;">,</span><span style="color: #000000;">9</span><span style="color: #0000FF;">,</span><span style="color: #000000;">9</span><span style="color: #0000FF;">},</span>
<span style="color: #0000FF;">{</span><span style="color: #000000;">3</span><span style="color: #0000FF;">,</span><span style="color: #000000;">3</span><span style="color: #0000FF;">,</span><span style="color: #000000;">5</span><span style="color: #0000FF;">,</span><span style="color: #000000;">5</span><span style="color: #0000FF;">,</span><span style="color: #000000;">7</span><span style="color: #0000FF;">,</span><span style="color: #000000;">7</span><span style="color: #0000FF;">}}</span>
show_dice(dice,find_non_trans(dice,3),0)
<span style="color: #000000;">show_dice</span><span style="color: #0000FF;">(</span><span style="color: #000000;">dice</span><span style="color: #0000FF;">,</span><span style="color: #000000;">find_non_trans</span><span style="color: #0000FF;">(</span><span style="color: #000000;">dice</span><span style="color: #0000FF;">,</span><span style="color: #000000;">3</span><span style="color: #0000FF;">),</span><span style="color: #000000;">0</span><span style="color: #0000FF;">)</span>
-- Miwin's dice
printf(1,"Miwin's dice\n")
dice = {{1,2,5,6,7,9},
{1,3,4,5,8,9},
{2,3,4,6,7,8}}
<span style="color: #000080;font-style:italic;">-- Miwin's dice</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"Miwin's dice\n"</span><span style="color: #0000FF;">)</span>
<span style="color: #000000;">dice</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{{</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">5</span><span style="color: #0000FF;">,</span><span style="color: #000000;">6</span><span style="color: #0000FF;">,</span><span style="color: #000000;">7</span><span style="color: #0000FF;">,</span><span style="color: #000000;">9</span><span style="color: #0000FF;">},</span>
<span style="color: #0000FF;">{</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">3</span><span style="color: #0000FF;">,</span><span style="color: #000000;">4</span><span style="color: #0000FF;">,</span><span style="color: #000000;">5</span><span style="color: #0000FF;">,</span><span style="color: #000000;">8</span><span style="color: #0000FF;">,</span><span style="color: #000000;">9</span><span style="color: #0000FF;">},</span>
<span style="color: #0000FF;">{</span><span style="color: #000000;">2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">3</span><span style="color: #0000FF;">,</span><span style="color: #000000;">4</span><span style="color: #0000FF;">,</span><span style="color: #000000;">6</span><span style="color: #0000FF;">,</span><span style="color: #000000;">7</span><span style="color: #0000FF;">,</span><span style="color: #000000;">8</span><span style="color: #0000FF;">}}</span>
<span style="color: #000000;">show_dice</span><span style="color: #0000FF;">(</span><span style="color: #000000;">dice</span><span style="color: #0000FF;">,</span><span style="color: #000000;">find_non_trans</span><span style="color: #0000FF;">(</span><span style="color: #000000;">dice</span><span style="color: #0000FF;">,</span><span style="color: #000000;">3</span><span style="color: #0000FF;">),</span><span style="color: #000000;">0</span><span style="color: #0000FF;">)</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"%s\n\n"</span><span style="color: #0000FF;">,</span><span style="color: #7060A8;">elapsed</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">time</span><span style="color: #0000FF;">()-</span><span style="color: #000000;">t0</span><span style="color: #0000FF;">))</span>
<!--
show_dice(dice,find_non_trans(dice,3),0)
printf(1,"%s\n\n",elapsed(time()-t0))

View file

@ -1,15 +1,13 @@
(phixonline)-->
<span style="color: #000000;">t0</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">time</span><span style="color: #0000FF;">()</span>
<span style="color: #000000;">mx</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">6</span>
<span style="color: #000000;">mn</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">1</span>
<span style="color: #000000;">dice</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">possible_dice</span><span style="color: #0000FF;">(</span><span style="color: #000000;">6</span><span style="color: #0000FF;">)</span>
<span style="color: #000000;">show_dice</span><span style="color: #0000FF;">(</span><span style="color: #000000;">dice</span><span style="color: #0000FF;">,</span><span style="color: #000000;">find_non_trans</span><span style="color: #0000FF;">(</span><span style="color: #000000;">dice</span><span style="color: #0000FF;">,</span><span style="color: #000000;">3</span><span style="color: #0000FF;">),</span><span style="color: #000000;">3</span><span style="color: #0000FF;">)</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"%s\n\n"</span><span style="color: #0000FF;">,</span><span style="color: #7060A8;">elapsed</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">time</span><span style="color: #0000FF;">()-</span><span style="color: #000000;">t0</span><span style="color: #0000FF;">))</span>
t0 = time()
mx = 6
mn = 1
dice = possible_dice(6)
show_dice(dice,find_non_trans(dice,3),3)
printf(1,"%s\n\n",elapsed(time()-t0))
<span style="color: #000000;">t0</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">time</span><span style="color: #0000FF;">()</span>
<span style="color: #000000;">mx</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">6</span>
<span style="color: #000000;">mn</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0</span>
<span style="color: #000000;">dice</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">possible_dice</span><span style="color: #0000FF;">(</span><span style="color: #000000;">6</span><span style="color: #0000FF;">)</span>
<span style="color: #000000;">show_dice</span><span style="color: #0000FF;">(</span><span style="color: #000000;">dice</span><span style="color: #0000FF;">,</span><span style="color: #000000;">find_non_trans</span><span style="color: #0000FF;">(</span><span style="color: #000000;">dice</span><span style="color: #0000FF;">,</span><span style="color: #000000;">3</span><span style="color: #0000FF;">),</span><span style="color: #000000;">3</span><span style="color: #0000FF;">)</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"%s\n\n"</span><span style="color: #0000FF;">,</span><span style="color: #7060A8;">elapsed</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">time</span><span style="color: #0000FF;">()-</span><span style="color: #000000;">t0</span><span style="color: #0000FF;">))</span>
<!--
t0 = time()
mx = 6
mn = 0
dice = possible_dice(6)
show_dice(dice,find_non_trans(dice,3),3)
printf(1,"%s\n\n",elapsed(time()-t0))