Showing posts with label a/A. Show all posts
Showing posts with label a/A. Show all posts

Tuesday, September 27, 2016

a/A Practice Problem: Is Power of 2?

Truth be told: I definitely looked for help on this problem. And that's OK!! (At least I think it is.) Part of the whole teaching yourself how to code (or anything really!) is learning from others. That means looking at solutions and understanding how that person got there. Not copy-and-pasting their code into the answer box and saying "DONE!", but writing it out yourself, a hundred times if you have to. I looked at a/A's answer to this (in Ruby) and was able to translate it into a working JS program.

Here's the problem:

# Write a method that takes in a number and returns true if it is a
# power of 2. Otherwise, return false.
#
# You may want to use the `%` modulo operation. `5 % 2` returns the
# remainder when dividing 5 by 2; therefore, `5 % 2 == 1`. In the case
# of `6 % 2`, since 2 evenly divides 6 with no remainder, `6 % 2 == 0`.

My Solution















That first if statement, tells us what to reject right away -- if the number passed in isn't divisible by 2, then we know that two things: that it's definitely an odd number, and that it cannot be a power of 2.

The while loop portion was something I picked up from Codewars. Let me try to dissect and explain: The (!num) portion only, excluding the first exclamation mark, is basically saying num is false. The exclamation mark acts like negation (I think-- please feel free to correct me!). So the outer exclamation mark (!(!num)) is a double negative and is basically saying while num is true.

A while loop still needs the same components as a for-loop: the initiation (num), the condition(while num is true) and termination (num is false).

  • The first if within the loop would break us out of the loop if and when num is equal to 1 (which would be our 2 to the 0 power case. If we get to this case, that means it is a power of 2 and we should return true, which the code states!
  • The else if scenario checks if the remainder of num / 2 is equal to 0. If it is, divide it by 2 again.
  • The last else case will handle the other cases and if the number hasn't passed the first two cases, it's not a power of two, so we should return false.

What do you think? How would you solve this problem?!

a/A Practice Problems: Two Sum

It's been a minute. A New York minute, if you will. Cheeeese.  Today we're back with another App Academy practice problem.  Here it is:

# Write a method that takes an array of numbers. If a pair of numbers
# in the array sums to zero, return the positions of those two numbers.
# If no pair of numbers sums to zero, return `nil`.

A couple things beforehand: nil in javascript would be null, so I return null. I came to a working answer through trial and error, but I'm pretty sure there is a much better way to solve this. I tried a couple other ways, but nothing worked so any advice out there would be more than welcome!!


I started the first loop off at 0 and the second loop at 1 because there's no need to add the first index to itself.  Just remember the way nested loops work : the second loop will finish an entire iteration (from 1 to less than nums.length before the first loop moves on to i = 1.

That last line there was my test case, so don't mind that! :) Usually when I solve problems, I write everything out. I'm working on being more concise with my code, which is why I didn't declare an array and then push the values to it (even though I definitely tried this a billion times). But I gotta say, I kinda liked just returning i and j in an array.

That's all for today.
Happy coding! :)

Tuesday, June 7, 2016

a/A Practice Problems: Palindrome

We have made it to the last of the "easy" problems. Rejoice!  Here we go...

Write a method that takes a string and returns true if it is a palindrome. A palindrome is a string that is the same whether written backward or forward. Assume that there are no spaces; only lowercase letters will be given.

 We know that we need a function that will take in a single parameter. We also want to declare an empty string that we can use to store the new word we will form by running a loop adding each letter from the string in reverse order. Lastly, we need a check to see if the original and the new string are the same, a palindrome, and return either true or false. Easy peasy.

1. Construct your function.

function palindrome(string) {
}


2. I declared a string that would hold the index position of the last letter of the string so as to use the variable in the loop instead. This isn't necessary. But you will want to declare a variable newString, which will be the original string in reversed order.

function palindrome(string) {
   var lastIndex = string.length - 1;
   var newString = "";
}


3. The loop starts with the index of the last letter, lastIndex, which we defined previously. It will continue so long as i is greater than or equal to 0, and will decrease by one each time. The code block inside the loop will concatenate each letter and form the new string in newString.

function palindrome(string) {
   var lastIndex = string.length - 1;
   var newString = "";
   for (var i = lastIndex; i >= 0; i--) {
      newString += string[i];
   }
}


 4. Lastly, an if statement that says if the original string and newString are the same will return true, else it will return false.

function palindrome(string) {
   var lastIndex = string.length - 1;
   var newString = "";
   for (var i = lastIndex; i >= 0; i--) {
      newString += string[i];
   }
   if (string === newString) {
      return true;
   } else {
      return false;
   }
}


Next up the mediums! **tingles**

Check out past problems here:

Monday, June 6, 2016

a/A Practice Problems: Time Conversion

Back at it again today! My plan is to continue solving these practice problems till I feel that "Oh hell yes!" sense of accomplishment. Let's get on with it.

Your mission: Write a method that will take in a number of minutes and returns a string that formats the number into "hours:minutes"

In keeping with tradition,  think about how to solve this problem before doing any actual coding. I promise it's easier than Phoebe trying to teach Joey guitar cords without a guitar. #friends

The problem is asking us to convert any number of minutes given into the hours:minutes format. In order to do this there will have to be some math involved. Maybe set an hour counter equal to 0 and every time there's at least 60 that counter should go up by one. There should conversely be another counter that starts with the number passed in and decreases by 60 each time. Then it's just an issue of formatting, concatenating variables with strings and whatnot.

