Chapter 4 - Exercises

The Sum of a range
var array = []

    function range(start, end, step){

      if (step > 1 ){

        for(counter = start; counter <= end; counter += step){

          array.push(counter);

        }}

      else if (step <= -1){

        for(counter = start; counter >= end; counter += step){

          array.push(counter);

      }}

      else {

        for(counter = start; counter <= end; counter++){

          array.push(counter);

      }

        

    }

  

    return array

  }

    function sum(array){

      var total = 0

      for(i = 0; i < array.length; i++){

        total += array[i];

      }

      return total; 

    }


   // console.log(sum(range(1, 10))); 

   console.log(range(5, 2, -1));

Reversing an array *had trouble with the second half of this one.

function reverseArray (array){

        var newarray = []

        for(counter = array.length -1; counter >= 0; counter--) {

            newarray.push(array[counter]);

        }

        console.log(newarray);

    }

    function reverseArrayInPlace(array){

        for(i = 0; i < Math.floor(array.length/2); i++) {

            let old = array[i];

            array[i] = array[array.length - 1- i];

            array[array.length - 1 - i] = old;

        }

            

        return array;

    }

 let arrayArguement = [1, 2, 3, 4 ,5];
    reverseArrayInPlace(arrayArguement);
    console.log(arrayArguement);
1 Like

SUM OF RANGE

function range(start, end, step){
var array = []
if (step == 1 || step == null) {
for (var i = start; i <= end; i++) {array.push(i);
}
}else if (step > 1) {
for (var i = start; i <= end ; i = i + step) {array.push(i);
}
}else if (step < 1) {
for (var i = start; i >= end ; i = i + step) {array.push(i);
}
}
return array
}
function sum(array){
var result = 0
for (var i = 0; i < array.length; i++) {
result += array[i];
}
return result
}
console.log(range(1,10));
// [1,2,3,4,5,6,7,8,9,10]
console.log(range(5,2,-1));
// [5,4,3,2]
console.log(sum(range(1,10)));
// 55

Reversing An Array

var colours = ["blue", "black", "green", "yellow"]
  function reverseArray(myArray){
    var revArray = []
    for (var i = myArray.length -1; i >= 0; i--) {
      revArray.push(myArray[i])
    }
    return revArray
  }

  console.log(reverseArray(colours));
  console.log(reverseArray([1,4,6,7,78,5,4]));
1 Like
  // Chapter 4 Exercise: The Sum of a Range
  function rangeArray(start, end, step) {
    let result = [], finalStep = 1;

    // If step is specified
    if (step) {
      finalStep = step;
    };

    if (finalStep > 0) {
      for(let a = start; a <= end; a += finalStep) {
        result.push(a);
      };
    } else {
      for(let a = start; a >= end; a += finalStep) {
        result.push(a);
      };
    }
    console.log(result);
    return result;
  }

  function arraySum(inputArray) {
    let sum = 0;
    inputArray.forEach((item, i) => {
      sum += item;
    });

    console.log(sum);
  }

  arraySum(rangeArray(1, 10));
  arraySum(rangeArray(1, 10, 2));
  arraySum(rangeArray(5, 2, -1));
  
  // Chapter 4 Exercise: Reversing An Array
  let x = [1, 2, 3, 4, 5];

  function reverseArray(inputArray) {
    let newArray = [];
    for(let a = inputArray.length - 1; a >= 0; a--) {
      newArray.push(inputArray[a]);
    };
    return newArray;
  }

  function reverseArrayInPlace(inputArray) {
    let plh, arrayMaxIndex = inputArray.length - 1;
    for(let a = 0; ((a < arrayMaxIndex - a) && (a != arrayMaxIndex - a)); a++) {
      plh = inputArray[a];
      inputArray[a] = inputArray[arrayMaxIndex - a];
      inputArray[arrayMaxIndex - a] = plh;
    }
    console.log(inputArray);
  }

  let returnedArray = reverseArray(x);
  console.log(returnedArray);
  reverseArrayInPlace(x);

  // I expect the second one is useful in more situations since you get to change the state (order) of the array itself right away.
  // The second one will be faster since you don't need to iterate through the whole length of the array.
1 Like

// Hello fellow future code gods. Here’s what I came up w/after much googlin

  1. THE SUM OF A RANGE:
function range(start, end, step = start < end ? 1 : -1){
        let array = [];
        if (step > 0){
          for(let i=start; i<=end; i+=step) array.push(i);
        }else{
          for(let i=start; i>=end; i+=step) array.push(i);
        }
        return array;
      }
      function sum(array){
        let total = 0;
        for(let value of array){
          total += value;
        }
        return total;
      }

