SEND + MORE = MONEY: Difference between revisions
Content deleted Content added
Made this into a draft task which presumably is what's intended. |
Added Wren |
||
Line 74: | Line 74: | ||
done... |
done... |
||
Time: 31.9 s |
Time: 31.9 s |
||
</pre> |
|||
=={{header|Wren}}== |
|||
Clearly M = 1 and S must be 2 or more. Brute force can be used to solve for the other letters. |
|||
<syntaxhighlight lang="ecmascript">var start = System.clock |
|||
var sends = [] |
|||
var ors = [] |
|||
var m = 1 |
|||
for (s in 2..9) { |
|||
for (e in 0..9) { |
|||
if (e == m || e == s) continue |
|||
for (n in 0..9) { |
|||
if (n == m || n == s || n == e) continue |
|||
for (d in 0..9) { |
|||
if (d == m || d == s || d == n || d == e) continue |
|||
sends.add([s, e, n, d]) |
|||
} |
|||
} |
|||
} |
|||
} |
|||
for (o in 0..9) { |
|||
if (o == m) continue |
|||
for (r in 0..9) { |
|||
if (r == m || r == o) continue |
|||
ors.add([o, r]) |
|||
} |
|||
} |
|||
System.print("Solution(s):") |
|||
for (send in sends) { |
|||
var SEND = 1000 * send[0] + 100 * send[1] + 10 * send[2] + send[3] |
|||
for (or in ors) { |
|||
if (send.contains(or[0]) || send.contains(or[1])) continue |
|||
var sendmore = send + [m] + or |
|||
var MORE = 1000 * m + 100 * or[0] + 10 * or[1] + send[1] |
|||
for (y in 0..9) { |
|||
if (sendmore.contains(y)) continue |
|||
var MONEY = 10000 * m + 1000 * or[0] + 100 * send[2] + 10 * send[1] + y |
|||
if (SEND + MORE == MONEY) { |
|||
System.print("%(SEND) + %(MORE) = %(MONEY)") |
|||
} |
|||
} |
|||
} |
|||
} |
|||
System.print("\nTook %(System.clock - start) seconds.")</syntaxhighlight> |
|||
{{out}} |
|||
<pre> |
|||
Solution(s): |
|||
9567 + 1085 = 10652 |
|||
Took 0.263465 seconds. |
|||
</pre> |
</pre> |
Revision as of 17:54, 10 February 2023
SEND + MORE = MONEY is a draft programming task. It is not yet considered ready to be promoted as a complete task, for reasons that should be found in its talk page.
Write a program in your language to solve SEND + MORE = MONEY: A Great Puzzle.
Ring
t1 = clock() // start
see "works..." + nl + nl
aListSend = []
aListMore = []
for s = 0 to 9
for e1 = 0 to 9
for n = 0 to 9
for d = 0 to 9
bool = s!=e1 and s!=n and s!=d and e1!=n and e1!=d and n!=d
if bool
sendmore = s*1000+e1*100+n*10+d
add(aListSend,sendmore)
add(aListMore,sendmore)
ok
next
next
next
next
for ind1 = len(aListSend) to 1 step -1
for ind2 = 1 to len(aListMore)
strSend = string(aListSend[ind1])
strMore = string(aListMore[ind2])
m = substr(strMore,1,1)
o = substr(strMore,2,1)
r = substr(strMore,3,1)
e2 = substr(strMore,4,1)
bool1 = substr(strSend,m)
bool2 = substr(strSend,o)
bool3 = substr(strSend,r)
if substr(strSend,2,1) = substr(strMore,4,1)
bool4 = 0
else
bool4 = 1
ok
boolSendMore = bool1 + bool2 + bool3 + bool4
if boolSendMore < 1
if substr(strSend,2,1) = substr(strMore,4,1)
for y = 0 to 9
strMoney1 = substr(strMore,1,1) + substr(strMore,2,1) + substr(strSend,3,1)
strMoney2 = substr(strMore,4,1) + string(y)
strMoney = strMoney1 + strMoney2
numMoney = number(strMoney)
numSend = number(strSend)
numMore = number(strMore)
y1 = substr(strMoney,5,1)
ySend = substr(strSend,y1)
yMore = substr(strMore,y1)
yCheck = ySend + yMore
r = substr(strMore,3,1)
rCheck = substr(strSend,r)
if (numSend + numMore = numMoney) and yCheck < 1 and rCheck < 1
see "SEND = "+strSend+" MORE = "+strMore+" MONEY = "+strMoney+nl+nl
exit 3
ok
next
ok
ok
next
next
see "Time: "+ clock() - t1 // end
see "done..." + nl
- Output:
works... SEND = 9567 MORE = 1085 MONEY = 10652 done... Time: 31.9 s
Wren
Clearly M = 1 and S must be 2 or more. Brute force can be used to solve for the other letters.
var start = System.clock
var sends = []
var ors = []
var m = 1
for (s in 2..9) {
for (e in 0..9) {
if (e == m || e == s) continue
for (n in 0..9) {
if (n == m || n == s || n == e) continue
for (d in 0..9) {
if (d == m || d == s || d == n || d == e) continue
sends.add([s, e, n, d])
}
}
}
}
for (o in 0..9) {
if (o == m) continue
for (r in 0..9) {
if (r == m || r == o) continue
ors.add([o, r])
}
}
System.print("Solution(s):")
for (send in sends) {
var SEND = 1000 * send[0] + 100 * send[1] + 10 * send[2] + send[3]
for (or in ors) {
if (send.contains(or[0]) || send.contains(or[1])) continue
var sendmore = send + [m] + or
var MORE = 1000 * m + 100 * or[0] + 10 * or[1] + send[1]
for (y in 0..9) {
if (sendmore.contains(y)) continue
var MONEY = 10000 * m + 1000 * or[0] + 100 * send[2] + 10 * send[1] + y
if (SEND + MORE == MONEY) {
System.print("%(SEND) + %(MORE) = %(MONEY)")
}
}
}
}
System.print("\nTook %(System.clock - start) seconds.")
- Output:
Solution(s): 9567 + 1085 = 10652 Took 0.263465 seconds.