# fyrchik's solution

## to Binary in the Clojure Track

Published at Oct 08 2020 · 0 comments
Instructions
Test suite
Solution

Convert a binary number, represented as a string (e.g. '101010'), to its decimal equivalent using first principles.

Implement binary to decimal conversion. Given a binary input string, your program should produce a decimal output. The program should handle invalid inputs.

## Note

• Implement the conversion yourself. Do not use something else to perform the conversion for you.

Decimal is a base-10 system.

A number 23 in base 10 notation can be understood as a linear combination of powers of 10:

• The rightmost digit gets multiplied by 10^0 = 1
• The next number gets multiplied by 10^1 = 10
• ...
• The nth number gets multiplied by 10^(n-1).
• All these values are summed.

So: `23 => 2*10^1 + 3*10^0 => 2*10 + 3*1 = 23 base 10`

Binary is similar, but uses powers of 2 rather than powers of 10.

So: `101 => 1*2^2 + 0*2^1 + 1*2^0 => 1*4 + 0*2 + 1*1 => 4 + 1 => 5 base 10`.

## Source

All of Computer Science http://www.wolframalpha.com/input/?i=binary&a=*C.binary-_*MathWorld-

## Submitting Incomplete Solutions

It's possible to submit an incomplete solution so you can see how others have completed the exercise.

### binary_test.clj

``````(ns binary-test
(:require [clojure.test :refer [deftest is]]
binary))

(deftest binary-1-is-decimal-1
(is (= 1 (binary/to-decimal "1"))))

(deftest binary-10-is-decimal-2
(is (= 2 (binary/to-decimal "10"))))

(deftest binary-11-is-decimal-3
(is (= 3 (binary/to-decimal "11"))))

(deftest binary-100-is-decimal-4
(is (= 4 (binary/to-decimal "100"))))

(deftest binary-1001-is-decimal-9
(is (= 9 (binary/to-decimal "1001"))))

(deftest binary-11010-is-decimal-26
(is (= 26 (binary/to-decimal "11010"))))

(deftest binary-10001101000-is-decimal-1128
(is (= 1128 (binary/to-decimal "10001101000"))))

(deftest invalid-binary-is-decimal-0
(is (= 0 (binary/to-decimal "carrot"))))``````
``````(ns binary)

(defn to-decimal [s] ;; <- arglist goes here
(reduce
#(let [d (Character/digit %2 2)]
(if (= -1 d)
(reduced 0)
(+ d (* % 2)))
)
0
s)
)``````