-
Notifications
You must be signed in to change notification settings - Fork 0
/
super_digits.clj
37 lines (31 loc) · 850 Bytes
/
super_digits.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
(ns func-proc.super-digits)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; SUPER DIGITS
;; https://www.hackerrank.com/challenges/super-digit
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defn- explode-num [n]
{:pre (>= n 0)}
(loop [n n digits '()]
(let [m (mod n 10)
n (quot n 10)
digits (conj digits m)]
(if-not (zero? n)
(recur n digits)
digits))))
(defn- explode-str [number]
(map #(- (long %) 48) number))
(defn super-digit
([n]
{:pre (>= n 0)}
(let [n (reduce + 0 (explode-num n))]
(if-not (< n 10)
(recur n)
n)))
([s k]
(let [n (* (reduce + 0 (explode-str s)) k)]
(super-digit n))))
(comment
;; Reads input from HackerRank
(let [[s k] (re-seq #"\d+" (read-line))]
(println (super-digit s (Long/parseLong k))))
)