1. Let's go ahead and define our function with one argument. It is already provided in Ruby, but for Javascript it would be:

function time_conversion(minutes) {

}


2. I defined two new variables here: hours, which I set equal to 0, and min, which I set equal to the parameter, minutes. (This last step might be repetitive, but it was how I solved the problem and it worked so I'm keeping it for now.)

function time_conversion(minutes) {    
   var hours = 0;
   var min = minutes;
}


3. Every time min is greater than or equal to 60, I want hours to increase by 1 and I want min to decrease by 60. To do this, I used a while loop. Inside the while loop, I want it to do all the math I explained above. Remember to include the counter (i -= 60) or you'll find yourself in an infinite loop. The same three parts of a for-loop are contained in a while loop, just the formatting is different.

function time_conversion(minutes) {
   var hours = 0;
   var min = minutes;
   var i = min;
   while (i >= 60)
      hours++;
      min -= 60;
      i -= 60;
   }
}


4. Almost done! Just need to handle some special cases-- when there is less than ten minutes, you want it to read "06" or "0-whatever" not just "6". The second case you want it to handle is when there are 0 minutes, you want it to say "00". Sounds like an if statement.

function time_conversion(minutes) {
   var hours = 0;
   var min = minutes;
   var i = min;
   while (i >= 60)
      hours++;
      min -= 60;
      i -= 60;
   }
   if (min === 0) {
      min = "00" 
      return hours + ":" + min;
   } 
   else if (min < 10) {
      min = "0" + min;
      return hours + ":" + min;
   }
   else {
      return hours + ":" + min;
   } 
}


This problem sent me for a loop. Yes, pun intended. It literally sent me into an infinite loop multiple times. Despite having to come back to this problem on different days to give it another shot, that little victory kinda made it all worth it. It's a pretty awesome feeling of accomplishment figuring these challenges out, even if it may not be the most concise code or employ best practices.. I have to actually know how do it first, amirite? Here's to the small victories!

P.S. I move to New York in TEN DAYS. (!!!!!!!!!!!!!)

Check out past problems here:

Monday, May 30, 2016

a/A Practice Problems: Sum Nums

This one is pretty straight forward. The only thing to look out for: for loop starting with num and decreasing each time.

Problem: Write a method that takes in an integer 'num' and returns the sum of all integers between zero and num, up to and including num.


Game Plan: 
>>  function takes in one parameter, num.
>>  for loop to go through each number below (and including) num (i--).
>>  declare variable and set it equal to 0, will hold value from each iteration of loop.
>>  return total sum


Step 1: 

                                                        function sumNums(num) {
                                                        }

Step 2:

                                                       function sumNums(num) {
                                                          var sum = 0;
                                                       }

Step 3:

                                                        function sumNums(num) {
                                                           var sum = 0;
                                                           for (var i = num; i > 0; i--) {
                                                           }
                                                        }

Loop starts with num and stops when it is greater than 0, or 1.

Step 4: 

                                                         function sumNums(num) {
                                                            var sum = 0;
                                                            for (var i = num; i > 0; i--) {
                                                               sum += i;
                                                            }
                                                         }

You could also write sum = sum + i;

Step 5:

                                                          function sumNums(num) {
                                                             var sum = 0;
                                                             for (var i = num; i > 0; i--) {
                                                                sum += i;
                                                             }
                                                             return sum;
                                                          }


Check out past problems here:

Thursday, May 26, 2016

a/A Practice Problem: Factorial

Challenge Description: "Write a method that takes an integer 'n' in; it should return
n*(n-1)*(n-2)*...*2*1. Assume n >= 0. As a special case, factorial(0) == 1"

Quick refresher on factorials: say n = 5, a factorial would be the product of 5*4*3*2*1 or 120.

Step 1: Write out your plan of action:

                         >> make function with one parameter
                         >> declare variable and set equal to 1
                         >> for loop to take each number less than n and multiply to variable
                         >> if statement for if n = 0
                         >> return product

Step 2: Declare function. Same rules for naming variables.

                                                  function factorial(n) {
                                                  }

Step 3: Set variable and set equal to 1.

                                                   function factorial(n) {
                                                      var product = 1;
                                                   }

Step 4: For loop with descending counter: Set i equal to n because you want to make sure it's the first number to start with and is included. The loop should stop once it hits one, or when i is greater than 0. Decrement by one each time to include each number below n (and over 0).

                                                    function factorial(n) {
                                                      var product = 1;
                                                      for (var i = n; i > 0; i--) {
                                                      }
                                                    }

Step 5: If statement for if n is 0; else multiply i to the variable product. The loop will start with n and every time it will be multiplied to the variable product.

                                                     function factorial(n) {
                                                       var product = 1;
                                                       for (var i = n; i < 0; i--) {
                                                           if (n === 0) {
                                                              product = 1;
                                                           } else {
                                                              product *= i;
                                                           }
                                                       }
                                                     }

Step 6: Return the variable product: because you have to return the answer...

                                                     function factorial(n) {
                                                        var product = 1;
                                                        for (var i = n; i < 0; i--) {
                                                           if (n === 0) {
                                                              product = 1;
                                                           } else {
                                                              product *= i;
                                                           }
                                                        }
                                                        return product;
                                                     }

There you have it! Any comments or questions are all appreciated.

Check out past problems here: