Countdown: Difference between revisions

→‎{{header|Wren}}: Aligned with latest Quorum version - much quicker than before.
m (→‎{{header|Quorum}}: Remove of one useless test case)
(→‎{{header|Wren}}: Aligned with latest Quorum version - much quicker than before.)
Line 464:
{{trans|Quorum}}
{{libheader|Wren-fmt}}
This is based on the original Quorum algorithm as it's more or less the approach I'd have used anyway.
 
The latest algorithm is not working properly as numbers are being used twice (50 in the first example).
 
A bit slow but not too bad for Wren :)
<syntaxhighlight lang="ecmascript">import "random" for Random
import "./fmt" for Fmt
 
var countdown // recursive function
countdown = Fn.new { |numberstarget, targetnumbers|
if (numbers.count == 1) return false
for (n0 in numbers) {
Line 481 ⟶ 476:
var nums2 = nums1.toList
nums2.remove(n1)
var res = n0 + n10
var numsNew = nums2.toList
numsNew.addif (resn1 >= n0) {
if (res == target ||res = countdown.call(numsNew,n1 target))+ {n0
Fmt.print("$d = $d + $d", res, n0, n1)
return true
}
 
res = n0 * n1
numsNew = nums2.toList
numsNew.add(res)
if (res == target || countdown.call(numsNew, target)) {
Fmt.print("$d = $d * $d", res, n0, n1)
return true
}
 
if (n0 > n1) {
res = n0 - n1
numsNew = nums2.toList
numsNew.add(res)
if (res == target || countdown.call(numsNewtarget, targetnumsNew)) {
Fmt.print("$d = $d -+ $d", res, n0n1, n1n0)
return true
}
} else if (n0 != 1 && n1 >!= n01) {
res = n1 -* n0
numsNew = nums2.toList
numsNew.add(res)
if (res == target || countdown.call(numsNewtarget, targetnumsNew)) {
Fmt.print("$d = $d -* $d", res, n1, n0)
return true
return true }
}
} if (n1 != n0) {
Fmt.print("$d = $d + $d", res, n0,= n1) - n0
 
if (n0 > n1) {
if (n0 % n1 == 0) {
res = n0 / n1
numsNew = nums2.toList
numsNew.add(res)
if (res == target || countdown.call(numsNewtarget, targetnumsNew)) {
Fmt.print("$d = $d /- $d", res, n0n1, n1n0)
return true
}
}
} else if (n0 != 1 && n1 % n0 == 0) {
if (n1 % n0 =res = 0(n1/n0) {.truncate
res = n1 / n0
numsNew = nums2.toList
numsNew.add(res)
if (res == target || countdown.call(numsNewtarget, targetnumsNew)) {
Fmt.print("$d = $d / $d", res, n1, n0)
return true
Line 554 ⟶ 532:
System.print("Target: %(targetList[i])")
var start = System.clock
var done = countdown.call(numbersListtargetList[i], targetListnumbersList[i])
System.print("Took %(((System.clock - start) * 1000).round) ms")
if (!done) System.print("No exact solution existsfound")
System.print()
}</syntaxhighlight>
Line 568 ⟶ 546:
23800 = 23850 - 50
23850 = 225 * 106
106 = 6100 + 1006
225 = 375 * 753
Took 1525173 ms
 
Using : [100, 75, 50, 25, 6, 3]
Line 576 ⟶ 554:
952 = 23800 / 25
23800 = 23850 - 50
23850 = 1067950 * 2253
2257950 = 75106 * 375
106 = 100 + 6
Took 1522378 ms
 
Using : [8, 4, 4, 6, 8, 9]
Target: 594
594 = 5466 * 119
1166 = 864 + 32
5464 = 616 * 94
32 = 126 /- 4
1216 = 8 + 48
Took 272 ms
 
Using : [27, 42, 91, 108, 35, 53]
Target: 363436
363436 = 3109 +* 3604
360109 = 9112 *- 403
404 = 105 +- 301
30112 = 556 * 62
656 = 28 +* 47
Took 10711 ms
</pre>
9,483

edits