Binary Agents

From the FreeCodeCamp intermediate algorithms here:

Return an English translated sentence of the passed binary string.

The binary string will be space separated.

FreeCodeCamp – Binary Agents

For this challenge I began by splitting the binary string into an array of the given 8 bit blocks. This would make it a lot easier to work with.

Then, I declared the arrays which I thought that I’d need to translate binary into English! So I declared a ‘decimalArr’, which I planned to add each block into once I’d translated it from binary to decimal, and then also a ‘letterArr’, which I would then fill with the letters which I had translated from decimal into letters. To do this last part I used the ASCII codes for each.

I found that in order to translate binary to decimal I needed to take each bit from the byte block and multiply it by a descending power of two – beginning from 7 and going down to 0. And then to add the decimal digits we have at the end together. Or to spell it out a bit more clearly, if we have the byte: ‘01000001’, we would:

  • Take the first 0 and multiply it by 2 to the power of 7 – 0 * 2^7 = 0
  • Take the second digit, which is 1 and multiply it by 2 to the power of 6 – 1 * 2^6 = 64
  • And continue this way – 0 * 2^5 = 0
  • 0 * 2^4 = 0
  • 0 * 2^3 = 0
  • 0 * 2^2 = 0
  • 0 * 2^1 = 0
  • 1 * 2^0 = 1
  • And finally to add 64 and 1 together = 65.

Then once we have this number, it can be translated into ASCII with a conversion chart. Or thanks to JavaScript just with a String method. I did this by reducing the array down to the final value, and then by adding each decimal item into the decimal array.

From there I mapped the decimal array to a new array by making each element a String (and using the .fromCharCode() method to do so), and then returned the array joined into the final string.

My solution:

function binaryAgent(str) {
      let binaryArr = str.split(' ');
      let decimalArr = [];
      let letterArr = [];
      for (let i = 0; i < binaryArr.length; i++) {
        let str = binaryArr[i];
        let power = 7;
        let tempArr = [];
        for (let j = 0; j < str.length; j++) {
          let dec = str[j] * (Math.pow(2, power));
          tempArr.push(dec);
          power--;
        }
        decimalArr.push(tempArr.reduce((a, b) => a+b));
      }
      letterArr = decimalArr.map(x => String.fromCharCode(x));
      return letterArr.join('');
    }
    
    binaryAgent("01000001 01110010 01100101 01101110 00100111 01110100 00100000 01100010 01101111 01101110 01100110 01101001 01110010 01100101 01110011 00100000 01100110 01110101 01101110 00100001 00111111");

Published by Zachary

Learning to code with free code camp - zed.code.blog. Reading and writing at alwaysbooks.co.uk.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

Create your website at WordPress.com
Get started
%d bloggers like this: