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> |
List<integer> numbers |
||
numbers:Add(100) |
|||
numbers:Add(75) |
|||
numbers:Add(50) |
|||
numbers:Add(25) |
|||
numbers:Add(6) |
|||
numbers:Add(3) |
|||
Solution(952, |
Solution(952,numbers) |
||
number stop = datetime:GetEpochTime() |
number stop = datetime:GetEpochTime() |
||
output stop-start + " ms" |
output stop-start + " ms" |
||
end |
end |
||
action Solution(integer |
action Solution(integer target, List<integer> numbers) returns boolean |
||
if |
if numbers:GetSize() = 1 |
||
return false |
return false |
||
end |
end |
||
Iterator<integer> it0 = |
Iterator<integer> it0 = numbers:GetIterator() |
||
repeat while it0:HasNext() |
repeat while it0:HasNext() |
||
integer n0 = it0:Next() |
integer n0 = it0:Next() |
||
List<integer> |
List<integer> numbers1 = cast(List<integer>, numbers:Copy()) |
||
numbers1:Remove(n0) |
|||
Iterator<integer> it1 = |
Iterator<integer> it1 = numbers1:GetIterator() |
||
repeat while it1:HasNext() |
repeat while it1:HasNext() |
||
integer n1 = it1:Next() |
integer n1 = it1:Next() |
||
List<integer> |
List<integer> numbers2 = cast(List<integer>, numbers1:Copy()) |
||
numbers2:Remove(n1) |
|||
integer res = 0 |
integer res = 0 |
||
List<integer> |
List<integer> numbersNew |
||
res = n0 + n1 |
res = n0 + n1 |
||
numbersNew = cast(List<integer>, numbers2:Copy()) |
|||
numbersNew:Add(res) |
|||
if res = |
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 |
||
numbersNew = cast(List<integer>, numbers2:Copy()) |
|||
numbersNew:Add(res) |
|||
if res = |
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 |
||
numbersNew = cast(List<integer>, numbers2:Copy()) |
|||
numbersNew:Add(res) |
|||
if res = |
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 |
||
numbersNew = cast(List<integer>, numbers2:Copy()) |
|||
numbersNew:Add(res) |
|||
if res = |
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 |
||
numbersNew = cast(List<integer>, numbers2:Copy()) |
|||
numbersNew:Add(res) |
|||
if res = |
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 |
||
numbersNew = cast(List<integer>, numbers2:Copy()) |
|||
numbersNew:Add(res) |
|||
if res = |
if res = target or Solution(target, numbersNew) |
||
output res + " = " + n1 + " / " + n0 |
output res + " = " + n1 + " / " + n0 |
||
return true |
return true |