Merge branch 'staging' into jquery

Conflicts:
	seed/challenges/bootstrap.json
pull/18182/head
Quincy Larson 2015-08-10 22:03:51 -07:00
commit f2356c6767
25 changed files with 1563 additions and 2148 deletions

View File

@ -8,20 +8,6 @@ var bonfires = require('./bonfires.json'),
oldUri='mongodb://localhost:27017/app30893198',
coursewares = require('./coursewares.json');
var counter = 0;
var offerings = 2;
var CompletionMonitor = function() {
counter++;
console.log('call ' + counter);
if (counter < offerings) {
return;
} else {
process.exit(0);
}
};
MongoClient.connect(oldUri, function(err, database) {
database.collection('users').find({}).batchSize(20).toArray(function(err, users) {

View File

@ -1,11 +1,10 @@
{
"name": "Advanced Algorithm Scripting",
"order": 0.011,
"order": 0.013,
"challenges": [
{
"id": "aff0395860f5d3034dc0bfc9",
"name": "Bonfire: Validate US Telephone Numbers",
"dashedName": "bonfire-validate-us-telephone-numbers",
"title": "Validate US Telephone Numbers",
"difficulty": "4.01",
"description": [
"Return true if the passed string is a valid US phone number",
@ -51,6 +50,7 @@
"MDNlinks": [
"RegExp"
],
"type": "bonfire",
"challengeType": 5,
"nameCn": "",
"descriptionCn": [],
@ -65,8 +65,7 @@
},
{
"id": "a3f503de51cf954ede28891d",
"name": "Bonfire: Symmetric Difference",
"dashedName": "bonfire-symmetric-difference",
"title": "Symmetric Difference",
"difficulty": "4.02",
"description": [
"Create a function that takes two or more arrays and returns an array of the symmetric difference of the provided arrays.",
@ -90,6 +89,7 @@
"Array.reduce()",
"Symmetric Difference"
],
"type": "bonfire",
"challengeType": 5,
"nameCn": "",
"descriptionCn": [],
@ -104,8 +104,7 @@
},
{
"id": "aa2e6f85cab2ab736c9a9b24",
"name": "Bonfire: Exact Change",
"dashedName": "bonfire-exact-change",
"title": "Exact Change",
"difficulty": "4.03",
"description": [
"Design a cash register drawer function that accepts purchase price as the first argument, payment as the second argument, and cash-in-drawer (cid) as the third argument.",
@ -146,6 +145,7 @@
"MDNlinks": [
"Global Object"
],
"type": "bonfire",
"challengeType": 5,
"nameCn": "",
"descriptionCn": [],
@ -160,8 +160,7 @@
},
{
"id": "a56138aff60341a09ed6c480",
"name": "Bonfire: Inventory Update",
"dashedName": "bonfire-inventory-update",
"title": "Inventory Update",
"difficulty": "4.04",
"description": [
"Compare and update inventory stored in a 2d array against a second 2d array of a fresh delivery. Update current inventory item quantity, and if an item cannot be found, add the new item and quantity into the inventory array in alphabetical order.",
@ -201,6 +200,7 @@
"MDNlinks": [
"Global Array Object"
],
"type": "bonfire",
"challengeType": 5,
"nameCn": "",
"descriptionCn": [],
@ -215,8 +215,7 @@
},
{
"id": "a7bf700cd123b9a54eef01d5",
"name": "Bonfire: No repeats please",
"dashedName": "bonfire-no-repeats-please",
"title": "No repeats please",
"difficulty": "4.05",
"description": [
"Return the number of total permutations of the provided string that don't have repeated consecutive letters.",
@ -243,6 +242,7 @@
"Permutations",
"RegExp"
],
"type": "bonfire",
"challengeType": 5,
"nameCn": "",
"descriptionCn": [],
@ -257,7 +257,7 @@
},
{
"id": "a19f0fbe1872186acd434d5a",
"name": "Bonfire: Friendly Date Ranges",
"title": "Friendly Date Ranges",
"dashedName": "bonfire-friendly-date-ranges",
"difficulty": "4.06",
"description": [
@ -288,6 +288,7 @@
"String.substr()",
"parseInt()"
],
"type": "bonfire",
"challengeType": 5,
"nameCn": "",
"descriptionCn": [],

View File

@ -1,11 +1,10 @@
{
"name": "AngularJS",
"order": 0.015,
"order": 0.017,
"challenges": [
{
"id": "bd7154d8c441eddfaeb5bdef",
"name": "Waypoint: Get Started with Angular.js",
"dashedName": "waypoint-get-started-with-angularjs",
"title": "Get Started with Angular.js",
"difficulty": 0.34,
"challengeSeed": ["114684726"],
"description": [
@ -13,6 +12,7 @@
"In this course, we'll build a virtual shop entirely in Angular.js.",
"Go to <a href='http://campus.codeschool.com/courses/shaping-up-with-angular-js/level/1/section/1/video/1' target='_blank'>http://campus.codeschool.com/courses/shaping-up-with-angular-js/level/1/section/1/video/1</a> and complete the section."
],
"type": "waypoint",
"challengeType": 2,
"tests": [],
"nameCn": "",
@ -28,8 +28,7 @@
},
{
"id": "bd7155d8c441eddfaeb5bdef",
"name": "Waypoint: Apply Angular.js Directives",
"dashedName": "waypoint-apply-angularjs-directives",
"title": "Apply Angular.js Directives",
"difficulty": 0.35,
"challengeSeed": ["114684727"],
"description": [
@ -37,6 +36,7 @@
"Let's learn how these powerful directives work, and how to use them to make your web apps more dynamic",
"Go to <a href='http://campus.codeschool.com/courses/shaping-up-with-angular-js/level/2/section/1/video/1' target='_blank'>http://campus.codeschool.com/courses/shaping-up-with-angular-js/level/2/section/1/video/1</a> and complete the section."
],
"type": "waypoint",
"challengeType": 2,
"tests": [],
"nameCn": "",
@ -52,8 +52,7 @@
},
{
"id": "bd7156d8c441eddfaeb5bdef",
"name": "Waypoint: Power Forms with Angular.js",
"dashedName": "waypoint-power-forms-with-angularjs",
"title": "Power Forms with Angular.js",
"difficulty": 0.36,
"challengeSeed": ["114684729"],
"description": [
@ -61,6 +60,7 @@
"Learn how to create reactive Angular.js forms, including real-time form validation.",
"Go to <a href='http://campus.codeschool.com/courses/shaping-up-with-angular-js/level/3/section/1/video/1' target='_blank'>http://campus.codeschool.com/courses/shaping-up-with-angular-js/level/3/section/1/video/1</a> and complete the section."
],
"type": "waypoint",
"challengeType": 2,
"tests": [],
"nameCn": "",
@ -76,14 +76,14 @@
},
{
"id": "bd7157d8c441eddfaeb5bdef",
"name": "Waypoint: Customize Angular.js Directives",
"dashedName": "waypoint-customize-angularjs-directives",
"title": "Customize Angular.js Directives",
"difficulty": 0.37,
"challengeSeed": ["114685062"],
"description": [
"Now we'll learn how to modify existing Angular.js directives, and even build directives of your own.",
"Go to <a href='http://campus.codeschool.com/courses/shaping-up-with-angular-js/level/4/section/1/video/1' target='_blank'>http://campus.codeschool.com/courses/shaping-up-with-angular-js/level/4/section/1/video/1</a> and complete the section."
],
"type": "waypoint",
"challengeType": 2,
"tests": [],
"nameCn": "",
@ -99,8 +99,7 @@
},
{
"id": "bd7158d8c441eddfaeb5bdef",
"name": "Waypoint: Create Angular.js Services",
"dashedName": "waypoint-create-angularjs-services",
"title": "Create Angular.js Services",
"difficulty": 0.38,
"challengeSeed": ["114685060"],
"description": [
@ -108,6 +107,7 @@
"We'll learn how to use services in this final Code School Angular.js challenge.",
"Go to <a href='http://campus.codeschool.com/courses/shaping-up-with-angular-js/level/5/section/1/video/1' target='_blank'>http://campus.codeschool.com/courses/shaping-up-with-angular-js/level/5/section/1/video/1</a> and complete the section."
],
"type": "waypoint",
"challengeType": 2,
"tests": [],
"nameCn": "",

View File

@ -0,0 +1,6 @@
{
"name": "Automated Testing and Debugging - Coming Soon",
"order": 0.012,
"challenges": [
]
}

View File

@ -1,11 +1,10 @@
{
"name": "Full Stack JavaScript Projects",
"order": 0.017,
"order": 0.019,
"challenges": [
{
"id": "bd7158d8c443eddfaeb5bcef",
"name": "Waypoint: Get Set for Basejumps",
"dashedName": "waypoint-get-set-for-basejumps",
"title": "Get Set for Basejumps",
"difficulty": 2.00,
"challengeSeed": ["128451852"],
"description": [
@ -60,13 +59,13 @@
"If you need further guidance on using Yeoman Angular-Fullstack Generator, check out: <a href='https://github.com/clnhll/guidetobasejumps' target='_blank'>https://github.com/clnhll/guidetobasejumps</a>.",
"Now you're ready to move on to your first Basejump. Click the \"I've completed this challenge\" and move on."
],
"type": "waypoint",
"challengeType": 2,
"tests": []
},
{
"id": "bd7158d8c443eddfaeb5bdef",
"name": "Basejump: Build a Voting App",
"dashedName": "basejump-build-a-voting-app",
"title": "Build a Voting App",
"difficulty": 2.01,
"challengeSeed": ["133315786"],
"description": [
@ -87,6 +86,7 @@
"Once you've finished implementing these user stories, click the \"I've completed this challenge\" button and enter the URLs for both your GitHub repository and your live app running on Heroku. If you pair programmed with a friend, enter his or her Free Code Camp username as well so that you both get credit for completing it.",
"If you'd like immediate feedback on your project, click this button and paste in a link to your Heroku project. Otherwise, we'll review it before you start your nonprofit projects.<br><br><a class='btn btn-primary btn-block' href='https://twitter.com/intent/tweet?text=Check%20out%20the%20project%20I%20just%20built%20with%20%40FreeCodeCamp:%20%0A%20%23LearnToCode%20%23JavaScript' target='_blank'>Click here then add your link to your tweet's text</a>"
],
"type": "basejumps",
"challengeType": 4,
"tests": [],
"nameCn": "",
@ -102,8 +102,7 @@
},
{
"id": "bd7158d8c443eddfaeb5bdff",
"name": "Basejump: Build a Nightlife Coordination App",
"dashedName": "basejump-build-a-nightlife-coordination-app",
"title": "Build a Nightlife Coordination App",
"difficulty": 2.02,
"challengeSeed": ["133315781"],
"description": [
@ -121,6 +120,7 @@
"Once you've finished implementing these user stories, click the \"I've completed this challenge\" button and enter the URLs for both your GitHub repository and your live app running on Heroku. If you pair programmed with a friend, enter his or her Free Code Camp username as well so that you both get credit for completing it.",
"If you'd like immediate feedback on your project, click this button and paste in a link to your Heroku project. Otherwise, we'll review it before you start your nonprofit projects.<br><br><a class='btn btn-primary btn-block' href='https://twitter.com/intent/tweet?text=Check%20out%20the%20project%20I%20just%20built%20with%20%40FreeCodeCamp:%20%0A%20%23LearnToCode%20%23JavaScript' target='_blank'>Click here then add your link to your tweet's text</a>"
],
"type": "basejumps",
"challengeType": 4,
"tests": [],
"nameCn": "",
@ -136,8 +136,7 @@
},
{
"id": "bd7158d8c443eddfaeb5bd0e",
"name": "Basejump: Chart the Stock Market",
"dashedName": "basejump-chart-the-stock-market",
"title": "Chart the Stock Market",
"difficulty": 2.03,
"challengeSeed": ["133315787"],
"description": [
@ -154,6 +153,7 @@
"Once you've finished implementing these user stories, click the \"I've completed this challenge\" button and enter the URLs for both your GitHub repository and your live app running on Heroku. If you pair programmed with a friend, enter his or her Free Code Camp username as well so that you both get credit for completing it.",
"If you'd like immediate feedback on your project, click this button and paste in a link to your Heroku project. Otherwise, we'll review it before you start your nonprofit projects.<br><br><a class='btn btn-primary btn-block' href='https://twitter.com/intent/tweet?text=Check%20out%20the%20project%20I%20just%20built%20with%20%40FreeCodeCamp:%20%0A%20%23LearnToCode%20%23JavaScript' target='_blank'>Click here then add your link to your tweet's text</a>"
],
"type": "basejumps",
"challengeType": 4,
"tests": [],
"nameCn": "",
@ -169,8 +169,7 @@
},
{
"id": "bd7158d8c443eddfaeb5bd0f",
"name": "Basejump: Manage a Book Trading Club",
"dashedName": "basejump-manage-a-book-trading-club",
"title": "Manage a Book Trading Club",
"difficulty": 2.04,
"challengeSeed": ["133316032"],
"description": [
@ -187,6 +186,7 @@
"Once you've finished implementing these user stories, click the \"I've completed this challenge\" button and enter the URLs for both your GitHub repository and your live app running on Heroku. If you pair programmed with a friend, enter his or her Free Code Camp username as well so that you both get credit for completing it.",
"If you'd like immediate feedback on your project, click this button and paste in a link to your Heroku project. Otherwise, we'll review it before you start your nonprofit projects.<br><br><a class='btn btn-primary btn-block' href='https://twitter.com/intent/tweet?text=Check%20out%20the%20project%20I%20just%20built%20with%20%40FreeCodeCamp:%20%0A%20%23LearnToCode%20%23JavaScript' target='_blank'>Click here then add your link to your tweet's text</a>"
],
"type": "basejumps",
"challengeType": 4,
"tests": [],
"nameCn": "",
@ -202,8 +202,7 @@
},
{
"id": "bd7158d8c443eddfaeb5bdee",
"name": "Basejump: Build a Pinterest Clone",
"dashedName": "basejump-build-a-pinterest-clone",
"title": "Build a Pinterest Clone",
"difficulty": 2.05,
"challengeSeed": ["133315784"],
"description": [
@ -223,6 +222,7 @@
"Once you've finished implementing these user stories, click the \"I've completed this challenge\" button and enter the URLs for both your GitHub repository and your live app running on Heroku. If you pair programmed with a friend, enter his or her Free Code Camp username as well so that you both get credit for completing it.",
"If you'd like immediate feedback on your project, click this button and paste in a link to your Heroku project. Otherwise, we'll review it before you start your nonprofit projects.<br><br><a class='btn btn-primary btn-block' href='https://twitter.com/intent/tweet?text=Check%20out%20the%20project%20I%20just%20built%20with%20%40FreeCodeCamp:%20%0A%20%23LearnToCode%20%23JavaScript' target='_blank'>Click here then add your link to your tweet's text</a>"
],
"type": "basejumps",
"challengeType": 4,
"tests": [],
"nameCn": "",

File diff suppressed because it is too large Load Diff

View File

@ -1,21 +1,19 @@
{
"name": "Basic JavaScript",
"order": 0.006,
"order": 0.005,
"challenges": [
{
"id":"bd7123c9c441eddfaeb4bdef",
"name":"Welcome To Comments",
"dashedName":"waypoint-welcome-to-comments",
"title": "Comment your JavaScript Code",
"difficulty":"9.98",
"description":[
"",
"A comment is a very useful line of code that is not actually ran by the machine executing it. With this property comments are the perfect way of creating notes to yourself or anyone else who reads your code describing what the code does",
"It's an extremely important part in writing good, efficient and maintainable code and a requirement by most employers",
"Let's take a look at the two ways in which we can write a comment in JavaScript",
"<code> //This is a comment </code>",
"<code>//This is a comment </code>",
"These comment out the entire line that they are on",
"<code> /*This is also a comment*/ </code>",
"These comment out everything in between <code> /* </code> and <code> */ </code>",
"<code>/*This is also a comment*/ </code>",
"These comment out everything in between <code>/*</code>and <code>*/</code>",
"Try creating one of each now."
],
"tests":[
@ -24,21 +22,20 @@
"assert(editor.getValue().match(/(\\/\\/)...../g), 'Make sure that there is at least one \\/\\/ style comment with at least five letters in it');"
],
"challengeSeed":[
],
"type": "waypoint",
"challengeType": 1
},
{
"id": "bd7123c9c441eddfaeb5bdef",
"name": "Unconditionally Loving Booleans",
"dashedName": "waypoint-unconditionally-loving-booleans",
"title": "Understand Boolean Values",
"difficulty": "9.98001",
"description": [
"Return true",
"A boolean is a type of variable that represents either true or false (Named after the British mathematician George Boole).",
"Booleans are often the result of a function or a comparative operation, for example <code> 1==1 </code> is true whereas <code> 1==2 </code> is false.",
"They are most commonly found inside <code> if </code> statements which we shall cover later",
"For now Let's modify our <code> welcomeToBooleans </code> function so that it will return <code> true </code> instead of <code> false </code> when the run button is clicked"
"Booleans are often the result of a function or a comparative operation, for example <code>1==1</code>is true whereas <code>1==2</code>is false.",
"They are most commonly found inside <code>if</code>statements which we shall cover later",
"For now let's modify our <code>welcomeToBooleans</code>function so that it will return <code>true</code>instead of <code>false</code>when the run button is clicked"
],
"tests": [
"assert(typeof(welcomeToBooleans())=='boolean', 'The value returned by welcomeToBooleans() should be a boolean value. (true of false)');",
@ -52,19 +49,18 @@
"",
"welcomeToBooleans();"
],
"type": "waypoint",
"challengeType": 1
},
{
"id": "bd7123c9c443eddfaeb5bdef",
"name": "Start Using Variables",
"dashedName": "waypoint-start-using-variables",
"title": "Declare JavaScript Variables",
"difficulty": "9.9801",
"description": [
"",
"Now, use the <code>var</code> keyword to create a <code>variable</code> called <code>myName</code>. Set its value to your name.",
"<code>Variables</code> are used to store values.",
"The name variable comes from the fact that it's value, varies!",
"Now Let's create our first variable called myName and because it's a name let's make it a string!",
"The name variable comes from the fact that its value varies!",
"Now let's create our first variable called myName and because it's a name let's make it a string!",
"Be sure to use lowercase and uppercase letters properly. JavaScript variables are written in <code>camel case</code>. An example of camel case is: camelCase.",
"Look at the <code>ourName</code> example if you get stuck."
],
@ -80,17 +76,16 @@
"",
"if(typeof(myName) !== 'undefined'){(function(v){return(v);})(myName);}"
],
"type": "waypoint",
"challengeType": 1
},
{
"id": "bd7123c9c444eddfaeb5bdef",
"name": "Define Your First and Last Name",
"dashedName": "waypoint-define-your-first-and-last-name",
"title": "Declare String Variables",
"difficulty": "9.9802",
"description": [
"",
"Programs will almost always have several different variables that are used to keep track of several different pieces of data",
"We are now going to go and create two new variables <code> myFirstName </code> and <code> myLastName </code> that are strings",
"We are now going to go and create two new variables <code>myFirstName</code>and <code>myLastName</code>that are strings",
"You can assign these variables to be equal to your first and last names respectively."
],
"tests": [
@ -108,15 +103,14 @@
"// We'll learn about functions soon.",
"if(typeof(myFirstName) !== 'undefined' && typeof(myLastName) !== 'undefined'){(function(y,z){return(y + ', ' + z);})(myFirstName, myLastName);}"
],
"type": "waypoint",
"challengeType": 1
},
{
"id": "bd7123c9c448eddfaeb5bdef",
"name": "Check the Length Property of a String Variable",
"dashedName": "waypoint-check-the-length-property-of-a-string-variable",
"title": "Check the Length Property of a String Variable",
"difficulty": "9.9809",
"description": [
"",
"Use the <code>.length</code> property to count the number of characters in the <code>lastNameLength</code> variable.",
"For example, if we created a variable <code>var firstName = \"Julie\"</code>, we could find out how long the string \"Julie\" is by using the <code>firstName.length</code> property."
],
@ -142,12 +136,12 @@
"// We'll learn about functions soon.",
"if(typeof(lastNameLength) != 'undefined'){(function(v){return(v);})(lastNameLength);}"
],
"type": "waypoint",
"challengeType": 1
},
{
"id": "bd7123c9c549eddfaeb5bdef",
"name": "Use Bracket Notation to Find the First Character in a String",
"dashedName": "waypoint-use-bracket-notation-to-find-the-first-character-in-a-string",
"title": "Use Bracket Notation to Find the First Character in a String",
"difficulty": "9.9810",
"description": [
"Use <code>bracket notation</code> to find the first character in a the <code>firstLetterOfLastName</code> variable.",
@ -177,17 +171,17 @@
"// We'll learn about functions soon.",
"(function(v){return(v);})(firstLetterOfLastName);"
],
"type": "waypoint",
"challengeType": 1
},
{
"id": "bd7123c9c450eddfaeb5bdef",
"name": "Use Bracket Notation to Find the Nth Character in a String",
"dashedName": "waypoint-use-bracket-notation-to-find-the-nth-character-in-a-string",
"title": "Use Bracket Notation to Find the Nth Character in a String",
"difficulty": "9.9811",
"description": [
"Just like the last lesson where we used <code> Bracket Notation </code> to access the first letter we can use the same method to get the letters ar other positions",
"Just like the last lesson where we used <code>Bracket Notation</code>to access the first letter we can use the same method to get the letters ar other positions",
"Don't forget that computers start counting at 0 so the first letter is actually the zeroth one",
"Let's now try to set <code> thirdLetterOfLastName </code> to equal the <code>third letter</code> of the <code> lastName </code> variable",
"Let's now try to set <code>thirdLetterOfLastName</code>to equal the <code>third letter</code> of the <code>lastName</code>variable",
"Try looking at the <code>secondLetterOfFirstName</code> variable declaration if you get stuck."
],
"tests": [
@ -208,12 +202,12 @@
"// We'll learn about functions soon.",
"(function(v){return(v);})(thirdLetterOfLastName);"
],
"type": "waypoint",
"challengeType": 1
},
{
"id": "bd7123c9c451eddfaeb5bdef",
"name": "Use Bracket Notation to Find the Last Character in a String",
"dashedName": "waypoint-use-bracket-notation-to-find-the-last-character-in-a-string",
"title": "Use Bracket Notation to Find the Last Character in a String",
"difficulty": "9.9812",
"description": [
"Use <code>bracket notation</code> to find the last character in the <code>lastName</code> variable.",
@ -238,12 +232,12 @@
"",
"(function(v){return(v);})(lastLetterOfLastName);"
],
"type": "waypoint",
"challengeType": 1
},
{
"id": "bd7123c9c452eddfaeb5bdef",
"name": "Use Bracket Notation to Find the Nth to Last Character in a String",
"dashedName": "waypoint-use-bracket-notation-to-find-the-nth-to-last-character-in-a-string",
"title": "Use Bracket Notation to Find the Nth-to-Last Character in a String",
"difficulty": "9.9813",
"description": [
"Use <code>bracket notation</code> to find the second-to-last character in the <code>lastName</code> variable.",
@ -259,7 +253,7 @@
"challengeSeed": [
"var firstName = \"Madeline\";",
"",
"var thirdToLastLetterOfFirstName = firstName[firstName.length - 2];",
"var thirdToLastLetterOfFirstName = firstName[firstName.length - 3];",
"",
"var lastName = \"Chen\";",
"",
@ -268,19 +262,18 @@
"",
"(function(v){return(v);})(secondToLastLetterOfLastName);"
],
"type": "waypoint",
"challengeType": 1
},
{
"id": "cf1111c1c11feddfaeb3bdef",
"name": "Magical Maths Addition",
"dashedName": "waypoint-magical-maths-addition",
"title": "Add Two Numbers with JavaScript",
"difficulty": "9.98141",
"description": [
"",
"In JavaScript whole numbers (called integers) can be easily used to preform mathematical functions",
"Let's try a few of the most commonly used ones now",
"We use <code> + </code> for addition",
"Replace the <code> 0 </code> with correct number to achieve the result in the comment."
"In JavaScript whole numbers (called integers) can be easily used to perform mathematical functions.",
"Let's try a few of the most commonly used ones now.",
"We use <code>+</code>for addition.",
"Replace the <code>0</code>with correct number to achieve the result in the comment."
],
"tests": [
"assert((function(){if(add == 20 && editor.getValue().match(/\\+/g)){return(true);}else{return(false);}})(), 'Add should be the result of a sum and be equal to 20');"
@ -292,19 +285,18 @@
"",
"(function(z){return('add='+z);})(add);"
],
"type": "waypoint",
"challengeType": 1
},
{
"id": "cf1111c1c11feddfaeb4bdef",
"name": "Magical Maths Subtraction",
"dashedName": "waypoint-magical-maths-subtraction",
"title": "Subtract One Number from Another with JavaScript",
"difficulty": "9.98142",
"description": [
"",
"In JavaScript whole numbers (called integers) can be easily used to preform mathematical functions",
"Let's try a few of the most commonly used ones now",
"We use <code> - </code> for subtraction",
"Replace the <code> 0 </code> with correct number to achieve the result in the comment."
"In JavaScript whole numbers (called integers) can be easily used to perform mathematical functions.",
"Let's try a few of the most commonly used ones now.",
"We use <code>-</code>for subtraction.",
"Replace the <code>0</code>with correct number to achieve the result in the comment."
],
"tests": [
"assert((function(){if(subtract == 12 && editor.getValue().match(/\\-/g)){return(true);}else{return(false);}})(), 'Subtract should be the result of a sum and be equal to 12');"
@ -316,19 +308,18 @@
"",
"(function(z){return('subtract='+z);})(subtract);"
],
"type": "waypoint",
"challengeType": 1
},
{
"id": "cf1231c1c11feddfaeb5bdef",
"name": "Magical Maths Multiplication",
"dashedName": "waypoint-magical-maths-multiplication",
"title": "Multiply Two Numbers with JavaScript",
"difficulty": "9.98143",
"description": [
"",
"In JavaScript whole numbers (called integers) can be easily used to preform mathematical functions",
"Let's try a few of the most commonly used ones now",
"We use <code> * </code> for multiplication",
"Replace the <code> 0 </code> with correct number to achieve the result in the comment."
"In JavaScript whole numbers (called integers) can be easily used to perform mathematical functions.",
"Let's try a few of the most commonly used ones now.",
"We use <code>*</code>for multiplication.",
"Replace the <code>0</code>with correct number to achieve the result in the comment."
],
"tests": [
"assert((function(){if(multiply == 80 && editor.getValue().match(/\\*/g)){return(true);}else{return(false);}})(), 'Multiply should be the result of a sum and be equal to 80');"
@ -340,19 +331,18 @@
"",
"(function(z){return('multiply='+z);})(multiply);"
],
"type": "waypoint",
"challengeType": 1
},
{
"id": "cf1111c1c11feddfaeb6bdef",
"name": "Magical Maths Division",
"dashedName": "waypoint-magical-maths-division",
"title": "Divide One Number by Another with JavaScript",
"difficulty": "9.9814",
"description": [
"",
"In JavaScript whole numbers (called integers) can be easily used to preform mathematical functions",
"Let's try a few of the most commonly used ones now",
"We use <code> / </code> for division",
"Replace the <code> 0 </code> with correct number to achieve the result in the comment."
"In JavaScript whole numbers (called integers) can be easily used to perform mathematical functions.",
"Let's try a few of the most commonly used ones now.",
"We use <code>/</code>for division.",
"Replace the <code>0</code>with correct number to achieve the result in the comment."
],
"tests": [
"assert((function(){if(divide == 2 && editor.getValue().match(/\\//g)){return(true);}else{return(false);}})(), 'Divide should be the result of a sum and be equal to 2');"
@ -364,16 +354,15 @@
"",
"(function(z){return('divide='+z);})(divide);"
],
"type": "waypoint",
"challengeType": 1
},
{
"id": "cf1391c1c11feddfaeb4bdef",
"name": "Creating Decimals",
"dashedName": "waypoint-creating-decimals",
"title": "Create Decimal Numbers with JavaScript",
"difficulty": "9.9815",
"description": [
"",
"in JavaScript we can can work with decimal numbers",
"In JavaScript we can work with decimal numbers.",
"Let's create a variable <code>myDecimal</code> and give it a decimal value."
],
"tests": [
@ -388,18 +377,15 @@
"",
"(function(){if(typeof(myDecimal) != 'undefined'){return(myDecimal);}})();"
],
"type": "waypoint",
"challengeType": 1
},
{
"id": "bd7993c9c69feddfaeb7bdef",
"name": "Working With Decimals",
"dashedName": "waypoint-working-with-decimals",
"title": "Perform Arithmetic Operations on Decimals with JavaScript",
"difficulty": "9.98151",
"description": [
"",
"in JavaScript we can can work with decimal numbers",
"These decal numbers are known as floats.",
"Let's take a look at working with floats now"
"In JavaScript we can work with decimal numbers."
],
"tests": [
"assert(multiply == 15, 'The result of multiply should be 3.75');",
@ -413,18 +399,17 @@
"",
"(function(y,z){return('multiply='+y+', divide='+z);})(multiply,divide);"
],
"type": "waypoint",
"challengeType": 1
},
{
"id": "bd7993c9c69feddfaeb8bdef",
"name": "An Array Of new Information",
"dashedName": "waypoint-an-array-of-new-information",
"title": "Store Multiple Values in one Variable using JavaScript Arrays",
"difficulty": "9.9816",
"description": [
"",
"In JavaScript we can store lists or collections of data in what are called arrays",
"Arrays are distinguished by the <code> [ </code> and <code> ] </code> around the data. Each piece of data is separated be a <code> , </code>",
"Now let's create a new array called <code> myArray </code> with a <code> string </code> and a <code> number </code> with a <code> , </code> separating each one",
"Arrays are distinguished by the <code>[</code>and <code>]</code>around the data. Each piece of data is separated by a <code>, </code>",
"Now let's create a new array called <code>myArray</code>with a <code>string</code>and a <code>number</code>with a <code>,</code>separating each one",
"Refer to the example if you get stuck",
""
],
@ -441,15 +426,14 @@
"",
"(function(z){return(z);})(myArray);"
],
"type": "waypoint",
"challengeType": 1
},
{
"id":"cf1111c1c11feddfaeb7bdef",
"name":"Nesting Arrays",
"dashedName":"waypoint-nesting-arrays",
"title": "Nest one Array within Another Array",
"difficulty":"9.98161",
"description":[
"",
"We are also able to create arrays within arrays. This technique is called <code>nesting</code>.",
"Let's now go create a nested array called <code>myArray</code>"
],
@ -462,15 +446,14 @@
"",
"if(typeof(myArray) !== 'undefined'){(function(){return(myArray);})();}"
],
"type": "waypoint",
"challengeType": 1
},
{
"id":"bg9997c9c79feddfaeb9bdef",
"name":"Accessing data with Indexes",
"dashedName":"waypoint-accessing-data-with-indexes",
"title": "Access Array Data with Indexes",
"difficulty":"9.9817",
"description":[
"",
"Once an array has been created we can access the data we have stored in them using indexes",
"Indexes are written in the same way as bracket notation that we covered earlier",
"Example:",
@ -494,16 +477,15 @@
"",
"if(typeof(myArray) != 'undefined' && typeof(data) != 'undefined'){(function(y,z){return('myArray = ' + JSON.stringify(y) + ', data = ' + JSON.stringify(z));})(myArray, data);}"
],
"type": "waypoint",
"challengeType": 1
},
{
"id":"cf1111c1c11feddfaeb8bdef",
"name":"Modifying Data With Indexes",
"dashedName":"waypoint-modifying-data-with-indexes",
"title": "Modify Array Data With Indexes",
"difficulty":"9.98171",
"description":[
"",
"We are able to modify the data store in an array be using indexes",
"We are able to modify the data stored in an array by using indexes",
"Example:",
"<code>",
"var ourArray = [1,2,3];",
@ -527,20 +509,19 @@
"",
"if(typeof(myArray) != 'undefined'){(function(){return(myArray);})();}"
],
"type": "waypoint",
"challengeType": 1
},
{
"id": "bg9994c9c69feddfaeb9bdef",
"name": "Manipulating Arrays With pop()",
"dashedName": "waypoint-manipulating-arrays-with-pop",
"title": "Manipulate Arrays With pop()",
"difficulty": "9.9818",
"description": [
"",
"When and array has been defined we still have the ability to make changes to it afterwards",
"One common way in which we can manipulate the data in an array is through <code> .pop() </code>",
"<code> .pop() </code> is used to \"pop\" a value from the end of an array. We can retrieve this value by preforming the pop in a variable declaration.",
"any type of variable can be \"popped\" from and array",
"Let's try <code> .pop() </code> now"
"When an array has been defined we still have the ability to make changes to it afterwards",
"One common way in which we can manipulate the data in an array is through <code>.pop() </code>",
"<code>.pop()</code>is used to \"pop\" a value from the end of an array. We can retrieve this value by performing the pop in a variable declaration.",
"Any type of variable can be \"popped\" from an array",
"Let's try <code>.pop()</code>now"
],
"tests": [
"assert((function(d){if(d[0] == 'John' && d[1] == 23 && d[2] == undefined){return(true);}else{return(false);}})(myArray), 'myArray should only have the first two values left([\"John\", 23])');",
@ -559,17 +540,16 @@
"",
"(function(y, z){return('myArray = ' + JSON.stringify(y) + ' & removed = ' + JSON.stringify(z));})(myArray, removed);"
],
"type": "waypoint",
"challengeType": 1
},
{
"id": "bg9995c9c69feddfaeb9bdef",
"name": "Manipulating Arrays With push()",
"dashedName": "waypoint-manipulating-arrays-with-push",
"title": "Manipulate Arrays With push()",
"difficulty": "9.9818",
"description": [
"",
"Now that we've learned how to <code> pop </code> things from the end of the array, we need to learn how to <code> push </code> stuff back to the end",
"Let's take the code we had last time and <code> push </code> this value to the end: <code> ['dog', 3] </code>"
"Now that we've learned how to <code>pop</code>things from the end of the array, we need to learn how to <code>push</code>stuff back to the end",
"Let's take the code we had last time and <code>push</code>this value to the end: <code>['dog', 3] </code>"
],
"tests": [
"assert((function(d){if(d[2] != undefined && d[0] == 'John' && d[1] == 23 && d[2][0] == 'dog' && d[2][1] == 3 && d[2].length == 2){return(true);}else{return(false);}})(myArray), 'myArray should only have the first two values left([\"John\", 23, [\"dog\", 3]])');"
@ -582,41 +562,39 @@
"",
"(function(z){return('myArray = ' + JSON.stringify(z));})(myArray);"
],
"type": "waypoint",
"challengeType": 1
},
{
"id": "bg9996c9c69feddfaeb9bdef",
"name": "Manipulating Arrays With shift()",
"dashedName": "waypoint-manipulating-arrays-with-shift",
"title": "Manipulate Arrays With shift()",
"difficulty": "9.9817",
"description": [
"",
"Another common way in which we can manipulate the data in an array is through <code> .shift() </code>",
"<code> .shift() </code> is used to \"shift\" a value from the start of an array. We can retrieve this value by preforming the shift in a variable declaration.",
"Let's try <code> .shift() </code> now"
"Another common way in which we can manipulate the data in an array is through <code>.shift() </code>",
"<code>.shift()</code>is used to \"shift\" a value from the start of an array. We can retrieve this value by performing the shift in a variable declaration.",
"Let's try <code>.shift()</code>now"
],
"tests": [
"assert((function(d){if(d[0] == 23 && d[1][0] == 'dog' && d[1][1] == 3 && d[2] == undefined){return(true);}else{return(false);}})(myArray), 'myArray should only have the first two values left([\"John\", 23])');",
"assert((function(d){if(d === 'John' && typeof(removed) === 'function'){return(true);}else{return(false);}})(removed), 'Removed should contain \"John\"');"
"assert((function(d){if(d === 'John' && typeof(removed) === 'string'){return(true);}else{return(false);}})(removed), 'Removed should contain \"John\"');"
],
"challengeSeed": [
"var myArray = ['John', 23, ['dog', 3]];",
"var removed = myArray;//This should be ['John'] and myArray should now be ['John', 23]",
"var removed = myArray;//This should be ['John'] and myArray should now be [23, ['dog', 3]]",
"",
"",
"(function(y, z){return('myArray = ' + JSON.stringify(y) + ' & removed = ' + JSON.stringify(z));})(myArray, removed);"
],
"type": "waypoint",
"challengeType": 1
},
{
"id": "bg9997c9c69feddfaeb9bdef",
"name": "Manipulating Arrays With unshift()",
"dashedName": "waypoint-manipulating-arrays-with-unshift",
"title": "Manipulate Arrays With unshift()",
"difficulty": "9.9818",
"description": [
"",
"Now that we've learned how to <code> shift </code> things from the start of the array, we need to learn how to <code> unshift </code> stuff back to the start",
"Let's take the code we had last time and <code> unshift </code> this value to the end: <code> 'Paul' </code>"
"Now that we've learned how to <code>shift</code>things from the start of the array, we need to learn how to <code>unshift</code>stuff back to the start",
"Let's take the code we had last time and <code>unshift</code>this value to the end: <code>'Paul' </code>"
],
"tests": [
"assert((function(d){if(d[0].toLowerCase() == 'paul' && d[1] == 23 && d[2][0] != undefined && d[2][0] == 'dog' && d[2][1] != undefined && d[2][1] == 3){return(true);}else{return(false);}})(myArray), 'myArray should now have [\"Paul\", 23, [\"dog\", 3]])');"
@ -629,23 +607,22 @@
"",
"(function(y, z){return('myArray = ' + JSON.stringify(y));})(myArray);"
],
"type": "waypoint",
"challengeType": 1
},
{
"id":"bg9997c9c89feddfaeb9bdef",
"name":"Make it functional",
"dashedName":"waypoint-make-it-functional",
"title": "Write Reusable JavaScript with Functions",
"difficulty":"9.9819",
"description":[
"",
"In JavaScript we can divide up our code into separate and reusable parts called functions",
"here's and example of a function",
"Here's an example of a function",
"<code>",
"function functionName (a, b){",
" return(a + b);",
"}",
"</code>",
"our function can be called like this",
"Our function can be called like this",
"<code>functionName();</code>",
"Let's try creating and calling a function now called <code>myFunction</code>"
],
@ -667,17 +644,16 @@
"(function(){return(f);})();",
"}"
],
"type": "waypoint",
"challengeType": 1
},
{
"id":"bg9998c9c99feddfaeb9bdef",
"name":"I Object!",
"dashedName":"waypoint-i-object",
"title": "Build JavaScript Objects",
"difficulty":"9.9822",
"description":[
"",
"A very important data type in javascript is the <code> Object </code>",
"<code> Objects </code> a similar to <code> arrays </code> except that instead of using indexes to access and modify their data, Objects have what are called <code> properties </code>",
"A very important data type in javascript is the <code>Object</code>",
"<code>Objects</code>are similar to <code>arrays</code> except that instead of using indexes to access and modify their data, Objects have what are called <code>properties </code>",
"Here's a sample Object",
"<code>",
"var cat = {",
@ -688,8 +664,7 @@
"};",
"</code>",
"Objects are useful for storing data in a structured way or in a way that represents a real world object like a cat.",
"Let's try to make a Object that represents a dog called myDog!"
"Let's try to make an Object that represents a dog called myDog!"
],
"tests":[
"assert((function(z){if(z.hasOwnProperty('name') && z.name != undefined && typeof(z.name) == 'string'){return(true);}else{return(false);}})(myDog), 'myDog should contain the property name and it should be a string');",
@ -714,20 +689,19 @@
"",
"(function(z){return(z);})(myDog);"
],
"type": "waypoint",
"challengeType": 1
},
{
"id":"bg9999c9c99feddfaeb9bdef",
"name":"Manipulating Objects",
"dashedName":"waypoint-manipulating-objects",
"title": "Manipulate JavaScript Objects",
"difficulty":"9.9823",
"description":[
"",
"Now that we have an objects we need to know how to add and remove properties from it",
"We add properties to objects like this",
"<code>myObject['myProperty'] = \"myValue\";</code>",
"<code>myObject.myProperty = \"myValue\";</code>",
"They can also be deleted like this",
"<code>delete(myObject[\"myProperty\"]);</code>",
"<code>delete(myObject.myProperty);</code>",
"Let's add the property bark",
""
],
@ -752,7 +726,7 @@
" \"friends\": []",
"};",
"",
"//Let's add the property age to myDog",
"//Let's add the property bark to myDog",
"",
"",
"//Now delete the property tails",
@ -760,15 +734,14 @@
"",
"(function(z){return(z);})(myDog);"
],
"type": "waypoint",
"challengeType": 1
},
{
"id":"cf1111c1c11feddfaeb5bdef",
"name":"Looping with for",
"dashedName":"waypoint-looping-with-for",
"title": "Iterate with JavaScript For Loops",
"difficulty":"9.9824",
"description":[
"",
"Loops are a critical part of any program! The next few challenges",
"first we will be taking a look at the for loop",
"<code>",
@ -790,15 +763,14 @@
"",
""
],
"type": "waypoint",
"challengeType": 1
},
{
"id":"cf1111c1c11feddfaeb1bdef",
"name":"Looping with while",
"dashedName":"waypoint-looping-with-while",
"title": "Iterate with JavaScript While Loops",
"difficulty":"9.9825",
"description":[
"",
"Loops are a critical part of any program! The next few challenges",
"first we will be taking a look at the while loop",
"<code>",
@ -821,15 +793,14 @@
"",
""
],
"type": "waypoint",
"challengeType": 1
},
{
"id":"cf1111c1c11feddfaeb2bdef",
"name":"Looping with do while",
"dashedName":"waypoint-looping-with-do-while",
"title": "Iterate with JavaScript Do-While Loops",
"difficulty":"9.9826",
"description":[
"",
"Let's now take a look at the do - while loop",
"<code>",
"var ourArray = [];",
@ -852,17 +823,16 @@
"",
""
],
"type": "waypoint",
"challengeType": 1
},
{
"id":"cf1111c1c11feddfaeb9bdef",
"name":"Random Numbers",
"dashedName":"waypoint-random-numbers",
"title": "Generate Random Fractions with JavaScript",
"difficulty":"9.9827",
"description":[
"",
"Random numbers are a very useful for creating random behaviours and games",
"Javascript has a <code>Math.random()</code> method that can generate a random decimal number",
"Random numbers are very useful for creating random behaviours and games",
"JavaScript has a <code>Math.random()</code> method that can generate a random decimal number",
"Let's have a go of <code>Math.random()</code> now be getting <code>myFunction</code> to return a random number"
],
"tests":[
@ -879,15 +849,14 @@
"",
"(function(){return(myFunction());})();"
],
"type": "waypoint",
"challengeType": 1
},
{
"id":"cf1111c1c12feddfaeb1bdef",
"name":"Random Whole Numbers",
"dashedName":"waypoint-random-whole-numbers",
"title": "Generate Random Whole Numbers with JavaScript",
"difficulty":"9.9828",
"description":[
"",
"While it's great that we can create random decimal numbers it's a lot more useful to generate a random whole number",
"To achieve this we can multiply the random number by ten and use the <code>Math.floor()</code> to convert the decimal number to a whole number",
"This technique gives us a whole number between zero and nine",
@ -909,15 +878,14 @@
"",
"(function(){return(myFunction());})();"
],
"type": "waypoint",
"challengeType": 1
},
{
"id":"cf1111c1c12feddfaeb2bdef",
"name":"Random Whole Numbers In a Range",
"dashedName":"waypoint-random-whole-numbers-in-a-range",
"title": "Generate Random Whole Numbers within a Range",
"difficulty":"9.9829",
"description":[
"",
"We can use a certain mathematical expression to get a random number between between twp numbers.",
"<code>Math.floor(Math.random() * (max - min + 1)) + min</code>",
"By using this we can control the output of the random number.",
@ -938,15 +906,14 @@
"",
"(function(){return(myFunction());})();"
],
"type": "waypoint",
"challengeType": 1
},
{
"id":"cf1111c1c12feddfaeb3bdef",
"name":"If Else Statements",
"dashedName":"waypoint-if-else-statements",
"title": "Use Conditional Logic with If-Else Statements",
"difficulty":"9.983",
"description":[
"",
"We can use if statements in JavaScript to only execute code if a certain condition is met",
"if statements require some sort of boolean condition evaluate",
"Example:",
@ -973,15 +940,14 @@
"",
"(function(){return(myFunction());})();"
],
"type": "waypoint",
"challengeType": 1
},
{
"id":"cf1111c1c12feddfaeb6bdef",
"name":"An Intro To RegEx",
"dashedName":"waypoint-an-intro-to-regex",
"title": "Sift through Text with Regular Expressions",
"difficulty":"9.984",
"description":[
"",
"RegEx is a powerful tool we can use to find certain words or patterns in strings",
"RegEx can look difficult at first but there's not much to getting it working",
"If we wanted to find the number of times the word \"the\" occured in the string \"The dog chased the cat\" We could use the following RegEx:",
@ -1010,24 +976,22 @@
" return(testString.match(expression).length);",
"})();(function(){return(test);})();"
],
"type": "waypoint",
"challengeType": 1
},
{
"id":"cf1111c1c12feddfaeb7bdef",
"name":"Finding Numbers",
"dashedName":"waypoint-finding-numbers",
"title": "Find Numbers with Regular Expressions",
"difficulty":"9.985",
"description":[
"",
"We can use special selectors in RegEx to select a particular type of value",
"One such selector is the digit selector <code>\\d</code> which is used to grab the numbers in a string",
"It is used like this:",
"<code>/\\d+/g</code>",
""
"<code>/\\d+/g</code>"
],
"tests":[
"assert(test === 2, 'Your RegEx should have found two numbers in the testString');",
"assert(editorValue.match(/\\/\\\\d\\+\\//gi), 'You should be using the following expression /\\d+/gi to find the numbers in the testString');"
"assert(editor.getValue().match(/\\/\\\\d\\+\\//gi), 'You should be using the following expression /\\d+/gi to find the numbers in the testString');"
],
"challengeSeed":[
"var test = (function(){",
@ -1042,23 +1006,21 @@
" return(testString.match(expression).length);",
"})();(function(){return(test);})();"
],
"type": "waypoint",
"challengeType": 1
},
{
"id":"cf1111c1c12feddfaeb8bdef",
"name":"Finding WhiteSpace",
"dashedName":"waypoint-finding-whitespace",
"title": "Find White Space with Regular Expressions",
"difficulty":"9.986",
"description":[
"",
"We can also use selectors like <code>\\s</code> to find spaces in a string",
"It is used like this:",
"<code>/\\s+/g</code>",
""
"<code>/\\s+/g</code>"
],
"tests":[
"assert(test === 7, 'Your RegEx should have found seven spaces in the testString');",
"assert(editorValue.match(/\\/\\\\s\\+\\//gi), 'You should be using the following expression /\\s+/gi to find the spaces in the testString');"
"assert(editor.getValue().match(/\\/\\\\s\\+\\//gi), 'You should be using the following expression /\\s+/gi to find the spaces in the testString');"
],
"challengeSeed":[
"var test = (function(){",
@ -1073,21 +1035,20 @@
" return(testString.match(expression).length);",
"})();(function(){return(test);})();"
],
"type": "waypoint",
"challengeType": 1
},
{
"id":"cf1111c1c13feddfaeb3bdef",
"name":"Inverting a Match",
"dashedName":"waypoint-inverting-a-match",
"title": "Invert Regular Expression Matches with JavaScript",
"difficulty":"9.987",
"description":[
"",
"Use <code>/\\S+/gi;</code> to match everything that ins't a space in the string",
"Use <code>/\\S/gi;</code> to match everything that isn't a space in the string",
"You can invert any match by using the uppercase version of the selector <code>\\s</code> versus <code>\\S</code> for example"
],
"tests":[
"assert(test === 36, 'Your RegEx should have found seven spaces in the testString');",
"assert(editorValue.match(/\\/\\\\S\\/gi/gi), 'You should be using the following expression /\\S+/gi to find the spaces in the testString');"
"assert(editor.getValue().match(/\\/\\\\S\\/gi/gi), 'You should be using the following expression /\\S+/gi to find the spaces in the testString');"
],
"challengeSeed":[
"var test = (function(){",
@ -1102,20 +1063,19 @@
" return(testString.match(expression).length);",
"})();(function(){return(test);})();"
],
"type": "waypoint",
"challengeType":1
},
{
"id":"cf1111c1c12feddfaeb9bdef",
"name":"Creating a slots machine",
"dashedName":"creating-a-slots-machine",
"title": "Create a JavaScript Slot Machine",
"difficulty":"9.988",
"description":[
"",
"We are now going to try and combine some of the stuff we've just learnt abd create the logic for a slot machine game",
"For this we will need to generate three random numbers between <code>1</code> and <code>5</code> to represent the possible values of each individual slot",
"Store the three random numbers in <code>slotOne</code>, <code>slotTwo</code> and <code>slotThree</code>",
"Generate the random numbers by using the system we used earlier in /challenges/random-whole-numbers-in-a-range",
"<code> Math.floor(Math.random() * (5 - 1 + 1)) + 1; </code>"
"<code>Math.floor(Math.random() * (5 - 1 + 1)) + 1; </code>"
],
"tests":[
"assert(typeof(runSlots($('.slot'))[0]) == 'number', 'SlotOne should be a random number');",
@ -1257,22 +1217,21 @@
" }",
"</style>"
],
"type": "waypoint",
"challengeType": 0
},
{
"id":"cf1111c1c13feddfaeb1bdef",
"name":"Setting Up The Slot Machine Slots",
"dashedName":"setting-up-the-slot-machine-slots",
"title": "Add your JavaScript Slot Machine Slots",
"difficulty":"9.989",
"description":[
"",
"Now that we have our random numbers we need to go and check for when they are all the same that means we should count it as a win",
"Different numbers will have different values so we need to return the matched number or null",
"If we get a match we should change the value of win to the number that we have three of or leave it as null",
"Let's create an if statement with multiple conditions to check that all the numbers are equal",
"<code>if(slotOne !== slotTwo || slotTwo !== slotThree){",
" return(null);",
"}</code>"
"<code>if(slotOne !== slotTwo || slotTwo !== slotThree){</code>",
"<code> return(null);</code>",
"<code>}</code>"
],
"tests":[
"assert((function(){var data = runSlots();if(data == null){return(true)}else{if(data[0] == data[1] && data[1] == data[2]){return(true);}else{return(false);}}})(), 'If all three of our random numbers are the same we should return that number. Otherwise we should return null');"
@ -1417,15 +1376,14 @@
" }",
"</style>"
],
"type": "waypoint",
"challengeType": 0
},
{
"id":"cf1111c1c13feddfaeb2bdef",
"name":"Giving The Slot Machine Life",
"dashedName":"giving-the-slot-machine-life",
"title": "Bring your JavaScript Slot Machine to Life",
"difficulty":"9.990",
"description":[
"",
"Now we can detect a win let's get the slot machine to look like it works",
"We're going to use the jQuery selector <code>$('.slot')</code> to select all of the slots",
"Once they are all selected we can use bracket notation to access each individual one like this",
@ -1585,6 +1543,7 @@
" }",
"</style>"
],
"type": "waypoint",
"challengeType": 0
}
]

View File

@ -1,11 +1,10 @@
{
"name": "Basic Front End Development Projects",
"order": 0.006,
"order": 0.008,
"challenges": [
{
"id": "bd7158d8c442eddfbeb5bd1f",
"name": "Waypoint: Get Set for Ziplines",
"dashedName": "waypoint-get-set-for-ziplines",
"title": "Get Set for Ziplines",
"difficulty": 1.00,
"challengeSeed": ["125658022"],
"description": [
@ -17,13 +16,14 @@
"Go to <a href='http://codepen.io' target='_blank'>http://codepen.io</a> and create an account.",
"Click your user image in the top right corner, then click the \"New pen\" button that drops down.",
"Drag the windows around and press the buttons in the lower-right hand corner to change the orientation to suit your preference.",
"Click the gear next to CSS. Then in the \"External CSS File or Another Pen\" text field, type \"bootstrap\" and scroll down until you see the latest version of Bootstrap. Click it.",
"Click the gear next to CSS. Click the \"Quick-add...\" select box and choose Bootstrap.",
"Verify that bootstrap is active by adding the following code to your HTML: <code>&lt;h1 class='text-primary'&gt;Hello CodePen!&lt;/h1&gt;</code>. The text's color should be Bootstrap blue.",
"Click the gear next to JavaScript. Click the \"Latest version of...\" select box and choose jQuery.",
"Click the gear next to JavaScript. Click the \"Quick-add...\" select box and choose jQuery.",
"Now add the following code to your JavaScript: <code>$(document).ready(function() { $('.text-primary').text('Hi CodePen!') });</code>. Click the \"Save\" button at the top. Your \"Hello CodePen!\" should change to \"Hi CodePen!\". This means that jQuery is working.",
"You can use this CodePen that you've just created as a starting point for your Ziplines. Just click the \"fork\" button at the top of your CodePen and it will create a duplicate CodePen.",
"Now you're ready for your first Zipline. Click the \"I've completed this challenge\" button."
],
"type": "waypoint",
"challengeType": 2,
"tests": [],
"nameCn": "",
@ -39,8 +39,7 @@
},
{
"id": "bd7158d8c242eddfaeb5bd13",
"name": "Zipline: Build a Personal Portfolio Webpage",
"dashedName": "zipline-build-a-personal-portfolio-webpage",
"title": "Build a Personal Portfolio Webpage",
"difficulty": 1.01,
"challengeSeed": ["133315782"],
"description": [
@ -60,6 +59,7 @@
"When you are finished, click the \"I've completed this challenge\" button and include a link to your CodePen. If you pair programmed, you should also include the Free Code Camp username of your pair.",
"If you'd like immediate feedback on your project, click this button and paste in a link to your CodePen project. Otherwise, we'll review it before you start your nonprofit projects.<br><br><a class='btn btn-primary btn-block' href='https://twitter.com/intent/tweet?text=Check%20out%20the%20project%20I%20just%20built%20with%20%40FreeCodeCamp:%20%0A%20%23LearnToCode%20%23JavaScript' target='_blank'>Click here then add your link to your tweet's text</a>"
],
"type": "zipline",
"challengeType": 3,
"tests": [],
"nameCn": "",
@ -75,8 +75,7 @@
},
{
"id": "bd7158d8c442eddfaeb5bd13",
"name": "Zipline: Build a Random Quote Machine",
"dashedName": "zipline-build-a-random-quote-machine",
"title": "Build a Random Quote Machine",
"difficulty": 1.02,
"challengeSeed": ["126415122"],
"description": [
@ -92,6 +91,7 @@
"When you are finished, click the \"I've completed this challenge\" button and include a link to your CodePen. If you pair programmed, you should also include the Free Code Camp username of your pair.",
"If you'd like immediate feedback on your project, click this button and paste in a link to your CodePen project. Otherwise, we'll review it before you start your nonprofit projects.<br><br><a class='btn btn-primary btn-block' href='https://twitter.com/intent/tweet?text=Check%20out%20the%20project%20I%20just%20built%20with%20%40FreeCodeCamp:%20%0A%20%23LearnToCode%20%23JavaScript' target='_blank'>Click here then add your link to your tweet's text</a>"
],
"type": "zipline",
"challengeType": 3,
"tests": [],
"nameCn": "",
@ -107,8 +107,7 @@
},
{
"id": "bd7158d8c442eddfaeb5bd10",
"name": "Zipline: Show the Local Weather",
"dashedName": "zipline-show-the-local-weather",
"title": "Show the Local Weather",
"difficulty": 1.03,
"challengeSeed": ["126415127"],
"description": [
@ -125,6 +124,7 @@
"When you are finished, click the \"I've completed this challenge\" button and include a link to your CodePen. If you pair programmed, you should also include the Free Code Camp username of your pair.",
"If you'd like immediate feedback on your project, click this button and paste in a link to your CodePen project. Otherwise, we'll review it before you start your nonprofit projects.<br><br><a class='btn btn-primary btn-block' href='https://twitter.com/intent/tweet?text=Check%20out%20the%20project%20I%20just%20built%20with%20%40FreeCodeCamp:%20%0A%20%23LearnToCode%20%23JavaScript' target='_blank'>Click here then add your link to your tweet's text</a>"
],
"type": "zipline",
"challengeType": 3,
"tests": [],
"nameCn": "",
@ -140,8 +140,7 @@
},
{
"id": "bd7158d8c442eddfaeb5bd0f",
"name": "Zipline: Build a Pomodoro Clock",
"dashedName": "zipline-build-a-pomodoro-clock",
"title": "Build a Pomodoro Clock",
"difficulty": 1.04,
"challengeSeed": ["126411567"],
"description": [
@ -157,6 +156,7 @@
"When you are finished, click the \"I've completed this challenge\" button and include a link to your CodePen. If you pair programmed, you should also include the Free Code Camp username of your pair.",
"If you'd like immediate feedback on your project, click this button and paste in a link to your CodePen project. Otherwise, we'll review it before you start your nonprofit projects.<br><br><a class='btn btn-primary btn-block' href='https://twitter.com/intent/tweet?text=Check%20out%20the%20project%20I%20just%20built%20with%20%40FreeCodeCamp:%20%0A%20%23LearnToCode%20%23JavaScript' target='_blank'>Click here then add your link to your tweet's text</a>"
],
"type": "zipline",
"challengeType": 3,
"tests": [],
"nameCn": "",
@ -172,8 +172,7 @@
},
{
"id": "bd7158d8c442eddfaeb5bd1f",
"name": "Zipline: Use the Twitch.tv JSON API",
"dashedName": "zipline-use-the-twitchtv-json-api",
"title": "Use the Twitch.tv JSON API",
"difficulty": 1.05,
"challengeSeed": ["126411564"],
"description": [
@ -193,6 +192,7 @@
"When you are finished, click the \"I've completed this challenge\" button and include a link to your CodePen. If you pair programmed, you should also include the Free Code Camp username of your pair.",
"If you'd like immediate feedback on your project, click this button and paste in a link to your CodePen project. Otherwise, we'll review it before you start your nonprofit projects.<br><br><a class='btn btn-primary btn-block' href='https://twitter.com/intent/tweet?text=Check%20out%20the%20project%20I%20just%20built%20with%20%40FreeCodeCamp:%20%0A%20%23LearnToCode%20%23JavaScript' target='_blank'>Click here then add your link to your tweet's text</a>"
],
"type": "zipline",
"challengeType": 3,
"tests": [],
"nameCn": "",

View File

@ -4,8 +4,7 @@
"challenges": [
{
"id": "bad87fee1348bd9acde08712",
"name": "Waypoint: Use Responsive Design with Bootstrap Fluid Containers",
"dashedName": "waypoint-use-responsive-design-with-bootstrap-fluid-containers",
"title": "Use Responsive Design with Bootstrap Fluid Containers",
"difficulty": 2.01,
"description": [
"Now let's go back to our Cat Photo App. This time, we'll style it using the popular Bootstrap responsive CSS framework.",
@ -15,7 +14,7 @@
"To get started, we should nest all of our HTML in a <code>div</code> element with the class \"container-fluid\"."
],
"tests": [
"assert($('div').hasClass('container-fluid'), 'Your <code>div</code> element should have the class \"row\"')",
"assert($('div').hasClass('container-fluid'), 'Your <code>div</code> element should have the class \"container-fluid\"')",
"assert(editor.match(/<\\/div>/g) && editor.match(/<div/g) && editor.match(/<\\/div>/g).length === editor.match(/<div/g).length, 'Make sure each of your <code>div</code> elements has a closing tag.')"
],
"challengeSeed": [
@ -74,6 +73,7 @@
" <button type='submit'>Submit</button>",
"</form>"
],
"type": "waypoint",
"challengeType": 0,
"nameCn": "",
"descriptionCn": [],
@ -88,8 +88,7 @@
},
{
"id": "bad87fee1348bd9acde08812",
"name": "Waypoint: Make Images Mobile Responsive",
"dashedName": "waypoint-make-images-mobile-responsive",
"title": "Make Images Mobile Responsive",
"difficulty": 2.02,
"description": [
"First, Add a new image with the <code>src</code> attribute of \"http://bit.ly/fcc-running-cats\".",
@ -159,6 +158,7 @@
" </form>",
"</div>"
],
"type": "waypoint",
"challengeType": 0,
"nameCn": "",
"descriptionCn": [],
@ -173,8 +173,7 @@
},
{
"id": "bad87fee1348bd8acde08812",
"name": "Waypoint: Center Text with Bootstrap",
"dashedName": "waypoint-center-text-with-bootstrap",
"title": "Center Text with Bootstrap",
"difficulty": 2.03,
"description": [
"Now that we're using Bootstrap, we can center our heading elements to make them look better. All we need to do is add the class <code>text-center</code> to our <code>h1</code> and <code>h2</code> elements.",
@ -242,6 +241,7 @@
" </form>",
"</div>"
],
"type": "waypoint",
"challengeType": 0,
"nameCn": "",
"descriptionCn": [],
@ -256,8 +256,7 @@
},
{
"id": "bad87fee1348cd8acdf08812",
"name": "Waypoint: Create a Bootstrap Button",
"dashedName": "waypoint-create-a-bootstrap-button",
"title": "Create a Bootstrap Button",
"difficulty": 2.04,
"description": [
"Bootstrap has its own styles for <code>button</code> elements, which look much better than the plain HTML ones.",
@ -327,6 +326,7 @@
" </form>",
"</div>"
],
"type": "waypoint",
"challengeType": 0,
"nameCn": "",
"descriptionCn": [],
@ -341,8 +341,7 @@
},
{
"id": "bad87fee1348cd8acef08812",
"name": "Waypoint: Create a Block Element Bootstrap Button",
"dashedName": "waypoint-create-a-block-element-bootstrap-button",
"title": "Create a Block Element Bootstrap Button",
"difficulty": 2.05,
"description": [
"Normally, your <code>button</code> elements are only as wide as the text that they contain. By making them block elements, your button will stretch to fill your page's entire horizontal space.",
@ -416,6 +415,7 @@
" </form>",
"</div>"
],
"type": "waypoint",
"challengeType": 0,
"nameCn": "",
"descriptionCn": [],
@ -430,8 +430,7 @@
},
{
"id": "bad87fee1348cd8acef08811",
"name": "Waypoint: Taste the Bootstrap Button Color Rainbow",
"dashedName": "waypoint-taste-the-bootstrap-button-color-rainbow",
"title": "Taste the Bootstrap Button Color Rainbow",
"difficulty": 2.06,
"description": [
"The \"btn-primary\" class is the main color you'll use in your app. It is useful for highlighting actions you want your user to take.",
@ -503,6 +502,7 @@
" </form>",
"</div>"
],
"type": "waypoint",
"challengeType": 0,
"nameCn": "",
"descriptionCn": [],
@ -517,8 +517,7 @@
},
{
"id": "bad87fee1348cd8acef08813",
"name": "Waypoint: Call out Optional Actions with Button Info",
"dashedName": "waypoint-call-out-optional-actions-with-button-info",
"title": "Call out Optional Actions with Button Info",
"difficulty": 2.07,
"description": [
"Bootstrap comes with several pre-defined colors for buttons. The \"btn-info\" class is used to call attention to optional actions that the user can take.",
@ -591,6 +590,7 @@
" </form>",
"</div>"
],
"type": "waypoint",
"challengeType": 0,
"nameCn": "",
"descriptionCn": [],
@ -605,8 +605,7 @@
},
{
"id": "bad87fee1348ce8acef08814",
"name": "Waypoint: Warn your Users of a Dangerous Action",
"dashedName": "waypoint-warn-your-users-of-a-dangerous-action",
"title": "Warn your Users of a Dangerous Action",
"difficulty": 2.08,
"description": [
"Bootstrap comes with several pre-defined colors for buttons. The \"btn-danger\" class is the button color you'll use to notify users that the button performs a destructive action, such as deleting a cat photo.",
@ -680,6 +679,7 @@
" </form>",
"</div>"
],
"type": "waypoint",
"challengeType": 0,
"nameCn": "",
"descriptionCn": [],
@ -694,8 +694,7 @@
},
{
"id": "bad88fee1348ce8acef08815",
"name": "Waypoint: Use the Bootstrap Grid to Put Elements Side By Side",
"dashedName": "waypoint-use-the-bootstrap-grid-to-put-elements-side-by-side",
"title": "Use the Bootstrap Grid to Put Elements Side By Side",
"difficulty": 2.09,
"description": [
"Bootstrap uses a responsive grid system, which makes it easy to put elements into rows and specify each element's relative width. Most of Bootstrap's classes can be applied to a <code>div</code> element.",
@ -774,6 +773,7 @@
" </form>",
"</div>"
],
"type": "waypoint",
"challengeType": 0,
"nameCn": "",
"descriptionCn": [],
@ -787,9 +787,8 @@
"descriptionPt": []
},
{
"id": "bad87fee1348bd9aedf08745",
"name": "Waypoint: Ditch Custom CSS for Bootstrap",
"dashedName": "waypoint-ditch-custom-css-for-bootstrap",
"id": "bad87fee1348bd9aedf08845",
"title": "Ditch Custom CSS for Bootstrap",
"difficulty": 2.10,
"description": [
"We can clean up our code and make our Cat Photo App look more conventional by using Bootstrap's built-in styles instead of the custom styles we created earlier.",
@ -873,6 +872,7 @@
" </form>",
"</div>"
],
"type": "waypoint",
"challengeType": 0,
"nameCn": "",
"descriptionCn": [],
@ -988,8 +988,7 @@
},
{
"id": "bad87fee1348bd9aede08845",
"name": "Waypoint: Create a Custom Heading",
"dashedName": "waypoint-create-a-custom-heading",
"title": "Create a Custom Heading",
"difficulty": 2.11,
"description": [
"We will make a simple heading for our Cat Photo App by putting them in the same row.",
@ -1063,6 +1062,7 @@
" </form>",
"</div>"
],
"type": "waypoint",
"challengeType": 0,
"nameCn": "",
"descriptionCn": [],
@ -1077,8 +1077,7 @@
},
{
"id": "bad87fee1348bd9aedd08845",
"name": "Waypoint: Add Font Awesome Icons to our Buttons",
"dashedName": "waypoint-add-font-awesome-icons-to-our-buttons",
"title": "Add Font Awesome Icons to our Buttons",
"difficulty": 2.12,
"description": [
"Font Awesome is a convenient library of icons. These icons are vector graphics, stored in the \".svg\" file format. These icons are treated just like fonts. You can specify their size using pixels, and they will assume the font size of their parent HTML elements.",
@ -1148,6 +1147,7 @@
" </form>",
"</div>"
],
"type": "waypoint",
"challengeType": 0,
"nameCn": "",
"descriptionCn": [],
@ -1162,8 +1162,7 @@
},
{
"id": "bad87fee1348bd9aedc08845",
"name": "Waypoint: Add Font Awesome Icons to all of our Buttons",
"dashedName": "waypoint-add-font-awesome-icons-to-all-of-our-Buttons",
"title": "Add Font Awesome Icons to all of our Buttons",
"difficulty": 2.13,
"description": [
"Font Awesome is a convenient library of icons. These icons are vector graphics, stored in the \".svg\" file format. These icons are treated just like fonts. You can specify their size using pixels, and they will assume the font size of their parent HTML elements.",
@ -1233,6 +1232,7 @@
" </form>",
"</div>"
],
"type": "waypoint",
"challengeType": 0,
"nameCn": "",
"descriptionCn": [],
@ -1247,8 +1247,7 @@
},
{
"id": "bad87fee1348bd9aedb08845",
"name": "Waypoint: Responsively Style Radio Buttons",
"dashedName": "waypoint-responsively-style-radio-buttons",
"title": "Responsively Style Radio Buttons",
"difficulty": 2.14,
"description": [
"You can use Bootstrap's \"col-xs-*\" classes on <code>form</code> elements, too! This way, our radio buttons will be evenly spread out across the page, regardless of how wide the screen resolution is.",
@ -1318,6 +1317,7 @@
" </form>",
"</div>"
],
"type": "waypoint",
"challengeType": 0,
"nameCn": "",
"descriptionCn": [],
@ -1332,8 +1332,7 @@
},
{
"id": "bad87fee1348bd9aeda08845",
"name": "Waypoint: Responsively Style Checkboxes",
"dashedName": "waypoint-responsively-style-checkboxes",
"title": "Responsively Style Checkboxes",
"difficulty": 2.15,
"description": [
"You can use Bootstrap's \"col-xs-*\" classes on <code>form</code> elements, too! This way, our checkboxes will be evenly spread out across the page, regardless of how wide the screen resolution is.",
@ -1410,6 +1409,7 @@
" </form>",
"</div>"
],
"type": "waypoint",
"challengeType": 0,
"nameCn": "",
"descriptionCn": [],
@ -1424,8 +1424,7 @@
},
{
"id": "bad87fee1348bd9aed908845",
"name": "Waypoint: Style Text Inputs as Form Controls",
"dashedName": "waypoint-style-text-inputs-as-form-controls",
"title": "Style Text Inputs as Form Controls",
"difficulty": 2.16,
"description": [
"You can add the \"fa-paper-plane\" Font Awesome icon by adding <code>&#60;i class=\"fa fa-paper-plane\"&#62;&#60;/i&#62;</code> within your submit <code>button</code> element.",
@ -1511,6 +1510,7 @@
" </form>",
"</div>"
],
"type": "waypoint",
"challengeType": 0,
"nameCn": "",
"descriptionCn": [],
@ -1525,8 +1525,7 @@
},
{
"id": "bad87fee1348bd9aec908845",
"name": "Waypoint: Line up Form Elements Responsively with Bootstrap",
"dashedName": "waypoint-line-up-form-elements-responsively-with-bootstrap",
"title": "Line up Form Elements Responsively with Bootstrap",
"difficulty": 2.17,
"description": [
"Now let's get your form <code>input</code> and your submission <code>button</code> on the same line. We'll do this the same way we have previously: by using a <code>div</code> element with the class \"row\", and other <code>div</code> elements within it using the \"col-xs-*\" class.",
@ -1534,9 +1533,9 @@
"This is the last challenge we'll do for our Cat Photo App for now. We hope you've enjoyed learning Font Awesome, Bootstrap, and responsive design!"
],
"tests": [
"assert($('div.row:has(input[type=\\'text\\'])').length > 0 && $('div.row:has(button[type=\\'submit\\'])').length > 0, 'Nest your form submission button and text area in a div with class \"row\".')",
"assert($('div.row:has(input[type=\\'text\\'])').length > 0 && $('div.row:has(button[type=\\'submit\\'])').length > 0, 'Nest your form submission button and text input in a div with class \"row\".')",
"assert($('div.col-xs-5:has(button[type=\\'submit\\'])').length > 0, 'Nest your form submission button in a div with the class \"col-xs-5\".')",
"assert($('div.col-xs-7:has(input[type=\\'text\\'])').length > 0, 'Nest your form text area in a div with the class \"col-xs-7\".')",
"assert($('div.col-xs-7:has(input[type=\\'text\\'])').length > 0, 'Nest your form text input in a div with the class \"col-xs-7\".')",
"assert(editor.match(/<\\/div>/g) && editor.match(/<div/g) && editor.match(/<\\/div>/g).length === editor.match(/<div/g).length, 'Make sure each of your <code>div</code> elements has a closing tag.')"
],
"challengeSeed": [
@ -1613,6 +1612,7 @@
" </form>",
"</div>"
],
"type": "waypoint",
"challengeType": 0,
"nameCn": "",
"descriptionCn": [],
@ -1627,14 +1627,13 @@
},
{
"id": "bad87fee1348bd9aec908846",
"name": "Waypoint: Create a Bootstrap Headline",
"dashedName": "waypoint-create-a-bootstrap-headline",
"title": "Create a Bootstrap Headline",
"difficulty": 2.18,
"description": [
"Now let's build something from scratch to practice our HTML, CSS and Bootstrap skills.",
"We'll build a jQuery playground, which we'll soon put to use in our jQuery challenges.",
"To start with, create an <code>h3</code> element, with the text \"jQuery Playground\".",
"Color your <code>h3</code> element with the \"text-primary\" Bootstrap class, and center it with the \"text-center\" bootstrap class."
"Color your <code>h3</code> element with the \"text-primary\" Bootstrap class, and center it with the \"text-center\" Bootstrap class."
],
"tests": [
"assert($('h3') && $('h3').length > 0, 'Add a <code>h3</code> element to your page.')",
@ -1648,6 +1647,7 @@
"",
""
],
"type": "waypoint",
"challengeType": 0,
"nameCn": "",
"descriptionCn": [],
@ -1662,8 +1662,7 @@
},
{
"id": "bad87fee1348bd9aec908746",
"name": "Waypoint: House our page within a Bootstrap Container Fluid Div",
"dashedName": "waypoint-house-our-page-within-a-bootstrap-container-fluid-div",
"title": "House our page within a Bootstrap Container Fluid Div",
"difficulty": 2.18,
"description": [
"Now let's make sure all the content on your page is mobile-responsive.",
@ -1678,6 +1677,7 @@
"",
""
],
"type": "waypoint",
"challengeType": 0,
"nameCn": "",
"descriptionCn": [],
@ -1692,8 +1692,7 @@
},
{
"id": "bad87fee1348bd9bec908846",
"name": "Waypoint: Create a Bootstrap Row",
"dashedName": "waypoint-create-a-bootstrap-row",
"title": "Create a Bootstrap Row",
"difficulty": 2.19,
"description": [
"Now we'll create a Bootstrap row for our inline elements.",
@ -1711,6 +1710,7 @@
"",
""
],
"type": "waypoint",
"challengeType": 0,
"nameCn": "",
"descriptionCn": [],
@ -1725,8 +1725,7 @@
},
{
"id": "bad87fee1348bd9aec908847",
"name": "Waypoint: Split your Bootstrap Row",
"dashedName": "waypoint-split-your-bootstrap-row",
"title": "Split your Bootstrap Row",
"difficulty": 2.20,
"description": [
"Now that we have a Bootstrap Row, let's split it into two columns to house our elements.",
@ -1743,6 +1742,7 @@
" </div>",
"</div>"
],
"type": "waypoint",
"challengeType": 0,
"nameCn": "",
"descriptionCn": [],
@ -1757,8 +1757,7 @@
},
{
"id": "bad87fee1348bd9aec908848",
"name": "Waypoint: Create Bootstrap Wells",
"dashedName": "waypoint-create-bootstrap-wells",
"title": "Create Bootstrap Wells",
"difficulty": 2.21,
"description": [
"Bootstrap has a class called \"well\" that can create a visual sense of depth for your columns.",
@ -1781,6 +1780,7 @@
" </div>",
"</div>"
],
"type": "waypoint",
"challengeType": 0,
"nameCn": "",
"descriptionCn": [],
@ -1795,8 +1795,7 @@
},
{
"id": "bad87fee1348bd9aec908849",
"name": "Waypoint: Add Elements within your Bootstrap Wells",
"dashedName": "waypoint-add-elements-within-your-bootstrap-wells",
"title": "Add Elements within your Bootstrap Wells",
"difficulty": 2.22,
"description": [
"Now we're several <code>div</code> elements deep on each column of our row. This is as deep as we'll need to go. Now we can add our <code>button</code> elements.",
@ -1821,6 +1820,7 @@
" </div>",
"</div>"
],
"type": "waypoint",
"challengeType": 0,
"nameCn": "",
"descriptionCn": [],
@ -1835,8 +1835,7 @@
},
{
"id": "bad87fee1348bd9aec908850",
"name": "Waypoint: Apply the Default Bootstrap Button Style",
"dashedName": "waypoint-apply-the-default-bootstrap-button-style",
"title": "Apply the Default Bootstrap Button Style",
"difficulty": 2.23,
"description": [
"Bootstrap has another button class called \"btn-default\"",
@ -1867,6 +1866,7 @@
" </div>",
"</div>"
],
"type": "waypoint",
"challengeType": 0,
"nameCn": "",
"descriptionCn": [],
@ -1881,8 +1881,7 @@
},
{
"id": "bad87fee1348bd9aec908852",
"name": "Waypoint: Create a Class to Target with jQuery Selectors",
"dashedName": "waypoint-create-a-class-to-target-with-jquery-selectors",
"title": "Create a Class to Target with jQuery Selectors",
"difficulty": 2.24,
"description": [
"Not every class needs to have corresponding CSS. Sometimes we create classes just for the purpose of selecting these elements more easily using jQuery.",
@ -1912,6 +1911,7 @@
" </div>",
"</div>"
],
"type": "waypoint",
"challengeType": 0,
"nameCn": "",
"descriptionCn": [],
@ -1926,8 +1926,7 @@
},
{
"id": "bad87fee1348bd9aec908853",
"name": "Waypoint: Add ID Attributes to Bootstrap Elements",
"dashedName": "waypoint-add-id-attributes-to-bootstrap-elements",
"title": "Add ID Attributes to Bootstrap Elements",
"difficulty": 2.25,
"description": [
"Recall that in addition to class attributes, you can give each of your elements an id attribute.",
@ -1961,6 +1960,7 @@
" </div>",
"</div>"
],
"type": "waypoint",
"challengeType": 0,
"nameCn": "",
"descriptionCn": [],
@ -1975,8 +1975,7 @@
},
{
"id": "bad87fee1348bd9aec908854",
"name": "Waypoint: Label Bootstrap Wells",
"dashedName": "waypoint-label-bootstrap-wells",
"title": "Label Bootstrap Wells",
"difficulty": 2.26,
"description": [
"For the sake of clarity, let's label both of our wells with their ids.",
@ -1984,7 +1983,7 @@
"Above your right-well, inside its \"col-xs-6\" <code>div</code> element, add a <code>h4</code> element with the text \"#right-well\"."
],
"tests": [
"assert($('.col-xs-12').children('h4') && $('.col-xs-12').children('h4').length > 1, 'Add an <code>h4</code> element to each of your <code>&#60;div class=\\'col-xs-6\\'&#62;</code> elements.');",
"assert($('.col-xs-6').children('h4') && $('.col-xs-6').children('h4').length > 1, 'Add an <code>h4</code> element to each of your <code>&#60;div class=\\'col-xs-6\\'&#62;</code> elements.');",
"assert(new RegExp('#left-well','gi').test($('h4').text()), 'One <code>h4</code> element should have the text \"#left-well\".');",
"assert(new RegExp('#right-well','gi').test($('h4').text()), 'One <code>h4</code> element should have the text \"#right-well\".');"
],
@ -2009,6 +2008,7 @@
" </div>",
"</div>"
],
"type": "waypoint",
"challengeType": 0,
"nameCn": "",
"descriptionCn": [],
@ -2023,8 +2023,7 @@
},
{
"id": "bad87fee1348bd9aec908855",
"name": "Waypoint: Give Each Element a Unique ID",
"dashedName": "waypoint-give-each-element-a-unique-id",
"title": "Give Each Element a Unique ID",
"difficulty": 2.27,
"description": [
"We will also want to be able to use jQuery to target each button by its unique id.",
@ -2061,6 +2060,7 @@
" </div>",
"</div>"
],
"type": "waypoint",
"challengeType": 0,
"nameCn": "",
"descriptionCn": [],
@ -2075,8 +2075,7 @@
},
{
"id": "bad87fee1348bd9aec908856",
"name": "Waypoint: Label Bootstrap Buttons",
"dashedName": "waypoint-label-bootstrap-buttons",
"title": "Label Bootstrap Buttons",
"difficulty": 2.28,
"description": [
"Just like we labled our wells, we want to label our buttons.",
@ -2113,6 +2112,7 @@
" </div>",
"</div>"
],
"type": "waypoint",
"challengeType": 0,
"nameCn": "",
"descriptionCn": [],
@ -2127,8 +2127,7 @@
},
{
"id": "bad87fee1348bd9aec908857",
"name": "Waypoint: Use Comments to Clarify Code",
"dashedName": "waypoint-use-comments-to-clarify-code",
"title": "Use Comments to Clarify Code",
"difficulty": 2.29,
"description": [
"When we start using jQuery, we will modify HTML elements without needing to actually change them in HTML.",
@ -2137,9 +2136,9 @@
"Add a comment at the top of your HTML that says <code>You shouldn't need to modify code below this line</code>."
],
"tests": [
"assert(editor.match(/<!--/g).length > 1, 'Start a comment with <code>&#60;!--</code>.')",
"assert(editor.match(/this line/g).length > 1, 'Your comment should have the text <code>You shouldn't need to modify code below this line</code>')",
"assert(editor.match(/-->/g).length > 1, 'Be sure to close your comment with <code>--&#62;</code>.')"
"assert(editor.match(/<!--/g) && editor.match(/<!--/g).length > 0, 'Start a comment with <code>&#60;!--</code>.')",
"assert(editor.match(/this line/g) && editor.match(/this line/g).length > 0, \"Your comment should have the text <code>You shouldn't need to modify code below this line</code>\")",
"assert(editor.match(/-->/g) && editor.match(/-->/g).length > 0, 'Be sure to close your comment with <code>--&#62;</code>.')"
],
"challengeSeed": [
"<div class='container-fluid'>",
@ -2164,6 +2163,7 @@
" </div>",
"</div>"
],
"type": "waypoint",
"challengeType": 0,
"nameCn": "",
"descriptionCn": [],

View File

@ -1,34 +0,0 @@
{
"name": "Functional Programming",
"order": 0.010,
"challenges": [
{
"id": "bd7129d8c441eddfbeb5bddf",
"name": "Waypoint: Practice Functional Programming",
"dashedName": "waypoint-practice-functional-programming",
"difficulty": 0.01,
"challengeSeed": ["129169463"],
"description": [
"Functional programming holds the key to unlocking JavaScript's powerful asynchronous features.",
"Jafar Husain's interactive Functional Programming course will familiarize you with the various ways you can recombine these functions.",
"Functional programming in JavaScript involves using five key functions: \"map\", \"reduce\", \"filter\", \"concatAll\", and \"zip\".",
"Click here to go to the challenge: <a href='http://jhusain.github.io/learnrx/' target='_blank'>http://jhusain.github.io/learnrx/</a>.",
"You only need to complete the first 27 steps of this tutorial.",
"This challenge will take several hours, but don't worry. Jafar's website will save your progress (using your browser's local storage) so you don't need to finish it in one sitting.",
"If you've spent several minutes on one of these challenges, and still can't figure out its correct answer, you can click \"show answer\", then click \"run\" to advance to the next challenge. Be sure to read the correct answer and make sure you understand it before moving on."
],
"challengeType": 2,
"tests": [],
"nameCn": "",
"descriptionCn": [],
"nameFr": "",
"descriptionFr": [],
"nameRu": "",
"descriptionRu": [],
"nameEs": "",
"descriptionEs": [],
"namePt": "",
"descriptionPt": []
}
]
}

View File

@ -1,428 +0,0 @@
{
"name": "Get Set for Free Code Camp",
"order": 0.001,
"challenges": [
{
"id": "bd7124d8c441eddfaeb5bdef",
"name": "Waypoint: Learn how Free Code Camp Works",
"dashedName": "waypoint-learn-how-free-code-camp-works",
"difficulty": 0.01,
"challengeSeed": ["125407438"],
"description": [
"Watch this 1-minute video, or simply read this summary:",
"Welcome to Free Code Camp. We're a community of busy people learning to code by building projects for nonprofits.",
"We built this community because learning to code is hard. But anyone who can stay motivated can learn to code. And to stay motivated, you just need to: <ol><li>make friends with people who code</li><li>code a little every day</li></ol>",
"All our challenges are <ol><li>free</li><li>self-paced</li><li>browser-based</li></ol>",
"We'll spend <ol><li>200 hours learning tools like HTML, CSS, JavaScript, Node.js and databases</li><li>600 hours building practice projects</li><li>800 hours building full stack solutions for nonprofits</li></ol>",
"By the end, we'll <ol><li>be good at coding</li><li>have the portfolio of apps with happy users to prove it</li></ol>",
"Once you make it through Free Code Camp, you will be able to get a coding job. There are far more job openings out there than there are qualified coders to fill them.",
"Now it's time to join our chat room. Click the \"I've completed this challenge\" button to move on to your next challenge."
],
"challengeType": 2,
"tests": [],
"nameCn": "",
"descriptionCn": [],
"nameFr": "",
"descriptionFr": [],
"nameRu": "",
"descriptionRu": [],
"nameEs": "Waypoint: Aprende sobre como funciona Free Code Camp",
"descriptionEs": [
"Mira el video de 1 minuto o simplemente lee este resumen:",
"Bienvenido a Free Code Camp. Somos una comunidad de personas ocupadas tratando de aprender a programar construyendo proyectos para empresas sin fines de lucro.",
"Hemos construido esta comunidad porque aprender a programar es dificil; pero cualquiera que se pueda mantener motivado puede aprender a programar. Para mantenerte motivado, solo necesitas: <ol><li>hacerte amigo o amiga de personas que sepan programar</li><li>programar un poco cada día</li></ol>",
"Todos nuestros desafíos son <ol><li>gratuitos</li><li>manejados a tu propio ritmo</li><li>basados en tu navegador</li></ol>",
"Estaremos trabajando <ol><li>200 horas aprendiendo a utilizar herramientas como HTML, CSS, JavaScript, Node.js y bases de datos</li><li>600 horas construyendo proyectos prácticos</li><li>800 horas construyendo soluciones full stack para empresas sin fines de lucro</li></ol>",
"Al finalizar <ol><li>seremos buenos en programación</li><li>tendremos un portafolio con apps con usuarios contentos que puedan abogar por nuestro trabajo</li></ol>",
"Una vez que completes el Free Code Camp, serás capaz de obtener un trabajo como desarrollador. Hay muchas posiciones de trabajo que están en búsqueda de programadores calificados.",
"Ahora es el momento de ingresar a nuestra sala de chat. Dale click al botón de \"I've completed this challenge\" para continuar con el siguiente desafío."
],
"namePt": "",
"descriptionPt": [],
"nameDe": "Waypoint: Lerne wie Free Code Camp funktioniert",
"descriptionDe": [
"Sieh dir das kurze Video an oder lies einfach diese Übersicht:",
"Willkommen im Free Code Camp. Wir sind eine Community aus eifrigen Personen, die Programmieren lernen, indem sie Projekte für gemeinnützige Organisationen umsetzen.",
"Programmieren zu lernen ist hart, weshalb wir diese Community ins Leben gerufen haben. Jeder, der motiviert bleiben kann, ist auch in der Lage Programmieren zu lernen. Und um motiviert zu bleiben, musst du nur: <ol><li>Freunde finden, die programmieren</li><li>jeden Tag ein wenig programmieren</li></ol>",
"All unsere Challenges sind <ol><li>kostenlos</li><li>selbstbestimmt</li><li>Browser-basiert</li></ol>",
"Wir werden <ol><li>200 Stunden mit Werkzeugen wie HTML, CSS, JavaScript, Node.js und Datenbanken arbeiten</li><li>600 Stunden Projekte umsetzen</li><li>800 Stunden komplette Lösungen für gemeinnützige Organisationen erstellen</li></ol>",
"Am Ende werden wir <ol><li>gut im Programmieren sein</li><li>ein Portfolio aus Anwendungen mit zufriedenen Nutzern vorweisen können</li></ol>",
"Wenn du das Free Code Camp abgeschlossen hast, wirst du in der Lage sein einen Job in der Branche zu bekommen. Es gibt sehr viel mehr offene Stellen als fähige Programmierer, um sie zu besetzen.",
"Jetzt wird es Zeit unserem Chat beizutreten. Klicke auf \"I've completed this challenge\" um zur nächsten Challenge fortzufahren."
]
},
{
"id": "bd7125d8c441eddfaeb5bd0f",
"name": "Waypoint: Join Our Chat Room",
"dashedName": "waypoint-join-our-chat-room",
"difficulty": 0.02,
"challengeSeed": ["131574135"],
"description": [
"Now we're going to join the Free Code Camp chat room. You can come here any time of day to hang out, ask questions, or find another camper to pair program with.",
"Create an account with GitHub here: <a href='https://github.com/join' target='_blank'>https://github.com/join</a>.",
"Click the pixel art in the upper right hand corner of GitHub, then choose settings. Upload a picture of yourself. A picture of your face works best. This is how people will see you in our chat rooms, so put your best foot forward. You can add your city and your personal website if you have one.",
"Go to Free Code Camp's open-source repository: <a href='//github.com/freecodecamp/freecodecamp' target='_blank'>https://github.com/freecodecamp/freecodecamp</a>.",
"You can \"star\" this repository by clicking the star button in the upper right hand corner.",
"Later, you'll be able to fork this repository if you'd like to contribute to our open source codebase.",
"Join our main chat room: <a href='https://gitter.im/FreeCodeCamp/FreeCodeCamp' target='_blank'>https://gitter.im/FreeCodeCamp/FreeCodeCamp</a>.",
"Once you're in our chat room, introduce yourself by saying : \"Hello world!\".",
"Tell your fellow campers how you found Free Code Camp. Also tell us why you want to learn to code.",
"We have a busy chat room, so be sure to configure your notification settings in the top right corner.",
"Also Join our help chat room: <a href='https://gitter.im/FreeCodeCamp/help' target='_blank'>https://gitter.im/FreeCodeCamp/help</a>, where you can get help with our challenges in real time.",
"Keep the chat room open while you work through the other challenges. That way you ask for help if you get stuck on a challenge. You can also socialize when you feel like taking a break.",
"You can also download a desktop or mobile chat application here: <a href='https://gitter.im/apps' target='_blank'>https://gitter.im/apps</a>",
"You can also access this chat room by clicking the \"Chat\" button in the upper right hand corner.",
"In order to keep our community a friendly and positive place to learn to code, please read and follow our Code of Conduct: <a href='https://github.com/FreeCodeCamp/freecodecamp/wiki/Code-of-Conduct' target='_blank'>https://github.com/FreeCodeCamp/freecodecamp/wiki/Code-of-Conduct</a>",
"Now you're ready to move on. Click the \"I've completed this challenge\" button to move on to your next challenge."
],
"challengeType": 2,
"tests": [],
"nameCn": "",
"descriptionCn": [],
"nameFr": "",
"descriptionFr": [],
"nameRu": "",
"descriptionRu": [],
"nameEs": "Waypoint: Únete a Nuestra Sala de Chat",
"descriptionEs": [
"Ahora vamos a unirnos a la sala de chat de Free Code Camp. Puedes ingresar en cualquier momento para pasar el rato, hacer preguntas o para encontrar algún otro camper para programar en pares.",
"Asegurate de que tu cuenta de Free Code Camp incluya tu dirección de correo electrónico. Vale recalcar que si bien tu dirección de correo electrónico será invisible para el público, Slack lo hará visible para otros campers en las salas de chat. Puedes ingresar por aquí: <a href='/account' target='_blank'>http://freecodecamp.com/account</a>.",
"Dale click a este link, el cual te enviará una invitación a las salas de chat de Free Code Camp: <a href='/api/slack' target='_blank'>http://freecodecamp.com/api/slack</a>.",
"Ahora revisa tu buzón de correo y dale click al link del correo electrónico que has recibido de Slack.",
"Completa el proceso de registro, actualiza tu información biográfica y sube una imagen. Una foto de tu cara funciona mejor. Esta es la manera como las personas te verán en las salas de chat, asegurate de mostrar tu mejor sonrisa.",
"Ahora ingresa al chat #General (Inglés) o #Espanol (Español) e introdúcete escribiendo: \"Hola mundo!\".",
"Comentale a otros campers como es que encontraste Free Code Camp. También hablanos sobre las razones por las cuales decidiste aprender a programar.",
"Mantén la sala de chat abierta mientras estás trabajando otros desafíos. De esa manera podrás pedir ayuda en caso te quedes atascado en algún de ellos. También puedes socializar cuando sientas que necesitas un descanso.",
"Puedes acceder a la sala de chat dándole click al botón de \"Chat\" en la parte superior derecha de la página.",
"Para mantener a nuestra comunidad como un lugar de aprendizaje positivo y amigable, por favor lee y sigue nuestro Código de Conducta: <a href='/https://github.com/FreeCodeCamp/freecodecamp/wiki/Code-of-Conduct' target='_blank'>https://github.com/FreeCodeCamp/freecodecamp/wiki/Code-of-Conduct</a>"
],
"namePt": "",
"descriptionPt": [],
"nameDe": "Waypoint: Trete unserem Chat-Raum bei",
"descriptionDe": [
"Nun werden wir dem Chat-Raum von Free Code Camp beitreten. Du kannst jederzeit vorbei kommen um abzuhängen, Fragen zu stellen oder andere Camper für Paarprogrammierung zu finden.",
"Stelle sicher, dass deine Email Adresse in deinem Free Code Camp Account hinterlegt ist. Bitte beachte, dass deine Email Adresse für die Öffentlichkeit nicht einsehbar ist, aber für andere Camper in Slack wird sie sichtbar sein. Du kannst sie hier eintragen: <a href='/account' target='_blank'>http://freecodecamp.com/account</a>.",
"Klicke auf diesen Link, um von Slack eine Einladung zu den Chat-Räumen von Free Code Camp zu erhalten: <a href='/api/slack' target='_blank'>http://freecodecamp.com/api/slack</a>.",
"Kontrolliere jetzt dein Email Postfach und klicke in der Email von Slack auf den Link.",
"Beende die Registrierung und vervollständige dein Profil. Vergiss nicht, dein Profil-Bild hochzuladen. Ein Bild von deinem Gesicht ist am besten. So werden dich andere Personen im Chat sehen, also zeige dich von deiner Schokoladenseite.",
"Jetzt betrete den General Chat-Raum und stelle dich den anderen vor, indem du folgendes schreibst: \"Hello world!\".",
"Teile den anderen Campern mit, wie du auf Free Code Camp gestoßen bist. Wir interessieren uns auch dafür, warum du Programmieren lernen willst aber auf englisch bitte, sonst versteht dich kaum einer.",
"Behalte den Chat geöffnet, während du an den Challenges arbeitest. Auf diesem Weg kannst du schnell nach Hilfe fragen, wenn du nicht weiter kommst. Du kannst auch jederzeit mit uns chatten, wenn du eine Pause einlegen möchtest.",
"Du kannst den Chat auch über die Schaltfläche \"Chat\" oben rechts auf dieser Seite erreichen.",
"Damit diese Community ein freundlicher und positiver Ort zum Lernen bleibt, lies und folge bitte unseren Verhaltensregeln: <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/Code-of-Conduct' target='_blank'>https://github.com/FreeCodeCamp/freecodecamp/wiki/Code-of-Conduct</a>"
]
},
{
"id": "bd7125d8c441eddfaeb5bdff",
"name": "Waypoint: Preview our Challenge Map",
"dashedName": "waypoint-preview-our-challenge-map",
"difficulty": 0.03,
"challengeSeed": ["125407437"],
"description": [
"Before you start learning how to code, we'd like to introduce you to a few things.",
"Let's look at our Challenge Map. Click on the \"Map\" button in the upper right hand corner. This map shows all the challenges that will teach you how to code.",
"You should complete all these challenges in order.",
"Once you finish these Waypoint challenges, you'll move on to Bonfires (algorithm practice), then Ziplines (front end development practice) and finally Basejumps (full stack development practice). After that, you'll start building projects for nonprofits.",
"This challenge map is just for your reference. You can always just press the \"Learn\" button, and it will take you to your next challenge.",
"Finally, please note that our open-source curriculum is a work in progress. Our volunteer community is constantly improving it. If you think you've encountered a bug, typo, or something that seems confusing, please open a GitHub issue: <a href='https://github.com/FreeCodeCamp/freecodecamp/issues'>https://github.com/FreeCodeCamp/freecodecamp/issues</a>."
],
"challengeType": 2,
"tests": [],
"nameCn": "",
"descriptionCn": [],
"nameFr": "",
"descriptionFr": [],
"nameRu": "",
"descriptionRu": [],
"nameEs": "Waypoint: Revisa nuestro Mapa de Desafíos",
"descriptionEs": [
"Antes de comenzar a aprender a programar, nos gustaría mostrarte algunas cosas.",
"Revisemos el Mapa de Desafíos. Dale click al botón de \"Map\" en la parte superior derecha. Este mapa muestra todos los desafíos que te enseñarán a programar.",
"Deberías completar todos estos desafíos en orden.",
"Una vez que termines con los Waypoints, seguiremos con los Bonfires (práctica de algoritmos), luego Ziplines (práctica de desarrollo front end) y para terminar los Basejumps (práctica de desarrollo full stack). Después de eso, empezarás a desarrollar proyectos para empresas sin fines de lúcro.",
"El mapa de desafíos es solamente de referencia. Puedes también presionar el botón de \"Learn\", el cual te llevará directamente al siguiente desafío.",
"Para terminar, ten en cuenta que nuestra currícula open-source es un trabajo en progreso. Nuestra comunidad de voluntarios está mejorandola constantemente. Si crees que te has topado con algún bug, error ortográfico o algo que parezca confuso, haznos el favor de abrir un ticket a través de Github: <a href='https://github.com/FreeCodeCamp/freecodecamp/issues'>https://github.com/FreeCodeCamp/freecodecamp/issues</a>."
],
"namePt": "",
"descriptionPt": [],
"nameDe": "Waypoint: Besuche die Challenge Map",
"descriptionDe": [
"Bevor du startest, wollen wir dir ein paar Dinge zeigen.",
"Betrachte die Challenge Map. Klicke auf \"Map\" oben rechts auf dieser Seite. Diese Übersicht zeigt dir alle Challenges.",
"Du solltest alle Challenges in der gezeigten Reihenfolge abschließen.",
"Hast du alle Waypoint-Challenges beendet, folgen die Bonfires (Algorithmen), darauf Ziplines (Frontend Development) und zum Schluss Basejumps (Full Stack Development). Danach wirst du anfangen, Projekte für gemeinnützige Organisationen umzusetzen.",
"Diese Challenge Map dient dir als Orientierung. Du kannst einfach auf \"Learn\" klicken und direkt zur nächsten Challenge fortfahren.",
"Bitte beachte, dass unser Open Source Lehrplan nicht fertig ist. Unsere freiwillige Community verbessert diesen stetig. Wenn du einen Bug, Rechtschreib-Fehler oder etwas gefunden hast, das dir komisch vorkommt, öffne bitte ein GitHub Issue: <a href='https://github.com/FreeCodeCamp/freecodecamp/issues'>https://github.com/FreeCodeCamp/freecodecamp/issues</a>. Wie gehabt bitte in englischer Sprache."
]
},
{
"id": "bd7125d8c441eddfaeb5bd1f",
"name": "Waypoint: Browse our Wiki",
"dashedName": "waypoint-browse-our-wiki",
"difficulty": 0.04,
"challengeSeed": ["125407435"],
"description": [
"Free Code Camp has an up-to-date wiki that will answer your many questions.",
"Click the \"Wiki\" button in the upper right hand corner.",
"You can browse our wiki at your convenience. Most of its articles take less than 1 minute to read.",
"All of our Wiki articles are contributed by our community. You can update our wiki articles, and even create wiki articles of your own.",
"Read <a href=''>Install NPM</a>",
"Read <a href=''>Install NPM</a>",
"Read <a href=''>Install NPM</a>",
"Now you can move on to your next challenge."
],
"challengeType": 2,
"tests": [],
"nameCn": "",
"descriptionCn": [],
"nameFr": "",
"descriptionFr": [],
"nameRu": "",
"descriptionRu": [],
"nameEs": "Waypoint: Revisa nuestro Field Guide",
"descriptionEs": [
"Free Code Camp tiene un field guide actualizado que respondera tus preguntas.",
"Dale click al botón \"Field Guide\" en la parte superior derecha.",
"Puedes navegar el Field Guide cuando veas conveniente. La mayoría de los artículos los puedes leer en menos de 1 minuto .",
"Cuando le des click al botón de Field Guide, siempre te regresará al último artículo que estuviste leyendo.",
"Lee algunos de nuestros artículos, luego continúa con tu siguiente desafío."
],
"namePt": "",
"descriptionPt": [],
"nameDe": "Waypoint: Stöbere in unserem Field Guide",
"descriptionDe": [
"Free Code Camp hat einen aktuellen Field Guide, welcher viele deiner Fragen beantworten wird.",
"Klicke oben rechts auf \"Field Guide\".",
"Du kannst im Field Guide nach Lust und Laune stöbern. Die meisten der Artikel sind in weniger als einer Minute gelesen.",
"Wenn du auf den besagten Field Guide in der Navigation klickst, wirst du direkt zu dem Artikel geleitet, den du als letztes gelesen hast.",
"Lies ein paar der Artikel, dann schreite zu deiner nächsten Challenge voran."
]
},
{
"id": "bd7125d8c441eddfaeb5bd2f",
"name": "Waypoint: Customize your Portfolio Page",
"dashedName": "waypoint-customize-your-portfolio-page",
"difficulty": 0.05,
"challengeSeed": ["125407433"],
"description": [
"You and all your fellow campers have portfolio pages.",
"To see your portfolio page, click your picture in the upper right hand corner.",
"Your portfolio page will automatically show off your progress through Free Code Camp.",
"Click the \"Update my portfolio page or manage my account\" button",
"You can link to your GitHub, Twitter and LinkedIn accounts. If you've already built some websites, you can link to them here as well.",
"Be sure to click the \"Update my Bio\" or \"Update my Social Links\" button to save this new information to your portfolio page.",
"Once you're happy with your portfolio page, you can move on to your next challenge."
],
"challengeType": 2,
"tests": [],
"nameCn": "",
"descriptionCn": [],
"nameFr": "",
"descriptionFr": [],
"nameRu": "",
"descriptionRu": [],
"nameEs": "Waypoint: Personaliza tu página de Portafolio",
"descriptionEs": [
"Tú y tus otros amigos campers tienen sus propias páginas de portafolio.",
"Para visualizar tu página de portafolio, dale click a tu foto en la parte superior derecha.",
"Tu página de portafolio mostrará automaticamente tu progreso en Free Code Camp",
"Dale click al botón de \"Update my portfolio page or manage my account\"",
"Puedes enlazarte con tus cuentas de Github, Twitter y LinkedIn. Si ya has creado alguna página web, puedes enlazarla aquí también.",
"Asegurate de darle click al botón de \"Update my Bio\" o \"Update my Social Links\" para agregar esta nueva información a tu portafolio.",
"Una vez que estés satisfecho con tu página de portafolio, puedes seguir con el siguiente desafío."
],
"namePt": "",
"descriptionPt": [],
"nameDe": "Waypoint: Personalisiere deine Portfolio-Seite",
"descriptionDe": [
"Du und die anderen Camper habt Portfolio-Seiten.",
"Um zu deinem Portfolio zu gelangen, klicke oben rechts auf dein Bild.",
"Dein Portfolio wird deinen Fortschritt im Free Code Camp automatisch anzeigen.",
"Klicke auf \"Update my portfolio page or manage my account\"",
"Du kannst deine GitHub, Twitter und LinkedIn Accounts verlinken. Wenn du bereits ein paar Websites gebaut hast, kannst du sie ebenfalls präsentieren.",
"Stelle sicher, dass du auf \"Update my Bio\" oder \"Update my Social Links\" klickst, um diese neuen Informationen zu speichern.",
"Sobald du zufrieden mit deinem Portfolio bist, kannst du zur nächsten Challenge fortfahren."
]
},
{
"id": "bd7126d8c441eddfaeb5bd3f",
"name": "Waypoint: Try Camper News",
"dashedName": "waypoint-try-camper-news",
"difficulty": 0.06,
"challengeSeed": ["124553410"],
"description": [
"Camper News is the best place for our campers to share and discuss helpful links.",
"Click \"News\" in the upper right hand corner.",
"You'll see a variety of links that have been submitted. Click on the \"Discuss\" button under one of them.",
"You can upvote links. This will push the link up the rankings of hot links.",
"You can also submit links.",
"You can view the portfolio pages of any camper who has posted links on Camper News. Just click on their photo.",
"When you submit a link, you'll get a point. You will also get a point each time someone upvotes your link.",
"Now that you've learned how to use Camper News, let's move on to your next challenge."
],
"challengeType": 2,
"tests": [],
"nameCn": "",
"descriptionCn": [],
"nameFr": "",
"descriptionFr": [],
"nameRu": "",
"descriptionRu": [],
"nameEs": "Waypoint: Prueba las Noticias de Campers",
"descriptionEs": [
"Noticias de Campers es el mejor lugar para que nuestros campers puedan discutir y compartir links útiles.",
"Dale click a \"News\" en la parte superior derecha.",
"Verás una gran variedad de links que han sido enviados. Dale click al botón de \"Discuss\" debajo de uno de ellos.",
"Puedes votar por links que te gusten. Esto hará que el ranking de tu link suba.",
"Puedes también dejar un comentario a un link. Si alguien responde a tu comentario recibirás un correo electrónico de notificación para que puedas regresar y responderlo.",
"También puedes enviar tus propios links. Puedes escoger el título del link, asi como también dejar un comentario inicial sobre él.",
"Puedes ver las páginas de portafolio de cualquier camper que ha enviado links o comentarios en las Noticias de Campers. Solo tienes que darle click a su fotografía.",
"Cuando envies un link, recibirás un punto. También obtendrás un punto cada vez que otra persona vote por tu link.",
"Ahora que has aprendido a utilizar las Noticias de Campers, continuaremos con el siguiente desafío."
],
"namePt": "",
"descriptionPt": [],
"nameDe": "Waypoint: Verpasse nicht die Camper News",
"descriptionDe": [
"Camper News ist der beste Ort für unsere Camper, nützliche Links zu teilen und zu diskutieren.",
"Klicke oben rechts auf \"News\".",
"Du wirst eine Vielzahl an Links sehen, die bereits geteilt wurden. Klicke auf \"Discuss\" unter einem von ihnen.",
"Du kannst Links bewerten. Das wird den Link in der Platzierung weiter nach oben befördern.",
"Du kannst einen Link auch kommentieren. Wenn jemand auf deinen Kommentar antwortet, wirst du per Email benachrichtigt, sodass du zurück kommen und reagieren kannst.",
"Du kannst ebenfalls Links teilen. Bearbeite den Titel des Links und hinterlasse einen ersten Kommentar, um die Diskussion zu starten.",
"Du kannst dir das Portfolio jedes Campers anschauen, der einen Link geteilt hat. Klicke dazu einfach auf ihr Bild.",
"Sobald du einen Link teilst, erhältst du einen Punkt. Jedes Mal, wenn jemand deinen Link bewertet, erhältst du zusätzlich einen Punkt.",
"Jetzt da du gelernt hast, was Camper News ist, kanns du zur nächsten Challenge gehen."
]
},
{
"id": "bd7126d8c441eddfaeb5bd3e",
"name": "Waypoint: Meet Other Campers in your City",
"dashedName": "waypoint-meet-other-campers-in-your-city",
"difficulty": 0.07,
"challengeSeed": ["127358841"],
"description": [
"One of the best ways to stay motivated when learning to code is to hang out with other campers.",
"Gitter and Camper News are great ways to communicate with other campers, but there's no substitute for meeting people in-person.",
"The easiest way to meet other campers in your city is to join your city's Facebook Group. Click <a href='https://github.com/FreeCodeCamp/freecodecamp/wiki/List-of-Free-Code-Camp-city-based-Campsites' target='_blank'>here</a> to view our growing list of local groups.",
"Click the link to your city, then, once Facebook loads, click \"Join group\".",
"Our local groups are new, so if you don't see your city on this list, you should follow the directions to create a Facebook group for your city.",
"If you don't have a Facebook account, we strongly recommend you create one, even if it's just for the purpose of coordinating with campers in your city through this group.",
"Our groups allow you to create events, coordinate those events, and share photos from the events afterward.",
"Whether you're hosting a study group, pair programming at your local library, or going to a weekend hackathon, your city's group will help you make it happen."
],
"challengeType": 2,
"tests": [],
"nameCn": "",
"descriptionCn": [],
"nameFr": "",
"descriptionFr": [],
"nameRu": "",
"descriptionRu": [],
"nameEs": "Waypoint: Encuentrate con otros Campers en tu Ciudad",
"descriptionEs": [
"Una de las mejores maneras de mantenerte motivado cuando estás aprendiendo a programar es pasar el rato con otros campers.",
"Gitter y Noticias de Campers son una muy buena forma de comunicarte con otros campers, pero no hay ningún substituto para conocerlos en persona.",
"La forma más fácil de encontrarte con otros campers en tu ciudad es unirte al grupo de Facebook de tu ciudad o país. Dale click a <a href='https://github.com/FreeCodeCamp/freecodecamp/wiki/List-of-Free-Code-Camp-city-based-Campsites' target='_blank'>here</a> para ver la lista de grupos locales.",
"Dale click al link de tu ciudad o país y una vez que Facebook cargue, dale click a \"Join group\".",
"Nuestros grupos locales son pocos, asi que en caso no veas tu ciudad o país en la lista, solamente sigue las instrucciones para crear un grupo de Facebook para ello.",
"Si no tienes una cuenta de Facebook, te recomendamos que crees una, asi sea solamente con el proposito de coordinar con otros campers en tu ciudad a través del grupo",
"Nuestros grupos te dan la potestad de crear eventos y coordinarlos, solamente asegurate de compartir las fotos del evento una vez terminado.",
"En caso seas el anfitrión de un grupo de estudio, estes programando en pares en una biblioteca local o piensen en ir a un hackathon de fin de semana, tu grupo local te ayudará a hacerlo."
],
"namePt": "",
"descriptionPt": [],
"nameDe": "Waypoint: Treffe andere Camper in deiner Stadt",
"descriptionDe": [
"Der beste Weg, motiviert am Ball zu bleiben, ist mit anderen Campern abzuhängen.",
"Slack und Camper News sind super Wege zur Kommunikation mit anderen Campern. Es gibt aber nichts vergleichbares, Personen im echten Leben zu treffen.",
"Um leicht andere Camper in deiner Stadt zu treffen, solltest du der Facebook Gruppe deiner Stadt beitreten. Klicke <a href='https://github.com/FreeCodeCamp/freecodecamp/wiki/List-of-Free-Code-Camp-city-based-Campsites' target='_blank'>hier</a> um unsere wachsende Liste der lokalen Gruppen zu sehen.",
"Klicke auf den Link zu deiner Stadt. Sobald Facebook geladen ist, klicke auf \"Gruppe beitreten\".",
"Unsere lokalen Gruppen sind neu. Solltest du deine Stadt also nicht in der Liste sehen, erstelle doch bitte eine Facebook Gruppe deiner Stadt indem du den Anweisungen dazu folgst.",
"Wenn du keinen Facebook Account hast, empfehlen wir dir einen zu erstellen. Auch wenn dieser nur dazu dient, sich mit anderen Campern in deiner Stadt zu koordinieren.",
"Unsere Gruppen erlauben dir, Events zu planen und Fotos davon zu teilen.",
"Egal ob du eine Studenten-Gruppe, Paarprogrammierung an deiner lokalen Bibliothek oder einen Hackathon am Wochenende anbieten willst. Die Gruppe deiner Stadt macht das alles möglich."
]
},
{
"id": "bd7126d8c431eddfaeb5bd3e",
"name": "Waypoint: Add Free Code Camp to your LinkedIn Profile",
"dashedName": "waypoint-add-free-code-camp-to-your-linkedin-profile",
"difficulty": 0.08,
"challengeSeed": ["131574134"],
"description": [
"LinkedIn is a critical tool for your job search later on.",
"Add Free Code Camp to your LinkedIn profile by going to <a href='https://www.linkedin.com/profile/edit-education?school=Free+Code+Camp' target='_blank'>https://www.linkedin.com/profile/edit-education?school=Free+Code+Camp</a>.",
"Estimate your dates. Keep in mind that Free Code Camp is a rigorous 1,600 hour program, and will probably take at least a year to complete.",
"In the \"Degree\" section, type \"Full Stack Web Development\".",
"In the \"Field of study\" section, type \"Computer Software Engineering\".",
"Click the \"Save Changes\" button.",
"Be sure to add your key word skills to LinkedIn's skills section as you learn them, such as HTML, jQuery, Linux and Node.js.",
"You can expand your LinkedIn network by inviting friends you meet through Free Code Camp to connect with you on LinkedIn.",
"Make your LinkedIn profile as complete as possible. Unlike other social networks, with LinkedIn, it's perfectly fine if you don't want to add a photo.",
"Let's keep moving. We're almost ready to start coding!"
],
"challengeType": 2,
"tests": [],
"nameCn": "",
"descriptionCn": [],
"nameFr": "",
"descriptionFr": [],
"nameRu": "",
"descriptionRu": [],
"nameEs": "",
"descriptionEs": [],
"namePt": "",
"descriptionPt": []
},
{
"id": "bd7137d8c441eddfaeb5bdef",
"name": "Waypoint: Get Help the Hacker Way with RSAP",
"dashedName": "waypoint-get-help-the-hacker-way-with-rsap",
"difficulty": 0.09,
"challengeSeed": ["125407432"],
"description": [
"Let's cover one last thing before you start working through our lessons: how to get help.",
"Any time you get stuck or don't know what to do next, follow this simple algorithm (procedure): RSAP (Read, Search, Ask, Post).",
"First, R - Read the documentation or error message. A key skill that good coders have is the ability to interpret and then follow instructions.",
"Next, S - Search Google. Good Google queries take a lot of practice. When you search Google, you usually want to include the language or framework you're using. You also want to limit the results to a recent period.",
"Then, if you still haven't found an answer to your question, A - Ask your friends. If you have trouble, you can ask your fellow campers. We have a special chat room specifically for getting help with tools you learn through these Free Code Camp Challenges. Go to <a href='https://gitter.im/FreeCodeCamp/Help' target='_blank'>https://gitter.im/FreeCodeCamp/Help</a>. Keep this chat open while you work on the remaining challenges.",
"Finally, P - Post on Stack Overflow. Before you attempt to do this, read Stack Overflow's guide to asking good questions: <a href='http://stackoverflow.com/help/how-to-ask'>http://stackoverflow.com/help/how-to-ask</a>.",
"Here's our detailed wiki article on getting help: <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>http://freecodecamp.com//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck</a>.",
"Now you have a clear algorithm to follow when you need help! Let's start coding! Move on to your next challenge."
],
"challengeType": 2,
"tests": [],
"nameCn": "",
"descriptionCn": [],
"nameFr": "",
"descriptionFr": [],
"nameRu": "",
"descriptionRu": [],
"nameEs": "Waypoint: Obtén ayuda del modo Hacker con RSAP",
"descriptionEs": [
"Cubramos un último punto antes que empieces a trabajar en los cursos: como obtener ayuda.",
"Cualquier momento en el que te atasques o no sepas que hacer, sigue este simple algoritmo (procedimiento): RSAP (Read, Search, Ask, Post). Que en español vendría a ser Lee, Busca, Pregunta, Publica.",
"Primero, Lee - Lee la documentación o el mensaje de error. El punto fuerte de un buen programador es la habilidad de interpretar y seguir instrucciones.",
"Luego, Busca - Busca en Google. Buenas búsquedas o queries requieren bastante práctica. Cuando búsques en Google, idealmente tienes que incluir el lenguaje o framework que estés usando. También tendrás que limitar los resultados de búsqueda a un periodo reciente.",
"Ahora, en caso no hayas encontrado la respuesta a tu pregunta, Pregunta - Pregunta a tus amigos. En caso estes en problemas, puedes preguntar a otros campers. Tenemos una sala de chat especificamente para obtener ayuda sobre las herramientas que utilizamos en los desafíos de Free Code Camp. Ingresa a <a href='https://gitter.im/FreeCodeCamp/Help' target='_blank'>https://gitter.im/FreeCodeCamp/Help</a>. Mantén este chat abierto mientras trabajas en los desafíos subsiguientes.",
"Finalmente, Publica - Publica tu pregunta en Stack Overflow. Antes de hacer esto lee la guía de Stack Overflow para publicar buenas preguntas: <a href='http://stackoverflow.com/help/how-to-ask'>http://stackoverflow.com/help/how-to-ask</a>. Tendrás que hacerlo en inglés, en caso no sepas como, pide que te ayuden a traducir tu pregunta en el canal #espanol de Slack.",
"Aquí está nuestra guia detallada en como obtener ayuda: <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>http://freecodecamp.com//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck</a>.",
"Ahora que tienes en claro el procedimiento a seguir cuando necesites ayuda. ¡Empecémos a programar! Continua con el siguiente desafío."
],
"namePt": "",
"descriptionPt": [],
"nameDe": "Waypoint: Der Weg des Hackers Hilfe erhalten mit RSAP",
"descriptionDe": [
"Lass uns eine letzte Sache behandeln, bevor du mit den Lektionen beginnst: Wie du Hilfe bekommst.",
"Immer wenn du nicht weiter kommst oder du nicht weißt, was als nächstes zu Tun ist, kannst du diesem einfachen Algorithmus (Prozedur) folgen: RSAP (Read, Search, Ask, Post Lesen, Suchen, Fragen, Posten).",
"Erstens, R Lies die Dokumentation oder die Fehler-Meldung. Eine wichtige Eigenschaft aller Coder ist es, Anweisungen zu interpretieren und zu folgen.",
"Danach, S Suche bei Google. Es bedarf viel Übung, gute Such-Anfragen zu stellen. Wenn du bei Google suchst, solltest du die Sprache oder das Framework angeben, welches du benutzt. Außerdem wirst du die aktuellsten Ergebnisse haben wollen.",
"Wenn du keine Antwort auf deine Frage erhalten hast, folge A Frage deine Freunde. Wenn du Probleme hast, kannst du andere Camper fragen. Wir haben einen speziellen Chat-Raum zur Unterstützung beim Lernen eingerichtet. Gehe zu <a href='https://freecode.slack.com/messages/help/' target='_blank'>https://freecode.slack.com/messages/help/</a>. Behalte diesen Chat offen, solange du an den Challenges arbeitest.",
"Und zum Schluss, P Poste auf Stack Overflow. Bevor du das tust, lies bitte den Leitfaden für gute Fragen auf Stack Overflow: <a href='http://stackoverflow.com/help/how-to-ask'>http://stackoverflow.com/help/how-to-ask</a>.",
"Hier ist unser detaillierter Field Guide um Hilfe zu erhalten: <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>http://freecodecamp.com//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck</a>.",
"Jetzt hast du einen klaren Algorithmus, dem du folgen kannst wenn du Hilfe benötigst. Fangen wir an zu programmieren! Gehe zur nächsten Challenge."
]
}
]
}

View File

@ -1,11 +1,10 @@
{
"name": "Git",
"order" : 0.012,
"order" : 0.014,
"challenges": [
{
"id": "bd7353d8c341eddeaeb5bd0f",
"name": "Waypoint: Save your Code Revisions Forever with Git",
"dashedName": "waypoint-save-your-code-revisions-forever-with-git",
"title": "Save your Code Revisions Forever with Git",
"difficulty": 0.01,
"challengeSeed": ["133316034"],
"description": [
@ -35,6 +34,7 @@
"Complete \"Merge Tada!\"",
"Once you've completed these steps, move on to our next challenge."
],
"type": "waypoint",
"challengeType": 2,
"tests": [],
"nameCn": "",

View File

@ -4,8 +4,7 @@
"challenges": [
{
"id": "bd7128d8c441eddfbeb5bddf",
"name": "Hike: Computer Basics 1: The 4 Basic Parts of a Computer",
"dashedName": "hike-computer-basics-1-the-4-basic-parts-of-a-computer",
"title": "Computer Basics 1: The 4 Basic Parts of a Computer",
"difficulty": 9.01,
"challengeSeed": [
"132542064"
@ -25,6 +24,7 @@
"You can't get to the memory from the input or the output without the use of the CPU.",
"So, just to review, we've got 4 basic parts of the computer: the input, the output, CPU, and memory."
],
"type": "hike",
"challengeType": 6,
"tests": [
["The computer has 3 basic parts.", false, "The computer has 4 basic parts: input, output, CPU, and memory"],
@ -44,8 +44,7 @@
},
{
"id": "bd7127d8c441eddfbeb5bddf",
"name": "Hike: Computer Basics 2: More Computer Hardware",
"dashedName": "hike-computer-basics-2-more-computer-hardware",
"title": "Computer Basics 2: More Computer Hardware",
"difficulty": 9.02,
"challengeSeed": [
"132542458"
@ -64,6 +63,7 @@
"So let's do a quick review.",
"In addition to the four basic parts of input, output, CPU, and memory, we also usually have a motherboard, expansion cards, and a power supply."
],
"type": "hike",
"challengeType": 6,
"tests": [
["The power supply isn't a necessary part of a computer since it's not one of the 4 main parts.", false, "The computer needs power!"],
@ -83,8 +83,7 @@
},
{
"id": "bd7126d8c441eddfbeb5bddf",
"name": "Hike: Computer Basics 3: Intro to Binary Code",
"dashedName": "hike-computer-basics-3-intro-to-binary-code",
"title": "Computer Basics 3: Intro to Binary Code",
"difficulty": 9.03,
"challengeSeed": [
"132542757"
@ -98,6 +97,7 @@
"We're going to go into how you decode a number in binary, but as you can probably guess, translating binary can be done with a quick google search.",
"The most important part of this is you undrestand the concept that even simple things like 1's and 0's can translate into something really complex that is the basis for all of the computer languages that exist today."
],
"type": "hike",
"challengeType": 6,
"tests": [
["1's and 0's are how we talk about little switches being on and off.", true],
@ -117,8 +117,7 @@
},
{
"id": "bd7125d8c441eddfbeb5bddf",
"name": "Hike: Computer Basics 4: Decoding a Binary Number",
"dashedName": "hike-computer-basics-4-decoding-a-binary-number",
"title": "Computer Basics 4: Decoding a Binary Number",
"difficulty": 9.04,
"challengeSeed": [
"132543332"
@ -134,6 +133,7 @@
"If it's a 0, we disregard it.",
"In this video, our number adds up to 75."
],
"type": "hike",
"challengeType": 6,
"tests": [
["1 === on and 0 ===off", true],
@ -153,8 +153,7 @@
},
{
"id": "bd7124d8c441eddfbeb5bddf",
"name": "Hike: Computer Basics 5: How To Measure Data Size",
"dashedName": "hike-computer-basics-5-how-to-measure-data-size",
"title": "Computer Basics 5: How To Measure Data Size",
"difficulty": 9.05,
"challengeSeed": [
"132543959"
@ -173,6 +172,7 @@
"Then it's Gigabyte, 1024 Bytes to the power of three; Terabyte, 1024 Bytes to the power of 4, and Petabyte, 1024 to the power of 5.",
"These get much bigger really quickly!"
],
"type": "hike",
"challengeType": 6,
"tests": [
["A Byte is the smallest possible amount of data.", false, "A Byte is 8 bits."],
@ -192,8 +192,7 @@
},
{
"id": "bd7123d8c441eddfbeb5bddf",
"name": "Hike: Computer Basics 6: Measuring Data Speed",
"dashedName": "hike-computer-basics-6-measuring-data-speed",
"title": "Computer Basics 6: Measuring Data Speed",
"difficulty": 9.06,
"challengeSeed": [
"132545171"
@ -211,6 +210,7 @@
"The main takeaway here is that speed is usually measured in bits and size is measured in Bytes.",
"Additionally, if you have an internet speed that says however many bits per second, keep in mind they are talking about something 8 times less than Bytes, how you are thinking about data."
],
"type": "hike",
"challengeType": 6,
"tests": [
["Data speed is measured in bits.", true],
@ -229,8 +229,7 @@
},
{
"id": "bd7122d8c441eddfbeb5bddf",
"name": "Hike: Computer Basics 7: Binary Bytes",
"dashedName": "hike-computer-basics-7-binary-bytes",
"title": "Computer Basics 7: Binary Bytes",
"difficulty": 9.07,
"challengeSeed": [
"132545417"
@ -244,6 +243,7 @@
"So, all of the numbers, letters, and symbols in your javascript can be translated.",
"There are a lot of languages that computers can work with, and what I want you to get away from this video is that all data in your computer boils down to binary Bytes."
],
"type": "hike",
"challengeType": 6,
"tests": [
["All digits, letters, and symbols have a binary Byte translation.", true],
@ -263,8 +263,7 @@
},
{
"id": "bd7121d8c441eddfbeb5bddf",
"name": "Hike: Computer Basics 8: Types of Computers",
"dashedName": "hike-computer-basics-8-types-of-computers",
"title": "Computer Basics 8: Types of Computers",
"difficulty": 9.08,
"challengeSeed": [
"132546182"
@ -283,6 +282,7 @@
"It's both a Mac and a PC.",
"The last type of computer we'll talk about is a microcontroller, the type of computer you might have in your car that is really good at a small specialized task, but wouldn't be used the same way a PC would be."
],
"type": "hike",
"challengeType": 6,
"tests": [
["The most common type of computer is a Personal Computer, a PC.", true],
@ -302,8 +302,7 @@
},
{
"id": "bd7120d8c441eddfbeb5bddf",
"name": "Hike: Computer Basics 9: More on the Motherboard",
"dashedName": "hike-computer-basics-9-more-on-the-motherboard",
"title": "Computer Basics 9: More on the Motherboard",
"difficulty": 9.09,
"challengeSeed": [
"132547285"
@ -324,6 +323,7 @@
"On your computer, you probably know there's a place to connect USB, firewire, SD card, ethernet, even an audio plug-in to listen through headphones.",
"These are all considered ports, a place on the motherboard where you can connect the CPU to some outside source to either get or give information."
],
"type": "hike",
"challengeType": 6,
"tests": [
["A motherboard must connect the CPU, the memory, and the network.", false, "A motherboard is a motherboard as long as it connects the CPU and the memory."],
@ -343,8 +343,7 @@
},
{
"id": "bd712fd8c441eddfbeb5bddf",
"name": "Hike: Computer Basics 10: Data Networks",
"dashedName": "hike-computer-basics-10-data-networks",
"title": "Computer Basics 10: Data Networks",
"difficulty": 9.10,
"challengeSeed": [
"132547590"
@ -364,6 +363,7 @@
"You might think that these are connected over the internet, and in the case of a VPN (Virtual Private Network, which is basically the same conceptionally as a WAN), you're right.",
"However, a WAN usually rents a cable from an internet company to creat the connection."
],
"type": "hike",
"challengeType": 6,
"tests": [
["You can connect to a LAN from far away.", false, "To connect to a LAN you must be physically near to it."],
@ -383,8 +383,7 @@
},
{
"id": "bd712ed8c441eddfbeb5bddf",
"name": "Hike: Computer Basics 11: IP Addresses",
"dashedName": "hike-computer-basics-11-ip-addresses",
"title": "Computer Basics 11: IP Addresses",
"difficulty": 9.11,
"challengeSeed": [
"132548071"
@ -404,6 +403,7 @@
"However, it is specific enough that you could google \"Where's the best ice cream near me\" and google could give you information close to your location.",
"This is done using your IP address."
],
"type": "hike",
"challengeType": 6,
"tests": [
["IP addresses are necessary to use and participate in the internet.", true],
@ -422,8 +422,7 @@
},
{
"id": "bd712dd8c441eddfbeb5bddf",
"name": "Hike: Computer Basics 12: How the Internet Works",
"dashedName": "hike-computer-basics-12-how-the-internet-works",
"title": "Computer Basics 12: How the Internet Works",
"difficulty": 9.12,
"challengeSeed": [
"132548579"
@ -443,6 +442,7 @@
"Now, this explaination is really quite basic.",
"For more information, check out web.stanford.edu/class/msande91si/www-spr04/readings/week1/InternetWhitepaper.htm."
],
"type": "hike",
"challengeType": 6,
"tests": [
["Your computer sends a request for information.", true],
@ -461,8 +461,7 @@
},
{
"id": "bd712cd8c441eddfbeb5bddf",
"name": "Hike: Computer Basics 13: Software",
"dashedName": "hike-computer-basics-13-software",
"title": "Computer Basics 13: Software",
"difficulty": 9.13,
"challengeSeed": [
"132548908"
@ -477,6 +476,7 @@
"There are three main operating systems: Windows, Mac, and Linux.",
"Applications comprise all other software, like your web browser, games, things like Photoshop, how you view your mail, editing documents, etc."
],
"type": "hike",
"challengeType": 6,
"tests": [
["Safari, Chrome, and Firefox are all examples of application software.", true]
@ -494,8 +494,7 @@
},
{
"id": "bd712bd8c441eddfbeb5bddf",
"name": "Hike: What Do Programmers Do?",
"dashedName": "hike-what-do-programmers-do",
"title": "What Do Programmers Do?",
"difficulty": 9.14,
"challengeSeed": [
"133166912"
@ -512,6 +511,7 @@
"Computers just read straight down like you would read a book.",
"Programmers are the ones responsible for breaking their ideas down into the little tiny steps and writing them in a way that computers can understand them."
],
"type": "hike",
"challengeType": 6,
"tests": [
["Computers look at code one line at a time", true],
@ -531,8 +531,7 @@
},
{
"id": "bd712ad8c441eddfbeb5bddf",
"name": "Hike: Console and Logging",
"dashedName": "hike-console-and-logging",
"title": "Console and Logging",
"difficulty": 9.15,
"challengeSeed": [
"133170880"
@ -550,6 +549,7 @@
"This will also work with numbers and booleans, which are true/false statements.",
"When consoling words, it's important to put it inside of quotations so it recognizes it's a string."
],
"type": "hike",
"challengeType": 6,
"tests": [
["The console serves only small, unnecessary purposes.", false, "The console's main purpose is to debug, which is a vital step in creating code."],
@ -568,8 +568,7 @@
},
{
"id": "bd7119d8c441eddfbeb5bddf",
"name": "Hike: Variables In Code",
"dashedName": "hike-variables-in-code",
"title": "Variables In Code",
"difficulty": 9.16,
"challengeSeed": [
"133172920"
@ -583,6 +582,7 @@
"But be careful - if we put console.log(\"x\"), with the x in quotation marks, it will output the letter \"x\".",
"What I want you to take away from this video is that variables exist in code, and you can store everything from a simple string all the way up to a function, all within a simple name."
],
"type": "hike",
"challengeType": 6,
"tests": [
["Variables are useful in coding languages like JavaScript.", true],
@ -601,8 +601,7 @@
},
{
"id": "bd7029d8c441eddfbeb5bddf",
"name": "Hike: Source Code",
"dashedName": "hike-source-code",
"title": "Source Code",
"difficulty": 9.17,
"challengeSeed": [
"133177129"
@ -627,6 +626,7 @@
"It's a great way for websites and software to grow in a strong and fast way because of the community working together to improve it.",
"One unwritten rule of contributing to open source projects is that you should generally submit your improvements to also be open source, and by giving that improvement back to the public, you let others use your improvement as well."
],
"type": "hike",
"challengeType": 6,
"tests": [
["Source code is a text document.", true],
@ -646,8 +646,7 @@
},
{
"id": "bd7129d8b441eddfbeb5bddf",
"name": "Hike: Routers and Packets",
"dashedName": "hike-routers-and-packets",
"title": "Routers and Packets",
"difficulty": 9.18,
"challengeSeed": [
"133181251"
@ -678,6 +677,7 @@
"They can take whichever route is open, whichever is fastest, and since they have the end IP address, all of the routers know where to send them.",
"Once they get to the end destination, that computer knows how to put all of the information back together."
],
"type": "hike",
"challengeType": 6,
"tests": [
["Routers have to know the whole internet.", false, "Routers just have to know the stops around them to send information in the right direction."],
@ -697,8 +697,7 @@
},
{
"id": "bd7129d8a441eddfbeb5bddf",
"name": "Hike: Hardware: Chips and Moore's Law",
"dashedName": "hike-chips-and-moores-law",
"title": "Hardware: Chips and Moore's Law",
"difficulty": 9.19,
"challengeSeed": [
"133182057"
@ -715,6 +714,7 @@
"Moore's Law is the observation that the amount of transistors fit on each chip has doubled every two years since 1965.",
"This is important because it's making technology more affordable and accessible."
],
"type": "hike",
"challengeType": 6,
"tests": [
["Chips have transistors, little switches that can store a 1 or a 0.", true],
@ -734,8 +734,7 @@
},
{
"id": "bd7129d80441eddfbeb5bddf",
"name": "Hike: Analog vs Digital and File Compression",
"dashedName": "hike-analog-vs-digital-and-file-compression",
"title": "Analog vs Digital and File Compression",
"difficulty": 9.20,
"challengeSeed": [
"133182587"
@ -755,6 +754,7 @@
"In images, it's done by measuring groups of pixels by 16 instead of individually.",
"The takeaway from this video is that you'll want to use digital files as they're a higher quality, and when you're looking at compression, you want to decide how far you are willing to go to ensure the user still has the best possible experience."
],
"type": "hike",
"challengeType": 6,
"tests": [
["Digital files can be made from analog sounds and analog sounds can be made from digital files.", true],
@ -773,8 +773,7 @@
},
{
"id": "bd7129d89441eddfbeb5bddf",
"name": "Hike: Computer Security",
"dashedName": "hike-computer-security",
"title": "Computer Security",
"difficulty": 9.21,
"challengeSeed": [
"133186284"
@ -808,6 +807,7 @@
"Those bugs have been patched in newer versions, so if you keep everything updated, you'll avoid lots of problems.",
"These are all very basic things you should know about how to keep your information safe on your computer."
],
"type": "hike",
"challengeType": 6,
"tests": [
["Passwords should be shared with all of your accounts.", false, "Don't reuse important passwords"],

File diff suppressed because it is too large Load Diff

View File

@ -3,45 +3,34 @@
"order": 0.009,
"challenges": [
{
"id": "a2f1d72d9b908d0bd72bb9f6",
"name": "Bonfire: Make a Person",
"dashedName": "bonfire-make-a-person",
"difficulty": "3.01",
"id": "a3566b1109230028080c9345",
"title": "Sum All Numbers in a Range",
"difficulty": "2.00",
"description": [
"Fill in the object constructor with the methods specified in the tests.",
"Those methods are getFirstName(), getLastName(), getFullName(), setFirstName(first), setLastName(last), and setFullName(firstAndLast).",
"All functions that take an argument have an arity of 1, and the argument will be a string.",
"These methods must be the only available means for interacting with the object.",
"We'll pass you an array of two numbers. Return the sum of those two numbers and all numbers between them.",
"The lowest number will not always come first.",
"Remember to use <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
],
"challengeSeed": [
"var Person = function(firstAndLast) {",
" return firstAndLast;",
"};",
"function sumAll(arr) {",
" return(1);",
"}",
"",
"var bob = new Person('Bob Ross');",
"bob.getFullName();"
"sumAll([1, 4]);"
],
"tests": [
"expect(Object.keys(bob).length).to.eql(6);",
"expect(bob instanceof Person).to.be.true;",
"expect(bob.firstName).to.be.undefined();",
"expect(bob.lastName).to.be.undefined();",
"expect(bob.getFirstName()).to.eql('Bob');",
"expect(bob.getLastName()).to.eql('Ross');",
"expect(bob.getFullName()).to.eql('Bob Ross');",
"bob.setFirstName('Happy');",
"expect(bob.getFirstName()).to.eql('Happy');",
"bob.setLastName('Trees');",
"expect(bob.getLastName()).to.eql('Trees');",
"bob.setFullName('George Carlin');",
"expect(bob.getFullName()).to.eql('George Carlin');",
"bob.setFullName('Bob Ross');"
"expect(sumAll([1, 4])).to.be.a('Number');",
"expect(sumAll([1, 4])).to.equal(10);",
"expect(sumAll([4, 1])).to.equal(10);",
"expect(sumAll([5, 10])).to.equal(45);",
"expect(sumAll([10, 5])).to.equal(45);"
],
"MDNlinks": [
"Closures",
"Details of the Object Model"
"Math.max()",
"Math.min()",
"Array.reduce()"
],
"type": "bonfire",
"challengeType": 5,
"nameCn": "",
"descriptionCn": [],
@ -55,34 +44,531 @@
"descriptionPt": []
},
{
"id": "af4afb223120f7348cdfc9fd",
"name": "Bonfire: Map the Debris",
"dashedName": "bonfire-map-the-debris",
"difficulty": "3.02",
"id": "a5de63ebea8dbee56860f4f2",
"title": "Diff Two Arrays",
"difficulty": "2.01",
"description": [
"Return a new array that transforms the element's average altitude into their orbital periods.",
"The array will contain objects in the format <code>{name: 'name', avgAlt: avgAlt}</code>.",
"You can read about orbital periods <a href=\"http://en.wikipedia.org/wiki/Orbital_period\" target='_blank'>on wikipedia</a>.",
"The values should be rounded to the nearest whole number. The body being orbited is Earth.",
"The radius of the earth is 6367.4447 kilometers, and the GM value of earth is 398600.4418",
"Compare two arrays and return a new array with any items not found in both of the original arrays.",
"Remember to use <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
],
"challengeSeed": [
"function orbitalPeriod(arr) {",
" var GM = 398600.4418;",
" var earthRadius = 6367.4447;",
"function diff(arr1, arr2) {",
" var newArr = [];",
" // Same, same; but different.",
" return newArr;",
"}",
"",
"diff([1, 2, 3, 5], [1, 2, 3, 4, 5]);"
],
"tests": [
"expect(diff([1, 2, 3, 5], [1, 2, 3, 4, 5])).to.be.a('array');",
"assert.deepEqual(diff(['diorite', 'andesite', 'grass', 'dirt', 'pink wool', 'dead shrub'], ['diorite', 'andesite', 'grass', 'dirt', 'dead shrub']), ['pink wool'], 'arrays with only one difference');",
"assert.includeMembers(diff(['andesite', 'grass', 'dirt', 'pink wool', 'dead shrub'], ['diorite', 'andesite', 'grass', 'dirt', 'dead shrub']), ['diorite', 'pink wool'], 'arrays with more than one difference');",
"assert.deepEqual(diff(['andesite', 'grass', 'dirt', 'dead shrub'], ['andesite', 'grass', 'dirt', 'dead shrub']), [], 'arrays with no difference');",
"assert.deepEqual(diff([1, 2, 3, 5], [1, 2, 3, 4, 5]), [4], 'arrays with numbers');",
"assert.includeMembers(diff([1, 'calf', 3, 'piglet'], [1, 'calf', 3, 4]), ['piglet', 4], 'arrays with numbers and strings');",
"assert.deepEqual(diff([], ['snuffleupagus', 'cookie monster', 'elmo']), ['snuffleupagus', 'cookie monster', 'elmo'], 'empty array');"
],
"MDNlinks": [
"Comparison Operators",
"String.slice()",
"Array.filter()",
"Array.indexOf()",
"String.concat()"
],
"type": "bonfire",
"challengeType": 5,
"nameCn": "",
"descriptionCn": [],
"nameFr": "",
"descriptionFr": [],
"nameRu": "",
"descriptionRu": [],
"nameEs": "",
"descriptionEs": [],
"namePt": "",
"descriptionPt": []
},
{
"id": "a7f4d8f2483413a6ce226cac",
"title": "Roman Numeral Converter",
"tests": [
"expect(convert(12)).to.equal(\"XII\");",
"expect(convert(5)).to.equal(\"V\");",
"expect(convert(9)).to.equal(\"IX\");",
"expect(convert(29)).to.equal(\"XXIX\");",
"expect(convert(16)).to.equal(\"XVI\");"
],
"difficulty": "2.02",
"description": [
"Convert the given number into a roman numeral.",
"All <a href=\"http://www.mathsisfun.com/roman-numerals.html\" target=\"_blank\">roman numerals</a> answers should be provided in upper-case.",
"Remember to use <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
],
"challengeSeed": [
"function convert(num) {",
" return num;",
"}",
"",
"convert(36);"
],
"MDNlinks": [
"Array.splice()",
"Array.indexOf()",
"Array.join()"
],
"type": "bonfire",
"challengeType": 5,
"nameCn": "",
"descriptionCn": [],
"nameFr": "",
"descriptionFr": [],
"nameRu": "",
"descriptionRu": [],
"nameEs": "",
"descriptionEs": [],
"namePt": "",
"descriptionPt": []
},
{
"id": "a0b5010f579e69b815e7c5d6",
"title": "Search and Replace",
"tests": [
"expect(replace(\"Let us go to the store\", \"store\", \"mall\")).to.equal(\"Let us go to the mall\");",
"expect(replace(\"He is Sleeping on the couch\", \"Sleeping\", \"sitting\")).to.equal(\"He is Sitting on the couch\");",
"expect(replace(\"This has a spellngi error\", \"spellngi\", \"spelling\")).to.equal(\"This has a spelling error\");",
"expect(replace(\"His name is Tom\", \"Tom\", \"john\")).to.equal(\"His name is John\");",
"expect(replace(\"Let us get back to more Coding\", \"Coding\", \"bonfires\")).to.equal(\"Let us get back to more Bonfires\");"
],
"difficulty": "2.03",
"description": [
"Perform a search and replace on the sentence using the arguments provided and return the new sentence.",
"First argument is the sentence to perform the search and replace on.",
"Second argument is the word that you will be replacing (before).",
"Third argument is what you will be replacing the second argument with (after).",
"NOTE: Preserve the case of the original word when you are replacing it. For example if you mean to replace the word 'Book' with the word 'dog', it should be replaced as 'Dog'",
"Remember to use <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
],
"challengeSeed": [
"function replace(str, before, after) {",
" return str;",
"}",
"",
"replace(\"A quick brown fox jumped over the lazy dog\", \"jumped\", \"leaped\");"
],
"MDNlinks": [
"Array.splice()",
"String.replace()",
"Array.join()"
],
"type": "bonfire",
"challengeType": 5,
"nameCn": "",
"descriptionCn": [],
"nameFr": "",
"descriptionFr": [],
"nameRu": "",
"descriptionRu": [],
"nameEs": "",
"descriptionEs": [],
"namePt": "",
"descriptionPt": []
},
{
"id": "aa7697ea2477d1316795783b",
"title": "Pig Latin",
"tests": [
"expect(translate(\"california\")).to.equal(\"aliforniacay\");",
"expect(translate(\"paragraphs\")).to.equal(\"aragraphspay\");",
"expect(translate(\"glove\")).to.equal(\"oveglay\");",
"expect(translate(\"algorithm\")).to.equal(\"algorithmway\");",
"expect(translate(\"eight\")).to.equal(\"eightway\");"
],
"difficulty": "2.04",
"description": [
"Translate the provided string to pig latin.",
"<a href=\"http://en.wikipedia.org/wiki/Pig_Latin\" target=\"_blank\">Pig Latin</a> takes the first consonant (or consonant cluster) of an English word, moves it to the end of the word and suffixes an \"ay\".",
"If a word begins with a vowel you just add \"way\" to the end.",
"Remember to use <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
],
"challengeSeed": [
"function translate(str) {",
" return str;",
"}",
"",
"translate(\"consonant\");"
],
"MDNlinks": [
"Array.indexOf()",
"Array.push()",
"Array.join()",
"String.substr()",
"String.split()"
],
"type": "bonfire",
"challengeType": 5,
"nameCn": "",
"descriptionCn": [],
"nameFr": "",
"descriptionFr": [],
"nameRu": "",
"descriptionRu": [],
"nameEs": "",
"descriptionEs": [],
"namePt": "",
"descriptionPt": []
},
{
"id": "afd15382cdfb22c9efe8b7de",
"title": "DNA Pairing",
"tests": [
"assert.deepEqual(pair(\"ATCGA\"),[['A','T'],['T','A'],['C','G'],['G','C'],['A','T']], 'should return the dna pair');",
"assert.deepEqual(pair(\"TTGAG\"),[['T','A'],['T','A'],['G','C'],['A','T'],['G','C']], 'should return the dna pair');",
"assert.deepEqual(pair(\"CTCTA\"),[['C','G'],['T','A'],['C','G'],['T','A'],['A','T']], 'should return the dna pair');"
],
"difficulty": "2.05",
"description": [
"The DNA strand is missing the pairing element. Match each character with the missing element and return the results as a 2d array.",
"<a href=\"http://en.wikipedia.org/wiki/Base_pair\" target=\"_blank\">Base pairs</a> are a pair of AT and CG. Match the missing element to the provided character.",
"Return the provided character as the first element in each array.",
"Remember to use <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
],
"challengeSeed": [
"function pair(str) {",
" return str;",
"}",
"",
"pair(\"GCG\");"
],
"MDNlinks": [
"Array.push()",
"String.split()"
],
"type": "bonfire",
"challengeType": 5,
"nameCn": "",
"descriptionCn": [],
"nameFr": "",
"descriptionFr": [],
"nameRu": "",
"descriptionRu": [],
"nameEs": "",
"descriptionEs": [],
"namePt": "",
"descriptionPt": []
},
{
"id": "af7588ade1100bde429baf20",
"title": "Missing letters",
"difficulty": "2.05",
"description": [
"Find the missing letter in the passed letter range and return it.",
"If all letters are present in the range, return undefined.",
"Remember to use <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
],
"challengeSeed": [
"function fearNotLetter(str) {",
" return str;",
"}",
"",
"fearNotLetter('abce');"
],
"tests": [
"expect(fearNotLetter('abce')).to.equal('d');",
"expect(fearNotLetter('bcd')).to.be.undefined;",
"expect(fearNotLetter('abcdefghjklmno')).to.equal('i');",
"expect(fearNotLetter('yz')).to.be.undefined;"
],
"MDNlinks": [
"String.charCodeAt()",
"String.fromCharCode()"
],
"type": "bonfire",
"challengeType": 5,
"nameCn": "",
"descriptionCn": [],
"nameFr": "",
"descriptionFr": [],
"nameRu": "",
"descriptionRu": [],
"nameEs": "",
"descriptionEs": [],
"namePt": "",
"descriptionPt": []
},
{
"id": "a77dbc43c33f39daa4429b4f",
"title": "Boo who",
"difficulty": "2.06",
"description": [
"Check if a value is classified as a boolean primitive. Return true or false.",
"Boolean primitives are true and false.",
"Remember to use <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
],
"challengeSeed": [
"function boo(bool) {",
" // What is the new fad diet for ghost developers? The Boolean.",
" return bool;",
"}",
"",
"boo(null);"
],
"tests": [
"assert.strictEqual(boo(true), true);",
"assert.strictEqual(boo(false), true);",
"assert.strictEqual(boo([1, 2, 3]), false);",
"assert.strictEqual(boo([].slice), false);",
"assert.strictEqual(boo({ 'a': 1 }), false);",
"assert.strictEqual(boo(1), false);",
"assert.strictEqual(boo(NaN), false);",
"assert.strictEqual(boo('a'), false);"
],
"MDNlinks": [
"Boolean Objects"
],
"type": "bonfire",
"challengeType": 5,
"nameCn": "",
"descriptionCn": [],
"nameFr": "",
"descriptionFr": [],
"nameRu": "",
"descriptionRu": [],
"nameEs": "",
"descriptionEs": [],
"namePt": "",
"descriptionPt": []
},
{
"id": "a105e963526e7de52b219be9",
"title": "Sorted Union",
"difficulty": "2.07",
"description": [
"Write a function that takes two or more arrays and returns a new array of unique values in the order of the original provided arrays.",
"In other words, all values present from all arrays should be included in their original order, but with no duplicates in the final array.",
"The unique numbers should be sorted by their original order, but the final array should not be sorted in numerical order.",
"Check the assertion tests for examples.",
"Remember to use <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
],
"challengeSeed": [
"function unite(arr1, arr2, arr3) {",
" return arr1;",
"}",
"",
"unite([1, 3, 2], [5, 2, 1, 4], [2, 1]);"
],
"tests": [
"assert.deepEqual(unite([1, 3, 2], [5, 2, 1, 4], [2, 1]), [1, 3, 2, 5, 4], 'should return the union of the given arrays');",
"assert.deepEqual(unite([1, 3, 2], [1, [5]], [2, [4]]), [1, 3, 2, [5], [4]], 'should not flatten nested arrays');",
"assert.deepEqual(unite([1, 2, 3], [5, 2, 1]), [1, 2, 3, 5], 'should correctly handle exactly two arguments');",
"assert.deepEqual(unite([1, 2, 3], [5, 2, 1, 4], [2, 1], [6, 7, 8]), [ 1, 2, 3, 5, 4, 6, 7, 8 ], 'should correctly handle higher numbers of arguments');"
],
"MDNlinks": [
"Arguments object",
"Array.reduce()"
],
"type": "bonfire",
"challengeType": 5,
"nameCn": "",
"descriptionCn": [],
"nameFr": "",
"descriptionFr": [],
"nameRu": "",
"descriptionRu": [],
"nameEs": "",
"descriptionEs": [],
"namePt": "",
"descriptionPt": []
},
{
"id": "a6b0bb188d873cb2c8729495",
"title": "Convert HTML Entities",
"difficulty": "2.07",
"description": [
"Convert the characters \"&\", \"<\", \">\", '\"' (double quote), and \"'\" (apostrophe), in a string to their corresponding HTML entities.",
"Remember to use <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
],
"challengeSeed": [
"function convert(str) {",
" // &colon;&rpar;",
" return str;",
"}",
"",
"convert('Dolce & Gabbana');"
],
"tests": [
"assert.strictEqual(convert('Dolce & Gabbana'), 'Dolce &amp; Gabbana', 'should escape characters');",
"assert.strictEqual(convert('Hamburgers < Pizza < Tacos'), 'Hamburgers &lt; Pizza &lt; Tacos', 'should escape characters');",
"assert.strictEqual(convert('Sixty > twelve'), 'Sixty &gt; twelve', 'should escape characters');",
"assert.strictEqual(convert('Stuff in \"quotation marks\"'), 'Stuff in &quot;quotation marks&quot;', 'should escape characters');",
"assert.strictEqual(convert(\"Shindler's List\"), 'Shindler&apos;s List', 'should escape characters');",
"assert.strictEqual(convert('<>'), '&lt;&gt;', 'should escape characters');",
"assert.strictEqual(convert('abc'), 'abc', 'should handle strings with nothing to escape');"
],
"MDNlinks": [
"RegExp",
"HTML Entities"
],
"type": "bonfire",
"challengeType": 5,
"nameCn": "",
"descriptionCn": [],
"nameFr": "",
"descriptionFr": [],
"nameRu": "",
"descriptionRu": [],
"nameEs": "",
"descriptionEs": [],
"namePt": "",
"descriptionPt": []
},
{
"id": "a103376db3ba46b2d50db289",
"title": "Spinal Tap Case",
"difficulty": "2.08",
"description": [
"Convert a string to spinal case. Spinal case is all-lowercase-words-joined-by-dashes.",
"Remember to use <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
],
"challengeSeed": [
"function spinalCase(str) {",
" // \"It's such a fine line between stupid, and clever.\"",
" // --David St. Hubbins",
" return str;",
"}",
"",
"spinalCase('This Is Spinal Tap');"
],
"tests": [
"assert.strictEqual(spinalCase('This Is Spinal Tap'), 'this-is-spinal-tap', 'should return spinal case from string with spaces');",
"assert.strictEqual(spinalCase('thisIsSpinalTap'), 'this-is-spinal-tap', 'should return spinal case from string with camel case');",
"assert.strictEqual(spinalCase('The_Andy_Griffith_Show'), 'the-andy-griffith-show', 'should return spinal case from string with snake case');",
"assert.strictEqual(spinalCase('Teletubbies say Eh-oh'), 'teletubbies-say-eh-oh', 'should return spinal case from string with spaces and hyphens');"
],
"MDNlinks": [
"RegExp",
"String.replace()"
],
"type": "bonfire",
"challengeType": 5,
"nameCn": "",
"descriptionCn": [],
"nameFr": "",
"descriptionFr": [],
"nameRu": "",
"descriptionRu": [],
"nameEs": "",
"descriptionEs": [],
"namePt": "",
"descriptionPt": []
},
{
"id": "a5229172f011153519423690",
"title": "Sum All Odd Fibonacci Numbers",
"difficulty": "2.09",
"description": [
"Return the sum of all odd Fibonacci numbers up to and including the passed number if it is a Fibonacci number.",
"The first few numbers of the Fibonacci sequence are 1, 1, 2, 3, 5 and 8, and each subsequent number is the sum of the previous two numbers.",
"As an example, passing 4 to the function should return 5 because all the odd Fibonacci numbers under 4 are 1, 1, and 3.",
"Remember to use <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
],
"challengeSeed": [
"function sumFibs(num) {",
" return num;",
"}",
"",
"sumFibs(4);"
],
"tests": [
"expect(sumFibs(1)).to.be.a('number');",
"expect(sumFibs(1000)).to.equal(1785);",
"expect(sumFibs(4000000)).to.equal(4613732);",
"expect(sumFibs(4)).to.equal(5);",
"expect(sumFibs(75024)).to.equal(60696);",
"expect(sumFibs(75025)).to.equal(135721);"
],
"MDNlinks": [
"Remainder"
],
"type": "bonfire",
"challengeType": 5,
"nameCn": "",
"descriptionCn": [],
"nameFr": "",
"descriptionFr": [],
"nameRu": "",
"descriptionRu": [],
"nameEs": "",
"descriptionEs": [],
"namePt": "",
"descriptionPt": []
},
{
"id": "a3bfc1673c0526e06d3ac698",
"title": "Sum All Primes",
"difficulty": "2.10",
"description": [
"Sum all the prime numbers up to and including the provided number.",
"A prime number is defined as having only two divisors, 1 and itself. For example, 2 is a prime number because it's only divisible by 1 and 2. 1 isn't a prime number, because it's only divisible by itself.",
"The provided number may not be a prime.",
"Remember to use <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
],
"challengeSeed": [
"function sumPrimes(num) {",
" return num;",
"}",
"",
"sumPrimes(10);"
],
"tests": [
"expect(sumPrimes(10)).to.be.a('number');",
"expect(sumPrimes(10)).to.equal(17);",
"expect(sumPrimes(977)).to.equal(73156);"
],
"MDNlinks": [
"For Loops",
"Array.push()"
],
"type": "bonfire",
"challengeType": 5,
"nameCn": "",
"descriptionCn": [],
"nameFr": "",
"descriptionFr": [],
"nameRu": "",
"descriptionRu": [],
"nameEs": "",
"descriptionEs": [],
"namePt": "",
"descriptionPt": []
},
{
"id": "ae9defd7acaf69703ab432ea",
"title": "Smallest Common Multiple",
"difficulty": "2.11",
"description": [
"Find the smallest number that is evenly divisible by all numbers in the provided range.",
"The range will be an array of two numbers that will not necessarily be in numerical order.",
"Remember to use <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
],
"challengeSeed": [
"function smallestCommons(arr) {",
" return arr;",
"}",
"",
"orbitalPeriod([{name : \"sputkin\", avgAlt : 35873.5553}]);"
"",
"smallestCommons([1,5]);"
],
"tests": [
"expect(orbitalPeriod([{name : \"sputkin\", avgAlt : 35873.5553}])).to.eqls([{name: \"sputkin\", orbitalPeriod: 86400}]);",
"expect(orbitalPeriod([{name: \"iss\", avgAlt: 413.6}, {name: \"hubble\", avgAlt: 556.7}, {name: \"moon\", avgAlt: 378632.553}])).to.eqls([{name : \"iss\", orbitalPeriod: 5557}, {name: \"hubble\", orbitalPeriod: 5734}, {name: \"moon\", orbitalPeriod: 2377399}]);"
"expect(smallestCommons([1,5])).to.be.a('number');",
"expect(smallestCommons([1,5])).to.equal(60);",
"expect(smallestCommons([5,1])).to.equal(60);",
"expect(smallestCommons([1,13])).to.equal(360360);"
],
"MDNlinks": [
"Math.pow()"
"Smallest Common Multiple"
],
"type": "bonfire",
"challengeType": 5,
"nameCn": "",
"descriptionCn": [],
@ -96,33 +582,223 @@
"descriptionPt": []
},
{
"id": "a3f503de51cfab748ff001aa",
"name": "Bonfire: Pairwise",
"dashedName": "bonfire-pairwise",
"difficulty": "3.03",
"id": "a6e40f1041b06c996f7b2406",
"title": "Finders Keepers",
"difficulty": "2.12",
"description": [
"Return the sum of all indices of elements of 'arr' that can be paired with one other element to form a sum that equals the value in the second argument 'arg'. If multiple sums are possible, return the smallest sum. Once an element has been used, it cannot be reused to pair with another.",
"For example, pairwise([1, 4, 2, 3, 0, 5], 7) should return 11 because 4, 2, 3 and 5 can be paired with each other to equal 7.",
"pairwise([1, 3, 2, 4], 4) would only equal 1, because only the first two elements can be paired to equal 4, and the first element has an index of 0!",
"Create a function that looks through an array (first argument) and returns the first element in the array that passes a truth test (second argument).",
"Remember to use <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
],
"challengeSeed": [
"function pairwise(arr, arg) {",
" return arg;",
"function find(arr, func) {",
" var num = 0;",
" return num;",
"}",
"",
"pairwise([1,4,2,3,0,5], 7);"
"find([1, 2, 3, 4], function(num){ return num % 2 === 0; });"
],
"tests": [
"expect(pairwise([1, 4, 2, 3, 0, 5], 7)).to.equal(11);",
"expect(pairwise([1, 3, 2, 4], 4)).to.equal(1);",
"expect(pairwise([1,1,1], 2)).to.equal(1);",
"expect(pairwise([0, 0, 0, 0, 1, 1], 1)).to.equal(10);",
"expect(pairwise([], 100)).to.equal(0);"
"assert.strictEqual(find([1, 3, 5, 8, 9, 10], function(num) { return num % 2 === 0; }), 8, 'should return first found value');",
"assert.strictEqual(find([1, 3, 5, 9], function(num) { return num % 2 === 0; }), undefined, 'should return undefined if not found');"
],
"MDNlinks": [
"Array.reduce()"
"Array.some()"
],
"type": "bonfire",
"challengeType": 5,
"nameCn": "",
"descriptionCn": [],
"nameFr": "",
"descriptionFr": [],
"nameRu": "",
"descriptionRu": [],
"nameEs": "",
"descriptionEs": [],
"namePt": "",
"descriptionPt": []
},
{
"id": "a5deed1811a43193f9f1c841",
"title": "Drop it",
"difficulty": "2.13",
"description": [
"Drop the elements of an array (first argument), starting from the front, until the predicate (second argument) returns true.",
"Remember to use <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
],
"challengeSeed": [
"function drop(arr, func) {",
" // Drop them elements.",
" return arr;",
"}",
"",
"drop([1, 2, 3], function(n) {return n < 3; });"
],
"tests": [
"expect(drop([1, 2, 3, 4], function(n) {return n >= 3; })).to.eqls([3, 4]);",
"expect(drop([1, 2, 3], function(n) {return n > 0; })).to.eqls([1, 2, 3]);",
"expect(drop([1, 2, 3, 4], function(n) {return n > 5; })).to.eqls([]);"
],
"MDNlinks": [
"Arguments object",
"Array.shift()"
],
"type": "bonfire",
"challengeType": 5,
"nameCn": "",
"descriptionCn": [],
"nameFr": "",
"descriptionFr": [],
"nameRu": "",
"descriptionRu": [],
"nameEs": "",
"descriptionEs": [],
"namePt": "",
"descriptionPt": []
},
{
"id": "ab306dbdcc907c7ddfc30830",
"title": "Steamroller",
"difficulty": "2.14",
"description": [
"Flatten a nested array. You must account for varying levels of nesting.",
"Remember to use <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
],
"challengeSeed": [
"function steamroller(arr) {",
" // I'm a steamroller, baby",
" return arr;",
"}",
"",
"steamroller([1, [2], [3, [[4]]]]);"
],
"tests": [
"assert.deepEqual(steamroller([[['a']], [['b']]]), ['a', 'b'], 'should flatten nested arrays');",
"assert.deepEqual(steamroller([1, [2], [3, [[4]]]]), [1, 2, 3, 4], 'should flatten nested arrays');",
"assert.deepEqual(steamroller([1, [], [3, [[4]]]]), [1, 3, 4], 'should work with empty arrays');",
"assert.deepEqual(steamroller([1, {}, [3, [[4]]]]), [1, {}, 3, 4], 'should work with actual objects');"
],
"MDNlinks": [
"Array.isArray()"
],
"type": "bonfire",
"challengeType": 5,
"nameCn": "",
"descriptionCn": [],
"nameFr": "",
"descriptionFr": [],
"nameRu": "",
"descriptionRu": [],
"nameEs": "",
"descriptionEs": [],
"namePt": "",
"descriptionPt": []
},
{
"id": "a8d97bd4c764e91f9d2bda01",
"title": "Binary Agents",
"difficulty": "2.15",
"description": [
"Return an English translated sentence of the passed binary string.",
"The binary string will be space separated.",
"Remember to use <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
],
"challengeSeed": [
"function binaryAgent(str) {",
" return str;",
"}",
"",
"binaryAgent('01000001 01110010 01100101 01101110 00100111 01110100 00100000 01100010 01101111 01101110 01100110 01101001 01110010 01100101 01110011 00100000 01100110 01110101 01101110 00100001 00111111');"
],
"tests": [
"expect(binaryAgent('01000001 01110010 01100101 01101110 00100111 01110100 00100000 01100010 01101111 01101110 01100110 01101001 01110010 01100101 01110011 00100000 01100110 01110101 01101110 00100001 00111111')).to.equal(\"Aren't bonfires fun!?\");",
"expect(binaryAgent('01001001 00100000 01101100 01101111 01110110 01100101 00100000 01000110 01110010 01100101 01100101 01000011 01101111 01100100 01100101 01000011 01100001 01101101 01110000 00100001')).to.equal(\"I love FreeCodeCamp!\");"
],
"MDNlinks": [
"String.charCodeAt()",
"String.fromCharCode()"
],
"type": "bonfire",
"challengeType": 5,
"nameCn": "",
"descriptionCn": [],
"nameFr": "",
"descriptionFr": [],
"nameRu": "",
"descriptionRu": [],
"nameEs": "",
"descriptionEs": [],
"namePt": "",
"descriptionPt": []
},
{
"id": "a10d2431ad0c6a099a4b8b52",
"title": "Everything Be True",
"difficulty": "2.21",
"description": [
"Check if the predicate (second argument) returns truthy (defined) for all elements of a collection (first argument).",
"For this, check to see if the property defined in the second argument is present on every element of the collection.",
"Remember, you can access object properties through either dot notation or [] notation.",
"Remember to use <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
],
"challengeSeed": [
"function every(collection, pre) {",
" // Does everyone have one of these?",
" return pre;",
"}",
"",
"every([{'user': 'Tinky-Winky', 'sex': 'male'}, {'user': 'Dipsy', 'sex': 'male'}, {'user': 'Laa-Laa', 'sex': 'female'}, {'user': 'Po', 'sex': 'female'}], 'sex');"
],
"tests": [
"assert.strictEqual(every([{'user': 'Tinky-Winky', 'sex': 'male'}, {'user': 'Dipsy', 'sex': 'male'}, {'user': 'Laa-Laa', 'sex': 'female'}, {'user': 'Po', 'sex': 'female'}], 'sex'), true, 'should return true if predicate returns truthy for all elements in the collection');",
"assert.strictEqual(every([{'user': 'Tinky-Winky', 'sex': 'male'}, {'user': 'Dipsy', 'sex': 'male'}, {'user': 'Laa-Laa', 'sex': 'female'}, {'user': 'Po', 'sex': 'female'}], {'sex': 'female'}), false, 'should return false if predicate returns falsey for any element in the collection');",
"assert.strictEqual(every([{'user': 'Tinky-Winky', 'sex': 'female'}, {'user': 'Dipsy', 'sex': 'male'}, {'user': 'Laa-Laa', 'sex': 'female'}, {'user': 'Po', 'sex': 'female'}], {'sex': 'female'}), false, 'should return false if predicate returns falsey for any element in the collection');"
],
"MDNlinks": [
"Object.hasOwnProperty()",
"Object.getOwnPropertyNames()"
],
"type": "bonfire",
"challengeType": 5,
"nameCn": "",
"descriptionCn": [],
"nameFr": "",
"descriptionFr": [],
"nameRu": "",
"descriptionRu": [],
"nameEs": "",
"descriptionEs": [],
"namePt": "",
"descriptionPt": []
},
{
"id": "a97fd23d9b809dac9921074f",
"title": "Arguments Optional",
"difficulty": "2.22",
"description": [
"Create a function that sums two arguments together. If only one argument is provided, return a function that expects one additional argument and will return the sum.",
"For example, add(2, 3) should return 5, and add(2) should return a function that is waiting for an argument so that <code>var sum2And = add(2); return sum2And(3); // 5</code>",
"If either argument isn't a valid number, return undefined.",
"Remember to use <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
],
"challengeSeed": [
"function add() {",
" return false;",
"}",
"",
"add(2,3);"
],
"tests": [
"expect(add(2, 3)).to.equal(5);",
"expect(add(2)(3)).to.equal(5);",
"expect(add('http://bit.ly/IqT6zt')).to.be.undefined;",
"expect(add(2, '3')).to.be.undefined;",
"expect(add(2)([3])).to.be.undefined;"
],
"MDNlinks": [
"Global Function Object",
"Arguments object"
],
"type": "bonfire",
"challengeType": 5,
"nameCn": "",
"descriptionCn": [],

View File

@ -1,11 +1,10 @@
{
"name": "Intermediate Front End Development Projects",
"order": 0.016,
"order": 0.018,
"challenges": [
{
"id": "bd7158d8c442eddfaeb5bd18",
"name": "Zipline: Stylize Stories on Camper News",
"dashedName": "zipline-stylize-stories-on-camper-news",
"title": "Stylize Stories on Camper News",
"difficulty": 1.02,
"challengeSeed": ["126415129"],
"description": [
@ -23,6 +22,7 @@
"When you are finished, click the \"I've completed this challenge\" button and include a link to your CodePen. If you pair programmed, you should also include the Free Code Camp username of your pair.",
"If you'd like immediate feedback on your project, click this button and paste in a link to your CodePen project. Otherwise, we'll review it before you start your nonprofit projects.<br><br><a class='btn btn-primary btn-block' href='https://twitter.com/intent/tweet?text=Check%20out%20the%20project%20I%20just%20built%20with%20%40FreeCodeCamp:%20%0A%20%23LearnToCode%20%23JavaScript' target='_blank'>Click here then add your link to your tweet's text</a>"
],
"type": "zipline",
"challengeType": 3,
"tests": [],
"nameCn": "",
@ -38,8 +38,7 @@
},
{
"id": "bd7158d8c442eddfaeb5bd19",
"name": "Zipline: Wikipedia Viewer",
"dashedName": "zipline-wikipedia-viewer",
"title": "Wikipedia Viewer",
"difficulty": 1.03,
"challengeSeed": ["126415131"],
"description": [
@ -56,6 +55,7 @@
"When you are finished, click the \"I've completed this challenge\" button and include a link to your CodePen. If you pair programmed, you should also include the Free Code Camp username of your pair.",
"If you'd like immediate feedback on your project, click this button and paste in a link to your CodePen project. Otherwise, we'll review it before you start your nonprofit projects.<br><br><a class='btn btn-primary btn-block' href='https://twitter.com/intent/tweet?text=Check%20out%20the%20project%20I%20just%20built%20with%20%40FreeCodeCamp:%20%0A%20%23LearnToCode%20%23JavaScript' target='_blank'>Click here then add your link to your tweet's text</a>"
],
"type": "zipline",
"challengeType": 3,
"tests": [],
"nameCn": "",
@ -71,8 +71,7 @@
},
{
"id": "bd7158d8c442eddfaeb5bd17",
"name": "Zipline: Build a JavaScript Calculator",
"dashedName": "zipline-build-a-javascript-calculator",
"title": "Build a JavaScript Calculator",
"difficulty": 1.05,
"challengeSeed": ["126411565"],
"description": [
@ -88,6 +87,7 @@
"When you are finished, click the \"I've completed this challenge\" button and include a link to your CodePen. If you pair programmed, you should also include the Free Code Camp username of your pair.",
"If you'd like immediate feedback on your project, click this button and paste in a link to your CodePen project. Otherwise, we'll review it before you start your nonprofit projects.<br><br><a class='btn btn-primary btn-block' href='https://twitter.com/intent/tweet?text=Check%20out%20the%20project%20I%20just%20built%20with%20%40FreeCodeCamp:%20%0A%20%23LearnToCode%20%23JavaScript' target='_blank'>Click here then add your link to your tweet's text</a>"
],
"type": "zipline",
"challengeType": 3,
"tests": [],
"nameCn": "",
@ -102,9 +102,8 @@
"descriptionPt": []
},
{
"id": "bd7158d8c442eddfaeb5bd1c",
"name": "Zipline: Build a Tic Tac Toe Game",
"dashedName": "zipline-build-a-tic-tac-toe-game",
"id": "bd7158d8c442eedfaeb5bd1c",
"title": "Build a Tic Tac Toe Game",
"difficulty": 1.06,
"challengeSeed": ["126415123"],
"description": [
@ -121,6 +120,46 @@
"When you are finished, click the \"I've completed this challenge\" button and include a link to your CodePen. If you pair programmed, you should also include the Free Code Camp username of your pair.",
"If you'd like immediate feedback on your project, click this button and paste in a link to your CodePen project. Otherwise, we'll review it before you start your nonprofit projects.<br><br><a class='btn btn-primary btn-block' href='https://twitter.com/intent/tweet?text=Check%20out%20the%20project%20I%20just%20built%20with%20%40FreeCodeCamp:%20%0A%20%23LearnToCode%20%23JavaScript' target='_blank'>Click here then add your link to your tweet's text</a>"
],
"type": "zipline",
"challengeType": 3,
"tests": [],
"nameCn": "",
"descriptionCn": [],
"nameFr": "",
"descriptionFr": [],
"nameRu": "",
"descriptionRu": [],
"nameEs": "",
"descriptionEs": [],
"namePt": "",
"descriptionPt": []
},
{
"id": "bd7158d8c442eddfaeb5bd1c",
"title": "Build a Simon Game",
"difficulty": 1.07,
"challengeSeed": ["126415123"],
"description": [
"<span class='text-info'>Objective:</span> Build a <a href='http://codepen.io' target='_blank'>CodePen.io</a> app that successfully reverse-engineers this: <a href='' target='_blank'>http://codepen.io/dting/full/KpJXZV/</a>.",
"<span class='text-info'>Rule #1:</span> Don't look at the example project's code on CodePen. Figure it out for yourself.",
"<span class='text-info'>Rule #2:</span> You may use whichever libraries or APIs you need.",
"<span class='text-info'>Rule #3:</span> Reverse engineer the example project's functionality, and also feel free to personalize it.",
"Here are the <a href='http://en.wikipedia.org/wiki/User_story' target='_blank'>user stories</a> you must enable, and optional bonus user stories:",
"<span class='text-info'>User Story:</span> As a user, I am presented with a random series of button presses.",
"<span class='text-info'>User Story:</span> As a user, each time I input a series of button presses correctly, I see the same series of button presses but with an additional step.",
"<span class='text-info'>User Story:</span> As a user, I hear a sound that corresponds to each button both when the series of button presses plays, and when I personally press a button.",
"<span class='text-info'>User Story:</span> As a user, if I press the wrong button, I am notified that I have done so, and that series of button presses starts again to remind me of the pattern so I can try again.",
"<span class='text-info'>User Story:</span> As a user, I can see how many steps are in the current series of button presses.",
"<span class='text-info'>Bonus User Story:</span> As a user, if I want to restart, I can hit a button to do so, and the game will return to a single step.",
"<span class='text-info'>Bonus User Story:</span> As a user, I can play in strict mode where if I get a button press wrong, it notifies me that I have done so, and the game restarts at a new random series of button presses.",
"<span class='text-info'>Bonus User Story:</span> As a user, the tempo of the game speeds up incrementally on the 5th, 9th and 13th step.",
"<span class='text-info'>Bonus User Story:</span> As a user, I can win the game by getting a series of 20 steps correct. I am notified of my victory, then the game starts over.",
"<span class='text-info'>Hint:</span> Here are mp3s you can use for each button: <code>https://s3.amazonaws.com/freecodecamp/simonSound1.mp3</code>, <code>https://s3.amazonaws.com/freecodecamp/simonSound2.mp3</code>, <code>https://s3.amazonaws.com/freecodecamp/simonSound3.mp3</code>, <code>https://s3.amazonaws.com/freecodecamp/simonSound4.mp3</code>.",
"Remember to use <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>RSAP</a> if you get stuck.",
"When you are finished, click the \"I've completed this challenge\" button and include a link to your CodePen. If you pair programmed, you should also include the Free Code Camp username of your pair.",
"If you'd like immediate feedback on your project, click this button and paste in a link to your CodePen project. Otherwise, we'll review it before you start your nonprofit projects.<br><br><a class='btn btn-primary btn-block' href='https://twitter.com/intent/tweet?text=Check%20out%20the%20project%20I%20just%20built%20with%20%40FreeCodeCamp:%20%0A%20%23LearnToCode%20%23JavaScript' target='_blank'>Click here then add your link to your tweet's text</a>"
],
"type": "zipline",
"challengeType": 3,
"tests": [],
"nameCn": "",

View File

@ -1,12 +1,10 @@
{
"name": "jQuery, Ajax, and JSON",
"dashedName": "jquery-ajax-and-json",
"name": "jQuery",
"order": 0.004,
"challenges": [
{
"id": "bad87fee1348bd9acdd08826",
"name": "Waypoint: Learn how Script Tags and Document Ready Work",
"dashedName": "waypoint-learn-how-script-tags-and-document-ready-work",
"title": "Learn how Script Tags and Document Ready Work",
"difficulty": 3.01,
"description": [
"Now we're ready to learn jQuery, the most popular JavaScript tool of all time. Don't worry about JavaScript itself - we will cover it soon.",
@ -44,13 +42,12 @@
" </div>",
"</div>"
],
"type": "waypoint",
"challengeType": 0
},
{
"id": "bad87fee1348bd9bedc08826",
"name": "Waypoint: Target HTML Elements with Selectors Using jQuery",
"dashedName": "waypoint-target-html-elements-with-selectors-using-jquery",
"title": "Target HTML Elements with Selectors Using jQuery",
"difficulty": 3.02,
"description": [
"Now we have a \"document ready function\". We'll learn more about functions later. The important thing to know is that code you put inside this function will run as soon as your browser has loaded your page.",
@ -60,7 +57,7 @@
"For example, let's make all of your <code>button</code> elements bounce. Just add this code inside your \"document ready function\": <code>$('button').addClass('animated bounce')</code>."
],
"tests": [
"assert($('button').hasClass('animated') && $('button').hasClass('bounce'), 'Use the jQuery <code>addClass()</code> function to give the classes \"animated\" and \"bounce\" to your <code>img</code> element.')",
"assert($('button').hasClass('animated') && $('button').hasClass('bounce'), 'Use the jQuery <code>addClass()</code> function to give the classes \"animated\" and \"bounce\" to your <code>button</code> element.')",
"assert(!editor.match(/class.*animated/g), 'Only use jQuery to add these classes to the element.')"
],
"challengeSeed": [
@ -94,13 +91,12 @@
" </div>",
"</div>"
],
"type": "waypoint",
"challengeType": 0
},
{
"id": "bad87fee1348bd9aedc08826",
"name": "Waypoint: Target Elements by Class Using jQuery",
"dashedName": "waypoint-target-elements-by-class-using-jquery",
"title": "Target Elements by Class Using jQuery",
"difficulty": 3.03,
"description": [
"You see how we made all of your <code>button</code> elements bounce? We selected them with <code>$('button')</code>, then we added some CSS classes to them with <code>.addClass('animated bounce');</code>.",
@ -145,12 +141,12 @@
" </div>",
"</div>"
],
"type": "waypoint",
"challengeType": 0
},
{
"id": "bad87fee1348bd9aeda08826",
"name": "Waypoint: Target Elements by ID Using jQuery",
"dashedName": "waypoint-target-elements-by-id-using-jquery",
"title": "Target Elements by ID Using jQuery",
"difficulty": 3.04,
"description": [
"You can also target elements by their id attributes.",
@ -196,13 +192,12 @@
" </div>",
"</div>"
],
"type": "waypoint",
"challengeType": 0
},
{
"id": "bad87fee1348bd9aeda08726",
"name": "Waypoint: Delete your jQuery Functions",
"dashedName": "waypoint-delete-your-jquery-functions",
"title": "Delete your jQuery Functions",
"difficulty": 3.05,
"description": [
"These animations were cool at first, but now they're getting kind of distracting.",
@ -249,17 +244,17 @@
" </div>",
"</div>"
],
"type": "waypoint",
"challengeType": 0
},
{
"id": "bad87fee1348bd9aed908626",
"name": "Waypoint: Target the same element with multiple jQuery Selectors",
"dashedName": "waypoint-target-the-same-element-with-multiple-jQuery-Selectors",
"title": "Target the same element with multiple jQuery Selectors",
"difficulty": 3.06,
"description": [
"Now you know three ways of targeting elements: by type (<code>$('button')</code>), by class (<code>($('.btn')</code>), and by id (<code>($'#target1')</code>).",
"Now you know three ways of targeting elements: by type <code>$('button')</code>, by class <code>$('.btn')</code>), and by id <code>$('#target1')</code>).",
"Use each of these jQuery selectors to target your <code>button</code> element with the class \"btn\" and the id \"target1\".",
"Use the <code>addClass()</code> jQuery function to give the element one new class for each selector: \"animated\", \"shake\", and \"button-primary\"."
"Use the <code>addClass()</code> jQuery function to give the element one new class for each selector: \"animated\", \"shake\", and \"btn-primary\"."
],
"tests": [
"assert(editor.match(/\\$\\(\\'button\\'\\)/g), 'Use the <code>$\\(\\'button\\'\\)</code> selector.')",
@ -300,12 +295,12 @@
" </div>",
"</div>"
],
"type": "waypoint",
"challengeType": 0
},
{
"id": "bad87fee1348bd9aed918626",
"name": "Waypoint: Remove Classes from an element with jQuery",
"dashedName": "waypoint-remove-classes-from-an-element-with-jquery",
"title": "Remove Classes from an element with jQuery",
"difficulty": 3.07,
"description": [
"In the same way you can add classes to an element with jQuery's <code>addClass()</code> function, you can remove them with jQuery's <code>removeClass()</code> function.",
@ -350,12 +345,12 @@
" </div>",
"</div>"
],
"type": "waypoint",
"challengeType": 0
},
{
"id": "bad87fee1348bd9aed908826",
"name": "Waypoint: Change the CSS of an Element Using jQuery",
"dashedName": "waypoint-change-the-css-of-an-element-using-jquery",
"title": "Change the CSS of an Element Using jQuery",
"difficulty": 3.08,
"description": [
"We can also change the CSS of an HTML element directly with jQuery.",
@ -404,13 +399,12 @@
" </div>",
"</div>"
],
"type": "waypoint",
"challengeType": 0
},
{
"id": "bad87fee1348bd9aed808826",
"name": "Waypoint: Disable an Element Using jQuery",
"dashedName": "waypoint-disable-an-element-using-jquery",
"title": "Disable an Element Using jQuery",
"difficulty": 3.09,
"description": [
"You can also change the non-CSS properties of HTML elements with jQuery. For example, you can disable buttons.",
@ -456,13 +450,12 @@
" </div>",
"</div>"
],
"type": "waypoint",
"challengeType": 0
},
{
"id": "bad87fee1348bd9aed708826",
"name": "Waypoint: Remove an Element Using jQuery",
"dashedName": "waypoint-remove-an-element-using-jquery",
"title": "Remove an Element Using jQuery",
"difficulty": 3.10,
"description": [
"Now let's remove an HTML element from your page using jQuery.",
@ -505,13 +498,12 @@
" </div>",
"</div>"
],
"type": "waypoint",
"challengeType": 0
},
{
"id": "bad87fee1348bd9aed608826",
"name": "Waypoint: Use appendTo to Move Elements with jQuery",
"dashedName": "waypoint-use-appendto-to-move-elements-with-jquery",
"title": "Use appendTo to Move Elements with jQuery",
"difficulty": 3.11,
"description": [
"Now let's try moving elements from one <code>div</code> to another.",
@ -558,13 +550,12 @@
" </div>",
"</div>"
],
"type": "waypoint",
"challengeType": 0
},
{
"id": "bad87fee1348bd9aed508826",
"name": "Waypoint: Clone an Element Using jQuery",
"dashedName": "waypoint-clone-an-element-using-jquery",
"title": "Clone an Element Using jQuery",
"difficulty": 3.12,
"description": [
"In addition to moving elements, you can also copy them from one place to another.",
@ -613,13 +604,12 @@
" </div>",
"</div>"
],
"type": "waypoint",
"challengeType": 0
},
{
"id": "bad87fee1348bd9aed308826",
"name": "Waypoint: Target the Parent of an Element Using jQuery",
"dashedName": "waypoint-target-the-parent-of-an-element-using-jquery",
"title": "Target the Parent of an Element Using jQuery",
"difficulty": 3.13,
"description": [
"Every HTML elements has a \"parent\" element from which it \"inherits\" properties.",
@ -669,13 +659,12 @@
" </div>",
"</div>"
],
"type": "waypoint",
"challengeType": 0
},
{
"id": "bad87fee1348bd9aed208826",
"name": "Waypoint: Target the Children of an Element Using jQuery",
"dashedName": "waypoint-target-the-children-of-an-element-using-jquery",
"title": "Target the Children of an Element Using jQuery",
"difficulty": 3.14,
"description": [
"Many HTML elements has a \"children\" element from which they \"inherits\" properties.",
@ -685,7 +674,7 @@
"Here's an example of how you would use the <code>children()</code> function: <code>$('#left-well').children().css('color', 'blue')</code>"
],
"tests": [
"assert($('#target6').css('color') === 'rgb(0, 0, 255)', 'Your \"target6\" element should have green text.')",
"assert($('#target6').css('color') === 'rgb(0, 255, 0), 'Your \"target6\" element should have green text.')",
"assert(!editor.match(/\\.children\\(\\)\\.css/g), 'You should use the <code>children()</code> function to modify these elements.')",
"assert(!editor.match(/<div class=\\'well\\' id=\\'right-well\\'>/g), 'Only use jQuery to add these classes to the element.')"
],
@ -726,12 +715,12 @@
" </div>",
"</div>"
],
"type": "waypoint",
"challengeType": 0
},
{
"id": "bad87fee1348bd9aed108826",
"name": "Waypoint: Target a Specific Child of an Element Using jQuery",
"dashedName": "waypoint-target-a-specific-child-of-an-element-using-jquery",
"title": "Target a Specific Child of an Element Using jQuery",
"difficulty": 3.15,
"description": [
"You've seen why id attributes are so convenient for targeting with jQuery selectors. But you won't always have such neat ids to work with.",
@ -783,13 +772,12 @@
" </div>",
"</div>"
],
"type": "waypoint",
"challengeType": 0
},
{
"id": "bad87fee1348bd9aed008826",
"name": "Waypoint: Target Even Numbered Elements Using jQuery",
"dashedName": "waypoint-target-even-numbered-elements-using-jquery",
"title": "Target Even Numbered Elements Using jQuery",
"difficulty": 3.16,
"description": [
"You can also target all the even-numbered elements.",
@ -843,9 +831,9 @@
" </div>",
"</div>"
],
"type": "waypoint",
"challengeType": 0
},
{
"id": "bad87fee1348bd9bed008826",
"name": "Waypoint: Target Odd Numbered Elements Using jQuery",
@ -909,8 +897,7 @@
{
"id": "bad87fee1348bd9aecb08826",
"name": "Waypoint: Use jQuery to Modify the Entire Page",
"dashedName": "waypoint-use-jquery-to-modify-the-entire-page",
"title": "Use jQuery to Modify the Entire Page",
"difficulty": 3.20,
"description": [
"We're done playing with our jQuery playground. Let's tear it down!",
@ -963,6 +950,7 @@
" </div>",
"</div>"
],
"type": "waypoint",
"challengeType": 0
},

View File

@ -0,0 +1,6 @@
{
"name": "JSON APIs and Ajax - Coming Soon",
"order": 0.007,
"challenges": [
]
}

View File

@ -1,11 +1,10 @@
{
"name": "MongoDB",
"order" : 0.014,
"order" : 0.016,
"challenges": [
{
"id": "bd7243d8c341eddeaeb5bd0f",
"name": "Waypoint: Store Data in MongoDB",
"dashedName": "waypoint-store-data-in-mongodb",
"title": "Store Data in MongoDB",
"difficulty": 0.01,
"challengeSeed": ["133316035"],
"description": [
@ -34,6 +33,7 @@
"Complete \"Aggregate\"",
"Once you've completed these steps, move on to our next challenge."
],
"type": "waypoint",
"challengeType": 2,
"tests": [],
"nameCn": "",

View File

@ -1,11 +1,10 @@
{
"name": "Node.js and Express.js",
"order" : 0.013,
"order" : 0.015,
"challenges": [
{
"id": "bd7153d8c441eddfaeb5bd0f",
"name": "Waypoint: Manage Packages with NPM",
"dashedName": "waypoint-manage-packages-with-npm",
"title": "Manage Packages with NPM",
"difficulty": 0.39,
"challengeSeed": ["126433450"],
"description": [
@ -43,6 +42,7 @@
"Complete \"Finale\"",
"Once you've completed these steps, move on to our next challenge."
],
"type": "waypoint",
"challengeType": 2,
"tests": [],
"nameCn": "",
@ -58,8 +58,7 @@
},
{
"id": "bd7153d8c441eddfaeb5bdff",
"name": "Waypoint: Start a Node.js Server",
"dashedName": "waypoint-start-a-nodejs-server",
"title": "Start a Node.js Server",
"difficulty": 0.40,
"challengeSeed": ["126411561"],
"description": [
@ -85,6 +84,7 @@
"Complete \"HTTP Client\"",
"Once you've completed these first 7 steps, move on to our next challenge."
],
"type": "waypoint",
"challengeType": 2,
"tests": [],
"nameCn": "",
@ -100,8 +100,7 @@
},
{
"id": "bd7153d8c441eddfaeb5bdfe",
"name": "Waypoint: Continue working with Node.js Servers",
"dashedName": "waypoint-continue-working-with-nodejs-servers",
"title": "Continue working with Node.js Servers",
"difficulty": 0.41,
"challengeSeed": ["128836506"],
"description": [
@ -114,6 +113,7 @@
"Complete \"Time Server\"",
"Once you've completed these 3 steps, move on to our next challenge."
],
"type": "waypoint",
"challengeType": 2,
"tests": [],
"nameCn": "",
@ -129,8 +129,7 @@
},
{
"id": "bd7153d8c441eddfaeb5bdfd",
"name": "Waypoint: Finish working with Node.js Servers",
"dashedName": "waypoint-finish-working-with-nodejs-servers",
"title": "Finish working with Node.js Servers",
"difficulty": 0.42,
"challengeSeed": ["128836507"],
"description": [
@ -143,6 +142,7 @@
"Complete \"HTTP JSON API Server\"",
"Once you've completed these final 3 steps, move on to our next challenge."
],
"type": "waypoint",
"challengeType": 2,
"tests": [],
"nameCn": "",
@ -158,8 +158,7 @@
},
{
"id": "bd7153d8c441eddfaeb5bd1f",
"name": "Waypoint: Build Web Apps with Express.js",
"dashedName": "waypoint-build-web-apps-with-expressjs",
"title": "Build Web Apps with Express.js",
"difficulty": 0.43,
"challengeSeed": [
"126411559"
@ -186,6 +185,7 @@
"Complete \"JSON Me\"",
"Once you've completed these steps, move on to our next challenge."
],
"type": "waypoint",
"challengeType": 2,
"tests": [],
"nameCn": "",

View File

@ -0,0 +1,6 @@
{
"name": "Object Oriented and Functional Programming - Coming Soon",
"order" : 0.010,
"challenges": [
]
}

View File

@ -1,91 +0,0 @@
{
"name": "Object Oriented Programming",
"order" : 0.008,
"challenges": [
{
"id": "bd7153d8c44eeddfaeb5bd0f",
"name": "Waypoint: Learn Scope Chains and Closures",
"dashedName": "waypoint-learn-scope-chains-and-closures",
"difficulty": 0.01,
"challengeSeed": ["133316031"],
"description": [
"We'll build this Waypoint on Cloud 9, a powerful online code editor with a full Ubuntu Linux workspace, all running in the cloud.",
"If you don't already have Cloud 9 account, create one now at <a href='http://c9.io' target='_blank'>http://c9.io</a>.",
"Open up <a href='http://c9.io' target='_blank'>http://c9.io</a> and sign in to your account.",
"Click on Create New Workspace at the top right of the c9.io page, then click on the \"Create a new workspace\" popup that appears below it the button after you click on it.",
"Give your workspace a name.",
"Choose Node.js in the selection area below the name field.",
"Click the Create button. Then click into your new workspace.",
"In the lower right hand corner you should see a terminal window. In this window use the following commands. You don't need to know what these mean at this point.",
"Install <code>scope-chains-closures</code> with this command: <code>npm install -g scope-chains-closures</code>",
"Now start the tutorial by running <code>scope-chains-closures</code>.",
"Note that you can resize the c9.io's windows by dragging their borders.",
"Make sure that you are always in your project's \"workspace\" directory. You can always navigate back to this directory by running this command: <code>cd ~/workspace</code>.",
"You can view this Node School module's source code on GitHub at <a href='https://github.com/jesstelford/scope-chains-closures'>https://github.com/jesstelford/scope-chains-closures</a>.",
"Complete \"Scopes\"",
"Complete \"Scope Chains\"",
"Complete \"Global Scope and Shadowing\"",
"Complete \"Closures\"",
"Complete \"Garbage Collection\"",
"Once you've completed these steps, move on to our next challenge."
],
"challengeType": 2,
"tests": [],
"nameCn": "",
"descriptionCn": [],
"nameFr": "",
"descriptionFr": [],
"nameRu": "",
"descriptionRu": [],
"nameEs": "",
"descriptionEs": [],
"namePt": "",
"descriptionPt": []
},
{
"id": "bd7153d8b44eeddfaeb5bd0f",
"name": "Waypoint: Use Prototypes for Inheriting Properties",
"dashedName": "waypoint-use-prototypes-for-inheriting-properties",
"difficulty": 0.02,
"challengeSeed": ["133316036"],
"description": [
"We'll build this Waypoint on Cloud 9, a powerful online code editor with a full Ubuntu Linux workspace, all running in the cloud.",
"If you don't already have Cloud 9 account, create one now at <a href='http://c9.io' target='_blank'>http://c9.io</a>.",
"Open up <a href='http://c9.io' target='_blank'>http://c9.io</a> and sign in to your account.",
"Click on Create New Workspace at the top right of the c9.io page, then click on the \"Create a new workspace\" popup that appears below it the button after you click on it.",
"Give your workspace a name.",
"Choose Node.js in the selection area below the name field.",
"Click the Create button. Then click into your new workspace.",
"In the lower right hand corner you should see a terminal window. In this window use the following commands. You don't need to know what these mean at this point.",
"Install <code>planetproto</code> with this command: <code>npm install -g planetproto</code>",
"Now start the tutorial by running <code>planetproto</code>.",
"Note that you can resize the c9.io's windows by dragging their borders.",
"Make sure that you are always in your project's \"workspace\" directory. You can always navigate back to this directory by running this command: <code>cd ~/workspace</code>.",
"You can view this Node School module's source code on GitHub at <a href='https://github.com/sporto/planetproto'>https://github.com/sporto/planetproto</a>.",
"Complete \"Simple Objects\"",
"Complete \"Proto\"",
"Complete \"Dynamic Lookups\"",
"Complete \"Property Assignments\"",
"Complete \"Arrays and Objects\"",
"Complete \"Object Create\"",
"Complete \"Dot New\"",
"Complete \"Constructor Functions\"",
"Complete \"Implicit This\"",
"Note that you can skip the last challenge.",
"Once you've completed these steps, move on to our next challenge."
],
"challengeType": 2,
"tests": [],
"nameCn": "",
"descriptionCn": [],
"nameFr": "",
"descriptionFr": [],
"nameRu": "",
"descriptionRu": [],
"nameEs": "",
"descriptionEs": [],
"namePt": "",
"descriptionPt": []
}
]
}

View File

@ -0,0 +1,140 @@
{
"name": "Upper Intermediate Algorithm Scripting",
"order": 0.011,
"challenges": [
{
"id": "a2f1d72d9b908d0bd72bb9f6",
"title": "Make a Person",
"difficulty": "3.01",
"description": [
"Fill in the object constructor with the methods specified in the tests.",
"Those methods are getFirstName(), getLastName(), getFullName(), setFirstName(first), setLastName(last), and setFullName(firstAndLast).",
"All functions that take an argument have an arity of 1, and the argument will be a string.",
"These methods must be the only available means for interacting with the object.",
"Remember to use <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
],
"challengeSeed": [
"var Person = function(firstAndLast) {",
" return firstAndLast;",
"};",
"",
"var bob = new Person('Bob Ross');",
"bob.getFullName();"
],
"tests": [
"expect(Object.keys(bob).length).to.eql(6);",
"expect(bob instanceof Person).to.be.true;",
"expect(bob.firstName).to.be.undefined();",
"expect(bob.lastName).to.be.undefined();",
"expect(bob.getFirstName()).to.eql('Bob');",
"expect(bob.getLastName()).to.eql('Ross');",
"expect(bob.getFullName()).to.eql('Bob Ross');",
"bob.setFirstName('Happy');",
"expect(bob.getFirstName()).to.eql('Happy');",
"bob.setLastName('Trees');",
"expect(bob.getLastName()).to.eql('Trees');",
"bob.setFullName('George Carlin');",
"expect(bob.getFullName()).to.eql('George Carlin');",
"bob.setFullName('Bob Ross');"
],
"MDNlinks": [
"Closures",
"Details of the Object Model"
],
"type": "bonfire",
"challengeType": 5,
"nameCn": "",
"descriptionCn": [],
"nameFr": "",
"descriptionFr": [],
"nameRu": "",
"descriptionRu": [],
"nameEs": "",
"descriptionEs": [],
"namePt": "",
"descriptionPt": []
},
{
"id": "af4afb223120f7348cdfc9fd",
"title": "Map the Debris",
"dashedName": "bonfire-map-the-debris",
"difficulty": "3.02",
"description": [
"Return a new array that transforms the element's average altitude into their orbital periods.",
"The array will contain objects in the format <code>{name: 'name', avgAlt: avgAlt}</code>.",
"You can read about orbital periods <a href=\"http://en.wikipedia.org/wiki/Orbital_period\" target='_blank'>on wikipedia</a>.",
"The values should be rounded to the nearest whole number. The body being orbited is Earth.",
"The radius of the earth is 6367.4447 kilometers, and the GM value of earth is 398600.4418",
"Remember to use <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
],
"challengeSeed": [
"function orbitalPeriod(arr) {",
" var GM = 398600.4418;",
" var earthRadius = 6367.4447;",
" return arr;",
"}",
"",
"orbitalPeriod([{name : \"sputnik\", avgAlt : 35873.5553}]);"
],
"tests": [
"expect(orbitalPeriod([{name : \"sputnik\", avgAlt : 35873.5553}])).to.eqls([{name: \"sputnik\", orbitalPeriod: 86400}]);",
"expect(orbitalPeriod([{name: \"iss\", avgAlt: 413.6}, {name: \"hubble\", avgAlt: 556.7}, {name: \"moon\", avgAlt: 378632.553}])).to.eqls([{name : \"iss\", orbitalPeriod: 5557}, {name: \"hubble\", orbitalPeriod: 5734}, {name: \"moon\", orbitalPeriod: 2377399}]);"
],
"MDNlinks": [
"Math.pow()"
],
"type": "bonfire",
"challengeType": 5,
"nameCn": "",
"descriptionCn": [],
"nameFr": "",
"descriptionFr": [],
"nameRu": "",
"descriptionRu": [],
"nameEs": "",
"descriptionEs": [],
"namePt": "",
"descriptionPt": []
},
{
"id": "a3f503de51cfab748ff001aa",
"title": "Pairwise",
"difficulty": "3.03",
"description": [
"Return the sum of all indices of elements of 'arr' that can be paired with one other element to form a sum that equals the value in the second argument 'arg'. If multiple sums are possible, return the smallest sum. Once an element has been used, it cannot be reused to pair with another.",
"For example, pairwise([1, 4, 2, 3, 0, 5], 7) should return 11 because 4, 2, 3 and 5 can be paired with each other to equal 7.",
"pairwise([1, 3, 2, 4], 4) would only equal 1, because only the first two elements can be paired to equal 4, and the first element has an index of 0!",
"Remember to use <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>RSAP</a> if you get stuck. Try to pair program. Write your own code."
],
"challengeSeed": [
"function pairwise(arr, arg) {",
" return arg;",
"}",
"",
"pairwise([1,4,2,3,0,5], 7);"
],
"tests": [
"expect(pairwise([1, 4, 2, 3, 0, 5], 7)).to.equal(11);",
"expect(pairwise([1, 3, 2, 4], 4)).to.equal(1);",
"expect(pairwise([1,1,1], 2)).to.equal(1);",
"expect(pairwise([0, 0, 0, 0, 1, 1], 1)).to.equal(10);",
"expect(pairwise([], 100)).to.equal(0);"
],
"MDNlinks": [
"Array.reduce()"
],
"type": "bonfire",
"challengeType": 5,
"nameCn": "",
"descriptionCn": [],
"nameFr": "",
"descriptionFr": [],
"nameRu": "",
"descriptionRu": [],
"nameEs": "",
"descriptionEs": [],
"namePt": "",
"descriptionPt": []
}
]
}

View File

@ -2,13 +2,12 @@
require('babel/register');
require('dotenv').load();
var fs = require('fs'),
_ = require('lodash'),
path = require('path'),
app = require('../server/server'),
nonprofits = require('./nonprofits.json'),
jobs = require('./jobs.json');
var challangesRegex = /^(bonfire:|waypoint:|zipline:|basejump:|hike:)/i;
function getFilesFor(dir) {
return fs.readdirSync(path.join(__dirname, '/' + dir));
}
@ -18,30 +17,55 @@ var Nonprofit = app.models.Nonprofit;
var Job = app.models.Job;
var counter = 0;
var challenges = getFilesFor('challenges');
var offerings = 2 + challenges.length;
// plus two accounts for nonprofits and jobs seed.
var numberToSave = challenges.length + 1;
var CompletionMonitor = function() {
function completionMonitor() {
// Increment counter
counter++;
console.log('call ' + counter);
if (counter < offerings) {
return;
} else {
// Exit if all challenges have been checked
if (counter >= numberToSave) {
process.exit(0);
}
};
// Log where in the seed order we're currently at
console.log('Call: ' + counter + '/' + numberToSave);
}
Challenge.destroyAll(function(err, info) {
if (err) {
console.error(err);
throw err;
} else {
console.log('Deleted ', info);
}
challenges.forEach(function(file) {
var challenges = require('./challenges/' + file).challenges
.map(function(challenge) {
var challengeSpec = require('./challenges/' + file);
var order = challengeSpec.order;
var block = challengeSpec.name;
// challenge file has no challenges...
if (challengeSpec.challenges.length === 0) {
console.log('file %s has no challenges', file);
completionMonitor();
return;
}
var challenges = challengeSpec.challenges
.map(function(challenge, index) {
// NOTE(berks): add title for displaying in views
challenge.title = challenge.name.replace(challangesRegex, '').trim();
challenge.name =
_.capitalize(challenge.type) +
': ' +
challenge.title.replace(/[^a-zA-Z0-9\s]/g, '');
challenge.dashedName = challenge.name
.toLowerCase()
.replace(/\:/g, '')
.replace(/\s/g, '-');
challenge.order = +('' + order + (index + 1));
challenge.block = block;
return challenge;
});
@ -49,10 +73,10 @@ Challenge.destroyAll(function(err, info) {
challenges,
function(err) {
if (err) {
console.log(err);
throw err;
} else {
console.log('Successfully parsed %s', file);
CompletionMonitor();
completionMonitor(err);
}
}
);
@ -67,28 +91,28 @@ Nonprofit.destroyAll(function(err, info) {
}
Nonprofit.create(nonprofits, function(err, data) {
if (err) {
console.log(err);
throw err;
} else {
console.log('Saved ', data);
}
CompletionMonitor();
completionMonitor(err);
console.log('nonprofits');
});
});
Job.destroyAll(function(err, info) {
if (err) {
console.error(err);
throw err;
} else {
console.log('Deleted ', info);
}
Job.create(jobs, function(err, data) {
if (err) {
console.log(err);
console.log('error: ', err);
} else {
console.log('Saved ', data);
}
console.log('jobs');
CompletionMonitor();
completionMonitor(err);
});
});

View File

@ -38,13 +38,13 @@ function createConnection(URI) {
}
function createQuery(db, collection, options, batchSize) {
return Rx.Observable.create(function (observer) {
return Rx.Observable.create(function(observer) {
var cursor = db.collection(collection).find({}, options);
cursor.batchSize(batchSize || 20);
// Cursor.each will yield all doc from a batch in the same tick,
// or schedule getting next batch on nextTick
debug('opening cursor for %s', collection);
cursor.each(function (err, doc) {
cursor.each(function(err, doc) {
if (err) {
return observer.onError(err);
}
@ -55,7 +55,7 @@ function createQuery(db, collection, options, batchSize) {
observer.onNext(doc);
});
return Rx.Disposable.create(function () {
return Rx.Disposable.create(function() {
debug('closing cursor for %s', collection);
cursor.close();
});
@ -86,13 +86,15 @@ var users = dbObservable
.map(function(user) {
// flatten user
assign(user, user.portfolio, user.profile);
return user;
})
.map(function(user) {
if (user.username) {
return user;
}
user.username = 'fcc' + uuid.v4().slice(0, 8);
if (user.github) {
user.isGithubCool = true;
} else {
user.isMigrationGrandfathered = true;
}
return user;
})
.shareReplay();
@ -122,7 +124,7 @@ var userIdentityCount = users
return {
provider: provider,
externalId: user[provider],
userId: user.id
userId: user._id || user.id
};
})
.filter(function(ident) {
@ -161,33 +163,15 @@ var storyCount = dbObservable
})
.count();
var commentCount = dbObservable
.flatMap(function(db) {
return createQuery(db, 'comments', {});
})
.bufferWithCount(20)
.withLatestFrom(dbObservable, function(comments, db) {
return {
comments: comments,
db: db
};
})
.flatMap(function(dats) {
return insertMany(dats.db, 'comment', dats.comments, { w: 1 });
})
.count();
Rx.Observable.combineLatest(
userIdentityCount,
userSavesCount,
storyCount,
commentCount,
function(userIdentCount, userCount, storyCount, commentCount) {
function(userIdentCount, userCount, storyCount) {
return {
userIdentCount: userIdentCount * 20,
userCount: userCount * 20,
storyCount: storyCount * 20,
commentCount: commentCount * 20
storyCount: storyCount * 20
};
})
.subscribe(