diff --git a/challenges/00-getting-started/getting-started.json b/challenges/00-getting-started/getting-started.json index d5bc0c118a..bfcd0cf1a3 100644 --- a/challenges/00-getting-started/getting-started.json +++ b/challenges/00-getting-started/getting-started.json @@ -7,7 +7,6 @@ { "id": "560add10cb82ac38a17513be", "title": "Learn how Free Code Camp Works", - "challengeSeed": [], "description": [ [ "http://i.imgur.com/4HK5ZFP.jpg", @@ -82,15 +81,10 @@ "" ] ], + "challengeSeed": [], + "tests": [], "type": "Waypoint", "challengeType": 7, - "tests": [], - "nameCn": "", - "descriptionCn": [], - "nameFr": "", - "descriptionFr": [], - "nameRu": "", - "descriptionRu": [], "nameEs": "Aprende como funciona Free Code Camp", "descriptionEs": [ [ @@ -141,14 +135,11 @@ "Entonces construirás varios proyectos reales para organizaciones sin ánimo de lucro. Para cuando termines, tendrás un portafolio de aplicaciones reales que las personas usan a diario.", "" ] - ], - "namePt": "", - "descriptionPt": [] + ] }, { "id": "560add37cb82ac38a17513bf", "title": "Create a GitHub Account and Join our Chat Rooms", - "challengeSeed": [], "description": [ [ "http://i.imgur.com/EAR7Lvh.jpg", @@ -205,15 +196,10 @@ "https://gitter.im/apps" ] ], + "challengeSeed": [], + "tests": [], "type": "Waypoint", "challengeType": 7, - "tests": [], - "nameCn": "", - "descriptionCn": [], - "nameFr": "", - "descriptionFr": [], - "nameRu": "", - "descriptionRu": [], "nameEs": "Crea una Cuenta de GitHub y Únete a nuestras Salas de Chat", "descriptionEs": [ [ @@ -270,14 +256,11 @@ "También puedes descargar la aplicación de chat para tu computadora o teléfono móvil.", "https://gitter.im/apps" ] - ], - "namePt": "", - "descriptionPt": [] + ] }, { "id": "560add56cb82ac38a17513c0", "title": "Configure your Code Portfolio", - "challengeSeed": [], "description": [ [ "http://i.imgur.com/tP2ccTE.gif", @@ -286,15 +269,10 @@ "" ] ], + "challengeSeed": [], + "tests": [], "type": "Waypoint", "challengeType": 7, - "tests": [], - "nameCn": "", - "descriptionCn": [], - "nameFr": "", - "descriptionFr": [], - "nameRu": "", - "descriptionRu": [], "nameEs": "Configura tu portafolio de código", "descriptionEs": [ [ @@ -303,14 +281,11 @@ "Dale un vistazo de tu portafolio de código. Da click en tu imagen en la esquina superior derecha. Para activar tu portafolio de código, necesitaras conectar tu cuenta de GitHub con Free Code Camp. Tu portafolio de código muestra tu progreso y cuantos Brownie Points tienes. Puedes obtener Brownie Points completando desafíos y ayudando a otros campistas en nuestras salas de chat. Si obtienes Brownie Points varios días consecutivos, obtendrás una racha.", "" ] - ], - "namePt": "", - "descriptionPt": [] + ] }, { "id": "560add71cb82ac38a17513c2", "title": "Join a Campsite in Your City", - "challengeSeed": [], "description": [ [ "http://i.imgur.com/NAOFJWN.jpg", @@ -325,15 +300,10 @@ "https://github.com/FreeCodeCamp/freecodecamp/wiki/List-of-Free-Code-Camp-city-based-Campsites" ] ], + "challengeSeed": [], + "tests": [], "type": "Waypoint", "challengeType": 7, - "tests": [], - "nameCn": "", - "descriptionCn": [], - "nameFr": "", - "descriptionFr": [], - "nameRu": "", - "descriptionRu": [], "nameEs": "Únete a un Campamento en Tu Ciudad", "descriptionEs": [ [ @@ -348,14 +318,11 @@ "Encuentra tu ciudad en esta lista y haz clic en esta. Esto te llevara al grupo de Facebook del Campamento de tu ciudad. Da clic en el botón de \"Unirse al grupo\" para unirte a el grupo. Alguien del mismo campamento debería aprobarte en breve. Si tu ciudad no esta en esta lista, ve al final del articulo de la wiki para ver instrucciones de como crear un campamento para tu ciudad.", "https://github.com/FreeCodeCamp/freecodecamp/wiki/List-of-Free-Code-Camp-city-based-Campsites" ] - ], - "namePt": "", - "descriptionPt": [] + ] }, { "id": "560add8ccb82ac38a17513c4", "title": "Learn What to Do If You Get Stuck", - "challengeSeed": [], "description": [ [ "http://i.imgur.com/lzKvwU2.jpg", @@ -406,15 +373,10 @@ "" ] ], + "challengeSeed": [], + "tests": [], "type": "Waypoint", "challengeType": 7, - "tests": [], - "nameCn": "", - "descriptionCn": [], - "nameFr": "", - "descriptionFr": [], - "nameRu": "", - "descriptionRu": [], "nameEs": "Aprende que hacer si te quedas atascado", "descriptionEs": [ [ @@ -465,9 +427,7 @@ "Ahora estas listo para empezar a programar. El botón de \"Mapa\" en tu esquina superior derecha te mostrará nuestro mapa de desafíos. Te recomendaos que completes los desafíos de arriba hacía abajo, a un ritmo sostenible. Nuestra comunidad de código abierto esta constantemente mejorando nuestros desafíos, así que no te sorprendas si cambian o se mueven alrededor. No te preocupes por volver hacia atrás - solo continúa avanzando. Siempre puedes ir a tu desafío más reciente pulsando el botón de \"Aprender\".", "" ] - ], - "namePt": "", - "descriptionPt": [] + ] } ] } diff --git a/challenges/01-front-end-development-certification/basic-bonfires.json b/challenges/01-front-end-development-certification/basic-bonfires.json index 18dea610a9..491e5f6a76 100644 --- a/challenges/01-front-end-development-certification/basic-bonfires.json +++ b/challenges/01-front-end-development-certification/basic-bonfires.json @@ -4,10 +4,9 @@ "time": "50 hours", "helpRoom": "HelpJavaScript", "challenges": [ - { + { "id": "bd7158d2c442eddfbeb5bd1f", "title": "Get Set for our Algorithm Challenges", - "challengeSeed": [], "description": [ [ "http://i.imgur.com/sJkp30a.png", @@ -34,30 +33,15 @@ "" ] ], + "challengeSeed": [], + "tests": [], "type": "Waypoint", "challengeType": 7, - "tests": [], - "nameCn": "", - "descriptionCn": [], - "nameFr": "", - "descriptionFr": [], - "nameRu": "", - "descriptionRu": [], "nameEs": "Prepárate para los Ziplines", - "descriptionEs": [], - "namePt": "", - "descriptionPt": [], "isRequired": true }, { "id": "a202eed8fc186c8434cb6d61", - "title": "Reverse a String", - "tests": [ - "assert(typeof reverseString(\"hello\") === \"string\", 'message: reverseString(\"hello\") should return a string.');", - "assert(reverseString(\"hello\") === \"olleh\", 'message: reverseString(\"hello\") should become \"olleh\".');", - "assert(reverseString(\"Howdy\") === \"ydwoH\", 'message: reverseString(\"Howdy\") should become \"ydwoH\".');", - "assert(reverseString(\"Greetings from Earth\") === \"htraE morf sgniteerG\", 'message: reverseString(\"Greetings from Earth\") should return \"htraE morf sgniteerG\".');" - ], "description": [ "Reverse the provided string.", "You may need to turn the string into an array before you can reverse it.", @@ -71,44 +55,35 @@ "", "reverseString(\"hello\");" ], + "isRequired": true, + "title": "Reverse a String", + "solutions": [ + "function reverseString(str) {\n return str.split('').reverse().join(\"\");\n}\n\nreverseString('hello');\n" + ], + "tests": [ + "assert(typeof reverseString(\"hello\") === \"string\", 'message: reverseString(\"hello\") should return a string.');", + "assert(reverseString(\"hello\") === \"olleh\", 'message: reverseString(\"hello\") should become \"olleh\".');", + "assert(reverseString(\"Howdy\") === \"ydwoH\", 'message: reverseString(\"Howdy\") should become \"ydwoH\".');", + "assert(reverseString(\"Greetings from Earth\") === \"htraE morf sgniteerG\", 'message: reverseString(\"Greetings from Earth\") should return \"htraE morf sgniteerG\".');" + ], + "type": "bonfire", "MDNlinks": [ "Global String Object", "String.split()", "Array.reverse()", "Array.join()" ], - "solutions": [ - "function reverseString(str) {\n return str.split('').reverse().join(\"\");\n}\n\nreverseString('hello');\n" - ], - "type": "bonfire", "challengeType": 5, - "nameCn": "", - "descriptionCn": [], - "nameFr": "", - "descriptionFr": [], - "nameRu": "", - "descriptionRu": [], "nameEs": "Invierte el texto", "descriptionEs": [ "Invierte la cadena de texto que se te provee", "Puede que necesites convertir la cadena de texto en un arreglo antes de que puedas invertirla", "El resultado debe ser una cadena de texto", "Recuerda utilizar Read-Search-Ask si te sientes atascado. Intenta programar en pareja. Escribe tu propio código." - ], - "namePt": "", - "descriptionPt": [], - "isRequired": true + ] }, { "id": "a302f7aae1aa3152a5b413bc", - "title": "Factorialize a Number", - "tests": [ - "assert(typeof factorialize(5) === 'number', 'message: factorialize(5) should return a number.');", - "assert(factorialize(5) === 120, 'message: factorialize(5) should return 120.');", - "assert(factorialize(10) === 3628800, 'message: factorialize(10) should return 3628800.');", - "assert(factorialize(20) === 2432902008176640000, 'message: factorialize(20) should return 2432902008176640000.');", - "assert(factorialize(0) === 1, 'message: factorialize(0) should return 1.');" - ], "description": [ "Return the factorial of the provided integer.", "If the integer is represented with the letter n, a factorial is the product of all positive integers less than or equal to n.", @@ -123,20 +98,23 @@ "", "factorialize(5);" ], - "MDNlinks": [ - "Arithmetic Operators" - ], + "isRequired": true, + "title": "Factorialize a Number", "solutions": [ "function factorialize(num) {\n return num < 1 ? 1 : num * factorialize(num-1);\n}\n\nfactorialize(5);\n" ], + "tests": [ + "assert(typeof factorialize(5) === 'number', 'message: factorialize(5) should return a number.');", + "assert(factorialize(5) === 120, 'message: factorialize(5) should return 120.');", + "assert(factorialize(10) === 3628800, 'message: factorialize(10) should return 3628800.');", + "assert(factorialize(20) === 2432902008176640000, 'message: factorialize(20) should return 2432902008176640000.');", + "assert(factorialize(0) === 1, 'message: factorialize(0) should return 1.');" + ], "type": "bonfire", + "MDNlinks": [ + "Arithmetic Operators" + ], "challengeType": 5, - "nameCn": "", - "descriptionCn": [], - "nameFr": "", - "descriptionFr": [], - "nameRu": "", - "descriptionRu": [], "nameEs": "Factoriza un número", "descriptionEs": [ "Crea una función que devuelva el factorial del número entero que se te provee", @@ -144,14 +122,10 @@ "Los factoriales son comúnmente representados con la notación n!", "Por ejemplo: 5! = 1 * 2 * 3 * 4 * 5 = 120", "Recuerda utilizar Read-Search-Ask si te sientes atascado. Intenta programar en pareja. Escribe tu propio código." - ], - "namePt": "", - "descriptionPt": [], - "isRequired": true + ] }, { "id": "aaa48de84e1ecc7c742e1124", - "title": "Check for Palindromes", "description": [ "Return true if the given string is a palindrome. Otherwise, return false.", "A palindrome is a word or sentence that's spelled the same way both forward and backward, ignoring punctuation, case, and spacing.", @@ -159,6 +133,21 @@ "We'll pass strings with varying formats, such as \"racecar\", \"RaceCar\", and \"race CAR\" among others.", "Remember to use Read-Search-Ask if you get stuck. Write your own code." ], + "challengeSeed": [ + "function palindrome(str) {", + " // Good luck!", + " return true;", + "}", + "", + "", + "", + "palindrome(\"eye\");" + ], + "isRequired": true, + "title": "Check for Palindromes", + "solutions": [ + "function palindrome(str) {\n var string = str.toLowerCase().split(/[^A-Za-z0-9]/gi).join('');\n var aux = string.split('');\n if (aux.join('') === aux.reverse().join('')){\n return true;\n }\n\n return false;\n}" + ], "tests": [ "assert(typeof palindrome(\"eye\") === \"boolean\", 'message: palindrome(\"eye\") should return a boolean.');", "assert(palindrome(\"eye\") === true, 'message: palindrome(\"eye\") should return true.');", @@ -172,31 +161,12 @@ "assert(palindrome(\"1 eye for of 1 eye.\") === false, 'message: palindrome(\"1 eye for of 1 eye.\") should return false.');", "assert(palindrome(\"0_0 (: /-\\ :) 0-0\") === true, 'message: palindrome(\"0_0 (: /-\\ :) 0-0\") should return true.');" ], - "challengeSeed": [ - "function palindrome(str) {", - " // Good luck!", - " return true;", - "}", - "", - "", - "", - "palindrome(\"eye\");" - ], + "type": "bonfire", "MDNlinks": [ "String.replace()", "String.toLowerCase()" ], - "solutions": [ - "function palindrome(str) {\n var string = str.toLowerCase().split(/[^A-Za-z0-9]/gi).join('');\n var aux = string.split('');\n if (aux.join('') === aux.reverse().join('')){\n return true;\n }\n\n return false;\n}" - ], - "type": "bonfire", "challengeType": 5, - "nameCn": "", - "descriptionCn": [], - "nameFr": "", - "descriptionFr": [], - "nameRu": "", - "descriptionRu": [], "nameEs": "Verifica si es palíndromo", "descriptionEs": [ "Crea una función que devuelva true si una cadena de texto dada es un palíndromo, y que devuelva false en caso contrario", @@ -204,14 +174,10 @@ "Tendrás que quitar los signos de puntuación y transformar las letras a minúsculas para poder verificar si el texto es palíndromo.", "Te proveeremos textos en varios formatos, como \"racecar\", \"RaceCar\", and \"race CAR\" entre otros.", "Recuerda utilizar Read-Search-Ask si te sientes atascado. Intenta programar en pareja. Escribe tu propio código." - ], - "namePt": "", - "descriptionPt": [], - "isRequired": true + ] }, { "id": "a26cbbe9ad8655a977e1ceb5", - "title": "Find the Longest Word in a String", "description": [ "Return the length of the longest word in the provided sentence.", "Your response should be a number.", @@ -224,6 +190,11 @@ "", "findLongestWord(\"The quick brown fox jumped over the lazy dog\");" ], + "isRequired": true, + "title": "Find the Longest Word in a String", + "solutions": [ + "function findLongestWord(str) {\n return str.split(' ').sort(function(a, b) { return b.length - a.length;})[0].length;\n}\n\nfindLongestWord('The quick brown fox jumped over the lazy dog');\n" + ], "tests": [ "assert(typeof findLongestWord(\"The quick brown fox jumped over the lazy dog\") === \"number\", 'message: findLongestWord(\"The quick brown fox jumped over the lazy dog\") should return a number.');", "assert(findLongestWord(\"The quick brown fox jumped over the lazy dog\") === 6, 'message: findLongestWord(\"The quick brown fox jumped over the lazy dog\") should return 6.');", @@ -232,34 +203,21 @@ "assert(findLongestWord(\"What is the average airspeed velocity of an unladen swallow\") === 8, 'message: findLongestWord(\"What is the average airspeed velocity of an unladen swallow\") should return 8.');", "assert(findLongestWord(\"What if we try a super-long word such as otorhinolaryngology\") === 19, 'message: findLongestWord(\"What if we try a super-long word such as otorhinolaryngology\") should return 19.');" ], + "type": "bonfire", "MDNlinks": [ "String.split()", "String.length" ], - "solutions": [ - "function findLongestWord(str) {\n return str.split(' ').sort(function(a, b) { return b.length - a.length;})[0].length;\n}\n\nfindLongestWord('The quick brown fox jumped over the lazy dog');\n" - ], - "type": "bonfire", "challengeType": 5, - "nameCn": "", - "descriptionCn": [], - "nameFr": "", - "descriptionFr": [], - "nameRu": "", - "descriptionRu": [], "nameEs": "Encuentra la palabra más larga", "descriptionEs": [ "Crea una función que devuelva la longitud de la palabra más larga en una frase dada", "El resultado debe ser un número", "Recuerda utilizar Read-Search-Ask si te sientes atascado. Intenta programar en pareja. Escribe tu propio código." - ], - "namePt": "", - "descriptionPt": [], - "isRequired": true + ] }, { "id": "ab6137d4e35944e21037b769", - "title": "Title Case a Sentence", "description": [ "Return the provided string with the first letter of each word capitalized. Make sure the rest of the word is in lower case.", "For the purpose of this exercise, you should also capitalize connecting words like \"the\" and \"of\".", @@ -272,39 +230,31 @@ "", "titleCase(\"I'm a little tea pot\");" ], + "isRequired": true, + "title": "Title Case a Sentence", + "solutions": [ + "function titleCase(str) {\n return str.split(' ').map(function(word) {\n return word.charAt(0).toUpperCase() + word.substring(1).toLowerCase();\n }).join(' ');\n}\n\ntitleCase(\"I'm a little tea pot\");\n" + ], "tests": [ "assert(typeof titleCase(\"I'm a little tea pot\") === \"string\", 'message: titleCase(\"I'm a little tea pot\") should return a string.');", "assert(titleCase(\"I'm a little tea pot\") === \"I'm A Little Tea Pot\", 'message: titleCase(\"I'm a little tea pot\") should return \"I'm A Little Tea Pot\".');", "assert(titleCase(\"sHoRt AnD sToUt\") === \"Short And Stout\", 'message: titleCase(\"sHoRt AnD sToUt\") should return \"Short And Stout\".');", "assert(titleCase(\"HERE IS MY HANDLE HERE IS MY SPOUT\") === \"Here Is My Handle Here Is My Spout\", 'message: titleCase(\"HERE IS MY HANDLE HERE IS MY SPOUT\") should return \"Here Is My Handle Here Is My Spout\".');" ], + "type": "bonfire", "MDNlinks": [ "String.split()" ], - "solutions": [ - "function titleCase(str) {\n return str.split(' ').map(function(word) {\n return word.charAt(0).toUpperCase() + word.substring(1).toLowerCase();\n }).join(' ');\n}\n\ntitleCase(\"I'm a little tea pot\");\n" - ], - "type": "bonfire", "challengeType": 5, - "nameCn": "", - "descriptionCn": [], - "nameFr": "", - "descriptionFr": [], - "nameRu": "", - "descriptionRu": [], "nameEs": "Aplica formato de título", "descriptionEs": [ "Crea una función que devuelva la cadena de texto dada con la primera letra de cada palabra en mayúscula. Asegúrate de que el resto de las letras sean minúsculas", "Para este ejercicio, también debes poner en mayúscula conectores como \"the\" y \"of\".", "Recuerda utilizar Read-Search-Ask si te sientes atascado. Intenta programar en pareja. Escribe tu propio código." - ], - "namePt": "", - "descriptionPt": [], - "isRequired": true + ] }, { "id": "a789b3483989747d63b0e427", - "title": "Return Largest Numbers in Arrays", "description": [ "Return an array consisting of the largest number from each provided sub-array. For simplicity, the provided array will contain exactly 4 sub-arrays.", "Remember, you can iterate through an array with a simple for loop, and access each member with array syntax arr[i] .", @@ -318,39 +268,31 @@ "", "largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);" ], + "isRequired": true, + "title": "Return Largest Numbers in Arrays", + "solutions": [ + "function largestOfFour(arr) {\n return arr.map(function(subArr) {\n return Math.max.apply(null, subArr);\n });\n}\n\nlargestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);\n" + ], "tests": [ "assert(largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]).constructor === Array, 'message: largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]) should return an array.');", "assert.deepEqual(largestOfFour([[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]]), [27,5,39,1001], 'message: largestOfFour([[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]]) should return [27,5,39,1001].');", "assert.deepEqual(largestOfFour([[4, 9, 1, 3], [13, 35, 18, 26], [32, 35, 97, 39], [1000000, 1001, 857, 1]]), [9,35,97,1000000], 'message: largestOfFour([[4, 9, 1, 3], [13, 35, 18, 26], [32, 35, 97, 39], [1000000, 1001, 857, 1]]) should return [9, 35, 97, 1000000].');" ], + "type": "bonfire", "MDNlinks": [ "Comparison Operators" ], - "solutions": [ - "function largestOfFour(arr) {\n return arr.map(function(subArr) {\n return Math.max.apply(null, subArr);\n });\n}\n\nlargestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);\n" - ], - "type": "bonfire", "challengeType": 5, - "nameCn": "", - "descriptionCn": [], - "nameFr": "", - "descriptionFr": [], - "nameRu": "", - "descriptionRu": [], "nameEs": "Devuelve el entero mayor en cada arreglo", "descriptionEs": [ "Crea una función que devuelva un arreglo que contenga el mayor de los números de cada sub-arreglo que se te presenta. Para simplificar las cosas, el arreglo que te presentamos tendrá exactamente 4 sub-arreglos", "Recuerda que puedes iterar a través de un arreglo con un búcle simple, y acceder a cada miembro utilizando la sintaxis arr[i].", "Si escribes tu propio test con Chai.js, asegúrate de utilizar un operador de igualdad estricto en lugar de un operador de igualdad cuando compares arreglos. ", "Recuerda utilizar Read-Search-Ask si te sientes atascado. Intenta programar en pareja. Escribe tu propio código." - ], - "namePt": "", - "descriptionPt": [], - "isRequired": true + ] }, { "id": "acda2fb1324d9b0fa741e6b5", - "title": "Confirm the Ending", "description": [ "Check if a string (first argument) ends with the given target string (second argument).", "Remember to use Read-Search-Ask if you get stuck. Write your own code." @@ -364,6 +306,11 @@ "", "end(\"Bastian\", \"n\");" ], + "isRequired": true, + "title": "Confirm the Ending", + "solutions": [ + "function end(str, target) {\n return str.substring(str.length-target.length) === target;\n};\n" + ], "tests": [ "assert(end(\"Bastian\", \"n\") === true, 'message: end(\"Bastian\", \"n\") should return true.');", "assert(end(\"Connor\", \"n\") === false, 'message: end(\"Connor\", \"n\") should return false.');", @@ -373,32 +320,19 @@ "assert(end(\"He has to give me a new name\", \"na\") === false, 'message: end(\"He has to give me a new name\", \"na\") should return false.');", "assert(end(\"If you want to save our world, you must hurry. We dont know how much longer we can withstand the nothing\", \"mountain\") === false, 'message: end(\"If you want to save our world, you must hurry. We dont know how much longer we can withstand the nothing\", \"mountain\") should return false.');" ], + "type": "bonfire", "MDNlinks": [ "String.substr()" ], - "solutions": [ - "function end(str, target) {\n return str.substring(str.length-target.length) === target;\n};\n" - ], - "type": "bonfire", "challengeType": 5, - "nameCn": "", - "descriptionCn": [], - "nameFr": "", - "descriptionFr": [], - "nameRu": "", - "descriptionRu": [], "nameEs": "Confirma la terminación", "descriptionEs": [ "Verifica si una cadena de texto (primer argumento) termina con una cadena de texto dada (segundo argumento).", "Recuerda utilizar Read-Search-Ask si te sientes atascado. Intenta programar en pareja. Escribe tu propio código." - ], - "namePt": "", - "descriptionPt": [], - "isRequired": true + ] }, { "id": "afcc8d540bea9ea2669306b6", - "title": "Repeat a string repeat a string", "description": [ "Repeat a given string (first argument) n times (second argument). Return an empty string if n is a negative number.", "Remember to use Read-Search-Ask if you get stuck. Write your own code." @@ -411,6 +345,11 @@ "", "repeat(\"abc\", 3);" ], + "isRequired": true, + "title": "Repeat a string repeat a string", + "solutions": [ + "function repeat(str, num) {\n if (num < 0) return '';\n return num === 1 ? str : str + repeat(str, num-1);\n}\n\nrepeat('abc', 3);\n" + ], "tests": [ "assert(repeat(\"*\", 3) === \"***\", 'message: repeat(\"*\", 3) should return \"***\".');", "assert(repeat(\"abc\", 3) === \"abcabcabc\", 'message: repeat(\"abc\", 3) should return \"abcabcabc\".');", @@ -419,32 +358,19 @@ "assert(repeat(\"*\", 8) === \"********\", 'message: repeat(\"*\", 8) should return \"********\".');", "assert(repeat(\"abc\", -2) === \"\", 'message: repeat(\"abc\", -2) should return \"\".');" ], + "type": "bonfire", "MDNlinks": [ "Global String Object" ], - "solutions": [ - "function repeat(str, num) {\n if (num < 0) return '';\n return num === 1 ? str : str + repeat(str, num-1);\n}\n\nrepeat('abc', 3);\n" - ], - "type": "bonfire", "challengeType": 5, - "nameCn": "", - "descriptionCn": [], - "nameFr": "", - "descriptionFr": [], - "nameRu": "", - "descriptionRu": [], "nameEs": "Repite el texto Repite el texto", "descriptionEs": [ "Repite una cadena de texto dada (primer argumento) n veces (segundo argumento). Devuelve una cadena de texto vacía si n es un número negativo.", "Recuerda utilizar Read-Search-Ask si te sientes atascado. Intenta programar en pareja. Escribe tu propio código." - ], - "namePt": "", - "descriptionPt": [], - "isRequired": true + ] }, { "id": "ac6993d51946422351508a41", - "title": "Truncate a string", "description": [ "Truncate a string (first argument) if it is longer than the given maximum string length (second argument). Return the truncated string with a \"...\" ending.", "Note that the three dots at the end add to the string length.", @@ -459,6 +385,11 @@ "", "truncate(\"A-tisket a-tasket A green and yellow basket\", 11);" ], + "isRequired": true, + "title": "Truncate a string", + "solutions": [ + "function truncate(str, num) {\n if(str.length > num ) {\n if(num > 3) {\n return str.slice(0, num - 3) + '...';\n } else {\n return str.slice(0,num) + '...';\n }\n } \n return str;\n}" + ], "tests": [ "assert(truncate(\"A-tisket a-tasket A green and yellow basket\", 11) === \"A-tisket...\", 'message: truncate(\"A-tisket a-tasket A green and yellow basket\", 11) should return \"A-tisket...\".');", "assert(truncate(\"Peter Piper picked a peck of pickled peppers\", 14) === \"Peter Piper...\", 'message: truncate(\"Peter Piper picked a peck of pickled peppers\", 14) should return \"Peter Piper...\".');", @@ -467,33 +398,20 @@ "assert(truncate(\"A-\", 1) === \"A...\", 'message: truncate(\"A-\", 1) should return \"A...\".');", "assert(truncate(\"Absolutely Longer\", 2) === \"Ab...\", 'message: truncate(\"Absolutely Longer\", 2) should return \"Ab...\".');" ], + "type": "bonfire", "MDNlinks": [ "String.slice()" ], - "solutions": [ - "function truncate(str, num) {\n if(str.length > num ) {\n if(num > 3) {\n return str.slice(0, num - 3) + '...';\n } else {\n return str.slice(0,num) + '...';\n }\n } \n return str;\n}" - ], - "type": "bonfire", "challengeType": 5, - "nameCn": "", - "descriptionCn": [], - "nameFr": "", - "descriptionFr": [], - "nameRu": "", - "descriptionRu": [], "nameEs": "Trunca una cadena de texto", "descriptionEs": [ "Trunca una cadena de texto (primer argumento) si su longitud es mayor que un máximo de caracteres dado (segundo argumento). Devuelve la cadena de texto truncada con una terminación \"...\".", "Ten en cuenta que los tres puntos al final también se cuentan dentro de la longitud de la cadena de texto.", "Recuerda utilizar Read-Search-Ask si te sientes atascado. Intenta programar en pareja. Escribe tu propio código." - ], - "namePt": "", - "descriptionPt": [], - "isRequired": true + ] }, { "id": "a9bd25c716030ec90084d8a1", - "title": "Chunky Monkey", "description": [ "Write a function that splits an array (first argument) into groups the length of size (second argument) and returns them as a multidimensional array.", "Remember to use Read-Search-Ask if you get stuck. Write your own code." @@ -506,6 +424,11 @@ "", "chunk([\"a\", \"b\", \"c\", \"d\"], 2);" ], + "isRequired": true, + "title": "Chunky Monkey", + "solutions": [ + "function chunk(arr, size) {\n var out = [];\n for (var i = 0; i < arr.length; i+=size) {\n out.push(arr.slice(i,i+size));\n }\n return out;\n}\n\nchunk(['a', 'b', 'c', 'd'], 2);\n" + ], "tests": [ "assert.deepEqual(chunk([\"a\", \"b\", \"c\", \"d\"], 2), [[\"a\", \"b\"], [\"c\", \"d\"]], 'message: chunk([\"a\", \"b\", \"c\", \"d\"], 2) should return [[\"a\", \"b\"], [\"c\", \"d\"]].');", "assert.deepEqual(chunk([0, 1, 2, 3, 4, 5], 3), [[0, 1, 2], [3, 4, 5]], 'message: chunk([0, 1, 2, 3, 4, 5], 3) should return [[0, 1, 2], [3, 4, 5]].');", @@ -514,33 +437,20 @@ "assert.deepEqual(chunk([0, 1, 2, 3, 4, 5, 6], 3), [[0, 1, 2], [3, 4, 5], [6]], 'message: chunk([0, 1, 2, 3, 4, 5, 6], 3) should return [[0, 1, 2], [3, 4, 5], [6]].');", "assert.deepEqual(chunk([0, 1, 2, 3, 4, 5, 6, 7, 8], 4), [[0, 1, 2, 3], [4, 5, 6, 7], [8]], 'message: chunk([0, 1, 2, 3, 4, 5, 6, 7, 8], 4) should return [[0, 1, 2, 3], [4, 5, 6, 7], [8]].');" ], + "type": "bonfire", "MDNlinks": [ "Array.push()", "Array.slice()" ], - "solutions": [ - "function chunk(arr, size) {\n var out = [];\n for (var i = 0; i < arr.length; i+=size) {\n out.push(arr.slice(i,i+size));\n }\n return out;\n}\n\nchunk(['a', 'b', 'c', 'd'], 2);\n" - ], - "type": "bonfire", "challengeType": 5, - "nameCn": "", - "descriptionCn": [], - "nameFr": "", - "descriptionFr": [], - "nameRu": "", - "descriptionRu": [], "nameEs": "En mil pedazos", "descriptionEs": [ "Escribe una función que parta un arreglo (primer argumento) en fragmentos de una longitud dada (segundo argumento) y los devuelva en forma de un arreglo multidimensional.", "Recuerda utilizar Read-Search-Ask si te sientes atascado. Intenta programar en pareja. Escribe tu propio código." - ], - "namePt": "", - "descriptionPt": [], - "isRequired": true + ] }, { "id": "ab31c21b530c0dafa9e241ee", - "title": "Slasher Flick", "description": [ "Return the remaining elements of an array after chopping off n elements from the head.", "The head meaning the beginning of the array, or the zeroth index", @@ -554,40 +464,32 @@ "", "slasher([1, 2, 3], 2);" ], + "isRequired": true, + "title": "Slasher Flick", + "solutions": [ + "function slasher(arr, howMany) {\n // it doesn't always pay to be first\n return arr.slice(howMany);\n}\n\nslasher([1, 2, 3], 2);\n" + ], "tests": [ "assert.deepEqual(slasher([1, 2, 3], 2), [3], 'message: slasher([1, 2, 3], 2) should return [3].');", "assert.deepEqual(slasher([1, 2, 3], 0), [1, 2, 3], 'message: slasher([1, 2, 3], 0) should return [1, 2, 3].');", "assert.deepEqual(slasher([1, 2, 3], 9), [], 'message: slasher([1, 2, 3], 9) should return [].');", "assert.deepEqual(slasher([1, 2, 3], 4), [], 'message: slasher([1, 2, 3], 4) should return [].');" ], + "type": "bonfire", "MDNlinks": [ "Array.slice()", "Array.splice()" ], - "solutions": [ - "function slasher(arr, howMany) {\n // it doesn't always pay to be first\n return arr.slice(howMany);\n}\n\nslasher([1, 2, 3], 2);\n" - ], - "type": "bonfire", "challengeType": 5, - "nameCn": "", - "descriptionCn": [], - "nameFr": "", - "descriptionFr": [], - "nameRu": "", - "descriptionRu": [], "nameEs": "Vuélale la cabeza", "descriptionEs": [ "Crea una función que devuelva los elementos restantes de un arreglo después de eliminar n elementos de la cabeza.", "Por cabeza nos referimos al inicio de un arreglo, comenzando por el índice 0.", "Recuerda utilizar Read-Search-Ask si te sientes atascado. Intenta programar en pareja. Escribe tu propio código." - ], - "namePt": "", - "descriptionPt": [], - "isRequired": true + ] }, { "id": "af2170cad53daa0770fabdea", - "title": "Mutations", "description": [ "Return true if the string in the first element of the array contains all of the letters of the string in the second element of the array.", "For example, [\"hello\", \"Hello\"], should return true because all of the letters in the second string are present in the first, ignoring case.", @@ -602,6 +504,11 @@ "", "mutation([\"hello\", \"hey\"]);" ], + "isRequired": true, + "title": "Mutations", + "solutions": [ + "function mutation(arr) {\n var hash = Object.create(null);\n arr[0].toLowerCase().split('').forEach(function(c) {\n hash[c] = true;\n });\n return !arr[1].toLowerCase().split('').filter(function(c) {\n return !hash[c];\n }).length;\n}\n\nmutation(['hello', 'hey']);\n" + ], "tests": [ "assert(mutation([\"hello\", \"hey\"]) === false, 'message: mutation([\"hello\", \"hey\"]) should return false.');", "assert(mutation([\"hello\", \"Hello\"]) === true, 'message: mutation([\"hello\", \"Hello\"]) should return true.');", @@ -612,20 +519,11 @@ "assert(mutation([\"floor\", \"for\"]) === true, 'message: mutation([\"floor\", \"for\"]) should return true.');", "assert(mutation([\"hello\", \"neo\"]) === false, 'message: mutation([\"hello\", \"neo\"]) should return false.');" ], + "type": "bonfire", "MDNlinks": [ "String.indexOf()" ], - "solutions": [ - "function mutation(arr) {\n var hash = Object.create(null);\n arr[0].toLowerCase().split('').forEach(function(c) {\n hash[c] = true;\n });\n return !arr[1].toLowerCase().split('').filter(function(c) {\n return !hash[c];\n }).length;\n}\n\nmutation(['hello', 'hey']);\n" - ], - "type": "bonfire", "challengeType": 5, - "nameCn": "", - "descriptionCn": [], - "nameFr": "", - "descriptionFr": [], - "nameRu": "", - "descriptionRu": [], "nameEs": "Mutaciones", "descriptionEs": [ "Crea una función que devuelva true si la cadena de texto en el primer elemento de un arreglo contiene todas las letras de la cadena de texto en el segundo elemento del arreglo.", @@ -633,14 +531,10 @@ "En el caso de [\"hello\", \"hey\"] la función debe devolver false porque la cadena de texto \"hello\" no contiene una \"y\".", "Finalmente, [\"Alien\", \"line\"], la función debe devolver true porque todas las letras en \"line\" están presentes en \"Alien\".", "Recuerda utilizar Read-Search-Ask si te sientes atascado. Intenta programar en pareja. Escribe tu propio código." - ], - "namePt": "", - "descriptionPt": [], - "isRequired": true + ] }, { "id": "adf08ec01beb4f99fc7a68f2", - "title": "Falsy Bouncer", "description": [ "Remove all falsy values from an array.", "Falsy values in javascript are false, null, 0, \"\", undefined, and NaN.", @@ -654,39 +548,31 @@ "", "bouncer([7, \"ate\", \"\", false, 9]);" ], + "isRequired": true, + "title": "Falsy Bouncer", + "solutions": [ + "function bouncer(arr) {\n // Don't show a false ID to this bouncer.\n return arr.filter(function(e) {return e;});\n}\n\nbouncer([7, 'ate', '', false, 9]);\n" + ], "tests": [ "assert.deepEqual(bouncer([7, \"ate\", \"\", false, 9]), [7, \"ate\", 9], 'message: bouncer([7, \"ate\", \"\", false, 9]) should return [7, \"ate\", 9].');", "assert.deepEqual(bouncer([\"a\", \"b\", \"c\"]), [\"a\", \"b\", \"c\"], 'message: bouncer([\"a\", \"b\", \"c\"]) should return [\"a\", \"b\", \"c\"].');", "assert.deepEqual(bouncer([false, null, 0, NaN, undefined, \"\"]), [], 'message: bouncer([false, null, 0, NaN, undefined, \"\"]) should return [].');" ], + "type": "bonfire", "MDNlinks": [ "Boolean Objects", "Array.filter()" ], - "solutions": [ - "function bouncer(arr) {\n // Don't show a false ID to this bouncer.\n return arr.filter(function(e) {return e;});\n}\n\nbouncer([7, 'ate', '', false, 9]);\n" - ], - "type": "bonfire", "challengeType": 5, - "nameCn": "", - "descriptionCn": [], - "nameFr": "", - "descriptionFr": [], - "nameRu": "", - "descriptionRu": [], "nameEs": "Detector de mentiras", "descriptionEs": [ "Remueve todos los valores falsy de un arreglo dado", "En javascript, valores falsy son los siguientes: false, null, 0, \"\", undefined, y NaN.", "Recuerda utilizar Read-Search-Ask si te sientes atascado. Intenta programar en pareja. Escribe tu propio código." - ], - "namePt": "", - "descriptionPt": [], - "isRequired": true + ] }, { "id": "a39963a4c10bc8b4d4f06d7e", - "title": "Seek and Destroy", "description": [ "You will be provided with an initial array (the first argument in the destroyer function), followed by one or more arguments. Remove all elements from the initial array that are of the same value as these arguments.", "Remember to use Read-Search-Ask if you get stuck. Write your own code." @@ -699,6 +585,11 @@ "", "destroyer([1, 2, 3, 1, 2, 3], 2, 3);" ], + "isRequired": true, + "title": "Seek and Destroy", + "solutions": [ + "function destroyer(arr) {\n var hash = Object.create(null);\n [].slice.call(arguments, 1).forEach(function(e) {\n hash[e] = true;\n });\n // Remove all the values\n return arr.filter(function(e) { return !(e in hash);});\n}\n\ndestroyer([1, 2, 3, 1, 2, 3], 2, 3);\n" + ], "tests": [ "assert.deepEqual(destroyer([1, 2, 3, 1, 2, 3], 2, 3), [1, 1], 'message: destroyer([1, 2, 3, 1, 2, 3], 2, 3) should return [1, 1].');", "assert.deepEqual(destroyer([1, 2, 3, 5, 1, 2, 3], 2, 3), [1, 5, 1], 'message: destroyer([1, 2, 3, 5, 1, 2, 3], 2, 3) should return [1, 5, 1].');", @@ -706,33 +597,20 @@ "assert.deepEqual(destroyer([2, 3, 2, 3], 2, 3), [], 'message: destroyer([2, 3, 2, 3], 2, 3) should return [].');", "assert.deepEqual(destroyer([\"tree\", \"hamburger\", 53], \"tree\", 53), [\"hamburger\"], 'message: destroyer([\"tree\", \"hamburger\", 53], \"tree\", 53) should return [\"hamburger\"].');" ], + "type": "bonfire", "MDNlinks": [ "Arguments object", "Array.filter()" ], - "solutions": [ - "function destroyer(arr) {\n var hash = Object.create(null);\n [].slice.call(arguments, 1).forEach(function(e) {\n hash[e] = true;\n });\n // Remove all the values\n return arr.filter(function(e) { return !(e in hash);});\n}\n\ndestroyer([1, 2, 3, 1, 2, 3], 2, 3);\n" - ], - "type": "bonfire", "challengeType": 5, - "nameCn": "", - "descriptionCn": [], - "nameFr": "", - "descriptionFr": [], - "nameRu": "", - "descriptionRu": [], "nameEs": "Buscar y destruir", "descriptionEs": [ "Se te proveerá un arreglo inicial (el primer argumento en la función destroyer), seguido por uno o más argumentos. Elimina todos los elementos del arreglo inicial que tengan el mismo valor que el resto de argumentos.", "Recuerda utilizar Read-Search-Ask si te sientes atascado. Intenta programar en pareja. Escribe tu propio código." - ], - "namePt": "", - "descriptionPt": [], - "isRequired": true + ] }, { "id": "a24c1a4622e3c05097f71d67", - "title": "Where do I belong", "description": [ "Return the lowest index at which a value (second argument) should be inserted into an array (first argument) once it has been sorted.", "For example, where([1,2,3,4], 1.5) should return 1 because it is greater than 1 (index 0), but less than 2 (index 1).", @@ -747,9 +625,8 @@ "", "where([40, 60], 50);" ], - "MDNlinks": [ - "Array.sort()" - ], + "isRequired": true, + "title": "Where do I belong", "solutions": [ "function where(arr, num) {\n arr = arr.sort(function(a, b){return a-b;});\n for (var i = 0; i < arr.length; i++) {\n if (arr[i] >= num)\n {\n return i;\n }\n }\n return arr.length;\n}" ], @@ -763,26 +640,19 @@ "assert(where([2, 5, 10], 15) === 3, 'message: where([2, 5, 10], 15) should return 3.');" ], "type": "bonfire", + "MDNlinks": [ + "Array.sort()" + ], "challengeType": 5, - "nameCn": "", - "descriptionCn": [], - "nameFr": "", - "descriptionFr": [], - "nameRu": "", - "descriptionRu": [], "nameEs": "¿Cuál es mi asiento?", "descriptionEs": [ "Devuelve el menor índice en el que un valor (segundo argumento) debe ser insertado en un arreglo ordenado (primer argumento).", "Por ejemplo, where([1,2,3,4], 1.5) debe devolver 1 porque el segundo argumento de la función (1.5) es mayor que 1 (con índice 0 en el arreglo), pero menor que 2 (con índice 1).", "Recuerda utilizar Read-Search-Ask si te sientes atascado. Intenta programar en pareja. Escribe tu propio código." - ], - "namePt": "", - "descriptionPt": [], - "isRequired": true + ] }, { "id": "56533eb9ac21ba0edf2244e2", - "title": "Caesar's Cipher", "description": [ "One of the simplest and most widely known ciphers is a Caesar cipher, also known as a shift cipher. In a shift cipher the meanings of the letters are shifted by some set amount.", "A common modern use is the ROT13 cipher, where the values of the letters are shifted by 13 places. Thus 'A' ↔ 'N', 'B' ↔ 'O' and so on.", @@ -790,10 +660,8 @@ "All letters will be uppercase. Do not transform any non-alphabetic character (i.e. spaces, punctuation), but do pass them on.", "Remember to use Read-Search-Ask if you get stuck. Try to pair program. Write your own code." ], - "MDNlinks": [ - "String.charCodeAt()", - "String.fromCharCode()" - ], + "isRequired": true, + "title": "Caesar's Cipher", "releasedOn": "January 1, 2016", "challengeSeed": [ "function rot13(str) { // LBH QVQ VG!", @@ -817,13 +685,11 @@ "assert(rot13(\"GUR DHVPX OEBJA QBT WHZCRQ BIRE GUR YNML SBK.\") === \"THE QUICK BROWN DOG JUMPED OVER THE LAZY FOX.\", 'message: rot13(\"GUR DHVPX OEBJA QBT WHZCRQ BIRE GUR YNML SBK.\") should decode to \"THE QUICK BROWN DOG JUMPED OVER THE LAZY FOX.\"');" ], "type": "bonfire", - "challengeType": "5", - "nameCn": "", - "nameFr": "", - "nameRu": "", - "nameEs": "", - "namePt": "", - "isRequired": true + "MDNlinks": [ + "String.charCodeAt()", + "String.fromCharCode()" + ], + "challengeType": 5 } ] } diff --git a/challenges/01-front-end-development-certification/basic-javascript.json b/challenges/01-front-end-development-certification/basic-javascript.json index 687502ab31..40110d9a42 100644 --- a/challenges/01-front-end-development-certification/basic-javascript.json +++ b/challenges/01-front-end-development-certification/basic-javascript.json @@ -4484,7 +4484,7 @@ ], "type": "waypoint", "challengeType": 0, - "isBeta": "true" + "isBeta": true }, { "id": "cf1111c1c13feddfaeb1bdef", @@ -4647,7 +4647,7 @@ ], "type": "waypoint", "challengeType": 0, - "isBeta": "true" + "isBeta": true }, { "id": "cf1111c1c13feddfaeb2bdef", @@ -4816,7 +4816,7 @@ ], "type": "waypoint", "challengeType": 0, - "isBeta": "true" + "isBeta": true }, { "id": "cf1111c1c11feddfaeb1bdff", @@ -4993,7 +4993,7 @@ ], "type": "waypoint", "challengeType": 0, - "isBeta": "true" + "isBeta": true } ] } diff --git a/challenges/01-front-end-development-certification/basic-ziplines.json b/challenges/01-front-end-development-certification/basic-ziplines.json index c191d4f01b..78bf59f6e6 100644 --- a/challenges/01-front-end-development-certification/basic-ziplines.json +++ b/challenges/01-front-end-development-certification/basic-ziplines.json @@ -7,7 +7,6 @@ { "id": "bd7158d8c442eddfbeb5bd1f", "title": "Get Set for our Front End Development Projects", - "challengeSeed": [], "description": [ [ "http://i.imgur.com/OAD6SJz.png", @@ -58,15 +57,10 @@ "" ] ], + "challengeSeed": [], + "tests": [], "type": "Waypoint", "challengeType": 7, - "tests": [], - "nameCn": "", - "descriptionCn": [], - "nameFr": "", - "descriptionFr": [], - "nameRu": "", - "descriptionRu": [], "nameEs": "Prepárate para los Ziplines", "descriptionEs": [ [ @@ -100,16 +94,11 @@ "" ] ], - "namePt": "", - "descriptionPt": [], "isRequired": true }, { "id": "bd7158d8c242eddfaeb5bd13", "title": "Build a Personal Portfolio Webpage", - "challengeSeed": [ - "133315782" - ], "description": [ "Objective: Build a CodePen.io app that is functionally similar to this: http://codepen.io/FreeCodeCamp/full/VemmoX/.", "Rule #1: Don't look at the example project's code. Figure it out for yourself.", @@ -125,13 +114,11 @@ "When you are finished, click the \"I've completed this challenge\" button and include a link to your CodePen. ", "You can get feedback on your project from fellow campers by sharing it in our Code Review Chatroom. You can also share it on Twitter and your city's Campsite (on Facebook)." ], - "type": "zipline", - "challengeType": 3, + "challengeSeed": [ + "133315782" + ], "tests": [], - "nameCn": "", - "descriptionCn": [], - "nameFr": "", - "descriptionFr": [], + "type": "zipline", "nameRu": "Создайте сайт-портфолио", "descriptionRu": [ "Задание: Создайте CodePen.io который успешно копирует вот этот: http://codepen.io/FreeCodeCamp/full/VemmoX/.", @@ -170,16 +157,12 @@ "Cuando hayas terminado, pulsa el botón de \"I've completed this challenge\" e incluye un link a tu CodePen. Si programaste en pareja, debes incluir también el nombre de usuario de Free Code Camp de tu compañero.", "Si quieres retroalimentación inmediata de parte de tus compañeros campistas, pulsa este botón y pega el link de tu proyecto en CodePen.

Pulsa aquí y agrega tu link en el texto del tweet" ], - "namePt": "", - "descriptionPt": [], - "isRequired": true + "isRequired": true, + "challengeType": 3 }, { "id": "bd7158d8c442eddfaeb5bd13", "title": "Build a Random Quote Machine", - "challengeSeed": [ - "126415122" - ], "description": [ "Objective: Build a CodePen.io app that is functionally similar to this: http://codepen.io/FreeCodeCamp/full/yeVgBY.", "Rule #1: Don't look at the example project's code. Figure it out for yourself.", @@ -190,13 +173,11 @@ "When you are finished, click the \"I've completed this challenge\" button and include a link to your CodePen. ", "You can get feedback on your project from fellow campers by sharing it in our Code Review Chatroom. You can also share it on Twitter and your city's Campsite (on Facebook)." ], - "type": "zipline", - "challengeType": 3, + "challengeSeed": [ + "126415122" + ], "tests": [], - "nameCn": "", - "descriptionCn": [], - "nameFr": "", - "descriptionFr": [], + "type": "zipline", "nameRu": "Создайте генератор случайных цитат", "descriptionRu": [ "Задание: Создайте CodePen.io который успешно копирует вот этот: http://codepen.io/FreeCodeCamp/full/yeVgBY.", @@ -224,16 +205,12 @@ "Cuando hayas terminado, pulsa el botón de \"I've completed this challenge\" e incluye un link a tu CodePen. Si programaste en pareja, debes incluir también el nombre de usuario de Free Code Camp de tu compañero.", "Si quieres retroalimentación inmediata de parte de tus compañeros campistas, pulsa este botón y pega el link de tu proyecto en CodePen.

Pulsa aquí y agrega tu link en el texto del tweet" ], - "namePt": "", - "descriptionPt": [], - "isRequired": true + "isRequired": true, + "challengeType": 3 }, { "id": "bd7158d8c442eddfaeb5bd17", "title": "Build a JavaScript Calculator", - "challengeSeed": [ - "126411565" - ], "description": [ "Objective: Build a CodePen.io app that is functionally similar to this: http://codepen.io/FreeCodeCamp/full/EPNZYW.", "Rule #1: Don't look at the example project's code. Figure it out for yourself.", @@ -245,15 +222,12 @@ "When you are finished, click the \"I've completed this challenge\" button and include a link to your CodePen. ", "You can get feedback on your project from fellow campers by sharing it in our Code Review Chatroom. You can also share it on Twitter and your city's Campsite (on Facebook)." ], + "challengeSeed": [ + "126411565" + ], + "tests": [], "type": "zipline", "challengeType": 3, - "tests": [], - "nameCn": "", - "descriptionCn": [], - "nameFr": "", - "descriptionFr": [], - "nameRu": "", - "descriptionRu": [], "nameEs": "Crea una calculadora JavaScript", "descriptionEs": [ "Objetivo: Crea una aplicación con CodePen.io que reproduzca efectivamente mediante ingeniería inversa este app: http://codepen.io/FreeCodeCamp/full/EPNZYW.", @@ -268,16 +242,11 @@ "Cuando hayas terminado, pulsa el botón de \"I've completed this challenge\" e incluye un link a tu CodePen. Si programaste en pareja, debes incluir también el nombre de usuario de Free Code Camp de tu compañero.", "Si quieres retroalimentación inmediata de parte de tus compañeros campistas, pulsa este botón y pega el link de tu proyecto en CodePen.

Pulsa aquí y agrega tu link en el texto del tweet" ], - "namePt": "", - "descriptionPt": [], "isRequired": true }, { "id": "bd7158d8c442eddfaeb5bd0f", "title": "Build a Pomodoro Clock", - "challengeSeed": [ - "126411567" - ], "description": [ "Objective: Build a CodePen.io app that is functionally similar to this: http://codepen.io/FreeCodeCamp/full/VemPZX.", "Rule #1: Don't look at the example project's code. Figure it out for yourself.", @@ -289,13 +258,11 @@ "When you are finished, click the \"I've completed this challenge\" button and include a link to your CodePen. ", "You can get feedback on your project from fellow campers by sharing it in our Code Review Chatroom. You can also share it on Twitter and your city's Campsite (on Facebook)." ], - "type": "zipline", - "challengeType": 3, + "challengeSeed": [ + "126411567" + ], "tests": [], - "nameCn": "", - "descriptionCn": [], - "nameFr": "", - "descriptionFr": [], + "type": "zipline", "nameRu": "Создайте таймер Pomodoro", "descriptionRu": [ "Задание: Создайте CodePen.io который успешно копирует вот этот: http://codepen.io/FreeCodeCamp/full/VemPZX.", @@ -324,9 +291,8 @@ "Cuando hayas terminado, pulsa el botón de \"I've completed this challenge\" e incluye un link a tu CodePen. Si programaste en pareja, debes incluir también el nombre de usuario de Free Code Camp de tu compañero.", "Si quieres retroalimentación inmediata de parte de tus compañeros campistas, pulsa este botón y pega el link de tu proyecto en CodePen.

Pulsa aquí y agrega tu link en el texto del tweet" ], - "namePt": "", - "descriptionPt": [], - "isRequired": true + "isRequired": true, + "challengeType": 3 } ] } diff --git a/challenges/01-front-end-development-certification/bootstrap.json b/challenges/01-front-end-development-certification/bootstrap.json index 9f35418c0c..a06c94acaa 100644 --- a/challenges/01-front-end-development-certification/bootstrap.json +++ b/challenges/01-front-end-development-certification/bootstrap.json @@ -16,11 +16,6 @@ "In this case, we've already added it for you to this page behind the scenes.", "To get started, we should nest all of our HTML in a div element with the class container-fluid." ], - "tests": [ - "assert($(\"div\").hasClass(\"container-fluid\"), 'message: Your div element should have the class container-fluid.');", - "assert(code.match(/<\\/div>/g) && code.match(/
/g).length === code.match(/
div elements has a closing tag.');", - "assert($(\".container-fluid\").children().length >= 8, 'message: Make sure you have nested all HTML elements in .container-fluid.');" - ], "challengeSeed": [ "", "