console.log(range(1, 10));
console.log(sum(range(1, 10)));
  1. REVERSING AN ARRAY
function reverseArray(a){
    console.log(a)
    let b = [];
    for(i=a.length-1; i>=0; i--){
        b.push(a.pop())
    };
   console.log(a);
   console.log(b);
};
var test = [5,10,15]
console.log(reverseArray(test))
  1. REVERSING AN ARRAY IN PLACE
let reverseInPlace = (arr) =>{
      let temp
          for(i=0; i<arr.length/2; i++){
            temp = arr[i]
            arr[i] = arr[arr.length-1-i]
            arr[arr.length-1-i] = temp
  }
  return arr
};

const arr = ["N","I","V","L","A","K"];
console.log(arr);
console.log(reverseInPlace(arr))

@LORDKALVIN

3 Likes

The Sum of a Range. I had some difficulties coming up with my own soultion. I found solutions thanks to google. If you have any tips for the future please let me know.

function range(start, end, step=1) {
let array = [];

if (step > 0) {
for (var i = start; i <= end; i += step)
array.push(i);
} else {
for (var i = start; i >= end; i += step)
array.push(i);
}
return array;
}

function sum(array) {
var total = 0;
for (var i = 0; i < array.length; i++) {
total = total + array[i];
}
return total;
}

Reverse Array. Here I also struggled a bit, same situation as with the first exercise.
function reverseArray(input) {
var ret = new Array;
for(var i = input.length-1; i >= 0; i–) {
ret.push(input[i]);
}
return ret;
}

var a = [3,5,7,8]
var b = reverseArray(a);

For Part two of the second execise I didn“t manage to come up with a solution without consulting the solution provided by the book.

2 Likes

range function, i needed help not using other languages… i’m getting really thrown off by syntax.
anyway, i finally got the range array function, but the more fun to me was the range sum; a long time ago my math teacher asked us this question, and i thought the answer was so clever that i never forgot it:
sum of a range -
function sumRange(start, end) {
rsum = (start + end) * (end-(start-1))/2;
return rsum;
};

reversing an array was not so straightforward for me… but here’s my best shot (beFORE checking the cheatsheet!) -
tried using a combination of these two, and gave up after about an hour because i don’t have so much life to waste on this part of the courses…
reversed.slice(i);
reversed.indexOf(i) = array.length-i; (ā€œinvalid left-hand side assignmentā€)
no biggie, syntax is not my forte, but i get the gist I think…

2 Likes

Here is my reverseArray:

function reverseArray(array){
      newArr = [];
      for(let i = array.length - 1; i >= 0; i--){
        newArr.push(array[i]);
      };
      return newArr;

    };

But the my reverseArrayInPlace - I don’t know if am based on the explanation of a pure vs non-pure function:

function reverseArrayInPlace(array){
      counter = array.length;
      while (counter > 0){
        let a = array[array.length -1];
        array.pop();
        array.unshift(a);
        counter = counter - 1;
      };
    };

If I give the above a global var that is an array it works, but if you placed an array in there that isn’t then it wouldn’t return anything

1 Like

ok team, here are my answers (I could not do the reverse exercise by myself):

The sum of a range

function range(start, end){
var LON = [];
for (let x = start; x <= end; x++){
LON.push(x);
}
return LON;
}
console.log(range(1, 10));

The sum of a range (second exercise)

function sum(LON){
let total = 0;
for (x=0; x < LON.length; x++){
total += LON[x];
}
return total
}

console.log(sum(range(1, 10)));

Bonus
function range(start, end, step = start < end ? 1 : -1){
let array = [];
if (step > 0){
for (let i = start; i <=end; i += step) array.push(i);
}else if(step < 0){
for (let i = start; i >=end; i += step) array.push(i);
}
return array;
}
console.log(range(5, 2, -1));

Reversing an array

function reverseArray(array){
let output = [];
for (let i = array.length - 1; i >= 0; i–){
output.push(array[i]);
}
return output;
}
console.log(reverseArray([ā€œAā€, ā€œBā€, ā€œCā€]));

Arrayinplace

function reverseArrayInPlace(array) {
for (let i = 0; i < Math.floor(array.length / 2); i++) {
let old = array[i];
array[i] = array[array.length - 1 - i];
array[array.length - 1 - i] = old;
}
return array;
}

let arrayValue = [1, 2, 3, 4, 5];
reverseArrayInPlace(arrayValue);
console.log(arrayValue);

1 Like

Hi this is my code, but I really don’t understand 100% of it, I googled the answer, is that okay?

  function range(start, end, step) {
  if(start < end && step < 0) {
   [start, end] = [end, start]
  }
  if (step == null) step = 1;
  var array = [];

  if (step > 0) {
    for (var i = start; i <= end; i += step)
      array.push(i);
  } else {
    for (var i = start; i >= end; i += step)
      array.push(i);
  }
  return array;
}

