-
Notifications
You must be signed in to change notification settings - Fork 2
/
day013-problem-33-40.clj
118 lines (85 loc) · 2.8 KB
/
day013-problem-33-40.clj
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
;#################################################################
;33 Replicate a Sequence
;(= (__ [1 2 3] 2) '(1 1 2 2 3 3))
;(= (__ [:a :b] 4) '(:a :a :a :a :b :b :b :b))
;(= (__ [4 5 6] 1) '(4 5 6))
;(= (__ [[1 2] [3 4]] 2) '([1 2] [1 2] [3 4] [3 4]))
;(= (__ [44 33] 2) [44 44 33 33])
;answer
(fn [collection reps]
(reduce (fn [coll x] (into coll (repeat reps x))) [] collection))
;solution
#(if(= %2 1) %1
(apply interleave (take %2 (repeat %1))))
;solution2
(fn [xs n] (reduce concat (map #(repeat n %) xs)))
;#################################################################
;34 Implement range
;(= (__ 1 4) '(1 2 3))
;(= (__ -2 2) '(-2 -1 0 1))
;(= (__ 5 8) '(5 6 7))
;answer
(fn [start end]
(loop [result [] start start end end]
(if (< start end)
(recur (conj result start) (+ start 1) end)
result)))
;solution
#(take (- %2 %1) (iterate inc %1))
;solution2
(fn [start end]
(map-indexed + (repeat (- end start) start)))
;#################################################################
;35 Local bindings
;answer
7
;#################################################################
;36 Let it Be
;answer
[x 7 y 3 z 1]
;#################################################################
;37 Regular Expressions
;(= __ (apply str (re-seq #"[A-Z]+" "bA1B3Ce ")))
;answer
"ABC"
;#################################################################
;38 Maximum value
;(= (__ 1 8 3 4) 8)
;(= (__ 30 20) 30)
;(= (__ 45 67 11) 67)
;answer
(fn [& args] (last (sort args)))
;solution
(fn [& params] (reduce (fn [a b] (if (< a b) b a)) 0 params))
;#################################################################
;39 Interleave Two Seqs
;(= (__ [1 2 3] [:a :b :c]) '(1 :a 2 :b 3 :c))
;(= (__ [1 2] [3 4 5 6]) '(1 3 2 4))
;(= (__ [1 2 3 4] [5]) [1 5])
;(= (__ [30 20] [25 15]) [30 25 20 15])
;answer
(fn [coll1 coll2]
(loop [result [] coll1 coll1 coll2 coll2]
(if (or (empty? coll1) (empty? coll2))
result
(recur (into result [(first coll1) (first coll2)]) (rest coll1) (rest coll2)))))
;вариант без срезания по самой короткой последовательности
(fn [coll1 coll2]
(loop [result [] coll1 coll1 coll2 coll2]
(cond (empty? coll1) (into result coll2)
(empty? coll2) (into result coll1)
:else (recur (into result [(first coll1) (first coll2)]) (rest coll1) (rest coll2)))))
;solution
#(flatten (map vector %1 %2))
;solution2
mapcat vector
;#################################################################
;40 Interpose a Seq
;(= (__ 0 [1 2 3]) [1 0 2 0 3])
;(= (apply str (__ ", " ["one" "two" "three"])) "one, two, three")
;(= (__ :z [:a :b :c :d]) [:a :z :b :z :c :z :d])
;answer
(fn [inter coll]
(butlast (reduce (fn [result item] (into result [item inter])) [] coll)))
;solution
#(drop-last (interleave %2 (repeat %1)))