Sha256: 135ead7776cafbeb58d20970c975e474ff946109fdb13ef2da296d947f3b0fa7

Contents?: true

Size: 996 Bytes

Versions: 396

Compression:

Stored size: 996 Bytes

Contents

(ns all-your-base)

(defn- digits->decimal
  "Converts a sequence of digits given in input-base into decimal format."
  [input-base digits]
  (loop [sum 0
         [num & nums] digits]
    (if num
      (recur (+ (* sum input-base) num) nums)
      sum)))

(defn- decimal->digits
  "Converts a decimal number into a sequence of digits in the desired output base."
  [output-base number]
  (loop [digits nil
         num number]
    (if (zero? num)
      digits
      (recur (conj digits (mod num output-base)) (quot num output-base)))))

(defn convert
  "Converts a sequence of digits given in input-base into a sequence of digits in the desired output-base."
  [input-base digits output-base]
  (cond
    (some #(< % 2) (list input-base output-base)) nil
    (not-every? #(and (not (neg? %)) (< % input-base)) digits) nil
    (empty? digits) ()
    (every? #(zero? %) digits) '(0)
    :else (->> digits
               (digits->decimal input-base)
               (decimal->digits output-base))))

Version data entries

396 entries across 396 versions & 1 rubygems

Version Path
trackler-2.2.1.180 tracks/clojure/exercises/all-your-base/src/example.clj
trackler-2.2.1.179 tracks/clojure/exercises/all-your-base/src/example.clj
trackler-2.2.1.178 tracks/clojure/exercises/all-your-base/src/example.clj
trackler-2.2.1.177 tracks/clojure/exercises/all-your-base/src/example.clj
trackler-2.2.1.176 tracks/clojure/exercises/all-your-base/src/example.clj
trackler-2.2.1.175 tracks/clojure/exercises/all-your-base/src/example.clj
trackler-2.2.1.174 tracks/clojure/exercises/all-your-base/src/example.clj
trackler-2.2.1.173 tracks/clojure/exercises/all-your-base/src/example.clj
trackler-2.2.1.172 tracks/clojure/exercises/all-your-base/src/example.clj
trackler-2.2.1.171 tracks/clojure/exercises/all-your-base/src/example.clj
trackler-2.2.1.170 tracks/clojure/exercises/all-your-base/src/example.clj
trackler-2.2.1.169 tracks/clojure/exercises/all-your-base/src/example.clj
trackler-2.2.1.167 tracks/clojure/exercises/all-your-base/src/example.clj
trackler-2.2.1.166 tracks/clojure/exercises/all-your-base/src/example.clj
trackler-2.2.1.165 tracks/clojure/exercises/all-your-base/src/example.clj
trackler-2.2.1.164 tracks/clojure/exercises/all-your-base/src/example.clj
trackler-2.2.1.163 tracks/clojure/exercises/all-your-base/src/example.clj
trackler-2.2.1.162 tracks/clojure/exercises/all-your-base/src/example.clj
trackler-2.2.1.161 tracks/clojure/exercises/all-your-base/src/example.clj
trackler-2.2.1.160 tracks/clojure/exercises/all-your-base/src/example.clj