function sum(numArray) {
  let add = 0;
  for (let a = 0; a < numArray.length; a++) {
    let Addindex = numArray[a];
    add += Addindex;
  }
  return add;
  }

      console.log(range(1, 10));
      console.log(range(5, 2, -1));
      console.log(sum(range(1, 10)));
1 Like

heres my code, but to be honest i found it on google, I understand some of the codes but not totally 100% is that okay?

function reverseArray( array ) {
var reversedArray = [];

  while( i = array.pop() )
reversedArray.push( i );

  return reversedArray;
}

function reverseArrayInPlace( array ) {
  for( var i = 0; i < Math.floor( array.length/2 ); i++ ) {
    var temp = array[i];
    array[i] = array[array.length - 1 - i];
    array[array.length - 1 - i] = temp;
  }
}

console.log(reverseArray(["A", "B", "C"]));
// → ["C", "B", "A"];
var arrayValue = [1, 2, 3, 4, 5];
reverseArrayInPlace(arrayValue);
console.log(arrayValue);
// → [5, 4, 3, 2, 1]
1 Like

//The sum of a range
function sumOfArray(list){
var summationOfNumbers = 0;
for(let i = 0; i < list.length; i++){
summationOfNumbers += list[i];
}
return summationOfNumbers;
}
function rangeOfNumbers(start, end, step = 1){
var returnArray = [];
if(step > o){
for(let i = start; i <= end; i += step){
returnArray.push(i);
}
}else{
for(let i = start; i >= end; i += step){
returnArray.push(i);
}
}
console.log(returnArray)
return returnArray;
}
console.log(sumOfArray(rangeOfNumbers(1, 10)));
console.log(sumOfArray(rangeOfNumbers(5, 2, -1)));
console.log(sumOfArray(rangeOfNumbers(1, 10, 2)));Preformatted text

1 Like

What I typed had indention. This reply lost the indention typing that was originally typed. Editing did not help. All code is aligned on left side, not as attractive. Not sure how to correct this error. But the coding is correct. It passed atom and sandbox. finally! :grin:

The Sum of a Range
Was stuck for quite a moment.

