Order by pair comparisons: Difference between revisions

→‎{{header|Lua}}: added Lua solution
(Added 11l)
(→‎{{header|Lua}}: added Lua solution)
Line 1,134:
Sorted: ["red", "orange", "yellow", "green", "blue", "indigo", "violet"]. Total requests: 14.
</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}}==
Anonymous user