Guest User

Untitled

a guest
Jun 20th, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.26 KB | None | 0 0
  1. (use gauche.experimental.lamb)
  2. (use srfi-42)
  3. (load "./util.scm")
  4.  
  5. (define (prime? n)
  6. (let1 sqn (floor (sqrt n))
  7. (cond ((or (= 2 n) (= 3 n)) #t)
  8. ((or (>= 2 n) (even? n)) #f)
  9. (else (let loop ((i 3))
  10. (cond ((> i sqn) #t)
  11. ((zero? (modulo n i)) #f)
  12. (else (loop (+ i 2)))))))))
  13.  
  14. (define primes (cons 2 (list-ec (: i 3 1000000 2) (if (prime? i)) i)))
  15.  
  16. (define (solve)
  17. (define (rotate xs)
  18. (append (cdr xs) (list (car xs))))
  19. (define (rotates xs)
  20. (fold-ec (list xs) (: i (- (length xs) 1))
  21. i (^ (_ r) (cons (rotate (car r)) r))))
  22.  
  23. (define (uniq-table-push! table ks v)
  24. (or (any (^k (cond ((hash-table-exists? table k)
  25. (hash-table-push! table k v) #t)
  26. (else #f)))
  27. ks)
  28. (hash-table-put! table (car ks) (list v))))
  29.  
  30. (let1 ht (make-hash-table 'equal?)
  31. (dolist (n primes)
  32. (uniq-table-push! ht (rotates (number->list n)) n))
  33. (let1 circulared-primes
  34. (hash-table-fold
  35. ht (^ (k vs r) (cond ((or (= 11 (car vs)) (= (length k) (length vs)))
  36. (append vs r))
  37. (else r))) '())
  38. circulared-primes)))
  39.  
  40. (print (length (solve)))
Add Comment
Please, Sign In to add comment