Countdown: Difference between revisions

Content added Content deleted
(Add Quorum exact solution (no search of the "as close as possible" solution))
(→‎{{header|Quorum}}: Replace french variables names with english variables names)
Line 40: Line 40:
DateTime datetime
DateTime datetime
number start = datetime:GetEpochTime()
number start = datetime:GetEpochTime()
List<integer> tirage
List<integer> numbers
tirage:Add(100)
numbers:Add(100)
tirage:Add(75)
numbers:Add(75)
tirage:Add(50)
numbers:Add(50)
tirage:Add(25)
numbers:Add(25)
tirage:Add(6)
numbers:Add(6)
tirage:Add(3)
numbers:Add(3)
Solution(952,tirage)
Solution(952,numbers)
number stop = datetime:GetEpochTime()
number stop = datetime:GetEpochTime()
output stop-start + " ms"
output stop-start + " ms"
end
end


action Solution(integer cible, List<integer> tirage) returns boolean
action Solution(integer target, List<integer> numbers) returns boolean
if tirage:GetSize() = 1
if numbers:GetSize() = 1
return false
return false
end
end


Iterator<integer> it0 = tirage:GetIterator()
Iterator<integer> it0 = numbers:GetIterator()
repeat while it0:HasNext()
repeat while it0:HasNext()


integer n0 = it0:Next()
integer n0 = it0:Next()
List<integer> tirage1 = cast(List<integer>, tirage:Copy())
List<integer> numbers1 = cast(List<integer>, numbers:Copy())
tirage1:Remove(n0)
numbers1:Remove(n0)


Iterator<integer> it1 = tirage1:GetIterator()
Iterator<integer> it1 = numbers1:GetIterator()
repeat while it1:HasNext()
repeat while it1:HasNext()


integer n1 = it1:Next()
integer n1 = it1:Next()
List<integer> tirage2 = cast(List<integer>, tirage1:Copy())
List<integer> numbers2 = cast(List<integer>, numbers1:Copy())
tirage2:Remove(n1)
numbers2:Remove(n1)


integer res = 0
integer res = 0
List<integer> tirageNew
List<integer> numbersNew


res = n0 + n1
res = n0 + n1
tirageNew = cast(List<integer>, tirage2:Copy())
numbersNew = cast(List<integer>, numbers2:Copy())
tirageNew:Add(res)
numbersNew:Add(res)
if res = cible or Solution(cible, tirageNew)
if res = target or Solution(target, numbersNew)
output res + " = " + n0 + " + " + n1
output res + " = " + n0 + " + " + n1
return true
return true
Line 84: Line 84:


res = n0 * n1
res = n0 * n1
tirageNew = cast(List<integer>, tirage2:Copy())
numbersNew = cast(List<integer>, numbers2:Copy())
tirageNew:Add(res)
numbersNew:Add(res)
if res = cible or Solution(cible, tirageNew)
if res = target or Solution(target, numbersNew)
output res + " = " + n0 + " * " + n1
output res + " = " + n0 + " * " + n1
return true
return true
Line 93: Line 93:
if n0 > n1
if n0 > n1
res = n0 - n1
res = n0 - n1
tirageNew = cast(List<integer>, tirage2:Copy())
numbersNew = cast(List<integer>, numbers2:Copy())
tirageNew:Add(res)
numbersNew:Add(res)
if res = cible or Solution(cible, tirageNew)
if res = target or Solution(target, numbersNew)
output res + " = " + n0 + " - " + n1
output res + " = " + n0 + " - " + n1
return true
return true
Line 101: Line 101:
elseif n1 > n0
elseif n1 > n0
res = n1 - n0
res = n1 - n0
tirageNew = cast(List<integer>, tirage2:Copy())
numbersNew = cast(List<integer>, numbers2:Copy())
tirageNew:Add(res)
numbersNew:Add(res)
if res = cible or Solution(cible, tirageNew)
if res = target or Solution(target, numbersNew)
output res + " = " + n1 + " - " + n0
output res + " = " + n1 + " - " + n0
return true
return true
Line 112: Line 112:
if n0 mod n1 = 0
if n0 mod n1 = 0
res = n0 / n1
res = n0 / n1
tirageNew = cast(List<integer>, tirage2:Copy())
numbersNew = cast(List<integer>, numbers2:Copy())
tirageNew:Add(res)
numbersNew:Add(res)
if res = cible or Solution(cible, tirageNew)
if res = target or Solution(target, numbersNew)
output res + " = " + n0 + " / " + n1
output res + " = " + n0 + " / " + n1
return true
return true
Line 122: Line 122:
if n1 mod n0 = 0
if n1 mod n0 = 0
res = n1 / n0
res = n1 / n0
tirageNew = cast(List<integer>, tirage2:Copy())
numbersNew = cast(List<integer>, numbers2:Copy())
tirageNew:Add(res)
numbersNew:Add(res)
if res = cible or Solution(cible, tirageNew)
if res = target or Solution(target, numbersNew)
output res + " = " + n1 + " / " + n0
output res + " = " + n1 + " / " + n0
return true
return true