Rare numbers: Difference between revisions
Content added Content deleted
(Added Lua) |
imported>Sassela (Add Racket solution) |
||
Line 4,880: | Line 4,880: | ||
621770 |
621770 |
||
281089082</pre> |
281089082</pre> |
||
=={{header|Racket}}== |
|||
===naive=== |
|||
<syntaxhighlight lang="racket" line>; 20231024 Racket programming naive solution |
|||
#lang racket |
|||
(require control) |
|||
(require text-block/text) |
|||
(define (is-palindrome n) |
|||
(define (digit-list n) |
|||
(if (zero? n) |
|||
'() |
|||
(cons (remainder n 10) (digit-list (quotient n 10))))) |
|||
(define (reverse-list lst) |
|||
(if (null? lst) |
|||
'() |
|||
(append (reverse-list (cdr lst)) (list (car lst))))) |
|||
(define digits (digit-list n)) |
|||
(equal? digits (reverse-list digits))) |
|||
(define (perfect-square? n) |
|||
(if (rational? (sqrt n)) |
|||
(= n (expt (floor (sqrt n)) 2)) |
|||
false)) |
|||
(define (reverse-number n) |
|||
(string->number (string-reverse (number->string n)))) |
|||
(define (find-rare-numbers count) |
|||
(define rare-numbers '()) |
|||
(define i 1) |
|||
(define (is-rare? n) |
|||
(and (not (is-palindrome n)) |
|||
(let* ((r (reverse-number n)) |
|||
(sum (+ n r)) |
|||
(diff (- n r))) |
|||
(and (perfect-square? sum) |
|||
(perfect-square? diff))))) |
|||
(define start-time (current-inexact-milliseconds)) |
|||
(while (< (length rare-numbers) count) |
|||
(cond [(is-rare? i) |
|||
(displayln (format "Number: ~a | Elapsed time: ~a ms" i (round (- (current-inexact-milliseconds) start-time)))) |
|||
(set! rare-numbers (cons i rare-numbers))]) |
|||
(set! i (+ i 1))) |
|||
(reverse rare-numbers)) |
|||
(displayln "The first 5 rare numbers are:") |
|||
(for-each (λ (x) (display x) (display "\n")) (find-rare-numbers 5)) |
|||
</syntaxhighlight> |
|||
=={{header|Raku}}== |
=={{header|Raku}}== |