// range function

 let Arr=[]
  function range(start,end,incr){ 
    Arr=[]; 
    let range1=((end-start)/incr);if (range1<0) range1=-range1;
    let addNum=start;
  
        for(let n=0;n<=range1;n++){           
            Arr.push(addNum);
            addNum+=incr;
        };
    return Arr;           
};
console.log(range(1,10,1);alert(Arr);
range(1,10,2);alert(Arr);
range(5,2,-1);alert(Arr);


//sum function

let range2=Arr.length;
let total=0;

function sum(){
        for(let n = 0; n < range2; n++){
            total+=Arr[n];
        };
        return total;
};
sum();alert (total);


**Reversing An Array**
let fowardArr = ["One", "Two", "Three", "Four", "Five"];
let reverseArr = [...fowardArr].reverse();
console.log(fowardArr)
console.log(reverseArr)
1 Like

1. The sum of a range:
Part 1 (2 arguments returns an array)

function myRange (start, end){
    var myArray = [];
    for (let i=start; i <=end; i=i+1){
	    myArray.push(i);
   	}
    document.write (myArray);
}
myRange (3,9);

Part 2 (takes an array of numbers and returns de sum)

function sum(array){
    let counter = 0;
    for(let i = 0; i < array.length; i++){
        counter = counter + array[i];
    }
    document.write(counter);
}
sum([1,2,3,4,5,6,7,8,9,10]);

Part 3 (3 arguments returns an array)

function myRange (start, end, step){
    var myArray =[];

    if(step === undefined){
	    for (i=start; i<=end; i++){
	    myArray.pus(i);
	    }
    }
    else if (step < 0){
	    for (i=start; i>=end; i=i+step){
	    myArray.push(i);
	    }
    }
    else{
	    for (i=start; i<=end; i=i+step){
	    myArray.push(i);
	    }
    }
    document.write(myArray);
}
myRange(10,1,-1);

2. Reversing an Array
Part 1 (reverseArray - new array created)

function reverseArray(array){
  	var newArray = [];
    for(var i = array.length-1; i>=0;i--){
  	    newArray.push(array[i])}
    document.write(newArray)
}
reverseArray([1,2,3,4,5,6,7,8,9,10]);

Part 2 (reverseArrayInPlace - modify the original array)

function reverseArrayInPlace(array){
    for(i = 1; i < array.length; i++){
    	let take = array[i];
   		array.unshift(take);
   	 	let move = array.splice(i+1, 1);
    }
    document.write(array)
}
reverseArrayInPlace([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
1 Like

This was worse than pulling teeth.

  function range(start, end, step = 1) {
var rangelist = [];
if (step == 0)
  return [];
if (step > 0) {
  for (let i = start; i <= end; i += step)
    rangelist.push(i);
} else {
  for (let i = start; i >= end; i += step)
    rangelist.push(i);
console.log(rangelist);
}
return rangelist;

}

function sum(numbers) {
var sum = 0;
for (let number of numbers)
  sum += number;
return sum;
}


      function sum() {

      }

1 Like

//reverseArray.js

//reverseArray.js
function reverseArr(orig) {
var newArr = [];

for(let i = 0; i < orig.length; i++){
newArr.unshift(orig[i])
}
return newArr;
}
console.log(reverseArr([1,2,3,4,5]))

If u are stuck trying to make the reversing list algorithm, here u have my solution $("#InvertList").click(() => {
let _fruit;
let invertedIndex = fruits.length - 1;
const length = fruits.length / 2;

    for (let i = 0; i < length; ++i) {
      _fruit = fruits[i];
      fruits[i] = fruits[invertedIndex];
      fruits[invertedIndex] = _fruit;
      --invertedIndex;
    }

    drawFruitList();
  });
1 Like

//reverse arrayInPlace
var numbers = [1,2,3,4,5];
for(let i = 0; i < Math.floor(numbers.length/2); i++){
var temparary = numbers[i];
numbers[i] = numbers[numbers.length-1-i];
numbers[numbers.length-1-i] = temparary;
}
console.log(numbers)Preformatted text

1 Like

THE SUM OF A RANGE

var toReturnArray = [];

  function range(a, b){
    for(a; a<=b; a++){
    toReturnArray.push(a);
    }

    return toReturnArray;
  }

  function sum(a, b){
    range(a, b);
    let total=0;
    $.each(toReturnArray, function(index, value){
      total=total+value;
    });
    return total;
  }

  console.log(sum(1,10));

Reversing an Array

var testArray = [1, 2, 3, 4, 5, 6];

  function reverseArray(array){
    var newArray = [];
    for(var i=array.length-1; i>=0; i--){
      newArray.push(array[i]);
    };

    return(newArray);
  }

  function reverseArrayInPlace(array){
    var length = array.length;
    for(var i=array.length-1; i>=0; i--){
      testArray.push(array[i]);
    };
    for (var j = 1; j<=length; j++){
      testArray.shift();
    };
    return(testArray);
  }

  console.log(reverseArray(testArray));
  console.log(reverseArrayInPlace(testArray));
1 Like
  1. The sum of the range

a) creating an array with known start and end digits

function range(start, end) {
let arr= [];
for (i=start; i<=end; i++) {
arr.push(i);}
return arr;
}

b) counting the sum within the array

var arr= [1,2,3,4,5,6,7,8,9,10]
function mySum(arr) {
let sum=0;
for(i=0; i<=arr.length; i++) {
sum+=arr[i];}
return sum;
}
mySum(arr)
< 55

c) combining 2 functions together

function sumRange (start,end) {
var arr=[];
for (let i=start; i<=end; i++) {
arr.push(i);}
var sum=0;
for (let n=0; n<=arr.length;n++) {
sum+=arr[n];}
return sum;}
sumRange(1,10);
< 55

In order to change the step to optional and make the negative step work as well:

 function range (start,end, step) {
var arr=[]; if (step<0) {step=-step;} if (start<=end) {for (let i=start; i<=end; i+=step) {
arr.push(i);}} else {for (let i=start; i>=end; i-=step) {
arr.push(i);}} return arr;}
range(4,1,-1);
(4) [4, 3, 2, 1]

2. Reversing an array
a) using reverse() method

var x= [1,2,3,4,5];
function reverseArray(x) {
return x.reverse();
}

b) using a loop

var x= [1,2,3,4,5];
function reverseArrayInPlace(x) {
var x1= [];
for (let i=x.length-1; i>=0; i--) {x1.push(x[i]);}
return x1;
}

3) A list to array / Array to list / prepend / nth

a) Array to list

var list = {value:1, rest:{value:2, rest:{value:3, rest:null}}};
let result= JSON.stringify(list).match(/"value":\d+/g).map(m=>+m.match(/\d+/);
console.log(result);

Unfortunately, I couldn’t figure out how to turn an array into a nested object, so I had to look for the right answers in the book. The same for nth and prepend functions.

4. Deep comparison

function deepEqual (obj1, obj2) {var ifEqual= JSON.stringify(obj1)==JSON.stringify(obj2); return ifEqual;}
1 Like