DEV Community

Discussion on: Daily Coding Puzzles - Oct 29th - Nov 2nd

Collapse
 
aspittel profile image
Ali Spittel

Tuesday

Ones and Zeros (7 KYU):

Given an array of one's and zero's convert the equivalent binary value to an integer.

link

Collapse
 
dance2die profile image
Sung M. Kim • Edited

Here is a C# version

Note: Aggregate is equivalent to reduce in JavaScript or other languages
and seed value is the first argument unlike in JavaScript, in which it's the last argument.

using System;
using System.Linq;
namespace Solution
{
    class Kata
    {
        public static int binaryArrayToNumber(int[] a)
        {
            return Convert.ToInt32(a.Aggregate("", (acc, n) => acc + n.ToString()), 2);
        }
    }
}
Collapse
 
kspeakman profile image
Kasey Speakman • Edited

F#

Edit: shortened

let update value (sum, mult) =
    sum + (value * mult), mult * 2

// usage, processes array right to left
let (sum, _) = Array.foldBack update inputArr (0,1)
Collapse
 
tux0r profile image
tux0r

Common Lisp again:

(setf bits '(1 0 0 0)) ;; or something
(reduce (lambda (x y) (+ (* 2 x) y)) bits)

Output:

8

This is entirely type-agnostic and will not overflow for large input arrays.

Collapse
 
choroba profile image
E. Choroba
#! /usr/bin/perl
use warnings;
use strict;

sub bin2int {
    my ($i, $r);
    $r += 2 ** $i++ * pop while @_;
    return $r
}

use Test::More tests => 9;
is bin2int(0, 0, 0, 1), 1;
is bin2int(0, 0, 1, 0), 2;
is bin2int(0, 1, 0, 1), 5;
is bin2int(1, 0, 0, 1), 9;
is bin2int(0, 0, 1, 0), 2;
is bin2int(0, 1, 1, 0), 6;
is bin2int(1, 1, 1, 1), 15;
is bin2int(1, 0, 1, 1), 11;
is bin2int((1) x 20), 2 ** 20 - 1;
Collapse
 
aspittel profile image
Ali Spittel

My Python solution:

def binary_array_to_number(arr):
    return int(''.join(str(i) for i in arr), 2)
Collapse
 
tux0r profile image
tux0r

This will cause problems on Python 2 where int has a maximum value which is easily exceeded.

Thread Thread
 
aspittel profile image
Ali Spittel

true -- I'm on Python 3 though and the test cases are all small

Thread Thread
 
tux0r profile image
tux0r

"Nobody will notice" is a developer's worst enemy. ;-)

Collapse
 
bodonferenc profile image
Ferenc Bodon

Q/kdb+ solution (let l be the input list):

with list multiplication:

sum l * 2 xexp reverse til count l

with adverb over:

{y + 2*x} over l
Collapse
 
gmartigny profile image
Guillaume Martigny

Plain JS:

function arrayToInt (arr) {
  return Number.parseInt(arr.join(""), 2);
}
Collapse
 
clandau profile image
Courtney
const binaryArrayToNumber = arr => {
  return parseInt(arr.join(''), 2);
};
Enter fullscreen mode Exit fullscreen mode