Order by pair comparisons: Difference between revisions
Content added Content deleted
Alextretyak (talk | contribs) (Added 11l) |
(→{{header|Lua}}: added Lua solution) |
||
Line 1,134: | Line 1,134: | ||
Sorted: ["red", "orange", "yellow", "green", "blue", "indigo", "violet"]. Total requests: 14. |
Sorted: ["red", "orange", "yellow", "green", "blue", "indigo", "violet"]. Total requests: 14. |
||
</pre> |
</pre> |
||
=={{header|Lua}}== |
|||
<lang lua>colors = { "violet", "red", "green", "indigo", "blue", "yellow", "orange" } |
|||
print("unsorted: " .. table.concat(colors," ")) |
|||
known, notyn, nc, nq = {}, {n="y",y="n"}, 0, 0 |
|||
table.sort(colors, function(a,b) |
|||
nc = nc + 1 |
|||
if not known[a] then known[a]={[a]="n"} end |
|||
if not known[b] then known[b]={[b]="n"} end |
|||
if not (known[a][b] or known[b][a]) then |
|||
io.write("Is '" .. a .. "' < '" .. b .."'? (y/n): ") |
|||
nq, known[a][b] = nq+1, io.read() |
|||
if a~=b then known[b][a] = notyn[known[a][b]] end |
|||
end |
|||
return known[a][b]=="y" |
|||
end) |
|||
print("sorted: " .. table.concat(colors," ")) |
|||
print("(" .. nq .. " questions needed to resolve " .. nc .. " comparisons)")</lang> |
|||
{{out}} |
|||
<pre>unsorted: violet red green indigo blue yellow orange |
|||
Is 'orange' < 'violet'? (y/n): y |
|||
Is 'indigo' < 'orange'? (y/n): n |
|||
Is 'violet' < 'indigo'? (y/n): n |
|||
Is 'red' < 'indigo'? (y/n): y |
|||
Is 'green' < 'indigo'? (y/n): y |
|||
Is 'yellow' < 'indigo'? (y/n): y |
|||
Is 'blue' < 'indigo'? (y/n): y |
|||
Is 'blue' < 'orange'? (y/n): n |
|||
Is 'green' < 'orange'? (y/n): n |
|||
Is 'blue' < 'green'? (y/n): n |
|||
Is 'red' < 'green'? (y/n): y |
|||
Is 'yellow' < 'green'? (y/n): y |
|||
Is 'yellow' < 'orange'? (y/n): n |
|||
Is 'red' < 'orange'? (y/n): y |
|||
sorted: red orange yellow green blue indigo violet |
|||
(14 questions needed to resolve 18 comparisons)</pre> |
|||
=={{header|Mathematica}} / {{header|Wolfram Language}}== |
=={{header|Mathematica}} / {{header|Wolfram Language}}== |