Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (use gauche.experimental.lamb)
- (use srfi-42)
- (load "./util.scm")
- (define (prime? n)
- (let1 sqn (floor (sqrt n))
- (cond ((or (= 2 n) (= 3 n)) #t)
- ((or (>= 2 n) (even? n)) #f)
- (else (let loop ((i 3))
- (cond ((> i sqn) #t)
- ((zero? (modulo n i)) #f)
- (else (loop (+ i 2)))))))))
- (define primes (cons 2 (list-ec (: i 3 1000000 2) (if (prime? i)) i)))
- (define (solve)
- (define (rotate xs)
- (append (cdr xs) (list (car xs))))
- (define (rotates xs)
- (fold-ec (list xs) (: i (- (length xs) 1))
- i (^ (_ r) (cons (rotate (car r)) r))))
- (define (uniq-table-push! table ks v)
- (or (any (^k (cond ((hash-table-exists? table k)
- (hash-table-push! table k v) #t)
- (else #f)))
- ks)
- (hash-table-put! table (car ks) (list v))))
- (let1 ht (make-hash-table 'equal?)
- (dolist (n primes)
- (uniq-table-push! ht (rotates (number->list n)) n))
- (let1 circulared-primes
- (hash-table-fold
- ht (^ (k vs r) (cond ((or (= 11 (car vs)) (= (length k) (length vs)))
- (append vs r))
- (else r))) '())
- circulared-primes)))
- (print (length (solve)))
Add Comment
Please, Sign In to add comment