This is the first part of this question/answer series because the answer I came up with was very easy only because I was able to use methods to help me solve it quicker than I think they (a/A) wants. They didn't explicitly say it in this problem, but in previous challenges it said to refrain from using methods like .reverse, which I used here. SO because of that I'm going to show you my short code and talk about .sort, and then another day I'll post a longer more confusing answer that shows your know how to harness the power of loops and variables with the wrath of Aphrodites. Or something. Idfk.
The problem:
# Write a method that takes an array of numbers in. Your method should
# return the third greatest number in the array. You may assume that
# the array has at least three numbers in it.
My Solution:
SO. Let's talk about .sort! Here's my wacky explanation, but please avail yourself to some of the links at the end of this post.
.sort is an array method. It'll work beautifully on arrays containing words and will alphabetize it the way you would. However, it will not do that with numbers. the computer would consider 100 before 2 because 1 is less than 2. So when it comes to numbers, we use this comparison function that you see in there. return a-b; will sort your numbers from least to greatest, while return b-a will sort your numbers from greatest to least. To avoid saying the wrong thing and causing someone out there (even if it's me at a later date) a massive headache because what I said was gobbledegook, this is as far as I'll go.
Next we want to reverse the array, because when we do that we can easily pull out the third number which by then should be the third greatest!
Make sure to check out these links:
http://www.w3schools.com/jsref/jsref_sort.asp
http://www.javascriptkit.com/javatutors/arraysort.shtml
How would you solve this?!
Showing posts with label learn to program. Show all posts
Showing posts with label learn to program. Show all posts
Wednesday, September 28, 2016
a/A Practice Problem: Third Greatest pt.1
Labels:
app academy
,
asmarterwaytolearn
,
cleverett
,
code
,
coder
,
coder girl
,
coding
,
developer
,
learn to program
,
practice problems
,
programming
,
women who code
,
womenwhocode
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).
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?!
Labels:
a/A
,
app academy
,
asmarterwaytolearn
,
cleverett
,
coder
,
coder girl
,
codewars
,
coding
,
javascript
,
learn to program
,
practice problems
,
programming
,
ruby
,
women who code
,
womenwhocode
Thursday, June 9, 2016
Codewars as a Training Tool
In this post I wanted to stick up for CodeWars and help explain to the novice coder why this site is so fucking awesome.
First, a little backstory. My boyfriend and I are both just starting out in this whole programming world. He was the one who told me about it first and when I first went to the site, I could barely get past the mandatory (but simple) coding challenges you have to get right in order to gain access to the full site.
Fast forward to today and I am on the site at least once a day training. It has become the best learning tool for me thus far. It challenges me every day, reminding me why I like coding. My boyfriend on the other, while he can build out an entire rails app, absolutely hates the site. I think it's because he hasn't given it enough of a chance (which is true), but he says his learning style is different (which also is true). Either way, I happen to think that anyone who uses the system the right way will soon too become a true believer. So, herein this post I present to you my methodology to using the site so that even you can conquer and earn your honor.
1. Select your level.
On the left hand side you will find everything you need to make sure you are doing problems within your range. The levels are from easiest, 8, to hardest, 1. Truth be told, it's best to have gone through the basics so that you can attempt the problems, but even if you are going along as you learn you can customize which problems to do (see below). Start off with 8, and move at your own pace. Some of the problems within are going to be a lot more difficult than some of the others. But give yourself some patience and work through them, absorbing everything you can.
2. Select what areas you want to train.
Once you've selected which level you want to compete in, you can then choose problems that have been tagged with certain areas of concentration. On the left hand side, under Tags, you can select Arrays, Numbers, Bugs, Fundamentals, etc. When I was starting out I found that the best thing that helped me was completing level 8 "bug" problems. They re-familiarized me with syntax and some other basic concepts that helped me to solve some other problems without the worry of that. If you're working through the problems while trying to master one area of a certain language, this will be one of the best ways to use CodeWars to do just that.
3. Don't be ashamed to forfeit honor.
No one likes to lose, obviously. But sometimes, you need to suck it up. There are problems that for some reason will not pass the tests, but once you click submit will actually work. Save for these cases, if you can't figure out why something won't work, it might be time to just unlock the solutions to that problem. It could be something simple you overlooked, but if it's something you can't figure out on your own, unlock the solutions and see how other people solved it. Think of it as learning, not cheating if you happen to be so honorable.
4. Read other peoples' answers.
Whether I submitted my answer or forfeited honor, I always look at other peoples' answers. There will be things in there that look like straight up gibberish. Even when I finished my Javascript book, there were things I had never seen before. Methods that would produce the right code with a fraction of the lines. It was insane. But it's also insanely insightful. Whenever there's something I don't understand I look it up, and you can get the general idea of the way something works once you see it.
Going through the site without any sort of order can be pretty depressing as a noob. You can easily get that "omg-I'm-never-going-to-understand-this-and-I-better-get-back-to-my-dead-end-job" feeling, but I swear with time, patience and a little order CodeWars can and will open all sorts of doors.
Labels:
code
,
coder
,
coder girl
,
codewars
,
developer
,
full stack academy
,
javascript
,
learn to code
,
learn to program
,
practice
,
practice problems
,
women who code
,
womenwhocode
Wednesday, June 8, 2016
a/A Practice Problems: Nearby AZ
Practice Problem 8 of 21 and the first medium! It's exciting stuff happening 'round these parts. Without further adieu...
Check out past problems here:
Write a method that takes a string in and returns true if the letter "z" appears within three letters **after** an "a". You may assume that the string contains only lowercase letters.
This is a little trickier, but still employs the same methods and logic that we've already seen. A couple loops and if statements.
1. Declare our function with one parameter, string.
function nearbyAZ (string) {
}
}
2. I wanted to declare a variable, index1, that would hold the place of the position in which the letter "a" appears. This will be helpful later when determining if there's a "z" within the next three letters.
function nearbyAZ (string) {
var index1 = 0;
}
3. We want to loop through all the letters in order to see if there's an "a". The code block within the loop will be an if/else statement. If there's an "a", store it's index number in the variable, index1, and break out of the loop. Else, I want to increase index1 by one with each iteration of the loop. This way we will store the correct position number.
function nearbyAZ (string) {
var index1 = 0;
for (var i = 0; i < string.length; i++) {
if (string[i] === "a") {
index1 = i;
index1 = i;
break;
}
else {
index1++;
}
}
}
4. After the previous loop, I want another variable, index2, which will store the value of index1 + 1. This will be where our loop will start, and it should end at the third letter after the first a: index1 + 3.
function nearbyAZ (string) {
var index1 = 0;
for (var i = 0; i < string.length; i++) {
if (string[i] === "a") {
break;
}
else {
index1++;
}
}
var index2 = index1 + 1;
for (var j = index2; j <= index1 + 3; j++) {
}
}
5. Start the loop at index2 because we are only concerned with the first three letters after the letter "a". Likewise, we'll want to stop the loop once it reaches that third letter. An if statement is the last part required to return true or false if there's a "z".
function nearbyAZ (string) {
var index1 = 0;
for (var i = 0; i < string.length; i++) {
if (string[i] === "a") {
break;
}
else {
index1++;
}
}
var index2 = index1 + 1;
for (var j = index2; j <= index1 + 3; j++) {
if (string[j] === "z") {
return true;
}
}
return false;
}
Check out past problems here:
Labels:
app academy
,
asmarterwaytolearn
,
cleverett
,
coder
,
full stack academy
,
javascript
,
learn to code
,
learn to program
,
practice problems
,
programming
,
women who code
,
womenwhocode
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.
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.
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.
4. Lastly, an if statement that says if the original string and newString are the same will return true, else it will return false.
Next up the mediums! **tingles**
Check out past problems here:
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 = "";
}
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];
}
}
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;
}
}
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:
Labels:
a/A
,
app academy
,
asmarterwaytolearn
,
code
,
coder
,
coder girl
,
coding
,
developer
,
full stack
,
full stack academy
,
learn to code
,
learn to program
,
practice problems
a/A Practice Problems: Count Vowels
Practice problem number 6 of 21. Here we go.
Problem: Write a method that takes a string and returns the number of vowels in the string. You may assume that all the letters are lower cased. You can treat "y" as a consonant.
This question was a nice and easy surprise after the time conversion mayhem. It's pretty straight forward, but let me explain how I thought to solve this one. I want to be have a function take in a string, and no matter how it is written, I would like it all to be in lowercase (there's a method for that). Secondly, I would like every letter to be separated so that I can write a loop to go through each individually to see if it is any of the vowels. If it is, I'll have a vowel counter and it will go up by one and I will be happy.
1. Declare your function with one parameter.
2. Let's convert myString to all lower case and split all the letters apart. You can put it all in one statement. We can also set it equal to the same variable and we don't need to declare it with var, since it's already implicitly declared in the parameter. We also need to declare another variable, vowelCount, and set it equal to 0. This is the variable that will increase if the loop finds any vowels.
3. Now we just need a loop to go through all the letters individually.
4. If we were to put vowelCount++ as the code block for our loop, it would could every letter and increase the total by the wrong amount. We only need vowels, so we need an if statement. I know there's a shorter way of doing this, but I don't know what that is so this will have to do.
The last thing to do is return the vowelCount at the end there. Make sure you remember to do this outside of the for loop, right before you end the function.
Until next time!
Check out past problems here:
Problem: Write a method that takes a string and returns the number of vowels in the string. You may assume that all the letters are lower cased. You can treat "y" as a consonant.
This question was a nice and easy surprise after the time conversion mayhem. It's pretty straight forward, but let me explain how I thought to solve this one. I want to be have a function take in a string, and no matter how it is written, I would like it all to be in lowercase (there's a method for that). Secondly, I would like every letter to be separated so that I can write a loop to go through each individually to see if it is any of the vowels. If it is, I'll have a vowel counter and it will go up by one and I will be happy.
1. Declare your function with one parameter.
function vowels(myString) {
}
}
2. Let's convert myString to all lower case and split all the letters apart. You can put it all in one statement. We can also set it equal to the same variable and we don't need to declare it with var, since it's already implicitly declared in the parameter. We also need to declare another variable, vowelCount, and set it equal to 0. This is the variable that will increase if the loop finds any vowels.
function vowels(myString) {
myString = myString.toLowerCase().split("");
var vowelCount = 0;
}
myString = myString.toLowerCase().split("");
var vowelCount = 0;
}
3. Now we just need a loop to go through all the letters individually.
function vowels(myString) {
myString = myString.toLowerCase().split("");
var vowelCount = 0;
for (var i = 0; i < myString.length; i++){
}
}
myString = myString.toLowerCase().split("");
var vowelCount = 0;
for (var i = 0; i < myString.length; i++){
}
}
4. If we were to put vowelCount++ as the code block for our loop, it would could every letter and increase the total by the wrong amount. We only need vowels, so we need an if statement. I know there's a shorter way of doing this, but I don't know what that is so this will have to do.
function vowels(myString) {
myString = myString.toLowerCase().split("");
var vowelCount = 0;
for (var i = 0; i < myString.length; i++){
if (myString[i] === "a" || myString[i] === "e" || myString[i] === "i" || myString[i] === "o" || myString[i] === "u" ||) {
vowelCount++;
}
}
return vowelCount;
}
myString = myString.toLowerCase().split("");
var vowelCount = 0;
for (var i = 0; i < myString.length; i++){
if (myString[i] === "a" || myString[i] === "e" || myString[i] === "i" || myString[i] === "o" || myString[i] === "u" ||) {
vowelCount++;
}
}
return vowelCount;
}
The last thing to do is return the vowelCount at the end there. Make sure you remember to do this outside of the for loop, right before you end the function.
Until next time!
Check out past problems here:
Labels:
codewars
,
coding
,
full stack
,
full stack academy
,
girl
,
girl coder
,
grace hopper
,
hackathon
,
javascript
,
learn to code
,
learn to program
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:
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.)
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.
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.
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:
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;
}
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;
}
}
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;
}
}
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:
Labels:
a/A
,
app academy
,
asmarterwaytolearn
,
coder girl
,
javascript
,
learn to code
,
learn to program
,
mark meyers
,
program
,
women who code
Thursday, February 25, 2016
Learn to Program: 99 Bottles of Beer
I recently found myself with some unanticipated extra time on my hands, so I decided to put it to good use and get through another chapter of Learn to Program by Chris Pine.
If you're a beginner, I highly recommend going through his *free* e-book (also offered as an actual paper book). It.is.wonderful. An actual tutorial that helps you to do more complex problems as opposed to the ol' "Hello, world" and "2 + 2" examples--who knew you could do so much!! (Kidding.) Really though, his writing and teaching method is so clear and succinct that it was able to help a noob (me) understand the basics of Ruby AND put it to use.
As promised, I'm going to show you the problem and walk you through my answer. Don't look if you haven't tried this yet yourself!! Apparently that's half the fun...
Here's the prompt:
Here's my program:
I set bottles to 99 because that's the starting point. We start at 99 and count down from there.
Because of the song's repetitive nature, I knew I would want a loop so I didn't have to manually type out every line of the song. I tried while bottles > 0 and while bottles != 0, and both gave me the answer I wanted.
I put the first two lines of the song first, because we have to start at 99.
If you use double quotations you can use the #{ } inside the quotations to call on the variable bottles, but this will not work with single quotations.
* Alternatively you could use string concatenation and write:
puts bottles.to_s + 'bottles of beer on the wall..'
Then I put bottles = bottles - 1 because the line after the first to has to include one less bottle than what the previous bottles variable stored (99).
The next part is an if/else statement we need to embed in our while loop because one bottle, not one bottles.
I proceeded by saying if bottles == 1 then puts "#{ } bottle of beer..."
else (if bottles == anything other than 1(don't need to write)) puts "#{ } bottles of beer..."
Don't forget to put end.
That next little line puts ' ' just makes sure that we have a line break after each iteration of the song so that it's a bit easier to read. It obviously is not necessary.
So now if you try to run this program it will almost work. We took care of everything except the very last iteration of the song. It's should still say "1 bottles of beer on the wall..."
We need one more if statement that will modify this last part of the song, which is what you see above. No else needed.
Whew. That was a lot. I know this may seem pretty easy, and once you get a handle on things it really is... but it was also really easy to get tripped up on some little things. If you have any questions or maybe a better way to do this same thing, send'em my way!
Until next time, friends.
If you're a beginner, I highly recommend going through his *free* e-book (also offered as an actual paper book). It.is.wonderful. An actual tutorial that helps you to do more complex problems as opposed to the ol' "Hello, world" and "2 + 2" examples--who knew you could do so much!! (Kidding.) Really though, his writing and teaching method is so clear and succinct that it was able to help a noob (me) understand the basics of Ruby AND put it to use.
As promised, I'm going to show you the problem and walk you through my answer. Don't look if you haven't tried this yet yourself!! Apparently that's half the fun...
Here's the prompt:
Here's my program:
I set bottles to 99 because that's the starting point. We start at 99 and count down from there.
Because of the song's repetitive nature, I knew I would want a loop so I didn't have to manually type out every line of the song. I tried while bottles > 0 and while bottles != 0, and both gave me the answer I wanted.
I put the first two lines of the song first, because we have to start at 99.
If you use double quotations you can use the #{ } inside the quotations to call on the variable bottles, but this will not work with single quotations.
* Alternatively you could use string concatenation and write:
puts bottles.to_s + 'bottles of beer on the wall..'
Then I put bottles = bottles - 1 because the line after the first to has to include one less bottle than what the previous bottles variable stored (99).
The next part is an if/else statement we need to embed in our while loop because one bottle, not one bottles.
I proceeded by saying if bottles == 1 then puts "#{ } bottle of beer..."
else (if bottles == anything other than 1(don't need to write)) puts "#{ } bottles of beer..."
Don't forget to put end.
That next little line puts ' ' just makes sure that we have a line break after each iteration of the song so that it's a bit easier to read. It obviously is not necessary.
So now if you try to run this program it will almost work. We took care of everything except the very last iteration of the song. It's should still say "1 bottles of beer on the wall..."
We need one more if statement that will modify this last part of the song, which is what you see above. No else needed.
Whew. That was a lot. I know this may seem pretty easy, and once you get a handle on things it really is... but it was also really easy to get tripped up on some little things. If you have any questions or maybe a better way to do this same thing, send'em my way!
Until next time, friends.
Labels:
99 bottles
,
chris
,
chris pine
,
clever
,
cleverett
,
coder
,
coder girl
,
girl
,
learn to program
,
pine
,
program
,
ruby
Subscribe to:
Posts
(
Atom
)




