|
1 |
| -(ns main) |
| 1 | +;; (ns main) |
2 | 2 |
|
3 |
| -(defn divisible? [number divisor] |
4 |
| - (zero? (rem number divisor))) |
| 3 | +;; (defn divisible? [number divisor] |
| 4 | +;; (zero? (rem number divisor))) |
5 | 5 |
|
6 |
| -(def prime? |
7 |
| - (memoize (fn [number] |
8 |
| - (cond (= number 2) |
9 |
| - true |
10 |
| - (or (< number 2) (divisible? number 2)) |
11 |
| - false |
12 |
| - :else |
13 |
| - (not-any? #(divisible? number %) (range |
14 |
| - 3 |
15 |
| - (-> (Math/sqrt number) |
16 |
| - Math/ceil |
17 |
| - int |
18 |
| - inc) |
19 |
| - 2)))))) |
| 6 | +;; (def prime? |
| 7 | +;; (memoize (fn [number] |
| 8 | +;; (cond (= number 2) |
| 9 | +;; true |
| 10 | +;; (or (< number 2) (divisible? number 2)) |
| 11 | +;; false |
| 12 | +;; :else |
| 13 | +;; (not-any? #(divisible? number %) (range |
| 14 | +;; 3 |
| 15 | +;; (-> (Math/sqrt number) |
| 16 | +;; Math/ceil |
| 17 | +;; int |
| 18 | +;; inc) |
| 19 | +;; 2)))))) |
20 | 20 |
|
21 |
| -(def next-prime |
22 |
| - (memoize (fn [number] |
23 |
| - (let [next-number (inc number)] |
24 |
| - (if (prime? next-number) |
25 |
| - next-number |
26 |
| - (next-prime (inc number))))))) |
| 21 | +;; (def next-prime |
| 22 | +;; (memoize (fn [number] |
| 23 | +;; (let [next-number (inc number)] |
| 24 | +;; (if (prime? next-number) |
| 25 | +;; next-number |
| 26 | +;; (next-prime (inc number))))))) |
27 | 27 |
|
28 |
| -(def nth-prime |
29 |
| - (memoize (fn [nth] |
30 |
| - (loop [index 0 |
31 |
| - prime 2] |
32 |
| - (cond (= nth 0) |
33 |
| - 2 |
34 |
| - (= index (dec nth)) |
35 |
| - (next-prime prime) |
36 |
| - :else |
37 |
| - (recur (inc index) |
38 |
| - (next-prime prime))))))) |
| 28 | +;; (def nth-prime |
| 29 | +;; (memoize (fn [nth] |
| 30 | +;; (loop [index 0 |
| 31 | +;; prime 2] |
| 32 | +;; (cond (= nth 0) |
| 33 | +;; 2 |
| 34 | +;; (= index (dec nth)) |
| 35 | +;; (next-prime prime) |
| 36 | +;; :else |
| 37 | +;; (recur (inc index) |
| 38 | +;; (next-prime prime))))))) |
39 | 39 |
|
40 |
| -;; (def josephus |
41 |
| -;; (memoize (fn [n k] |
42 |
| -;; (if (= n 1) |
43 |
| -;; 1 |
44 |
| -;; (-> (josephus (dec n) (next-prime k)) |
45 |
| -;; (+ k) |
46 |
| -;; (dec) |
47 |
| -;; (mod n) |
48 |
| -;; (inc)))))) |
| 40 | +;; ;; (def josephus |
| 41 | +;; ;; (memoize (fn [n k] |
| 42 | +;; ;; (if (= n 1) |
| 43 | +;; ;; 1 |
| 44 | +;; ;; (-> (josephus (dec n) (next-prime k)) |
| 45 | +;; ;; (+ k) |
| 46 | +;; ;; (dec) |
| 47 | +;; ;; (mod n) |
| 48 | +;; ;; (inc)))))) |
49 | 49 |
|
50 |
| -(defn josephus [n] |
51 |
| - (loop [current-n 1 |
52 |
| - ;; index-prime 0 |
53 |
| - result 1] |
54 |
| - (printf "prime: %d > %d%n" (- n current-n) (nth-prime (- n current-n))) |
55 |
| - (printf "current-n: %d%n" current-n) |
56 |
| - (printf "result: %d%n" result) |
57 |
| - (printf "--%n") |
58 |
| - (cond (= n 1) |
59 |
| - 1 |
60 |
| - (= current-n (inc n)) |
61 |
| - result |
62 |
| - :else |
63 |
| - (recur (inc current-n) |
64 |
| - ;; (inc index-prime) |
65 |
| - (-> result |
66 |
| - (+ (nth-prime (- n current-n))) |
67 |
| - dec |
68 |
| - (mod current-n) |
69 |
| - inc)))) |
| 50 | +;; (defn josephus [n] |
| 51 | +;; (loop [current-n 1 |
| 52 | +;; ;; index-prime 0 |
| 53 | +;; result 1] |
| 54 | +;; (printf "prime: %d > %d%n" (- n current-n) (nth-prime (- n current-n))) |
| 55 | +;; (printf "current-n: %d%n" current-n) |
| 56 | +;; (printf "result: %d%n" result) |
| 57 | +;; (printf "--%n") |
| 58 | +;; (cond (= n 1) |
| 59 | +;; 1 |
| 60 | +;; (= current-n (inc n)) |
| 61 | +;; result |
| 62 | +;; :else |
| 63 | +;; (recur (inc current-n) |
| 64 | +;; ;; (inc index-prime) |
| 65 | +;; (-> result |
| 66 | +;; (+ (nth-prime (- n current-n))) |
| 67 | +;; dec |
| 68 | +;; (mod current-n) |
| 69 | +;; inc)))) |
70 | 70 |
|
71 |
| -(defn main [] |
72 |
| - (loop [number (Integer/parseInt (read-line))] |
73 |
| - (printf "-----------%n") |
74 |
| - (when (not= number 0) |
75 |
| - (printf "%d%n" (josephus number)) |
76 |
| - (recur (Integer/parseInt (read-line)))))) |
| 71 | +;; (defn main [] |
| 72 | +;; (loop [number (Integer/parseInt (read-line))] |
| 73 | +;; (printf "-----------%n") |
| 74 | +;; (when (not= number 0) |
| 75 | +;; (printf "%d%n" (josephus number)) |
| 76 | +;; (recur (Integer/parseInt (read-line)))))) |
77 | 77 |
|
78 |
| -(main) |
| 78 | +;; (main) |
79 | 79 |
|
80 |
| -(defn print-primes [] |
81 |
| - (loop [n 2] |
82 |
| - (when (<= n 200) |
83 |
| - (printf "%d -> %d%n" n (next-prime n)) |
84 |
| - (recur (next-prime n))))) |
| 80 | +;; (defn print-primes [] |
| 81 | +;; (loop [n 2] |
| 82 | +;; (when (<= n 200) |
| 83 | +;; (printf "%d -> %d%n" n (next-prime n)) |
| 84 | +;; (recur (next-prime n))))) |
85 | 85 |
|
86 |
| -;; (print-primes) |
| 86 | +;; ;; (print-primes) |
87 | 87 |
|
88 | 88 |
|
89 |
| -(defn print-nth-primes [] |
90 |
| - (loop [n 0] |
91 |
| - (when (<= n 200) |
92 |
| - (printf "%d -> %d%n" n (nth-prime n)) |
93 |
| - (recur (inc n))))) |
| 89 | +;; (defn print-nth-primes [] |
| 90 | +;; (loop [n 0] |
| 91 | +;; (when (<= n 200) |
| 92 | +;; (printf "%d -> %d%n" n (nth-prime n)) |
| 93 | +;; (recur (inc n))))) |
94 | 94 |
|
95 |
| -;; (print-nth-primes) |
| 95 | +;; ;; (print-nth-primes) |
0 commit comments