Created
July 14, 2012 13:12
-
-
Save ponkore/3111250 to your computer and use it in GitHub Desktop.
RubyにおけるシーケンスはObject#repeatに任せなさい!を Clojure でやってみた
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;;; http://melborne.github.com/2012/07/12/object-repeat-take-care-of-sequence/ | |
;;; を Clojure でやってみた。 | |
;;; 9.、10. は挫折www | |
;;; 2012/07/16 11:02 追記:9.、10.についての解答をtnoda さんが作成されました。 | |
;;; https://gist.github.com/3111930 の 9.、10. になります。 | |
;;; 1. 初項1、公差2の等差数列の最初の20項を求めなさい。 | |
(take 20 (iterate #(+ % 2) 1)) | |
;;; => (1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39) | |
;;; 2. 初項3、公比2の等比数列の最初の20項を求めなさい。 | |
(take 20 (iterate #(* % 2) 3)) | |
;;; => (3 6 12 24 48 96 192 384 768 1536 3072 6144 12288 24576 49152 98304 196608 393216 786432 1572864) | |
;;; 3. 1で求めた等差数列がその第1階差数列となるような数列を求めなさい。 | |
(map second (take 20 (iterate (fn [[x y]] [(+ x 2) (+ x y)]) [1 1]))) | |
;;; => (1 2 5 10 17 26 37 50 65 82 101 122 145 170 197 226 257 290 325 362) | |
;;; 4. フィボナッチ数列の最初の20項を求めなさい。 | |
(map first (take 20 (iterate (fn [[a b]] [b (+ a b)]) [0 1]))) | |
;;; => (0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181) | |
;;; 5. トリボナッチ数列の最初の20項を求めなさい。 | |
(map first (take 20 (iterate (fn [[a b c]] [b c (+ a b c)]) [0 1 1]))) | |
;;; => (0 1 1 2 4 7 13 24 44 81 149 274 504 927 1705 3136 5768 10609 19513 35890) | |
;;; 6. ニュートン法を使って5の平方根を求めなさい。 | |
(let [a 5 | |
eps 0.001] | |
(second | |
(first | |
(drop-while (fn [[a b]] (> (Math/abs (- a b)) eps)) | |
(partition 2 1 (iterate (fn [x] (/ (+ x (/ a x)) 2)) 1.0)))))) | |
;;; => 2.236067977499978 | |
;;; 7. Aから始まるExcelの列名ラベルを60個生成しなさい。 | |
(defn foo[n] | |
(let [h (if (< n 26) "" (char (+ (dec (/ n 26)) (int \A)))) | |
l (char (+ (mod n 26) (int \A)))] | |
(str h l))) | |
(map foo (range 60)) | |
;;; => ("A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z" "AA" "AB" "AC" "AD" "AE" "AF" "AG" "AH" "AI" "AJ" "AK" "AL" "AM" "AN" "AO" "AP" "AQ" "AR" "AS" "AT" "AU" "AV" "AW" "AX" "AY" "AZ" "BA" "BB" "BC" "BD" "BE" "BF" "BG" "BH") | |
;;; 8. 2進数10110011を10進変換しなさい(String#to_iを使ってはいけない)。 | |
(reduce + (map #(* %1 %2) (iterate #(* % 2) 1) (map #(if (= % \1) 1 0) (reverse (seq "10110011"))))) | |
;;; => 179 | |
;;; 9. ランダムなブール値の並び20項を生成しなさい。但し、trueが連続してはいけない。 | |
;;; 10. ランダムなブール値の並び20項を生成しなさい。但し、trueが3つ連続してはいけない。 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment