3 ms·
This was quite fun to write in racket: #lang racket (define (ten digits) (apply (compose string->number string-append) (map num
by minikomi 11y ago
This was quite fun to write in racket:
#lang racket
(define (ten digits)
(apply (compose string->number string-append)
(map number->string digits)))
(define (solve)
(for* ([s (range 1 10)]
[e (remove s (range 0 10))]
[n (remove* (list s e) (range 0 10))]
[d (remove* (list s e n) (range 0 10))]
[m (remove* (list 0 s e n d) (range 0 10))]
[o (remove* (list s e n d m) (range 0 10))]
[r (remove* (list s e n d m o) (range 0 10))]
[y (remove* (list s e n d m o r) (range 0 10))]
#:when (= (+ (ten (list s e n d))
(ten (list m o r e)))
(ten (list m o n e y))))
(displayln
(format
" S E N D ~a ~a ~a ~a~n + M O R E + ~a ~a ~a ~a~n------------ ------------~n M O N E Y ~a ~a ~a ~a ~a"
s e n d m o r e m o n e y))))
Excuse the ugly format line :)
sendmore.rkt> (time (solve))
S E N D 9 5 6 7
+ M O R E + 1 0 8 5
------------ ------------
M O N E Y 1 0 6 5 2
cpu time: 7124 real time: 7120 gc time: 80
- minikomi 11y agoAh, too late to edit, but using for*/first to terminate the first time it finds a match is faster still.