Change nameXX properties to title XX properties
This commit is contained in:
@@ -58,7 +58,7 @@
|
||||
"RegExp"
|
||||
],
|
||||
"challengeType": 5,
|
||||
"nameEs": "Valida Números Telefónicos de los EEUU",
|
||||
"titleEs": "Valida Números Telefónicos de los EEUU",
|
||||
"descriptionEs": [
|
||||
"Haz que la función devuelva true (verdadero) si el texto introducido es un número válido en los EEUU.",
|
||||
"El usuario debe llenar el campo del formulario de la forma que desee siempre y cuando sea un número válido en los EEUU. Los números mostrados a continuación tienen formatos válidos en los EEUU:",
|
||||
@@ -103,7 +103,7 @@
|
||||
"Symmetric Difference"
|
||||
],
|
||||
"challengeType": 5,
|
||||
"nameEs": "Diferencia simétrica",
|
||||
"titleEs": "Diferencia simétrica",
|
||||
"descriptionEs": [
|
||||
"Crea una función que acepte dos o más arreglos y que devuelva un arreglo conteniendo la diferenia simétrica entre ambos",
|
||||
"En Matemáticas, el término 'diferencia simétrica' se refiere a los elementos en dos conjuntos que están en el primer conjunto o en el segundo, pero no en ambos.",
|
||||
@@ -155,7 +155,7 @@
|
||||
"Global Object"
|
||||
],
|
||||
"challengeType": 5,
|
||||
"nameEs": "Cambio exacto",
|
||||
"titleEs": "Cambio exacto",
|
||||
"descriptionEs": [
|
||||
"Crea una función que simule una caja registradora que acepte el precio de compra como el primer argumento, la cantidad recibida como el segundo argumento, y la cantidad de dinero disponible en la registradora (cid) como tercer argumento",
|
||||
"cid es un arreglo bidimensional que lista la cantidad de dinero disponible",
|
||||
@@ -210,7 +210,7 @@
|
||||
"Global Array Object"
|
||||
],
|
||||
"challengeType": 5,
|
||||
"nameEs": "Actualizando el inventario",
|
||||
"titleEs": "Actualizando el inventario",
|
||||
"descriptionEs": [
|
||||
"Compara y actualiza el inventario actual, almacenado en un arreglo bidimensional, contra otro arreglo bidimensional de inventario nuevo. Actualiza las cantidades en el inventario actual y, en caso de recibir una nueva mercancía, añade su nombre y la cantidad recibida al arreglo del inventario en orden alfabético.",
|
||||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Read-Search-Ask</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código."
|
||||
@@ -249,7 +249,7 @@
|
||||
"RegExp"
|
||||
],
|
||||
"challengeType": 5,
|
||||
"nameEs": "Sin repeticiones, por favor",
|
||||
"titleEs": "Sin repeticiones, por favor",
|
||||
"descriptionEs": [
|
||||
"Crea una función que devuelva el número total de permutaciones de las letras en la cadena de texto provista, en las cuales no haya letras consecutivas repetidas",
|
||||
"Por ejemplo, 'aab' debe retornar 2 porque, del total de 6 permutaciones posibles, solo 2 de ellas no tienen repetida la misma letra (en este caso 'a').",
|
||||
@@ -295,7 +295,7 @@
|
||||
"parseInt()"
|
||||
],
|
||||
"challengeType": 5,
|
||||
"nameEs": "Rangos de fechas amigables",
|
||||
"titleEs": "Rangos de fechas amigables",
|
||||
"descriptionEs": [
|
||||
"Convierte un rango de fecha que conste de dos fechas en formato AAAA-MM-DD a un formato más legible",
|
||||
"",
|
||||
@@ -345,7 +345,7 @@
|
||||
"Details of the Object Model"
|
||||
],
|
||||
"challengeType": 5,
|
||||
"nameEs": "Crea una Persona",
|
||||
"titleEs": "Crea una Persona",
|
||||
"descriptionEs": [
|
||||
"Completa el constructor de objetos con los métodos especificados en las pruebas.",
|
||||
"Los métodos son: getFirstName(), getLastName(), getFullName(), setFirstName(first), setLastName(last), y setFullName(firstAndLast). ",
|
||||
@@ -386,7 +386,7 @@
|
||||
"Math.pow()"
|
||||
],
|
||||
"challengeType": 5,
|
||||
"nameEs": "Ubica los escombros",
|
||||
"titleEs": "Ubica los escombros",
|
||||
"descriptionEs": [
|
||||
"Crea una función que devuelva un nuevo arreglo que transforme la altitud promedio del elemento en su período orbital.",
|
||||
"El arreglo debe contener objetos en el formato <code>{name: 'name', avgAlt: avgAlt}</code>.",
|
||||
@@ -427,7 +427,7 @@
|
||||
"Array.reduce()"
|
||||
],
|
||||
"challengeType": 5,
|
||||
"nameEs": "En parejas",
|
||||
"titleEs": "En parejas",
|
||||
"descriptionEs": [
|
||||
"Crea una función que devuelva la suma de todos los índices de los elementos de 'arr' que pueden ser emparejados con otro elemento de tal forma que la suma de ambos equivalga al valor del segundo argumento, 'arg'. Si varias combinaciones son posibles, devuelve la menor suma de índices. Una vez un elemento ha sido usado, no puede ser usado de nuevo para emparejarlo con otro elemento.",
|
||||
"Por ejemplo, pairwise([1, 4, 2, 3, 0, 5], 7) debe devolver 11 porque 4, 2, 3 y 5 pueden ser emparejados para obtener una suma de 7",
|
||||
|
@@ -24,7 +24,6 @@
|
||||
"tests": [],
|
||||
"type": "zipline",
|
||||
"challengeType": 3,
|
||||
"nameEs": "Crea una calculadora JavaScript",
|
||||
"descriptionEs": [
|
||||
"<span class='text-info'>Objetivo:</span> Crea una aplicación con <a href='http://codepen.io' target='_blank'>CodePen.io</a> cuya funcionalidad sea similar a esta: <a href='http://codepen.io/FreeCodeCamp/full/zrRzMR' target='_blank'>http://codepen.io/FreeCodeCamp/full/zrRzMR</a>.",
|
||||
"<span class='text-info'>Regla #1:</span> No veas el código del proyecto de ejemplo en CodePen. Encuentra la forma de hacerlo por tu cuenta.",
|
||||
@@ -36,7 +35,8 @@
|
||||
"Cuando hayas terminado, pulsa el botón de \"I've completed this challenge\" e incluye un enlace a tu CodePen. ",
|
||||
"Puedes obtener retroalimentación sobre tu proyecto por parte de otros campistas, compartiéndolo en nuestra <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Sala de chat para revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)."
|
||||
],
|
||||
"isRequired": true
|
||||
"isRequired": true,
|
||||
"titleEs": "Crea una calculadora JavaScript"
|
||||
},
|
||||
{
|
||||
"id": "bd7158d8c442eddfaeb5bd0f",
|
||||
@@ -57,7 +57,9 @@
|
||||
],
|
||||
"tests": [],
|
||||
"type": "zipline",
|
||||
"nameRu": "Создайте таймер Pomodoro",
|
||||
"isRequired": true,
|
||||
"challengeType": 3,
|
||||
"titleRu": "Создайте таймер Pomodoro",
|
||||
"descriptionRu": [
|
||||
"<span class='text-info'>Задание:</span> Создайте <a href='http://codepen.io' target='_blank'>CodePen.io</a> который успешно копирует вот этот: <a href='http://codepen.io/FreeCodeCamp/full/VemPZX' target='_blank'>http://codepen.io/FreeCodeCamp/full/VemPZX</a>.",
|
||||
"<span class='text-info'>Правило #1:</span> Не подсматривайте код приведенного на CodePen примера. Напишите его самостоятельно.",
|
||||
@@ -71,7 +73,7 @@
|
||||
"Когда выполните задание кликните кнопку \"I've completed this challenge\" и добавьте ссылку на ваш CodePen. Если вы программировали с кем-то в паре, также добавьте имя вашего напарника.",
|
||||
"Если вы хотите получить немедленную оценку вашего проекта, нажмите эту кнопку и добавьте ссылку на ваш CodePen. В противном случае мы проверим его перед тем как вы приступите к проектам для некоммерческих организаций.<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>"
|
||||
],
|
||||
"nameEs": "Crea un reloj pomodoro",
|
||||
"titleEs": "Crea un reloj pomodoro",
|
||||
"descriptionEs": [
|
||||
"<span class='text-info'>Objetivo:</span> Crea una aplicación con <a href='http://codepen.io' target='_blank'>CodePen.io</a> cuya funcionalidad sea similar a la de esta: <a href='http://codepen.io/FreeCodeCamp/full/VemPZX' target='_blank'>http://codepen.io/FreeCodeCamp/full/VemPZX</a>.",
|
||||
"<span class='text-info'>Regla #1:</span> No veas el código del proyecto de ejemplo en CodePen. Encuentra la forma de hacerlo por tu cuenta.",
|
||||
@@ -82,9 +84,7 @@
|
||||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado.",
|
||||
"Cuando hayas terminado, pulsa el botón de \"I've completed this challenge\" e incluye un enlace a tu CodePen.",
|
||||
"Puedes obtener retroalimentación sobre tu proyecto por parte de otros campistas, compartiéndolo en nuestra <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Sala de chat para revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)."
|
||||
],
|
||||
"isRequired": true,
|
||||
"challengeType": 3
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "bd7158d8c442eedfaeb5bd1c",
|
||||
@@ -106,7 +106,6 @@
|
||||
"tests": [],
|
||||
"type": "zipline",
|
||||
"challengeType": 3,
|
||||
"nameEs": "Crea un juego de Tic Tac Toe",
|
||||
"descriptionEs": [
|
||||
"<span class='text-info'>Objetivo:</span> Construye una aplicación en <a href='http://codepen.io' target='_blank'>CodePen.io</a> cuya funcionalidad sea similar a la de esta: <a href='http://codepen.io/FreeCodeCamp/full/adBpvw' target='_blank'>http://codepen.io/FreeCodeCamp/full/adBpvw</a>.",
|
||||
"<span class='text-info'>Regla #1:</span> No veas el código del proyecto de ejemplo en CodePen. Encuentra la forma de hacerlo por tu cuenta.",
|
||||
@@ -118,7 +117,8 @@
|
||||
"Cuando hayas terminado, pulsa el botón de \"I've completed this challenge\" e incluye un enlace a tu CodePen.",
|
||||
"Puedes obtener retroalimentación sobre tu proyecto por parte de otros campistas, compartiéndolo en nuestra <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Sala de chat para revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)."
|
||||
],
|
||||
"isRequired": true
|
||||
"isRequired": true,
|
||||
"titleEs": "Crea un juego de Tic Tac Toe"
|
||||
},
|
||||
{
|
||||
"id": "bd7158d8c442eddfaeb5bd1c",
|
||||
@@ -146,7 +146,6 @@
|
||||
"tests": [],
|
||||
"type": "zipline",
|
||||
"challengeType": 3,
|
||||
"nameEs": "Construye un juego de Simon",
|
||||
"descriptionEs": [
|
||||
"<span class='text-info'>Objetivo:</span> Construye una aplicación en <a href='http://codepen.io' target='_blank'>CodePen.io</a> cuya funcionalidad sea similar a la de esta: <a href='http://codepen.io/Em-Ant/full/QbRyqq/' target='_blank'>http://codepen.io/Em-Ant/full/QbRyqq/</a>.",
|
||||
"<span class='text-info'>Regla #1:</span> No veas el código del proyecto de ejemplo en CodePen. Encuentra la forma de hacerlo por tu cuenta.",
|
||||
@@ -164,7 +163,8 @@
|
||||
"Cuando hayas terminado, pulsa el botón de \"I've completed this challenge\" e incluye un enlace a tu CodePen.",
|
||||
"Puedes obtener retroalimentación sobre tu proyecto por parte de otros campistas, compartiéndolo en nuestra <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Sala de chat para revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)."
|
||||
],
|
||||
"isRequired": true
|
||||
"isRequired": true,
|
||||
"titleEs": "Construye un juego de Simon"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
@@ -37,8 +37,7 @@
|
||||
"tests": [],
|
||||
"type": "Waypoint",
|
||||
"challengeType": 7,
|
||||
"nameEs": "Prepárate para nuestros Desafíos sobre Algoritmos",
|
||||
"descriptionEs": [
|
||||
"descriptionEs": [
|
||||
[
|
||||
"http://i.imgur.com/sJkp30a.png",
|
||||
"Una imagen de un desafio sobre algoritmos que presenta instrucciones, pruebas y el editor de código.",
|
||||
@@ -64,7 +63,8 @@
|
||||
""
|
||||
]
|
||||
],
|
||||
"isRequired": false
|
||||
"isRequired": false,
|
||||
"titleEs": "Prepárate para nuestros Desafíos sobre Algoritmos"
|
||||
},
|
||||
{
|
||||
"id": "a202eed8fc186c8434cb6d61",
|
||||
@@ -82,10 +82,6 @@
|
||||
"",
|
||||
"reverseString(\"hello\");"
|
||||
],
|
||||
"isRequired": true,
|
||||
"solutions": [
|
||||
"function reverseString(str) {\n return str.split('').reverse().join(\"\");\n}\n\nreverseString('hello');\n"
|
||||
],
|
||||
"tests": [
|
||||
"assert(typeof reverseString(\"hello\") === \"string\", 'message: <code>reverseString(\"hello\")</code> should return a string.');",
|
||||
"assert(reverseString(\"hello\") === \"olleh\", 'message: <code>reverseString(\"hello\")</code> should become <code>\"olleh\"</code>.');",
|
||||
@@ -93,6 +89,10 @@
|
||||
"assert(reverseString(\"Greetings from Earth\") === \"htraE morf sgniteerG\", 'message: <code>reverseString(\"Greetings from Earth\")</code> should return <code>\"htraE morf sgniteerG\"</code>.');"
|
||||
],
|
||||
"type": "bonfire",
|
||||
"isRequired": true,
|
||||
"solutions": [
|
||||
"function reverseString(str) {\n return str.split('').reverse().join(\"\");\n}\n\nreverseString('hello');\n"
|
||||
],
|
||||
"MDNlinks": [
|
||||
"Global String Object",
|
||||
"String.split()",
|
||||
@@ -100,7 +100,7 @@
|
||||
"Array.join()"
|
||||
],
|
||||
"challengeType": 5,
|
||||
"nameEs": "Invierte el texto",
|
||||
"titleEs": "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",
|
||||
@@ -125,10 +125,6 @@
|
||||
"",
|
||||
"factorialize(5);"
|
||||
],
|
||||
"isRequired": true,
|
||||
"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: <code>factorialize(5)</code> should return a number.');",
|
||||
"assert(factorialize(5) === 120, 'message: <code>factorialize(5)</code> should return 120.');",
|
||||
@@ -137,11 +133,15 @@
|
||||
"assert(factorialize(0) === 1, 'message: <code>factorialize(0)</code> should return 1.');"
|
||||
],
|
||||
"type": "bonfire",
|
||||
"isRequired": true,
|
||||
"solutions": [
|
||||
"function factorialize(num) {\n return num < 1 ? 1 : num * factorialize(num-1);\n}\n\nfactorialize(5);\n"
|
||||
],
|
||||
"MDNlinks": [
|
||||
"Arithmetic Operators"
|
||||
],
|
||||
"challengeType": 5,
|
||||
"nameEs": "Factoriza un número",
|
||||
"titleEs": "Factoriza un número",
|
||||
"descriptionEs": [
|
||||
"Crea una función que devuelva el factorial del número entero que se te provee",
|
||||
"El factorial de un número entero positivo n es la multiplicación de todos los enteros positivos menores o iguales a n",
|
||||
@@ -170,10 +170,6 @@
|
||||
"",
|
||||
"palindrome(\"eye\");"
|
||||
],
|
||||
"isRequired": true,
|
||||
"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: <code>palindrome(\"eye\")</code> should return a boolean.');",
|
||||
"assert(palindrome(\"eye\") === true, 'message: <code>palindrome(\"eye\")</code> should return true.');",
|
||||
@@ -188,12 +184,16 @@
|
||||
"assert(palindrome(\"0_0 (: /-\\ :) 0-0\") === true, 'message: <code>palindrome(\"0_0 (: /-\\ :) 0-0\")</code> should return true.');"
|
||||
],
|
||||
"type": "bonfire",
|
||||
"isRequired": true,
|
||||
"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}"
|
||||
],
|
||||
"MDNlinks": [
|
||||
"String.replace()",
|
||||
"String.toLowerCase()"
|
||||
],
|
||||
"challengeType": 5,
|
||||
"nameEs": "Verifica si es palíndromo",
|
||||
"titleEs": "Verifica si es palíndromo",
|
||||
"descriptionEs": [
|
||||
"Crea una función que devuelva <code>true</code> si una cadena de texto dada es un palíndromo, y que devuelva <code>false</code> en caso contrario",
|
||||
"Un palíndromo es una palabra u oración que se escribe de la misma forma en ambos sentidos, sin tomar en cuenta signos de puntuación, espacios y sin distinguir entre mayúsculas y minúsculas.",
|
||||
@@ -217,10 +217,6 @@
|
||||
"",
|
||||
"findLongestWord(\"The quick brown fox jumped over the lazy dog\");"
|
||||
],
|
||||
"isRequired": true,
|
||||
"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: <code>findLongestWord(\"The quick brown fox jumped over the lazy dog\")</code> should return a number.');",
|
||||
"assert(findLongestWord(\"The quick brown fox jumped over the lazy dog\") === 6, 'message: <code>findLongestWord(\"The quick brown fox jumped over the lazy dog\")</code> should return 6.');",
|
||||
@@ -230,12 +226,16 @@
|
||||
"assert(findLongestWord(\"What if we try a super-long word such as otorhinolaryngology\") === 19, 'message: <code>findLongestWord(\"What if we try a super-long word such as otorhinolaryngology\")</code> should return 19.');"
|
||||
],
|
||||
"type": "bonfire",
|
||||
"isRequired": true,
|
||||
"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"
|
||||
],
|
||||
"MDNlinks": [
|
||||
"String.split()",
|
||||
"String.length"
|
||||
],
|
||||
"challengeType": 5,
|
||||
"nameEs": "Encuentra la palabra más larga",
|
||||
"titleEs": "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",
|
||||
@@ -257,10 +257,6 @@
|
||||
"",
|
||||
"titleCase(\"I'm a little tea pot\");"
|
||||
],
|
||||
"isRequired": true,
|
||||
"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: <code>titleCase(\"I'm a little tea pot\")</code> should return a string.');",
|
||||
"assert(titleCase(\"I'm a little tea pot\") === \"I'm A Little Tea Pot\", 'message: <code>titleCase(\"I'm a little tea pot\")</code> should return \"I'm A Little Tea Pot\".');",
|
||||
@@ -268,11 +264,15 @@
|
||||
"assert(titleCase(\"HERE IS MY HANDLE HERE IS MY SPOUT\") === \"Here Is My Handle Here Is My Spout\", 'message: <code>titleCase(\"HERE IS MY HANDLE HERE IS MY SPOUT\")</code> should return \"Here Is My Handle Here Is My Spout\".');"
|
||||
],
|
||||
"type": "bonfire",
|
||||
"isRequired": true,
|
||||
"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"
|
||||
],
|
||||
"MDNlinks": [
|
||||
"String.split()"
|
||||
],
|
||||
"challengeType": 5,
|
||||
"nameEs": "Aplica formato de título",
|
||||
"titleEs": "Aplica formato de título",
|
||||
"descriptionEs": [
|
||||
"Crea una función que devuelva la cadena de texto que recibe 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\".",
|
||||
@@ -295,21 +295,21 @@
|
||||
"",
|
||||
"largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);"
|
||||
],
|
||||
"isRequired": true,
|
||||
"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: <code>largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]])</code> 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: <code>largestOfFour([[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]])</code> should return <code>[27,5,39,1001]</code>.');",
|
||||
"assert.deepEqual(largestOfFour([[4, 9, 1, 3], [13, 35, 18, 26], [32, 35, 97, 39], [1000000, 1001, 857, 1]]), [9,35,97,1000000], 'message: <code>largestOfFour([[4, 9, 1, 3], [13, 35, 18, 26], [32, 35, 97, 39], [1000000, 1001, 857, 1]])</code> should return <code>[9, 35, 97, 1000000]</code>.');"
|
||||
],
|
||||
"type": "bonfire",
|
||||
"isRequired": true,
|
||||
"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"
|
||||
],
|
||||
"MDNlinks": [
|
||||
"Comparison Operators"
|
||||
],
|
||||
"challengeType": 5,
|
||||
"nameEs": "Devuelve el mayor entero de cada arreglo",
|
||||
"titleEs": "Devuelve el mayor entero de cada arreglo",
|
||||
"descriptionEs": [
|
||||
"Crea una función que devuelva un arreglo que contenga el mayor de los números de cada sub-arreglo que recibe. Para simplificar las cosas, el arreglo que recibirá 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].",
|
||||
@@ -333,10 +333,6 @@
|
||||
"",
|
||||
"end(\"Bastian\", \"n\");"
|
||||
],
|
||||
"isRequired": true,
|
||||
"solutions": [
|
||||
"function end(str, target) {\n return str.substring(str.length-target.length) === target;\n};\n"
|
||||
],
|
||||
"tests": [
|
||||
"assert(end(\"Bastian\", \"n\") === true, 'message: <code>end(\"Bastian\", \"n\")</code> should return true.');",
|
||||
"assert(end(\"Connor\", \"n\") === false, 'message: <code>end(\"Connor\", \"n\")</code> should return false.');",
|
||||
@@ -347,11 +343,15 @@
|
||||
"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: <code>end(\"If you want to save our world, you must hurry. We dont know how much longer we can withstand the nothing\", \"mountain\")</code> should return false.');"
|
||||
],
|
||||
"type": "bonfire",
|
||||
"isRequired": true,
|
||||
"solutions": [
|
||||
"function end(str, target) {\n return str.substring(str.length-target.length) === target;\n};\n"
|
||||
],
|
||||
"MDNlinks": [
|
||||
"String.substr()"
|
||||
],
|
||||
"challengeType": 5,
|
||||
"nameEs": "Confirma la terminación",
|
||||
"titleEs": "Confirma la terminación",
|
||||
"descriptionEs": [
|
||||
"Verifica si una cadena de texto (primer argumento) termina con otra cadena de texto (segundo argumento).",
|
||||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código."
|
||||
@@ -372,10 +372,6 @@
|
||||
"",
|
||||
"repeat(\"abc\", 3);"
|
||||
],
|
||||
"isRequired": true,
|
||||
"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: <code>repeat(\"*\", 3)</code> should return <code>\"***\"</code>.');",
|
||||
"assert(repeat(\"abc\", 3) === \"abcabcabc\", 'message: <code>repeat(\"abc\", 3)</code> should return <code>\"abcabcabc\"</code>.');",
|
||||
@@ -385,11 +381,15 @@
|
||||
"assert(repeat(\"abc\", -2) === \"\", 'message: <code>repeat(\"abc\", -2)</code> should return <code>\"\"</code>.');"
|
||||
],
|
||||
"type": "bonfire",
|
||||
"isRequired": true,
|
||||
"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"
|
||||
],
|
||||
"MDNlinks": [
|
||||
"Global String Object"
|
||||
],
|
||||
"challengeType": 5,
|
||||
"nameEs": "Repite el texto Repite el texto",
|
||||
"titleEs": "Repite el texto Repite el texto",
|
||||
"descriptionEs": [
|
||||
"Repite una cadena de texto dada (primer argumento) <code>num</code> veces (segundo argumento). Retorna una cadena de texto vacía si <code>num</code> es un número negativo.",
|
||||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código."
|
||||
@@ -412,10 +412,6 @@
|
||||
"",
|
||||
"truncate(\"A-tisket a-tasket A green and yellow basket\", 11);"
|
||||
],
|
||||
"isRequired": true,
|
||||
"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: <code>truncate(\"A-tisket a-tasket A green and yellow basket\", 11)</code> should return \"A-tisket...\".');",
|
||||
"assert(truncate(\"Peter Piper picked a peck of pickled peppers\", 14) === \"Peter Piper...\", 'message: <code>truncate(\"Peter Piper picked a peck of pickled peppers\", 14)</code> should return \"Peter Piper...\".');",
|
||||
@@ -425,11 +421,15 @@
|
||||
"assert(truncate(\"Absolutely Longer\", 2) === \"Ab...\", 'message: <code>truncate(\"Absolutely Longer\", 2)</code> should return \"Ab...\".');"
|
||||
],
|
||||
"type": "bonfire",
|
||||
"isRequired": true,
|
||||
"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}"
|
||||
],
|
||||
"MDNlinks": [
|
||||
"String.slice()"
|
||||
],
|
||||
"challengeType": 5,
|
||||
"nameEs": "Trunca una cadena de texto",
|
||||
"titleEs": "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.",
|
||||
@@ -452,10 +452,6 @@
|
||||
"",
|
||||
"chunk([\"a\", \"b\", \"c\", \"d\"], 2);"
|
||||
],
|
||||
"isRequired": true,
|
||||
"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: <code>chunk([\"a\", \"b\", \"c\", \"d\"], 2)</code> should return <code>[[\"a\", \"b\"], [\"c\", \"d\"]]</code>.');",
|
||||
"assert.deepEqual(chunk([0, 1, 2, 3, 4, 5], 3), [[0, 1, 2], [3, 4, 5]], 'message: <code>chunk([0, 1, 2, 3, 4, 5], 3)</code> should return <code>[[0, 1, 2], [3, 4, 5]]</code>.');",
|
||||
@@ -465,12 +461,16 @@
|
||||
"assert.deepEqual(chunk([0, 1, 2, 3, 4, 5, 6, 7, 8], 4), [[0, 1, 2, 3], [4, 5, 6, 7], [8]], 'message: <code>chunk([0, 1, 2, 3, 4, 5, 6, 7, 8], 4)</code> should return <code>[[0, 1, 2, 3], [4, 5, 6, 7], [8]]</code>.');"
|
||||
],
|
||||
"type": "bonfire",
|
||||
"isRequired": true,
|
||||
"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"
|
||||
],
|
||||
"MDNlinks": [
|
||||
"Array.push()",
|
||||
"Array.slice()"
|
||||
],
|
||||
"challengeType": 5,
|
||||
"nameEs": "En mil pedazos",
|
||||
"titleEs": "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 bidimensional.",
|
||||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código."
|
||||
@@ -492,10 +492,6 @@
|
||||
"",
|
||||
"slasher([1, 2, 3], 2);"
|
||||
],
|
||||
"isRequired": true,
|
||||
"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: <code>slasher([1, 2, 3], 2)</code> should return <code>[3]</code>.');",
|
||||
"assert.deepEqual(slasher([1, 2, 3], 0), [1, 2, 3], 'message: <code>slasher([1, 2, 3], 0)</code> should return <code>[1, 2, 3]</code>.');",
|
||||
@@ -505,12 +501,16 @@
|
||||
"assert.deepEqual(slasher([1, 2, 'chicken', 3, 'potatoes', 'cheese', 4], 5), ['cheese', 4], 'message: <code>slasher([1, 2, \"chicken\", 3, \"potatoes\", \"cheese\", 4], 5)</code> should return <code>[\"cheese\", 4]</code>.');"
|
||||
],
|
||||
"type": "bonfire",
|
||||
"isRequired": true,
|
||||
"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"
|
||||
],
|
||||
"MDNlinks": [
|
||||
"Array.slice()",
|
||||
"Array.splice()"
|
||||
],
|
||||
"challengeType": 5,
|
||||
"nameEs": "Vuélale la cabeza",
|
||||
"titleEs": "Vuélale la cabeza",
|
||||
"descriptionEs": [
|
||||
"Crea una función que devuelva los elementos restantes de un arreglo después de eliminar <code>n</code> elementos de la cabeza.",
|
||||
"Por cabeza nos referimos al inicio de un arreglo, comenzando por el índice 0.",
|
||||
@@ -534,10 +534,6 @@
|
||||
"",
|
||||
"mutation([\"hello\", \"hey\"]);"
|
||||
],
|
||||
"isRequired": true,
|
||||
"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: <code>mutation([\"hello\", \"hey\"])</code> should return false.');",
|
||||
"assert(mutation([\"hello\", \"Hello\"]) === true, 'message: <code>mutation([\"hello\", \"Hello\"])</code> should return true.');",
|
||||
@@ -549,11 +545,15 @@
|
||||
"assert(mutation([\"hello\", \"neo\"]) === false, 'message: <code>mutation([\"hello\", \"neo\"])</code> should return false.');"
|
||||
],
|
||||
"type": "bonfire",
|
||||
"isRequired": true,
|
||||
"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"
|
||||
],
|
||||
"MDNlinks": [
|
||||
"String.indexOf()"
|
||||
],
|
||||
"challengeType": 5,
|
||||
"nameEs": "Mutaciones",
|
||||
"titleEs": "Mutaciones",
|
||||
"descriptionEs": [
|
||||
"Crea una función que devuelva <code>true</code> si la cadena de texto del primer elemento de un arreglo contiene todas las letras de la cadena de texto del segundo elemento del arreglo.",
|
||||
"Por ejemplo, <code>[\"hello\", \"Hello\"]</code>, debe devolver <code>true</code> porque todas las letras en la segunda cadena de texto están presentes en la primera, sin distinguir entre mayúsculas y minúsculas.",
|
||||
@@ -578,10 +578,6 @@
|
||||
"",
|
||||
"bouncer([7, \"ate\", \"\", false, 9]);"
|
||||
],
|
||||
"isRequired": true,
|
||||
"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: <code>bouncer([7, \"ate\", \"\", false, 9])</code> should return <code>[7, \"ate\", 9]</code>.');",
|
||||
"assert.deepEqual(bouncer([\"a\", \"b\", \"c\"]), [\"a\", \"b\", \"c\"], 'message: <code>bouncer([\"a\", \"b\", \"c\"])</code> should return <code>[\"a\", \"b\", \"c\"]</code>.');",
|
||||
@@ -589,12 +585,16 @@
|
||||
"assert.deepEqual(bouncer([1, null, NaN, 2, undefined]), [1, 2], 'message: <code>bouncer([1, null, NaN, 2, undefined])</code> should return <code>[1, 2]</code>.');"
|
||||
],
|
||||
"type": "bonfire",
|
||||
"isRequired": true,
|
||||
"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"
|
||||
],
|
||||
"MDNlinks": [
|
||||
"Boolean Objects",
|
||||
"Array.filter()"
|
||||
],
|
||||
"challengeType": 5,
|
||||
"nameEs": "Detector de mentiras",
|
||||
"titleEs": "Detector de mentiras",
|
||||
"descriptionEs": [
|
||||
"Remueve todos los valores falsy de un arreglo dado",
|
||||
"En javascript, los valores falsy son los siguientes: <code>false</code>, <code>null</code>, <code>0</code>, <code>\"\"</code>, <code>undefined</code>, y <code>NaN</code>.",
|
||||
@@ -616,10 +616,6 @@
|
||||
"",
|
||||
"destroyer([1, 2, 3, 1, 2, 3], 2, 3);"
|
||||
],
|
||||
"isRequired": true,
|
||||
"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: <code>destroyer([1, 2, 3, 1, 2, 3], 2, 3)</code> should return <code>[1, 1]</code>.');",
|
||||
"assert.deepEqual(destroyer([1, 2, 3, 5, 1, 2, 3], 2, 3), [1, 5, 1], 'message: <code>destroyer([1, 2, 3, 5, 1, 2, 3], 2, 3)</code> should return <code>[1, 5, 1]</code>.');",
|
||||
@@ -628,12 +624,16 @@
|
||||
"assert.deepEqual(destroyer([\"tree\", \"hamburger\", 53], \"tree\", 53), [\"hamburger\"], 'message: <code>destroyer([\"tree\", \"hamburger\", 53], \"tree\", 53)</code> should return <code>[\"hamburger\"]</code>.');"
|
||||
],
|
||||
"type": "bonfire",
|
||||
"isRequired": true,
|
||||
"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"
|
||||
],
|
||||
"MDNlinks": [
|
||||
"Arguments object",
|
||||
"Array.filter()"
|
||||
],
|
||||
"challengeType": 5,
|
||||
"nameEs": "Buscar y destruir",
|
||||
"titleEs": "Buscar y destruir",
|
||||
"descriptionEs": [
|
||||
"Se te proveerá un arreglo inicial (el primer argumento en la función <code>destroyer</code>), 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 <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código."
|
||||
@@ -656,10 +656,6 @@
|
||||
"",
|
||||
"where([40, 60], 50);"
|
||||
],
|
||||
"isRequired": true,
|
||||
"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}"
|
||||
],
|
||||
"tests": [
|
||||
"assert(where([10, 20, 30, 40, 50], 35) === 3, 'message: <code>where([10, 20, 30, 40, 50], 35)</code> should return <code>3</code>.');",
|
||||
"assert(where([10, 20, 30, 40, 50], 30) === 2, 'message: <code>where([10, 20, 30, 40, 50], 30)</code> should return <code>2</code>.');",
|
||||
@@ -670,11 +666,15 @@
|
||||
"assert(where([2, 5, 10], 15) === 3, 'message: <code>where([2, 5, 10], 15)</code> should return <code>3</code>.');"
|
||||
],
|
||||
"type": "bonfire",
|
||||
"isRequired": true,
|
||||
"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}"
|
||||
],
|
||||
"MDNlinks": [
|
||||
"Array.sort()"
|
||||
],
|
||||
"challengeType": 5,
|
||||
"nameEs": "¿Cuál es mi asiento?",
|
||||
"titleEs": "¿Cuál es mi asiento?",
|
||||
"descriptionEs": [
|
||||
"Devuelve el menor índice en el que un valor (segundo argumento) debe ser insertado en un arreglo (primer argumento) una vez ha sido ordenado.",
|
||||
"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).",
|
||||
@@ -692,8 +692,6 @@
|
||||
"All letters will be uppercase. Do not transform any non-alphabetic character (i.e. spaces, punctuation), but do pass them on.",
|
||||
"Remember to use <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Read-Search-Ask</a> if you get stuck. Try to pair program. Write your own code."
|
||||
],
|
||||
"isRequired": true,
|
||||
"releasedOn": "January 1, 2016",
|
||||
"challengeSeed": [
|
||||
"function rot13(str) { // LBH QVQ VG!",
|
||||
" ",
|
||||
@@ -721,14 +719,16 @@
|
||||
"String.fromCharCode()"
|
||||
],
|
||||
"challengeType": 5,
|
||||
"nameEs": "Cifrado César",
|
||||
"titleEs": "Cifrado César",
|
||||
"descriptionEs": [
|
||||
"Uno de los <dfn>cifrados</dfn> más simples y ampliamente conocidos es el <code>cifrado César</code>, también llamado <code>cifrado por desplazamiento</code>. En un <code>cifrado por desplazamiento</code> los significados de las letras se desplazan por una cierta cantidad.",
|
||||
"Un uso moderno común es el cifrado <a href=\"https://en.wikipedia.org/wiki/ROT13\" target='_blank'>ROT13</a> , donde los valores de las letras se desplazan 13 espacios. De esta forma 'A' ↔ 'N', 'B' ↔ 'O' y así.",
|
||||
"Crea una función que tome una cadena de texto cifrada en <a href=\"https://en.wikipedia.org/wiki/ROT13\" target='_blank'>ROT13</a> como argumento y que devuelva la cadena de texto decodificada.",
|
||||
"Todas las letras que se te pasen van a estar en mayúsculas. No transformes ningún caracter no-alfabético (por ejemplo: espacios, puntuación). Simplemente pásalos intactos.",
|
||||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código."
|
||||
]
|
||||
],
|
||||
"isRequired": true,
|
||||
"releasedOn": "January 1, 2016"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
@@ -31,7 +31,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Agrega comentarios a tu código JavaScript",
|
||||
"titleEs": "Agrega comentarios a tu código JavaScript",
|
||||
"descriptionEs": [
|
||||
"Los comentarios son líneas de código que el computador ignorará intencionalmente. Los comentarios son una gran forma de dejarte notas a ti mismo y a otras personas que luego tendrán que averiguar lo que hace que el código. ",
|
||||
"Vamos a echar un vistazo a las dos maneras en las que puedes agregar tus comentarios en JavaScript.",
|
||||
@@ -76,7 +76,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Declara variables en JavaScript",
|
||||
"titleEs": "Declara variables en JavaScript",
|
||||
"descriptionEs": [
|
||||
"Cuando almacenamos datos en una <code>estructura de datos</code>, la llamamos una <code>variable</code>. Estas variables no son diferentes de las variables x e y que utilizas en matemáticas. ",
|
||||
"Vamos a crear nuestra primera variable y a llamarla \"myName\".",
|
||||
@@ -122,7 +122,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Almacenar valores con el operador igual",
|
||||
"titleEs": "Almacenar valores con el operador igual",
|
||||
"descriptionEs": [
|
||||
"En JavaScript, puedes almacenar un valor en una variable con la <dfn>asignación</dfn> o con el operador <code>igual</code> (<code>=</code>).",
|
||||
"<code>miVariable = 5;</code>",
|
||||
@@ -164,7 +164,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Inicializar variables con el operador igual",
|
||||
"titleEs": "Inicializar variables con el operador igual",
|
||||
"descriptionEs": [
|
||||
"Es común <dfn>inicializar</dfn> una variable a un valor inicial en la misma línea que es declarada.",
|
||||
"<code>var miVar = 0;</code>",
|
||||
@@ -209,7 +209,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Entendiendo variables sin inicializar",
|
||||
"titleEs": "Entendiendo variables sin inicializar",
|
||||
"descriptionEs": [
|
||||
"Cuando las variables de JavaScript son declaradas, ellas tienen un valor inicial de <code>undefined</code>. Si tu haces una operación matematica sobre una variable <code>undefined</code> tu resultado sera <code>NaN</code> el cual significa <dfn>\"Not a Number\"</dfn> es decir \"No es un número\". Si tu concatenas una cadena con una variable <code>undefined</code>, vas a obtener una <dfn>cadena</dfn> literal de <code>\"undefined\"</code>.",
|
||||
"<h4>Instrucciones</h4>",
|
||||
@@ -254,7 +254,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Entendiendo la distinción en variables",
|
||||
"titleEs": "Entendiendo la distinción en variables",
|
||||
"descriptionEs": [
|
||||
"En JavaScript todas las variables y nombres de funciones distinguen entre mayúsculas y minúsculas. Esto significa que la capitalización importa.",
|
||||
"<code>MIVAR</code> no es lo mismo que <code>MiVar</code> o <code>mivar</code>. Esto hace posible tener múltiples variables distintas con el mismo nombre pero de diferente manera. Es fuertemente recomendado por el bien de la claridad, que tu <em>no</em> uses esta característica del lenguaje.",
|
||||
@@ -296,7 +296,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Suma dos números con JavaScript",
|
||||
"titleEs": "Suma dos números con JavaScript",
|
||||
"descriptionEs": [
|
||||
"Intentemos sumar dos números con JavaScript.",
|
||||
"JavaScript utiliza el símbolo <code>+</code> para la adición.",
|
||||
@@ -334,7 +334,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Resta un número de otro con JavaScript",
|
||||
"titleEs": "Resta un número de otro con JavaScript",
|
||||
"descriptionEs": [
|
||||
"También podemos restar un número de otro.",
|
||||
"JavaScript utiliza el símbolo <code>-</code> de sustracción",
|
||||
@@ -371,7 +371,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Multiplica dos números con JavaScript",
|
||||
"titleEs": "Multiplica dos números con JavaScript",
|
||||
"descriptionEs": [
|
||||
"También podemos multiplicar un número por otro.",
|
||||
"JavaScript utiliza el símbolo <code>*</code> de la multiplicación.",
|
||||
@@ -408,7 +408,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Divide un número por otro con JavaScript",
|
||||
"titleEs": "Divide un número por otro con JavaScript",
|
||||
"descriptionEs": [
|
||||
"También podemos dividir un número por otro.",
|
||||
"JavaScript utiliza el símbolo <code>/</code> para dividir.",
|
||||
@@ -448,7 +448,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Incrementa un número con JavaScript",
|
||||
"titleEs": "Incrementa un número con JavaScript",
|
||||
"descriptionEs": [
|
||||
"Tu puedes fácilmente <dfn>incrementar</dfn> o agregar uno a una variable con el operador <code>++</code>.",
|
||||
"<code>i++</code>",
|
||||
@@ -492,7 +492,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Decrementar un número con JavaScript",
|
||||
"titleEs": "Decrementar un número con JavaScript",
|
||||
"descriptionEs": [
|
||||
"Fácilmente puedes <dfn>decrementar</dfn> o disminuir una variable por uno con el operador <code>--</code>.",
|
||||
"<code>i--;</code>",
|
||||
@@ -531,7 +531,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Crea números decimales con JavaScript",
|
||||
"titleEs": "Crea números decimales con JavaScript",
|
||||
"descriptionEs": [
|
||||
"Podemos almacenar números decimales en variables también. Los números decimales a veces son referidos como números de <dfn>punto flotante</dfn> o <dfn>flotantes</dfn>.",
|
||||
"<strong>Nota</strong><br>No todos los números reales pueden ser exactamente representados en <dfn>punto flotante</dfn>. Esto puede conducir a errores de redondeo. <a href=\"https://en.wikipedia.org/wiki/Floating_point#Accuracy_problems\" target=\"_blank\">Detalles aquí</a>.",
|
||||
@@ -565,7 +565,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Multiplicar dos decimales con JavaScript",
|
||||
"titleEs": "Multiplicar dos decimales con JavaScript",
|
||||
"descriptionEs": [
|
||||
"En JavaScript, también puedes realizar cálculos con números decimales, al igual que con números enteros.",
|
||||
"Vamos a multiplicar dos números decimales para obtener su producto.",
|
||||
@@ -598,7 +598,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Divide un número decimal por otro con JavaScript",
|
||||
"titleEs": "Divide un número decimal por otro con JavaScript",
|
||||
"descriptionEs": [
|
||||
"Ahora vamos a dividir un decimal por otro.",
|
||||
"<h4>Instrucciones</h4>",
|
||||
@@ -637,7 +637,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Encontrar un cociente en JavaScript",
|
||||
"titleEs": "Encontrar un cociente en JavaScript",
|
||||
"descriptionEs": [
|
||||
"El operador <dfn>residuo</dfn> <code>%</code> da el residuo de la división de dos números.",
|
||||
"<strong>Ejemplo</strong>",
|
||||
@@ -689,7 +689,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Asignación con más",
|
||||
"titleEs": "Asignación con más",
|
||||
"descriptionEs": [
|
||||
"En programación, es común usar asignaciones para modificar el contenido de una variable. Recuerda que todo lo de la derecha del signo igual es evaluado primero, así podemos decir que:",
|
||||
"<code>miVar = miVar + 5;</code>",
|
||||
@@ -740,7 +740,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Asignación con menos",
|
||||
"titleEs": "Asignación con menos",
|
||||
"descriptionEs": [
|
||||
"Al igual que el operador <code>+=</code>, <code>-=</code> substrae un número de una variable.",
|
||||
"<code>miVar = miVar - 5;</code>",
|
||||
@@ -790,7 +790,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Asignación con veces igual",
|
||||
"titleEs": "Asignación con veces igual",
|
||||
"descriptionEs": [
|
||||
"El operador <code>*=</code> multiplica una variable por un número.",
|
||||
"<code>miVar = miVar * 5;</code>",
|
||||
@@ -839,7 +839,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Asignación con división",
|
||||
"titleEs": "Asignación con división",
|
||||
"descriptionEs": [
|
||||
"El operador <code>/=</code> divide una variable por otro número.",
|
||||
"<code>miVar = miVar / 5;</code>",
|
||||
@@ -887,7 +887,7 @@
|
||||
],
|
||||
"type": "checkpoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Convierte celsius a fahrenheit",
|
||||
"titleEs": "Convierte celsius a fahrenheit",
|
||||
"descriptionEs": [
|
||||
"Para probar tu aprendizaje, crearás una solucion \"desde cero\". Coloca tu código entre las líneas indicadas y este será probado contra multiples casos de prueba.",
|
||||
"El algoritmo para convertir de Celsius a Fahrenheit consiste en multiplicar la temperatura en grados Celsius por 9/5 y al resultado agregarle 32.",
|
||||
@@ -926,7 +926,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Declara variables tipo cadena",
|
||||
"titleEs": "Declara variables tipo cadena",
|
||||
"descriptionEs": [
|
||||
"En el reto anterior, se utilizó el código <code>myName var = \"su nombre\"</code>. Esto es lo que llamamos una variable tipo <code>cadena</code>. No es nada más que una \"cadena\" de caracteres. Las cadenas en JavaScript siempre se encierran entre comillas. ",
|
||||
"Ahora vamos a crear dos nuevas variables tipo cadena: <code>myFirstName</code> y <code>myLastName</code> y asignarles los valores de tu nombre y tu apellido, respectivamente."
|
||||
@@ -969,7 +969,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Escapar comillas en cadenas de texto",
|
||||
"titleEs": "Escapar comillas en cadenas de texto",
|
||||
"descriptionEs": [
|
||||
"Cuando estás definiendo una cadena debes iniciar y terminar con apóstrofes o comillas. ¿Qué pasa cuando necesitas una comilla: <code>\"</code> o <code>'</code> dentro de tu cadena?",
|
||||
"En JavaScript, tu puedes <dfn>escapar</dfn> unas comillas para diferenciarlas de las comillas del final de la cadena colocando una <dfn>barra invertida</dfn> (<code>\\</code>) antes de la cita.",
|
||||
@@ -1011,7 +1011,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Citando cadenas con comillas simples",
|
||||
"titleEs": "Citando cadenas con comillas simples",
|
||||
"descriptionEs": [
|
||||
"Los valores de <dfn>Cadenas</dfn> en JavaScript pueden ser escritos con comillas o apóstrofes, siempre y cuando inicien y terminen con el mismo tipo de cita. A diferencia de algunos lenguajes, apóstrofes y comillas son funcionalmente identicas en JavaScript.",
|
||||
"<code>\"Esta cadena tiene \\\"comillas\\\" en esta\"</code>",
|
||||
@@ -1051,7 +1051,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Secuencias de escape en cadenas",
|
||||
"titleEs": "Secuencias de escape en cadenas",
|
||||
"descriptionEs": [
|
||||
"Las comillas no son el único caracter que puede ser <dfn>escapado</dfn> dentro de una cadena. Aquí ahí una tabla de secuencias de escape comunes:",
|
||||
"<table class=\"table table-striped\"><thead><tr><th>Código</th><th>Salida</th></tr></thead><tbody><tr><td>\\'</td><td>apostrofe</td></tr><tr><td>\\\"</td><td>comilla</td></tr><tr><td>\\\\</td><td>barra invertida</td></tr><tr><td>\\n</td><td>nueva línea</td></tr><tr><td>\\r</td><td>retorno de carro</td></tr><tr><td>\\t</td><td>tabulación</td></tr><tr><td>\\b</td><td>retroceso</td></tr><tr><td>\\f</td><td>salto de página</td></tr></tbody></table>",
|
||||
@@ -1102,7 +1102,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Concatenar cadenas con el operador más",
|
||||
"titleEs": "Concatenar cadenas con el operador más",
|
||||
"descriptionEs": [
|
||||
"En JavaScript, cuando el operador <code>+</code> es usado con un valor de <code>Cadena</code>, este es llamado el operador <dfn>concatenación</dfn>. Tu puedes construir una nueva cadena de otras cadenas <dfn>concatenandolas</dfn> juntas.",
|
||||
"<strong>Ejemplo</strong>",
|
||||
@@ -1151,7 +1151,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Concatenar cadenas con el operador mas igual",
|
||||
"titleEs": "Concatenar cadenas con el operador mas igual",
|
||||
"descriptionEs": [
|
||||
"Nosotros también podemos usar el operador <code>+=</code> para <dfn>concatenar</dfn> una cadena al final de una variable de cadena existente. Esto puede ser muy útil para romper una cadena larga sobre varias líneas.",
|
||||
"<strong>Nota</strong><br>Cuidado con los espacios. La concatenación no agrega espacios entre cadenas concatenadas, así que necesitarás añadirlos tu mismo.",
|
||||
@@ -1204,7 +1204,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Construir cadenas con variables",
|
||||
"titleEs": "Construir cadenas con variables",
|
||||
"descriptionEs": [
|
||||
"A veces necesitarás construir una cadena, al estilo <a href=\"https://en.wikipedia.org/wiki/Mad_Libs\" target=\"_blank\">Mad Libs</a>. Mediante el uso del operador concatenación (<code>+</code>), puedes insertar una o más variables dentro de una cadena que estés construyendo.",
|
||||
"<h4>Instrucciones</h4>",
|
||||
@@ -1257,7 +1257,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Anexando variables a cadenas",
|
||||
"titleEs": "Anexando variables a cadenas",
|
||||
"descriptionEs": [
|
||||
"Al igual que podemos construir una cadena en múltiples líneas a partir de cadenas <dfn>literales</dfn>, nosotros podemos ademas anexar variables a una cadena usando el operador más igual (<code>+=</code>).",
|
||||
"<h4>Instructiones</h4>",
|
||||
@@ -1303,7 +1303,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Comprueba la propiedad longitud (length) de una variable tipo cadena",
|
||||
"titleEs": "Comprueba la propiedad longitud (length) de una variable tipo cadena",
|
||||
"descriptionEs": [
|
||||
"Las <code>estructuras de datos</code> tienen <code>propiedades</code>. Por ejemplo, las <code>cadenas</code> tienen una propiedad llamada <code>.length </code> que te dirá cuántos caracteres hay en la cadena.",
|
||||
"Por ejemplo, si creamos una variable <code>var firstName=\"Charles\"</code>, podemos averiguar la longitud de la cadena \"Charles\" usando la propiedad <code>firstName.length</code>. ",
|
||||
@@ -1348,7 +1348,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Usa la notación de corchetes para encontrar el primer carácter de una cadena",
|
||||
"titleEs": "Usa la notación de corchetes para encontrar el primer carácter de una cadena",
|
||||
"descriptionEs": [
|
||||
"La <code>notación de corchetes</code> es una forma de obtener el caracter en un <code>índice</code> específico de una cadena.",
|
||||
"Los computadoras no empiezan a contar desde 1 como hacen los humanos. Comienzan en 0 ",
|
||||
@@ -1392,7 +1392,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Comprender la inmutabilidad de cadenas",
|
||||
"titleEs": "Comprender la inmutabilidad de cadenas",
|
||||
"descriptionEs": [
|
||||
"En JavaScript, los valores de las <code>Cadenas</code> son <dfn>inmutables</dfn>, lo cual significa que ellos no pueden ser alterados una vez creados.",
|
||||
"Por ejemplo, el siguiente código:",
|
||||
@@ -1438,7 +1438,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Usar la notación de corchetes para encontrar el n-ésimo caracter en una cadena",
|
||||
"titleEs": "Usar la notación de corchetes para encontrar el n-ésimo caracter en una cadena",
|
||||
"descriptionEs": [
|
||||
"También puede usar <code>notación de corchetes</code> para obtener el caracter en otras posiciones dentro de una cadena.",
|
||||
"Recuerda que los computadores empiezan a contar a 0, por lo que el primer caracter es en realidad el caracter cero.",
|
||||
@@ -1482,7 +1482,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Usa notación de corchetes para encontrar el último caracter de una cadena",
|
||||
"titleEs": "Usa notación de corchetes para encontrar el último caracter de una cadena",
|
||||
"descriptionEs": [
|
||||
"Con el fin de conseguir la última letra de una cadena, puedes restar uno a la longitud de la cadena.",
|
||||
"Por ejemplo, si <code>var firstName = \"Charles\"</code>, se puede obtener la última letra usando <code>firstName[firstName.length - 1]</code>. ",
|
||||
@@ -1526,7 +1526,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Usa notación de corchetes para encontrar el n-ésimo último caracter de una cadena",
|
||||
"titleEs": "Usa notación de corchetes para encontrar el n-ésimo último caracter de una cadena",
|
||||
"descriptionEs": [
|
||||
"Puede utilizar el mismo principio utilizamos para recuperar el último caracter de una cadena para recuperar el n-ésimo último caracter.",
|
||||
"Por ejemplo, se puede obtener el valor de la tercera última letra de la cadena <code>var firstName = \"Charles\"</code> utilizando <code>firstName[firstName.length - 3]</code> ",
|
||||
@@ -1572,7 +1572,7 @@
|
||||
],
|
||||
"type": "checkpoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Espacios en blanco de palabras",
|
||||
"titleEs": "Espacios en blanco de palabras",
|
||||
"descriptionEs": [
|
||||
"Ahora usaremos nuestro conocimiento de cadenas para construir un juego de palabras estilo \"<a href='https://en.wikipedia.org/wiki/Mad_Libs' target='_blank'>Mad Libs</a>\" que llamaremos \"Espacios en Blanco de Palabras\". Vas a crear unas oraciones estilo (opcionalmente graciosa) \"Llena los espacios en blanco\".",
|
||||
"Necesitarás usar operadores de cadenas para construir una nueva cadena <code>result</code>, usando las variables previstas: <code>myNoun</code>, <code>myAdjective</code>, <code>myVerb</code> y <code>myAdverb</code>.",
|
||||
@@ -1611,7 +1611,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Almacena múltiples valores en una variable utilizando vectores en JavaScript",
|
||||
"titleEs": "Almacena múltiples valores en una variable utilizando vectores en JavaScript",
|
||||
"descriptionEs": [
|
||||
"Con las variables tipo <code>vector</code> (o en inglés <code>array</code>) podemos almacenar diversos datos en un solo lugar.",
|
||||
"Empiezas la declaración de un vector con un corchete de apertura, y terminas con un corchete de cierre, y pones una coma entre cada entrada, así: <code>var sandwich = [\"mantequilla de maní\", \"jalea\" , \"pan\"]</code>. ",
|
||||
@@ -1647,7 +1647,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Anida un vector dentro de otro vector",
|
||||
"titleEs": "Anida un vector dentro de otro vector",
|
||||
"descriptionEs": [
|
||||
"También puedes anidar vectores dentro de otros vectores, como este: <code>[[\"Bulls\", 23], [\"White Sox\", 45]]</code>.",
|
||||
"<h4>Instrucciones</h4>",
|
||||
@@ -1687,7 +1687,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Accede a los datos de un vector mediante índices",
|
||||
"titleEs": "Accede a los datos de un vector mediante índices",
|
||||
"descriptionEs": [
|
||||
"Podemos acceder a los datos dentro de los vectores usando <code>índices</code>.",
|
||||
"Los índices del vector se escriben en la misma notación con corchetes usado con cadenas, excepto que en lugar de especificar un caracter, especifican un elemento del vector.",
|
||||
@@ -1733,7 +1733,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Modifica datos de un vector usando índices",
|
||||
"titleEs": "Modifica datos de un vector usando índices",
|
||||
"descriptionEs": [
|
||||
"También podemos modificar los datos almacenados en vectores usando índices.",
|
||||
"Por ejemplo:",
|
||||
@@ -1774,7 +1774,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Acceder a vectores multi-dimensionales con índices",
|
||||
"titleEs": "Acceder a vectores multi-dimensionales con índices",
|
||||
"descriptionEs": [
|
||||
"Una manera de pensar un vector <dfn>multi-dimensional</dfn>, es como un <em>vector de vectores</em>. Cuando usas corchetes para acceder a tu vector, el primer conjunto de brackets se refiere a las entradas en el vector más externo y cada nivel subsecuente de brackets se refiere al siguiente nivel de vectores internos.",
|
||||
"<strong>Ejemplo</strong>",
|
||||
@@ -1817,7 +1817,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Manipula vectores con push()",
|
||||
"titleEs": "Manipula vectores con push()",
|
||||
"descriptionEs": [
|
||||
"No sólo se pueden sacar datos del final de un vector con <code>pop()</code>, también puedes empujar (<code>push()</code>) datos al final del vector.",
|
||||
"<h4>Instrucciones</h4>",
|
||||
@@ -1861,7 +1861,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Manipula vectores con pop()",
|
||||
"titleEs": "Manipula vectores con pop()",
|
||||
"descriptionEs": [
|
||||
"Otra forma de cambiar los datos en un vector es con la función <code>.pop()</code>.",
|
||||
"<code>.pop()</code> se utiliza para \"sacar\" el valor final de un vector. Podemos almacenar el valor \"sacado\" asignando <code>pop</code> a una variable por ejemplo durante su declaración.",
|
||||
@@ -1905,7 +1905,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Manipula vectores con shift()",
|
||||
"titleEs": "Manipula vectores con shift()",
|
||||
"descriptionEs": [
|
||||
"<code>pop()</code> siempre elimina el último elemento de un vector. ¿Qué pasa si quieres quitar el primero?",
|
||||
"Ahí es donde entra <code>.shift()</code>. Funciona igual que <code>.pop ()</code>, excepto que elimina el primer elemento en lugar del pasado. ",
|
||||
@@ -1948,7 +1948,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Manipula vectores con unshift()",
|
||||
"titleEs": "Manipula vectores con unshift()",
|
||||
"descriptionEs": [
|
||||
"No sólo se puedes <code>correr</code> (shift) elementos del comienzo de un vector, también puedes <code>descorrerlos</code> (unshift) al comienzo.",
|
||||
"<code>unshift()</code> funciona exactamente igual que <code>push()</code>, pero en lugar de añadir el elemento al final del vector, <code>unshift()</code> añade el elemento al comienzo del vector. ",
|
||||
@@ -2010,7 +2010,7 @@
|
||||
],
|
||||
"type": "checkpoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Lista de compras",
|
||||
"titleEs": "Lista de compras",
|
||||
"descriptionEs": [
|
||||
"Crea una lista de compras en la variable <code>myList</code>. La lista tiene que ser un vector multidimensional conteniendo varios sub-vectores.",
|
||||
"El primer elemento en cada sub-vector debe contener una cadena con el nombre del elemento. El segundo elemento debe ser un número representando la cantidad i. e.",
|
||||
@@ -2082,7 +2082,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Escribe código JavaScript reutilizable con funciones",
|
||||
"titleEs": "Escribe código JavaScript reutilizable con funciones",
|
||||
"descriptionEs": [
|
||||
"En JavaScript, podemos dividir nuestro código en partes reutilizables llamadas funciones.",
|
||||
"He aquí un ejemplo de una función:",
|
||||
@@ -2162,7 +2162,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Pasando valores a funciones con argumentos",
|
||||
"titleEs": "Pasando valores a funciones con argumentos",
|
||||
"descriptionEs": [
|
||||
"Los <dfn>parámetros</dfn> son variables que actúan como marcadores de lugar para los valores que han de ser entrada para una función cuando esta es llamada. Cuando una función es definida, es típicamente definida con uno o más parámetros. Los valores actuales que son entrada (or <dfn>\"pasados\"</dfn>) dentro de una función cuando esta es llamada son concidos como <dfn>argumentos</dfn>.",
|
||||
"Aquí hay una función con dos parámetros, <code>param1</code> y <code>param2</code>:",
|
||||
@@ -2246,7 +2246,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Alcance global y funciones",
|
||||
"titleEs": "Alcance global y funciones",
|
||||
"descriptionEs": [
|
||||
"En JavaScript, <dfn>alcance</dfn> se referiere a la visibilidad de variables. Las variables que definas fuera de un bloque de una función tienen alcance <dfn>Global</dfn>. Esto significa que ellas pueden ser vistas en todas partes en tu código JavaScript.",
|
||||
"Las variables que pueden ser usadas sin la palabra clave <code>var</code> son automáticamente creadas en el alcance <code>global</code>. Esto puede tener consecuencias no deseadas en otras partes de tu código o cuando se ejecuta una función de nuevo. Tu siempre deberías declarar tus variables con <code>var</code>.",
|
||||
@@ -2317,7 +2317,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Alcance local y funciones",
|
||||
"titleEs": "Alcance local y funciones",
|
||||
"descriptionEs": [
|
||||
"Las variables que son declaradas dentro de una función, así como los parámetros de la función tienen alcance <dfn>local</dfn>. Eso significa que solo son visibles dentro de esa función.",
|
||||
"Aquí está una función <code>myTest</code> con una variable local llamada <code>loc</code>.",
|
||||
@@ -2364,7 +2364,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Alcance global vs. local en funciones",
|
||||
"titleEs": "Alcance global vs. local en funciones",
|
||||
"descriptionEs": [
|
||||
"Es posible tener variables <dfn>locales</dfn> y <dfn>globales</dfn> con el mismo nombre. Cuando tu haces esto, la variable <code>local</code> toma precedencia sobre la variable <code>global</code>.",
|
||||
"En este ejemplo:",
|
||||
@@ -2410,7 +2410,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Retorna un valor desde una función con return",
|
||||
"titleEs": "Retorna un valor desde una función con return",
|
||||
"descriptionEs": [
|
||||
"Podemos pasar valores a una función mediante los <dfn>argumentos</dfn>. Puedes usar una sentencia <code>return</code> para enviar un valor de vuelta de una función.",
|
||||
"<strong>Ejemplo</strong>",
|
||||
@@ -2465,7 +2465,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Asignación con un valor retornado",
|
||||
"titleEs": "Asignación con un valor retornado",
|
||||
"descriptionEs": [
|
||||
"Si recuerdas de nuestra discusión de <a href=\"waypoint-storing-values-with-the-equal-operator\" target=\"_blank\">Almacenar Valores con el Operador Igual</a>, todo a la derecha del signo igual es resuelto antes que el valor sea asignado. Esto significa que nosotros podemos tomar el valor de retorno de una función y asignarlo a una variable.",
|
||||
"Supongamos que tenemos una función pre-definida <code>suma</code> la cual suma dos números, entonces: ",
|
||||
@@ -2536,7 +2536,7 @@
|
||||
],
|
||||
"type": "checkpoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Hacer cola",
|
||||
"titleEs": "Hacer cola",
|
||||
"descriptionEs": [
|
||||
"En Ciencias de la Computación una <dfn>cola</dfn> es una <dfn>Estructura de Datos</dfn> abstracta donde los elementos son mantenidos en orden. Nuevos elementos pueden ser agregados en la parte trasera de la <code>cola</code> y los elementos viejos son quitados desde el frente de la <code>cola</code>.",
|
||||
"Escribe una función <code>queue</code> la cual toma un vector (<code>arr</code>) y un número (<code>item</code>) como argumentos. Agrega el número al final del vector, entonces retira el primer elemento del vector. La función queue debe entonces devolver el elemento que se ha eliminado."
|
||||
@@ -2573,7 +2573,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Entiende los valores booleanos",
|
||||
"titleEs": "Entiende los valores booleanos",
|
||||
"descriptionEs": [
|
||||
"En informática las <code>estructuras de datos</code> son cosas que contienen datos. JavaScript tiene siete de estas. Por ejemplo, la estructura de datos <code>Número</code> contiene números. ",
|
||||
"Vamos a aprender acerca de la estructura de datos más básica de todas: el <code>Boolean</code>. Los booleanos sólo puede contener el valor verdadero o el valor falso. Son básicamente pequeños interruptores de encendido y apagado. ",
|
||||
@@ -2630,7 +2630,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Usa lógica condicional con instrucciones if y else",
|
||||
"titleEs": "Usa lógica condicional con instrucciones if y else",
|
||||
"descriptionEs": [
|
||||
"Podemos usar instrucciones <code>if</code> (\"if\" es \"si\" en español) en JavaScript para ejecutar código sólo cuando cierta condición se cumpla.",
|
||||
"Las instrucciones <code>if</code> requieren evaluar algún tipo de condición booleana.",
|
||||
@@ -2682,7 +2682,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "La comparación con el operador de igualdad",
|
||||
"titleEs": "La comparación con el operador de igualdad",
|
||||
"descriptionEs": [
|
||||
"Hay muchos <dfn>Operadores de Comparación</dfn> en JavaScript. Todos estos operadores retornan un valor booleano <code>true</code>(verdadero) o <code>false</code>(falso).",
|
||||
"El operador más básico es el operador de igualdad <code>==</code>. El operador de igualdad compara dos valores y retorna <code>true</code> si son equivalentes o <code>false</code> si no lo son. Nota que la igualdad es diferente de la asignación (<code>=</code>), la cual asigna el valor a la derecha del operador a la variable en la izquierda.",
|
||||
@@ -2729,7 +2729,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "La comparación con el operador de estricta igualdad",
|
||||
"titleEs": "La comparación con el operador de estricta igualdad",
|
||||
"descriptionEs": [
|
||||
"Igualdad estricta (<code>===</code>) es la contraparte del operador de igualdad (<code>==</code>). Diferente al operador de igualdad, igualdad estricta prueba los <code>tipos de datos</code> y el valor de los elementos comparados.",
|
||||
"<strong>Ejemplos</strong>",
|
||||
@@ -2775,7 +2775,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "La comparación con el operador de desigualdad",
|
||||
"titleEs": "La comparación con el operador de desigualdad",
|
||||
"descriptionEs": [
|
||||
"El operador de desigualdad (<code>!=</code>) es el opuesto al operador de igualdad. Esto significa \"No Igual a\" y retorna <code>false</code> cuando igualdad retornaría <code>true</code> y <em>viceversa</em>. Como el operador de igualdad, el operador de desigualdad convertirá tipos de datos mientras compara.",
|
||||
"<strong>Ejemplos</strong>",
|
||||
@@ -2824,9 +2824,9 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "La comparación con el operador de estricta desigualdad",
|
||||
"titleEs": "La comparación con el operador de estricta desigualdad",
|
||||
"descriptionEs": [
|
||||
"El operador de estricta desigualdad (<code>!==</code>) es el opuesto al operador de estricta igualdad. Esto significa \"Estrictamente no Igual\" y retorna <code>false</code>(falso) donde igualdad estricta retornaría <code>true</code>(verdadero) y <em>viceversa</em>. Estricta desigualdad no convertirá tipos de datos.",
|
||||
"El operador de estricta desigualdad (<code>!==</code>) es el opuesto al operador de estricta igualdad. Esto significa \"Estrictamente no Igual\" y retorna <code>false</code>(falso) donde igualdad estricta retornaría <code>true</code>(verdadero) y <em>viceversa</em>. Estricta desigualdad no convertirá tipos de datos.",
|
||||
"<strong>Ejemplos</strong>",
|
||||
"<blockquote>3 !== 3 // false<br>3 !== '3' // true<br>4 !== 3 // true</blockquote>",
|
||||
"<h4>Instrucciones</h4>",
|
||||
@@ -2876,9 +2876,9 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "La comparación con el operador mayor que",
|
||||
"titleEs": "La comparación con el operador mayor que",
|
||||
"descriptionEs": [
|
||||
"El operador mayor que (<code>></code>) compara los valores de dos números. Si el número a la izquierda es mayor que el número a la derecha, este returna <code>true</code>(verdadero). De otra manera, este retorna <code>false</code>(falso).",
|
||||
"El operador mayor que (<code>></code>) compara los valores de dos números. Si el número a la izquierda es mayor que el número a la derecha, este returna <code>true</code>(verdadero). De otra manera, este retorna <code>false</code>(falso).",
|
||||
"Al igual que el operador de igualdad, el operador mayor que convertirá tipos de datos de valores mientras los compara.",
|
||||
"<strong>Ejemplos</strong>",
|
||||
"<blockquote> 5 > 3 // true<br> 7 > '3' // true<br> 2 > 3 // false<br>'1' > 9 // false</blockquote>",
|
||||
@@ -2929,9 +2929,9 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "La comparación con el operador mayor o ogual",
|
||||
"titleEs": "La comparación con el operador mayor o ogual",
|
||||
"descriptionEs": [
|
||||
"El operador <code>mayor o igual </code> (<code>>=</code>) compara los valores de dos números. Si el número de la izquierda es mayor o igual a el número de la derecha, este retorna <code>true</code>(verdadero). De otra manera, este retorna <code>false</code>(falso).",
|
||||
"El operador <code>mayor o igual </code> (<code>>=</code>) compara los valores de dos números. Si el número de la izquierda es mayor o igual a el número de la derecha, este retorna <code>true</code>(verdadero). De otra manera, este retorna <code>false</code>(falso).",
|
||||
"Como el operador de igualdad, el operador <code>mayor o igual</code> convertirá tipos de datos mientras está comparando.",
|
||||
"<strong>Ejemplos</strong>",
|
||||
"<blockquote> 6 >= 6 // true<br> 7 >= '3' // true<br> 2 >= 3 // false<br>'7' >= 9 // false</blockquote>",
|
||||
@@ -2980,9 +2980,9 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "La comparación con el operador menor que",
|
||||
"titleEs": "La comparación con el operador menor que",
|
||||
"descriptionEs": [
|
||||
"El operador <dfn>menor que</dfn> (<code><</code>) compara los valores de dos números. Si el número a la izquierda es menor que el número de la derecha, este retorna <code>true</code>(verdadero). De otra manera, este retorna <code>false</code>(falso). Como el operador de igualdad, el operador <dfn>menor que</dfn> convierte tipos de datos mientra compara.",
|
||||
"El operador <dfn>menor que</dfn> (<code><</code>) compara los valores de dos números. Si el número a la izquierda es menor que el número de la derecha, este retorna <code>true</code>(verdadero). De otra manera, este retorna <code>false</code>(falso). Como el operador de igualdad, el operador <dfn>menor que</dfn> convierte tipos de datos mientra compara.",
|
||||
"<strong>Ejemplos</strong>",
|
||||
"<blockquote> 2 < 5 // true<br>'3' < 7 // true<br> 5 < 5 // false<br> 3 < 2 // false<br>'8' < 4 // false</blockquote>",
|
||||
"<h4>Instrucciones</h4>",
|
||||
@@ -3032,9 +3032,9 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "La comparación con el operador menor o igual",
|
||||
"titleEs": "La comparación con el operador menor o igual",
|
||||
"descriptionEs": [
|
||||
"El operador <code>menor o igual</code> (<code><=</code>) compara los valores de dos números. Si el número a la izquierda es menor o igual que el número de la derecha, este retorna <code>true</code>(verdadero). Si el número a la izquierda es mayor que el número de la derecha, este retorna <code>false</code>(falso). Al igual que el operador de igualdad, <code>menor o igual</code> convierte tipos de datos.",
|
||||
"El operador <code>menor o igual</code> (<code><=</code>) compara los valores de dos números. Si el número a la izquierda es menor o igual que el número de la derecha, este retorna <code>true</code>(verdadero). Si el número a la izquierda es mayor que el número de la derecha, este retorna <code>false</code>(falso). Al igual que el operador de igualdad, <code>menor o igual</code> convierte tipos de datos.",
|
||||
"<strong>Ejemplos</strong>",
|
||||
"<blockquote> 4 <= 5 // true<br>'7' <= 7 // true<br> 5 <= 5 // true<br> 3 <= 2 // false<br>'8' <= 4 // false</blockquote>",
|
||||
"<h4>Instrucciones</h4>",
|
||||
@@ -3088,9 +3088,9 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "La comparación con el operador lógico y",
|
||||
"titleEs": "La comparación con el operador lógico y",
|
||||
"descriptionEs": [
|
||||
"A veces necesitarás probar más de una cosa a la vez. El operador <dfn>lógico y</dfn> (<code>&&</code>) retorna <code>true</code>(verdadero) si y solo si los <dfn>operandos</dfn> a la izquierda y derecha de este son verdaderos.",
|
||||
"A veces necesitarás probar más de una cosa a la vez. El operador <dfn>lógico y</dfn> (<code>&&</code>) retorna <code>true</code>(verdadero) si y solo si los <dfn>operandos</dfn> a la izquierda y derecha de este son verdaderos.",
|
||||
"El mismo efecto podría lograrse anidando una sentencia if dentro de otro if:",
|
||||
"<blockquote>if (num > 5) {<br> if (num < 10) {<br> return \"Yes\";<br> }<br>}<br>return \"No\";</blockquote>",
|
||||
"solo retornará \"Yes\" si <code>num</code> está entre <code>6</code> y <code>9</code> (6 y 9 incluidos). La misma lógica puede ser escrita como:",
|
||||
@@ -3148,9 +3148,9 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "La comparación con el operador lógico o",
|
||||
"titleEs": "La comparación con el operador lógico o",
|
||||
"descriptionEs": [
|
||||
"El operador <dfn>lógico o</dfn> (<code>||</code>) retorna <code>true</code>(verdadero) si cualquiera de los <dfn>operandos</dfn> es <code>true</code>(verdadero). De otra manera, este retorna <code>false</code>(falso).",
|
||||
"El operador <dfn>lógico o</dfn> (<code>||</code>) retorna <code>true</code>(verdadero) si cualquiera de los <dfn>operandos</dfn> es <code>true</code>(verdadero). De otra manera, este retorna <code>false</code>(falso).",
|
||||
"El patrón de abajo debería ser familiar de los puntos de referencia anteriores:",
|
||||
"<blockquote>if (num > 10) {<br> return \"No\";<br>}<br>if (num < 5) {<br> return \"No\";<br>}<br>return \"Yes\";</blockquote>",
|
||||
"retornará \"Yes\" solo si <code>num</code> está entre <code>5</code> y <code>10</code> (5 y 10 incluidos). La misma lógica puede ser escrita como:",
|
||||
@@ -3204,9 +3204,9 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Introducción de las sentencias else",
|
||||
"titleEs": "Introducción de las sentencias else",
|
||||
"descriptionEs": [
|
||||
"Cuando una condición de una sentencia <code>if</code> es verdadera, el siguiente bloque de código es ejecutado. ¿Y cuando esa condición es falsa? Normalmente nada pasaría. Con una sentencia <code>else</code>(además), un bloque alternativo de código puede ser ejecutado.",
|
||||
"Cuando una condición de una sentencia <code>if</code> es verdadera, el siguiente bloque de código es ejecutado. ¿Y cuando esa condición es falsa? Normalmente nada pasaría. Con una sentencia <code>else</code>(además), un bloque alternativo de código puede ser ejecutado.",
|
||||
"<blockquote>if (num > 10) {<br> return \"Más grande que 10\";<br>} else {<br> return \"10 o Menos\";<br>}</blockquote>",
|
||||
"<h4>Instrucciones</h4>",
|
||||
"Combina las sentencias <code>if</code> dentro de una sola sentencia <code>if/else</code>."
|
||||
@@ -3253,9 +3253,9 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Introducción de las sentencias else if",
|
||||
"titleEs": "Introducción de las sentencias else if",
|
||||
"descriptionEs": [
|
||||
"Si tienes múltiples condiciones que deben abordarse, puedes encadenar sentencias <code>if</code> juntas con sentencias <code>else if</code>.",
|
||||
"Si tienes múltiples condiciones que deben abordarse, puedes encadenar sentencias <code>if</code> juntas con sentencias <code>else if</code>.",
|
||||
"<blockquote>if (num > 15) {<br> return \"Más grande que 15\";<br>} else if (num < 5) {<br> return \"Más pequeño que 5\";<br>} else {<br> return \"Entre 5 y 15\";<br>}</blockquote>",
|
||||
"<h4>Instrucciones</h4>",
|
||||
"Convierte la lógica para usar sentencias <code>else if</code>."
|
||||
@@ -3301,9 +3301,9 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Orden lógico en sentencias else if",
|
||||
"titleEs": "Orden lógico en sentencias else if",
|
||||
"descriptionEs": [
|
||||
"El orden es importante en las sentencia <code>if</code> y <code>else if</code>.",
|
||||
"El orden es importante en las sentencia <code>if</code> y <code>else if</code>.",
|
||||
"El ciclo es ejecutado de arriba hacia abajo por lo que tendrás que ser cuidadoso de cual sentencia va primero.",
|
||||
"Toma estas dos funciones como ejemplo.",
|
||||
"Aquí está la primera:",
|
||||
@@ -3359,9 +3359,9 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Encadenamiento de sentencias else if",
|
||||
"titleEs": "Encadenamiento de sentencias else if",
|
||||
"descriptionEs": [
|
||||
"Las sentencias <code>if/else</code>(si/de lo contrario) pueden ser encadenadas juntas por una lógica compleja. Aquí está el <dfn>pseudocódigo</dfn> de múltiples sentencias <code>if</code> / <code>else if</code> encadenadas:",
|
||||
"Las sentencias <code>if/else</code>(si/de lo contrario) pueden ser encadenadas juntas por una lógica compleja. Aquí está el <dfn>pseudocódigo</dfn> de múltiples sentencias <code>if</code> / <code>else if</code> encadenadas:",
|
||||
"<blockquote>if (<em>condicion1</em>) {<br> <em>sentencias1</em><br>} else if (<em>condicion2</em>) {<br> <em>sentencias2</em><br>} else if (<em>condicion3</em>) {<br> <em>sentencias3</em><br>. . .<br>} else {<br> <em>sentenciasN</em><br>}</blockquote>",
|
||||
"<h4>Instrucciones</h4>",
|
||||
"Escribe sentencias <code>if</code>/<code>else if</code> encadenadas para cumplir las siguientes condiciones:",
|
||||
@@ -3408,9 +3408,9 @@
|
||||
],
|
||||
"type": "checkpoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Código de golf",
|
||||
"titleEs": "Código de golf",
|
||||
"descriptionEs": [
|
||||
"En el juego de <a href='https://en.wikipedia.org/wiki/Golf' target='_blank'>golf</a> cada hoyo tiene un <dfn>par</dfn> promedio para el número de <dfn>golpes</dfn> necesarios para meter la pelota. Dependiendo de que tan lejos por encima o por debajo del <code>par</code> estén tus <code>golpes</code>, habrá un sobrenombre diferente.",
|
||||
"En el juego de <a href='https://en.wikipedia.org/wiki/Golf' target='_blank'>golf</a> cada hoyo tiene un <dfn>par</dfn> promedio para el número de <dfn>golpes</dfn> necesarios para meter la pelota. Dependiendo de que tan lejos por encima o por debajo del <code>par</code> estén tus <code>golpes</code>, habrá un sobrenombre diferente.",
|
||||
"Tu función pasará un <code>par</code> y el número de <code>golpes</code>, y retornará una cadena de acuerdo a esta tabla (basada en el orden de prioridad - arriba (lo más alto) hacia abajo (lo más bajo)):",
|
||||
"<table class=\"table table-striped\"><thead><tr><th>Golpes</th><th>Retorna</th></tr></thead><tbody><tr><td>1</td><td>\"Hole-in-one!\"</td></tr><tr><td><= par - 2</td><td>\"Eagle\"</td></tr><tr><td>par - 1</td><td>\"Birdie\"</td></tr><tr><td>par</td><td>\"Par\"</td></tr><tr><td>par + 1</td><td>\"Bogey\"</td></tr><tr><td>par + 2</td><td>\"Double Bogey\"</td></tr><tr><td>>= par + 3</td><td>\"Go Home!\"</td></tr></tbody></table>",
|
||||
"Tanto <code>par</code> como <code>golpes</code> siempre serán numéricos y positivos."
|
||||
@@ -3456,9 +3456,9 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Seleccionar desde diferentes opciones con la sentencia switch",
|
||||
"titleEs": "Seleccionar desde diferentes opciones con la sentencia switch",
|
||||
"descriptionEs": [
|
||||
"Si tienes varias opciones para elegir, usa una sentencia <code>switch</code>. Una sentencia <code>switch</code> prueba un valor y puede tener varias sentencias <code>case</code> las cuales definen varios posibles valores. Las sentencias son ejecutadas desde el primer valor <code>case</code> igualado hasta que se encuentr un <code>break</code>.",
|
||||
"Si tienes varias opciones para elegir, usa una sentencia <code>switch</code>. Una sentencia <code>switch</code> prueba un valor y puede tener varias sentencias <code>case</code> las cuales definen varios posibles valores. Las sentencias son ejecutadas desde el primer valor <code>case</code> igualado hasta que se encuentr un <code>break</code>.",
|
||||
"Aquí hay un <dfn>pseudocódigo</dfn> de ejemplo:",
|
||||
"<blockquote>switch (num) {<br> case valor1:<br> sentencia1;<br> break;<br> case valor2:<br> sentencia2;<br> break;<br>...<br> case valorN:<br> sentenciaN;<br> break;<br>}</blockquote>",
|
||||
"Los valores <code>case</code> son probados con estricta igualdad (<code>===</code>). El <code>break</code> le dice a JavaScript que pare la ejecución del bloque de sentencias en el que está. Si se omite <code>break</code>, se ejecutará la siguiente sentencia.",
|
||||
@@ -3506,9 +3506,9 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Agregar una opción por omisión (default) en una sentencia switch",
|
||||
"titleEs": "Agregar una opción por omisión (default) en una sentencia switch",
|
||||
"descriptionEs": [
|
||||
"En una sentencia <code>switch</code> puede que no seas capaz de especificar todos los posibles valores en las sentencias <code>case</code>. En su lugar, puedes agregar la sentencia <code>default</code> la cual será ejecutada si no es encontrada ninguna coincidencia con alguna sentencia <code>case</code>. Piensa en esto como la última sentencia <code>else</code> en una cadena <code>if/else</code>.",
|
||||
"En una sentencia <code>switch</code> puede que no seas capaz de especificar todos los posibles valores en las sentencias <code>case</code>. En su lugar, puedes agregar la sentencia <code>default</code> la cual será ejecutada si no es encontrada ninguna coincidencia con alguna sentencia <code>case</code>. Piensa en esto como la última sentencia <code>else</code> en una cadena <code>if/else</code>.",
|
||||
"Una sentencia <code>default</code> debería ser el último caso.",
|
||||
"<blockquote>switch (num) {<br> case valor1:<br> sentencia1;<br> break;<br> case valor2:<br> sentencia2;<br> break;<br>...<br> default:<br> sentenciaDefault;<br>}</blockquote>",
|
||||
"<h4>Instrucciones</h4>",
|
||||
@@ -3560,9 +3560,9 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Múltiples opciones idénticas en una sentencias switch",
|
||||
"titleEs": "Múltiples opciones idénticas en una sentencias switch",
|
||||
"descriptionEs": [
|
||||
"Si la sentencia <code>break</code> es omitida de una sentencia <code>case</code> de un <code>switch</code>, las siguientes sentencias <code>case</code> son ejecutadas hasta que sea encontrado un <code>break</code>. Si tienes multiples entradas con la misma salida, puede representarlas en una sentencia <code>switch</code> así:",
|
||||
"Si la sentencia <code>break</code> es omitida de una sentencia <code>case</code> de un <code>switch</code>, las siguientes sentencias <code>case</code> son ejecutadas hasta que sea encontrado un <code>break</code>. Si tienes multiples entradas con la misma salida, puede representarlas en una sentencia <code>switch</code> así:",
|
||||
"<blockquote>switch(val) {<br> case 1:<br> case 2:<br> case 3:<br> result = \"1, 2, or 3\";<br> break;<br> case 4:<br> result = \"4 alone\";<br>}</blockquote>",
|
||||
"Los casos 1, 2, y 3 producirán el mismo resultado.",
|
||||
"<h4>Instrucciones</h4>",
|
||||
@@ -3624,9 +3624,9 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Reemplazar cadenas if else con switch",
|
||||
"titleEs": "Reemplazar cadenas if else con switch",
|
||||
"descriptionEs": [
|
||||
"Si tienes varias opciones para elegir, una sentencia <code>switch</code> puede ser más fácil de escribir que varias sentencias <code>if</code>/<code>if else</code> anidadas. Lo siguiente:",
|
||||
"Si tienes varias opciones para elegir, una sentencia <code>switch</code> puede ser más fácil de escribir que varias sentencias <code>if</code>/<code>if else</code> anidadas. Lo siguiente:",
|
||||
"<blockquote>if (val === 1) {<br> respuesta = \"a\";<br>} else if (val === 2) {<br> respuesta = \"b\";<br>} else {<br> respuesta = \"c\";<br>}</blockquote>",
|
||||
"puede ser reemplazado con:",
|
||||
"<blockquote>switch (val) {<br> case 1:<br> respuesta = \"a\";<br> break;<br> case 2:<br> respuesta = \"b\";<br> break;<br> default:<br> respuesta = \"c\";<br>}</blockquote>",
|
||||
@@ -3673,9 +3673,9 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Retornar valores booleanos desde funciones",
|
||||
"titleEs": "Retornar valores booleanos desde funciones",
|
||||
"descriptionEs": [
|
||||
"Tal vez recuerdes de <a href=\"waypoint-comparison-with-the-equality-operator\" target=\"_blank\">La comparación con el operador de igualdad</a> que todos los operadores de comparación retornan un valor booleano <code>true</code> (verdadero) o <code>false</code> (falso).",
|
||||
"Tal vez recuerdes de <a href=\"waypoint-comparison-with-the-equality-operator\" target=\"_blank\">La comparación con el operador de igualdad</a> que todos los operadores de comparación retornan un valor booleano <code>true</code> (verdadero) o <code>false</code> (falso).",
|
||||
"Un <dfn>anti-patrón</dfn> común es usar una sentencia <code>if/else</code> para hacer una comparación y entonces retornar <code>true</code> o <code>false</code>:",
|
||||
"<blockquote>function sonIguales(a,b) {<br> if (a === b) {<br> return true;<br> } else {<br> return false;<br> }<br>}</blockquote>",
|
||||
"Ya que <code>===</code> returna <code>true</code> (verdadero) o <code>false</code> (falso), podemos simplemente retornar el resultado de la comparación:",
|
||||
@@ -3728,9 +3728,9 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Retornar un patrón temprano para funciones",
|
||||
"titleEs": "Retornar un patrón temprano para funciones",
|
||||
"descriptionEs": [
|
||||
"Cuando se alcanza una sentencia <code>return</code>, la ejecución de la presente función se detiene y el control la retorna a la ubicación de la llamada.",
|
||||
"Cuando se alcanza una sentencia <code>return</code>, la ejecución de la presente función se detiene y el control la retorna a la ubicación de la llamada.",
|
||||
"<strong>Ejemplo</strong>",
|
||||
"<blockquote>function miFuncion() {<br> console.log(\"Hola\");<br> return \"Mundo\";<br> console.log(\"chaochao\")<br>}<br>miFuncion();</blockquote>",
|
||||
"Esta presenta en consola \"Hola\", retorna \"Mundo\", pero <code>\"chaochao\"</code> nunca se presenta, porque la función sale con la sentencia <code>return</code>.",
|
||||
@@ -3779,9 +3779,9 @@
|
||||
],
|
||||
"type": "checkpoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Contar cartas",
|
||||
"titleEs": "Contar cartas",
|
||||
"descriptionEs": [
|
||||
"En el juego de casino Blackjack, un jugador puede conseguir ventaja sobre la casa manteniendo un registro del número relativo de cartas altas y bajas restantes en la baraja. Esto es llamado <a href='https://en.wikipedia.org/wiki/Card_counting' target='_blank'>Conteo de Cartas</a>.",
|
||||
"En el juego de casino Blackjack, un jugador puede conseguir ventaja sobre la casa manteniendo un registro del número relativo de cartas altas y bajas restantes en la baraja. Esto es llamado <a href='https://en.wikipedia.org/wiki/Card_counting' target='_blank'>Conteo de Cartas</a>.",
|
||||
"Tener más cartas altas restantes en la baraja favorece al jugador. A cada carta se le asigna un valor de acuerdo a la tabla de abajo. Cuando el conteo es positivo, el jugador debe apostar alto. Cuando el conteo es cero o negativo, el jugador debe apostar bajo.",
|
||||
"<table class=\"table table-striped\"><thead><tr><th>Valor</th><th>Cartas</th></tr></thead><tbody><tr><td>+1</td><td>2, 3, 4, 5, 6</td></tr><tr><td>0</td><td>7, 8, 9</td></tr><tr><td>-1</td><td>10, 'J', 'Q', 'K','A'</td></tr></tbody></table>",
|
||||
"Vas a escribir una función de conteo de cartas. Esta recibirá un parametro <code>card</code> (carta) e incrementa o decrementa la variable <code>count</code> (conteo) global de acuerdo al valor de la carta (ver tabla). La función retornará entonces una cadena con el presente conteo y la cadena <code>\"Bet\"</code> si el conteo es positivo o <code>\"Hold\"</code> si el conteo es cero o negativo. El presente conteo y la desición del jugador (<code>\"Bet\"</code> o <code>\"Hold\"</code>) deben quedar separada por un único espacio.",
|
||||
@@ -3834,7 +3834,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Construye objetos en JavaScript",
|
||||
"titleEs": "Construye objetos en JavaScript",
|
||||
"descriptionEs": [
|
||||
"Es posible que haya oído el término <code>objeto</code> antes.",
|
||||
"Los objetos son similares a los <code>vectores</code>, excepto que en lugar de utilizar los índices para acceder y modificar sus datos, pueden accederse mediante lo que se llama <code>propiedades</code>.",
|
||||
@@ -3890,9 +3890,9 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Acceder a propiedades de objetos con el operador punto",
|
||||
"titleEs": "Acceder a propiedades de objetos con el operador punto",
|
||||
"descriptionEs": [
|
||||
"Hay dos maneras de acceder a las propiedades de un objeto: con el operador punto (<code>.</code>) y con la notación corchete (<code>[]</code>), similar al caso de un vector.",
|
||||
"Hay dos maneras de acceder a las propiedades de un objeto: con el operador punto (<code>.</code>) y con la notación corchete (<code>[]</code>), similar al caso de un vector.",
|
||||
"El operador punto es el que usas cuando de antemano sabes el nombre de la propiedad que estás intentando acceder.",
|
||||
"Aquí está un ejemplo del uso del operador punto (<code>.</code>) para leer una propiedad de un objeto:",
|
||||
"<blockquote>var miObj = {<br> prop1: \"val1\",<br> prop2: \"val2\"<br>};<br>var prop1val = miObj.prop1; // val1<br>var prop2val = miObj.prop2; // val2</blockquote>",
|
||||
@@ -3940,9 +3940,9 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Acceder a las propiedades de objetos con la notación corchete",
|
||||
"titleEs": "Acceder a las propiedades de objetos con la notación corchete",
|
||||
"descriptionEs": [
|
||||
"La segunda manera de acceder a las propiedades de un objeto es con la notación corchete (<code>[]</code>). Si el nombre de la propiedad del objeto que estás intentando acceder tiene un espacio, necesitarás usar la notación corchete.",
|
||||
"La segunda manera de acceder a las propiedades de un objeto es con la notación corchete (<code>[]</code>). Si el nombre de la propiedad del objeto que estás intentando acceder tiene un espacio, necesitarás usar la notación corchete.",
|
||||
"Aquí está un ejemplo del uso de la notación corchete para leer una propiedad de un objeto:",
|
||||
"<blockquote>var miObj = {<br> \"Nombre con espacio\": \"Kirk\",<br> \"Mas espacio\": \"Spock\"<br>};<br>miObj[\"Nombre con espacio\"]; // Kirk<br>miObj['Mas espacio']; // Spock</blockquote>",
|
||||
"Nota que los nombres de propiedades con espacios tienen que estar entre comillas (apóstrofes o comillas).",
|
||||
@@ -3991,9 +3991,9 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Acceder a propiedades de objetos con variables",
|
||||
"titleEs": "Acceder a propiedades de objetos con variables",
|
||||
"descriptionEs": [
|
||||
"Otro uso de la notación corchete sobre objetos es usar una variable para acceder a una propiedad. Esto puede ser muy útil en iteraciones sobre la lista de propiedades de un objetos o para hacer operaciones de búsqueda.",
|
||||
"Otro uso de la notación corchete sobre objetos es usar una variable para acceder a una propiedad. Esto puede ser muy útil en iteraciones sobre la lista de propiedades de un objetos o para hacer operaciones de búsqueda.",
|
||||
"Aquí está un ejemplo del uso de una variable para acceder a una propiedad:",
|
||||
"<blockquote>var algunaProp = \"propNombre\";<br>var miObj = {<br> propNombre: \"Algún valor\"<br >}<br>miObj[algunaProp]; // \"Algún valor\"</blockquote>",
|
||||
"Aquí hay uno más:",
|
||||
@@ -4052,7 +4052,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Actualiza las propiedades de un objeto en JavaScript",
|
||||
"titleEs": "Actualiza las propiedades de un objeto en JavaScript",
|
||||
"descriptionEs": [
|
||||
"Después de que hayas creado un objeto de JavaScript, puedes actualizar sus propiedades en cualquier momento, tal y como harías con cualquier otra variable.",
|
||||
"Por ejemplo, echemos un vistazo a <code>ourDog</code>:",
|
||||
@@ -4116,7 +4116,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Añade nuevas propiedades a un objeto JavaScript",
|
||||
"titleEs": "Añade nuevas propiedades a un objeto JavaScript",
|
||||
"descriptionEs": [
|
||||
"Puedes añadir nuevas propiedades a objetos existente de la misma forma que usarías para modificarlos.",
|
||||
"Así es como añadimos una propiedad <code>\"bark\"</code> (ladra) a nuestro objeto <code>ourDog</code>:",
|
||||
@@ -4172,7 +4172,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Elimina propiedades de un objeto JavaScript",
|
||||
"titleEs": "Elimina propiedades de un objeto JavaScript",
|
||||
"descriptionEs": [
|
||||
"También podemos eliminar propiedades de los objetos de esta manera:",
|
||||
"<code>delete ourDog.bark;</code>",
|
||||
@@ -4239,9 +4239,9 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Usar objetos para búsquedas",
|
||||
"titleEs": "Usar objetos para búsquedas",
|
||||
"descriptionEs": [
|
||||
"Los objetos pueden ser considerados como un almacenamiento llave/valor, como un diccionario. Si tienes datos tabulados, puedes almacenarlos en un objeto para después \"buscar\" valores, en lugar de emplear una sentencia <code>switch</code> o una secuencia de <code>if/else</code>. Esto es más útil cuando sabes que tus datos de entrada son limitados a un cierto rango.",
|
||||
"Los objetos pueden ser considerados como un almacenamiento llave/valor, como un diccionario. Si tienes datos tabulados, puedes almacenarlos en un objeto para después \"buscar\" valores, en lugar de emplear una sentencia <code>switch</code> o una secuencia de <code>if/else</code>. Esto es más útil cuando sabes que tus datos de entrada son limitados a un cierto rango.",
|
||||
"Aquí está un ejemplo de una simple búsqueda inversa de alfabeto:",
|
||||
"<blockquote>var alfa = {<br> 1:\"Z\",<br> 2:\"Y\",<br> 3:\"X\",<br> 4:\"W\",<br> ...<br> 24:\"C\",<br> 25:\"B\",<br> 26:\"A\"<br>};<br>alfa[2]; // \"Y\"<br>alfa[24]; // \"C\"<br><br>var valor = 2;<br>alfa[valor]; // \"Y\"</blockquote>",
|
||||
"<h4>Instrucciones</h4>",
|
||||
@@ -4289,9 +4289,9 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Probar si un objeto tiene cierta propiedad",
|
||||
"titleEs": "Probar si un objeto tiene cierta propiedad",
|
||||
"descriptionEs": [
|
||||
"A veces es útil revisar si cierta propiedad existe o no en un objeto dado. Podemos usar el método de objetos <code>.hasOwnProperty(nomprop)</code> para determinar si un objeto tiene la propiedad <code>nomprop</code>. <code>.hasOwnProperty()</code> retorna <code>true</code> o <code>false</code> si la propiedad es encontrada o no.",
|
||||
"A veces es útil revisar si cierta propiedad existe o no en un objeto dado. Podemos usar el método de objetos <code>.hasOwnProperty(nomprop)</code> para determinar si un objeto tiene la propiedad <code>nomprop</code>. <code>.hasOwnProperty()</code> retorna <code>true</code> o <code>false</code> si la propiedad es encontrada o no.",
|
||||
"<strong>Ejemplo</strong>",
|
||||
"<blockquote>var miObj = {<br> arriba: \"sombrero\",<br> abajo: \"pantalones\"<br>};<br>miObj.hasOwnProperty(\"arriba\"); // true<br>miObj.hasOwnProperty(\"medio\"); // false</blockquote>",
|
||||
"<h4>Instrucciones</h4>",
|
||||
@@ -4346,9 +4346,9 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Introducción a la notación de objetos de JavaScript (JSON - JavaScript Object Notation)",
|
||||
"titleEs": "Introducción a la notación de objetos de JavaScript (JSON - JavaScript Object Notation)",
|
||||
"descriptionEs": [
|
||||
"La notación de objetos de JavaScript o <code>JSON</code> usa el formato de objetos de JavaScript para almacenar datos. JSON es flexible porque permite <dfn>Estructuras de Datos</dfn> con combinaciones arbitrarias de <dfn>cadenas</dfn>, <dfn>números</dfn>, <dfn>booleanos</dfn>, <dfn>vectores</dfn> y <dfn>objetos</dfn>.",
|
||||
"La notación de objetos de JavaScript o <code>JSON</code> usa el formato de objetos de JavaScript para almacenar datos. JSON es flexible porque permite <dfn>Estructuras de Datos</dfn> con combinaciones arbitrarias de <dfn>cadenas</dfn>, <dfn>números</dfn>, <dfn>booleanos</dfn>, <dfn>vectores</dfn> y <dfn>objetos</dfn>.",
|
||||
"Aquí está un ejemplo de un objeto JSON:",
|
||||
"<blockquote>var nuestraMusica = [<br> {<br> \"artista\": \"Daft Punk\",<br> \"titulo\": \"Homework\",<br> \"año_publicacion\": 1997,<br> \"formatos\": [ <br> \"CD\", <br> \"Cassette\", <br> \"LP\" ],<br> \"oro\": true<br> }<br>];</blockquote>",
|
||||
"Este es un vector de objetos con diversos <dfn>metadatos</dfn> acerca de un álbum musical. Además tiene anidado un vector <code>formatos</code>. En el vector de nivel superior, pueden añadirse otros registros del álbum.",
|
||||
@@ -4404,9 +4404,9 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Acceder a objetos anidados en JSON",
|
||||
"titleEs": "Acceder a objetos anidados en JSON",
|
||||
"descriptionEs": [
|
||||
"Las propiedades y sub-propiedades de los objetos JSON pueden ser accesadas mediante encadenamiento de la notación punto o corchete.",
|
||||
"Las propiedades y sub-propiedades de los objetos JSON pueden ser accesadas mediante encadenamiento de la notación punto o corchete.",
|
||||
"Aquí está un objeto JSON anidado:",
|
||||
"<blockquote>var nuestroAlmacen = {<br> \"escritorio\": {<br> \"cajon\": \"grapadora\"<br> },<br> \"armario\": {<br> \"cajón superior\": { <br> \"legajador1\": \"un archivo\",<br> \"legajador2\": \"secretos\"<br> },<br> \"cajón inferior\": \"gaseosa\"<br> }<br>}<br>nuestroAlmacen.armario[\"cajón superior\"].legajador2; // \"secretos\"<br>nuestroAlmacen.escritorio.cajon; // \"grapadora\"</blockquote>",
|
||||
"<h4>Instrucciones</h4>",
|
||||
@@ -4467,9 +4467,9 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Acceder a vectores anidados en JSON",
|
||||
"titleEs": "Acceder a vectores anidados en JSON",
|
||||
"descriptionEs": [
|
||||
"Como hemos visto en ejemplos anteriores, los objetos JSON pueden contener objetos anidados y vectores anidados. De forma similar a acceder a objetos anidados, la notación corchete en vectores puede ser encadenada para acceder a vectores anidados.",
|
||||
"Como hemos visto en ejemplos anteriores, los objetos JSON pueden contener objetos anidados y vectores anidados. De forma similar a acceder a objetos anidados, la notación corchete en vectores puede ser encadenada para acceder a vectores anidados.",
|
||||
"Aquí está un ejemplo de como acceder a un vector anidado:",
|
||||
"<blockquote>var nuestrasMascotas = { <br> \"gatos\": [<br> \"Maullador\",<br> \"Blandito\",<br> \"Kit-Cat\"<br> ],<br> \"perros\": [<br> \"Mancha\",<br> \"Bowser\",<br> \"Frankie\"<br> ]<br>};<br>nuestrasMascotas.cats[1]; // \"Blandito\"<br>nuestrasMascotas.dogs[0]; // \"Mancha\"</blockquote>",
|
||||
"<h4>Instrucciones</h4>",
|
||||
@@ -4545,9 +4545,9 @@
|
||||
],
|
||||
"type": "checkpoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Colección de registros",
|
||||
"titleEs": "Colección de registros",
|
||||
"descriptionEs": [
|
||||
"Se te da un objeto JSON que representa (una pequeña parte de) tu colección de grabaciones. Cada álbum es identificado por un número id único y tiene varias propiedades. No todos los álbumes tienen la información completa.",
|
||||
"Se te da un objeto JSON que representa (una pequeña parte de) tu colección de grabaciones. Cada álbum es identificado por un número id único y tiene varias propiedades. No todos los álbumes tienen la información completa.",
|
||||
"Escribe una función que reciba un <code>id</code>, una propiedad (<code>prop</code>) y un valor (<code>value</code>).",
|
||||
"Para el <code>id</code> dado, en la colección <code>collection</code>:",
|
||||
"Si el valor <code>value</code> no está en blanco (<code>value !== \"\"</code>) y <code>prop</code> no es <code>\"tracks\"</code> entonces actualiza o establece el valor de la propiedad <code>prop</code>.",
|
||||
@@ -4601,7 +4601,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Iterar en JavaScript con ciclos for",
|
||||
"titleEs": "Iterar en JavaScript con ciclos for",
|
||||
"descriptionEs": [
|
||||
"Puede ejecutar el mismo código varias veces mediante el uso de un ciclo.",
|
||||
"El tipo más común de bucle de JavaScript se llama \"ciclo for\"porque se ejecuta \"por\" (for) un número específico de veces.",
|
||||
@@ -4659,7 +4659,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Itera por los números pares con un ciclo for",
|
||||
"titleEs": "Itera por los números pares con un ciclo for",
|
||||
"descriptionEs": [
|
||||
"Los ciclos <code>for</code> no siempre iteran incrementado de a uno. Cambiando nuestra <code>expresión final</code>, podemos contar los números pares.",
|
||||
"Vamos a empezar con <code>i = 0</code> e iterar mientras <code>i <10</code>. Vamos a incrementar <code>i</code> de a 2 en cada iteración <code>i + = 2</code>. ",
|
||||
@@ -4712,7 +4712,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Cuenta hacia atrás con un ciclo for",
|
||||
"titleEs": "Cuenta hacia atrás con un ciclo for",
|
||||
"descriptionEs": [
|
||||
"Un ciclo también puede contar hacia atrás, siempre y cuando definamos las condiciones adecuadas.",
|
||||
"Para contar hacia atrás de dos en dos, tendremos que cambiar nuestra <code>inicialización</code>, la <code>condición</code> y la <code>última-expresión</code>.",
|
||||
@@ -4768,9 +4768,9 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Iterar a través de un vector con un ciclo for",
|
||||
"titleEs": "Iterar a través de un vector con un ciclo for",
|
||||
"descriptionEs": [
|
||||
"Una tarea común en JavaScript es iterar a traves del contenido de un vector. Una manera de hacerlo es con un ciclo <code>for</code>. Este código imprimirá cada elemento del vector <code>arr</code> en la consola:",
|
||||
"Una tarea común en JavaScript es iterar a traves del contenido de un vector. Una manera de hacerlo es con un ciclo <code>for</code>. Este código imprimirá cada elemento del vector <code>arr</code> en la consola:",
|
||||
"<blockquote>var arr = [10,9,8,7,6];<br>for (var i=0; i < arr.length; i++) {<br> console.log(arr[i]);<br>}</blockquote>",
|
||||
"Recuerda que los vectores tienen numeración que comienza en cero, la cual significa que el último índice del vector es su longitud - 1. Nuestra <dfn>condición</dfn> para este ciclo es <code>i < arr.length</code>, que lo detendrá cuando <code>i</code> sea la longitud - 1.",
|
||||
"<h4>Instrucciones</h4>",
|
||||
@@ -4814,9 +4814,9 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Anidar ciclos for",
|
||||
"titleEs": "Anidar ciclos for",
|
||||
"descriptionEs": [
|
||||
"Si tienes una matriz multi-dimensional, puedes usar la misma lógica del punto anterior para iterar a través de un vector y cualquier sub-vector. Aquí está un ejemplo:",
|
||||
"Si tienes una matriz multi-dimensional, puedes usar la misma lógica del punto anterior para iterar a través de un vector y cualquier sub-vector. Aquí está un ejemplo:",
|
||||
"<blockquote>var arr = [<br> [1,2], [3,4], [5,6]<br>];<br>for (var i=0; i < arr.length; i++) {<br> for (var j=0; j < arr[i].length; j++) {<br> console.log(arr[i][j]);<br> }<br>}</blockquote>",
|
||||
"Esto imprime cada sub-elemento en <code>arr</code> uno a la vez. Nota que en el ciclo interior, estamos comprobando la longitud <code>.length</code> de <code>arr[i]</code>, ya que <code>arr[i]</code> es por si mismo un vector.",
|
||||
"<h4>Instrucciones</h4>",
|
||||
@@ -4854,7 +4854,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Iterar con JavaScript con ciclos while",
|
||||
"titleEs": "Iterar con JavaScript con ciclos while",
|
||||
"descriptionEs": [
|
||||
"Puede ejecutar el mismo código varias veces mediante el uso de un ciclo.",
|
||||
"Otro tipo de ciclo de JavaScript se llama un ciclo \"while\", ya que se ejecuta, \"mientras que\" algo sea cierto y se detiene una vez que ya no sea así.",
|
||||
@@ -4933,9 +4933,9 @@
|
||||
],
|
||||
"type": "checkpoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Búsqueda de perfiles",
|
||||
"titleEs": "Búsqueda de perfiles",
|
||||
"descriptionEs": [
|
||||
"Tenemos un vector de objetos que representan diferentes personas en nuestra lista de contactos.",
|
||||
"Tenemos un vector de objetos que representan diferentes personas en nuestra lista de contactos.",
|
||||
"Una función <code>lookUp</code> que recibe el nombre (<code>firstName</code>) y una propiedad (<code>prop</code>) como argumentos ya ha sido escrita previamente para ti.",
|
||||
"La función debe comprobar si <code>firstName</code> es un nombre (<code>firstName</code>) de algún contacto y si la propiedad dada (<code>prop</code>) es una propiedad de ese contacto.",
|
||||
"Si ambos son verdaderos, entonces retorna el valor (<code>value</code>) de esa propiedad.",
|
||||
@@ -4977,7 +4977,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Generar fracciones al azar con JavaScript",
|
||||
"titleEs": "Generar fracciones al azar con JavaScript",
|
||||
"descriptionEs": [
|
||||
"Los números aleatorios son útiles para crear un comportamiento aleatorio.",
|
||||
"JavaScript tiene una función <code>Math.random()</code> que genera un número decimal aleatorio.",
|
||||
@@ -5023,7 +5023,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Genera números aleatorios enteros con JavaScript",
|
||||
"titleEs": "Genera números aleatorios enteros con JavaScript",
|
||||
"descriptionEs": [
|
||||
"Es muy bueno que podamos generar números decimales al azar, pero es aún más útil si lo utilizamos para generar números enteros aleatorios.",
|
||||
"En primer lugar, vamos a usar <code>Math.random()</code> para generar un decimal aleatorio.",
|
||||
@@ -5096,7 +5096,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Genera números aleatorios enteros dentro de un rango",
|
||||
"titleEs": "Genera números aleatorios enteros dentro de un rango",
|
||||
"descriptionEs": [
|
||||
"En lugar de generar un número aleatorio entre cero y un número dado como lo hicimos antes, podemos generar un número aleatorio que caiga dentro de un rango de dos números específicos.",
|
||||
"Para ello, vamos a definir un número mínimo <code>min</code> y un número máximo <code>max</code>.",
|
||||
@@ -5157,7 +5157,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Examina un texto con expresiones regulares",
|
||||
"titleEs": "Examina un texto con expresiones regulares",
|
||||
"descriptionEs": [
|
||||
"Las <code>expresiones regulares</code> se utilizan para encontrar ciertas palabras o patrones dentro de <code>cadenas</code>.",
|
||||
"Por ejemplo, si quisiéramos encontrar la palabra <code>el</code> en la cadena <code>El perro persiguió al gato el lunes</code>, podríamos utilizar la siguiente <code>expresión regular</code>: <code>/el/gi</code> ",
|
||||
@@ -5211,7 +5211,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Encuentra números con expresiones regulares",
|
||||
"titleEs": "Encuentra números con expresiones regulares",
|
||||
"descriptionEs": [
|
||||
"Podemos usar selectores especiales en las <code>expresiones regulares</code> para seleccionar un determinado tipo de valor.",
|
||||
"Uno de estos selectores es el de dígitos <code>\\d</code> que se utiliza para hacer coincidir números en una cadena.",
|
||||
@@ -5260,7 +5260,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Encuentra espacios en blanco con las expresiones regulares",
|
||||
"titleEs": "Encuentra espacios en blanco con las expresiones regulares",
|
||||
"descriptionEs": [
|
||||
"También podemos utilizar selectores de expresiones regulares como <code>\\s</code> para encontrar un espacio en blanco en una cadena.",
|
||||
"Los espacios en blanco son <code>\" \"</code> (espacio), <code>\\r</code> (el retorno de carro), <code>\\n</code> (nueva línea), <code>\\t</code> (tabulador), y <code>\\f</code> (el avance de página). ",
|
||||
@@ -5307,7 +5307,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Hacer coincidir con una expresión regular invertida",
|
||||
"titleEs": "Hacer coincidir con una expresión regular invertida",
|
||||
"descriptionEs": [
|
||||
"Puedes invertir las coincidencias de un selector usando su versión en mayúsculas.",
|
||||
"Por ejemplo, <code>\\s</code> coincidirá con cualquier espacio en blanco, mientras que <code>\\S</code> coincidirá con todo lo que no sea espacio en blanco.",
|
||||
@@ -5472,7 +5472,7 @@
|
||||
"type": "waypoint",
|
||||
"challengeType": 0,
|
||||
"isBeta": true,
|
||||
"nameEs": "Crea una máquina tragamonedas en JavaScript",
|
||||
"titleEs": "Crea una máquina tragamonedas en JavaScript",
|
||||
"descriptionEs": [
|
||||
"Ahora vamos a tratar de combinar algunas de las cosas que hemos aprendido para crear la lógica de una máquina tragamonedas.",
|
||||
"Para esto tendremos que generar tres números aleatorios entre <code>1</code> y <code>3</code> que representen los valores posibles de cada casilla.",
|
||||
@@ -5643,7 +5643,7 @@
|
||||
"type": "waypoint",
|
||||
"challengeType": 0,
|
||||
"isBeta": true,
|
||||
"nameEs": "Añade casillas a tu tragamonedas JavaScript",
|
||||
"titleEs": "Añade casillas a tu tragamonedas JavaScript",
|
||||
"descriptionEs": [
|
||||
"Ahora que cada una de nuestras casillas genera números aleatorios, tenemos que comprobar si todos quedan con el mismo número.",
|
||||
"Si es así, debemos notificar a nuestros usuarios que han ganado y debemos retornar <code>null</code>.",
|
||||
@@ -5824,7 +5824,7 @@
|
||||
"type": "waypoint",
|
||||
"challengeType": 0,
|
||||
"isBeta": true,
|
||||
"nameEs": "Da vida a tu máquina tragamonedas en JavaScript",
|
||||
"titleEs": "Da vida a tu máquina tragamonedas en JavaScript",
|
||||
"descriptionEs": [
|
||||
"Ahora podemos detectar una victoria. Logremos que la máquina tragamonedas funcione. ",
|
||||
"Usemos un <code>selector</code> de jQuery <code>$(\".slot\")</code> para seleccionar todas las casillas.",
|
||||
@@ -6010,7 +6010,7 @@
|
||||
"type": "waypoint",
|
||||
"challengeType": 0,
|
||||
"isBeta": true,
|
||||
"nameEs": "Dale a tu máquina tragamonedas JavaScript algunas imágenes con estilo",
|
||||
"titleEs": "Dale a tu máquina tragamonedas JavaScript algunas imágenes con estilo",
|
||||
"descriptionEs": [
|
||||
"Ahora añadamos algunas imágenes en nuestras casillas.",
|
||||
"Ya hemos creado las imágenes por ti en una matriz llamada <code>images</code>. Podemos utilizar diferentes índices para tomara cada una de estas. ",
|
||||
|
@@ -48,47 +48,9 @@
|
||||
"challengeSeed": [],
|
||||
"tests": [],
|
||||
"type": "Waypoint",
|
||||
"isRequired": false,
|
||||
"challengeType": 7,
|
||||
"nameEs": "Prepárate para los Proyectos de Desarrollo de Interfaces",
|
||||
"descriptionEs": [
|
||||
[
|
||||
"http://i.imgur.com/OAD6SJz.png",
|
||||
"Una imagen del juego Simón, uno de nuestros proyectos de interfaz.",
|
||||
"Nuestros proyectos de desarrollo de interfaces te darán oportunidad de aplicar las habilidades con interfaces que has desarrollado hasta este momento. Usaremos un editor de código basado en el navegador llamado CodePen.",
|
||||
""
|
||||
],
|
||||
[
|
||||
"http://i.imgur.com/WBetuBa.jpg",
|
||||
"Un programador frustado golpeando la pantalla de su computador.",
|
||||
"Nuestros desafíos sobre algoritmos son difíciles. Algunos pueden requerir muchas horas para resolverse. Podrás frustarte, pero no te rindas. Se vuelve fácil con práctica.",
|
||||
""
|
||||
],
|
||||
[
|
||||
"http://i.imgur.com/p2TpOQd.jpg",
|
||||
"Un tierno perro que salta sobre un obstáculo, pica el ojo y te apunta con su pata.",
|
||||
"Cuando te atasques, usa la metodología Leer-Buscar-Preguntar. No te preocupes - lo tienes resuelto.",
|
||||
""
|
||||
],
|
||||
[
|
||||
"http://i.imgur.com/G1saeDt.gif",
|
||||
"Un gif que muestra cómo crear una cuenta en Codepen.",
|
||||
"Para nuestros desafíos de interfaces, usaremos un editor de código basado en el navegador que es muy famoso llamado Codepen. Pulsa en el botón de abajo \"Open link in new tab\" para abrir la página de registro de CodePen. Rellena el formulario y pulsa \"Sign up\". <br><div class=\"small\">Nota: Si ya tienes una cuenta de CodePen, puedes omitir este paso pulsando \"Open link in new tab\", cierra la nueva pestaña que se abre, entonces pulsa \"go to my next step\". Eliminamos nuestro botón \"skip step\" porque mucha gente solamente pulsa el botón sin realizar estos importantes pasos.</div>",
|
||||
"http://codepen.io/signup/free"
|
||||
],
|
||||
[
|
||||
"http://i.imgur.com/U4y9RJ1.gif",
|
||||
"Un gif que muestra que puedes escribir \"hello world\" en el editor, lo cual escribirá \"hello world\" en la ventana de vista previa. También puedes mover las ventanas para cambiar su tamaño, y cambiar su orientación.",
|
||||
"En la ventana de HTML, crea un elemento h1 con el texto \"Hola mundo\". Puedes arrastrar los bordes de las ventanas para cambiar su tamaño. También puedes pulsar el botón de \"Change View\" para cambiar la orientación de las ventanas.",
|
||||
""
|
||||
],
|
||||
[
|
||||
"http://i.imgur.com/G9KFQDL.gif",
|
||||
"Un gif que muestra el proceso de agregar Bootstrap a tu proyecto.",
|
||||
"Pulsa el engrane en la esquina superior izquierda de la ventana de CSS, luego ve hacia abajo hasta donde dice \"Quick add\" y elige Bootstrap. Ahora dale a tu elemento h1 la clase \"text-primary\" para cambiar su color y verificar que Bootstrap está activado.",
|
||||
""
|
||||
]
|
||||
],
|
||||
"nameRu": "Приготовьтесь к разработке фронтенд проектов",
|
||||
"titleRu": "Приготовьтесь к разработке фронтенд проектов",
|
||||
"descriptionRu": [
|
||||
[
|
||||
"http://i.imgur.com/OAD6SJz.png",
|
||||
@@ -127,12 +89,49 @@
|
||||
""
|
||||
]
|
||||
],
|
||||
"isRequired": false
|
||||
"titleEs": "Prepárate para los Proyectos de Desarrollo de Interfaces",
|
||||
"descriptionEs": [
|
||||
[
|
||||
"http://i.imgur.com/OAD6SJz.png",
|
||||
"Una imagen del juego Simón, uno de nuestros proyectos de interfaz.",
|
||||
"Nuestros proyectos de desarrollo de interfaces te darán oportunidad de aplicar las habilidades con interfaces que has desarrollado hasta este momento. Usaremos un editor de código basado en el navegador llamado CodePen.",
|
||||
""
|
||||
],
|
||||
[
|
||||
"http://i.imgur.com/WBetuBa.jpg",
|
||||
"Un programador frustado golpeando la pantalla de su computador.",
|
||||
"Nuestros desafíos sobre algoritmos son difíciles. Algunos pueden requerir muchas horas para resolverse. Podrás frustarte, pero no te rindas. Se vuelve fácil con práctica.",
|
||||
""
|
||||
],
|
||||
[
|
||||
"http://i.imgur.com/p2TpOQd.jpg",
|
||||
"Un tierno perro que salta sobre un obstáculo, pica el ojo y te apunta con su pata.",
|
||||
"Cuando te atasques, usa la metodología Leer-Buscar-Preguntar. No te preocupes - lo tienes resuelto.",
|
||||
""
|
||||
],
|
||||
[
|
||||
"http://i.imgur.com/G1saeDt.gif",
|
||||
"Un gif que muestra cómo crear una cuenta en Codepen.",
|
||||
"Para nuestros desafíos de interfaces, usaremos un editor de código basado en el navegador que es muy famoso llamado Codepen. Pulsa en el botón de abajo \"Open link in new tab\" para abrir la página de registro de CodePen. Rellena el formulario y pulsa \"Sign up\". <br><div class=\"small\">Nota: Si ya tienes una cuenta de CodePen, puedes omitir este paso pulsando \"Open link in new tab\", cierra la nueva pestaña que se abre, entonces pulsa \"go to my next step\". Eliminamos nuestro botón \"skip step\" porque mucha gente solamente pulsa el botón sin realizar estos importantes pasos.</div>",
|
||||
"http://codepen.io/signup/free"
|
||||
],
|
||||
[
|
||||
"http://i.imgur.com/U4y9RJ1.gif",
|
||||
"Un gif que muestra que puedes escribir \"hello world\" en el editor, lo cual escribirá \"hello world\" en la ventana de vista previa. También puedes mover las ventanas para cambiar su tamaño, y cambiar su orientación.",
|
||||
"En la ventana de HTML, crea un elemento h1 con el texto \"Hola mundo\". Puedes arrastrar los bordes de las ventanas para cambiar su tamaño. También puedes pulsar el botón de \"Change View\" para cambiar la orientación de las ventanas.",
|
||||
""
|
||||
],
|
||||
[
|
||||
"http://i.imgur.com/G9KFQDL.gif",
|
||||
"Un gif que muestra el proceso de agregar Bootstrap a tu proyecto.",
|
||||
"Pulsa el engrane en la esquina superior izquierda de la ventana de CSS, luego ve hacia abajo hasta donde dice \"Quick add\" y elige Bootstrap. Ahora dale a tu elemento h1 la clase \"text-primary\" para cambiar su color y verificar que Bootstrap está activado.",
|
||||
""
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "bd7158d8c442eddfaeb5bd18",
|
||||
"title": "Build a Tribute Page",
|
||||
"releasedOn": "January 1, 2016",
|
||||
"description": [
|
||||
"<strong>Objective:</strong> Build a <a href='http://codepen.io' target='_blank'>CodePen.io</a> app that is functionally similar to this: <a href='http://codepen.io/FreeCodeCamp/full/wMQrXV' target='_blank'>http://codepen.io/FreeCodeCamp/full/wMQrXV</a>.",
|
||||
"<strong>Rule #1:</strong> Don't look at the example project's code. Figure it out for yourself.",
|
||||
@@ -143,24 +142,15 @@
|
||||
"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 <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Code Review Chatroom</a>. You can also share it on Twitter and your city's Campsite (on Facebook)."
|
||||
],
|
||||
"releasedOn": "January 1, 2016",
|
||||
"challengeSeed": [
|
||||
"154927651"
|
||||
],
|
||||
"tests": [],
|
||||
"type": "zipline",
|
||||
"isRequired": true,
|
||||
"challengeType": 3,
|
||||
"nameEs": "Construye una página Tributo",
|
||||
"descriptionEs": [
|
||||
"<strong>Objetivo:</strong> Crea una aplicación con <a href='http://codepen.io' target='_blank'>CodePen.io</a> que funcionalmente sea similar a esta: <a href='http://codepen.io/FreeCodeCamp/full/wMQrXV' target='_blank'>http://codepen.io/FreeCodeCamp/full/wMQrXV</a>",
|
||||
"<strong>Regla #1:</strong> No veas el código del proyecto de ejemplo. Encuentra la forma de hacerlo por tu cuenta.",
|
||||
"<strong>Regla #2:</strong> Satisface las siguientes <a href='http://en.wikipedia.org/wiki/User_story' target='_blank'>historias de usuario</a>. Usa cualquier librería que necesites. Dale tu estilo personal.",
|
||||
"<strong>Historia de usuario:</strong> Puedo ver una página tributo con una imagen y texto.",
|
||||
"<strong>Historia de usuario:</strong> Puedo pulsar en un enlace que me llevará a un sitio web externo con mayor información sobre el tema.",
|
||||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado.",
|
||||
"Cuando hayas terminado, pulsa el botón \"I've completed this challenge\" e incluye un link a tu CodePen. ",
|
||||
"Puedes obtener retroalimentación sobre tu proyecto por parte de otros campistas, compartiéndolo en nuestra <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Sala de chat para revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)."
|
||||
],
|
||||
"nameRu": "Создайте страницу посвященную тому что вас вдохновляет",
|
||||
"titleRu": "Создайте страницу посвященную тому что вас вдохновляет",
|
||||
"descriptionRu": [
|
||||
"<strong>Задание:</strong> Создайте приложение <a href='http://codepen.io' target='_blank'>CodePen.io</a> которое функционально соответствует вот этому: <a href='http://codepen.io/FreeCodeCamp/full/wMQrXV' target='_blank'>http://codepen.io/FreeCodeCamp/full/wMQrXV</a>.",
|
||||
"<strong>Правило #1:</strong> Не подсматривайте код приведенного на CodePen примера. Напишите его самостоятельно.",
|
||||
@@ -171,7 +161,17 @@
|
||||
"Когда выполните задание кликните кнопку \"I've completed this challenge\" и добавьте ссылку на ваш CodePen.",
|
||||
"Вы можете получить отзыв о вашем проекте от коллег, поделившись ссылкой на него в нашем <a href='//gitter.im/freecodecamp/codereview' target='_blank'>чате для рассмотрения кода</a>. Также вы можете поделиться ею через Twitter и на странице Free Code Camp вашего города на Facebook."
|
||||
],
|
||||
"isRequired": true
|
||||
"titleEs": "Construye una página Tributo",
|
||||
"descriptionEs": [
|
||||
"<strong>Objetivo:</strong> Crea una aplicación con <a href='http://codepen.io' target='_blank'>CodePen.io</a> que funcionalmente sea similar a esta: <a href='http://codepen.io/FreeCodeCamp/full/wMQrXV' target='_blank'>http://codepen.io/FreeCodeCamp/full/wMQrXV</a>",
|
||||
"<strong>Regla #1:</strong> No veas el código del proyecto de ejemplo. Encuentra la forma de hacerlo por tu cuenta.",
|
||||
"<strong>Regla #2:</strong> Satisface las siguientes <a href='http://en.wikipedia.org/wiki/User_story' target='_blank'>historias de usuario</a>. Usa cualquier librería que necesites. Dale tu estilo personal.",
|
||||
"<strong>Historia de usuario:</strong> Puedo ver una página tributo con una imagen y texto.",
|
||||
"<strong>Historia de usuario:</strong> Puedo pulsar en un enlace que me llevará a un sitio web externo con mayor información sobre el tema.",
|
||||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado.",
|
||||
"Cuando hayas terminado, pulsa el botón \"I've completed this challenge\" e incluye un link a tu CodePen. ",
|
||||
"Puedes obtener retroalimentación sobre tu proyecto por parte de otros campistas, compartiéndolo en nuestra <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Sala de chat para revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)."
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "bd7158d8c242eddfaeb5bd13",
|
||||
@@ -196,7 +196,9 @@
|
||||
],
|
||||
"tests": [],
|
||||
"type": "zipline",
|
||||
"nameRu": "Создайте сайт-портфолио",
|
||||
"isRequired": true,
|
||||
"challengeType": 3,
|
||||
"titleRu": "Создайте сайт-портфолио",
|
||||
"descriptionRu": [
|
||||
"<strong>Задание:</strong> Создайте приложение <a href='http://codepen.io' target='_blank'>CodePen.io</a> которое функционально соответствует вот этому: <a href='http://codepen.io/FreeCodeCamp/full/VemmoX/' target='_blank'>http://codepen.io/FreeCodeCamp/full/VemmoX/</a>.",
|
||||
"<strong>Правило #1:</strong> Не подсматривайте код приведенного на CodePen примера. Напишите его самостоятельно.",
|
||||
@@ -212,7 +214,7 @@
|
||||
"Когда выполните задание кликните кнопку \"I've completed this challenge\" и добавьте ссылку на ваш CodePen.",
|
||||
"Вы можете получить отзыв о вашем проекте от коллег, поделившись ссылкой на него в нашем <a href='//gitter.im/freecodecamp/codereview' target='_blank'>чате для рассмотрения кода</a>. Также вы можете поделиться ею через Twitter и на странице Free Code Camp вашего города на Facebook."
|
||||
],
|
||||
"nameEs": "Construye una página web para tu portafolio",
|
||||
"titleEs": "Construye una página web para tu portafolio",
|
||||
"descriptionEs": [
|
||||
"<strong>Objetivo:</strong> Crea una aplicación con <a href='http://codepen.io' target='_blank'>CodePen.io</a> cuya funcionalidad sea similar a la de esta: <a href='http://codepen.io/FreeCodeCamp/full/VemmoX/' target='_blank'>http://codepen.io/FreeCodeCamp/full/VemmoX/</a>.",
|
||||
"<strong>Regla #1:</strong> No veas el código del proyecto de ejemplo. Encuentra la forma de hacerlo por tu cuenta.",
|
||||
@@ -227,9 +229,7 @@
|
||||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado.",
|
||||
"Cuando hayas terminado, pulsa el botón \"I've completed this challenge\" e incluye un link a tu CodePen. ",
|
||||
"Puedes obtener retroalimentación sobre tu proyecto por parte de otros campistas, compartiéndolo en nuestra <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Sala de chat para revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)."
|
||||
],
|
||||
"isRequired": true,
|
||||
"challengeType": 3
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
@@ -79,7 +79,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 0,
|
||||
"nameEs": "Usa diseño adaptativo con los contenedores fluidos de Bootstrap",
|
||||
"titleEs": "Usa diseño adaptativo con los contenedores fluidos de Bootstrap",
|
||||
"descriptionEs": [
|
||||
"Ahora vamos de vuelta a nuestra aplicación de fotos de gatos. Esta vez, vamos a darle estilo utilizando la infraestructura CSS del popular Bootstrap.",
|
||||
"Bootstrap determina qué tan ancha es la pantalla y adapta correspondientemente el tamaño de tus elementos HTML - por eso es que se llama <code>Diseño adaptativo</code> (responsive design).",
|
||||
@@ -165,7 +165,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 0,
|
||||
"nameEs": "Haz que las imágenes sean adaptativas en dispositivos móviles",
|
||||
"titleEs": "Haz que las imágenes sean adaptativas en dispositivos móviles",
|
||||
"descriptionEs": [
|
||||
"Primero, agrega una nueva imagen debajo que la que ya existe. Haz que su atributo <code>src</code> sea <code>http://bit.ly/fcc-running-cats</code>.",
|
||||
"Sería genial si esta imagen fuera exactamente del tamaño de la pantalla de nuestro teléfono.",
|
||||
@@ -245,7 +245,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 0,
|
||||
"nameEs": "Centra el texto con Bootstrap",
|
||||
"titleEs": "Centra el texto con Bootstrap",
|
||||
"descriptionEs": [
|
||||
"Ahora que estamos usando Bootstrap, podemos centrar nuestro elemento de encabezado para hacerlo verse mejor. Todo lo que necesitamos hacer es agregar la clase <code>text-center</code> a nuestro elemento <code>h2</code>.",
|
||||
"Recuerda que puedes agregar varias clases a un mismo elemento separando cada una de ellas con un espacio, de esta forma:",
|
||||
@@ -326,7 +326,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 0,
|
||||
"nameEs": "Crea un botón con Bootstrap",
|
||||
"titleEs": "Crea un botón con Bootstrap",
|
||||
"descriptionEs": [
|
||||
"Bootstrap tiene sus propios estilos para elementos <code>button</code>, los cuales se ven mejor que los estilos simples de HTML.",
|
||||
"Crea un nuevo elemento <code>button</code> debajo de tu foto grande del gatito. Dale la clase <code>btn</code> y el texto \"Like\"."
|
||||
@@ -409,7 +409,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 0,
|
||||
"nameEs": "Crea un elemento botón de bloque con Bootstrap",
|
||||
"titleEs": "Crea un elemento botón de bloque con Bootstrap",
|
||||
"descriptionEs": [
|
||||
"Normalmente, tus elementos <code>button</code> son sólo tan anchos como el texto que contienen. Al convertir un botón en elemento a nivel de bloque, este se estirará para llenar todo el espacio horizontal y cualquier elemento que lo siga se desplazará a una \"nueva línea\" debajo del bloque.",
|
||||
"Esta imagen es un ejemplo de la diferencia entre elementos en línea (<code>inline</code>) y elementos a nivel de bloque (<code>block-level</code>):",
|
||||
@@ -493,7 +493,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 0,
|
||||
"nameEs": "Prueba el arcoíris de colores para botones que te ofrece Bootstrap",
|
||||
"titleEs": "Prueba el arcoíris de colores para botones que te ofrece Bootstrap",
|
||||
"descriptionEs": [
|
||||
"La clase <code>btn-primary</code> es el color principal que utilizarás en tu aplicación. Es útil resaltar las acciones que quieres que tu usuario ejecute.",
|
||||
"Agrega la clase <code>btn-primary</code> de Bootstrap a tu botón.",
|
||||
@@ -576,7 +576,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 0,
|
||||
"nameEs": "Señala acciones opcionales con botones informativos",
|
||||
"titleEs": "Señala acciones opcionales con botones informativos",
|
||||
"descriptionEs": [
|
||||
"Bootstrap incluye varios colores pre-definidos para botones. La clase <code>btn-info</code> se utiliza para llamar la atención a acciones opcionales que el usuario puede tomar.",
|
||||
"Crea un nuevo botón a nivel de bloque de Bootstrap debajo de tu botón de \"Like\" con el texto \"Info\", y agrégale las clases de Bootstrap <code>btn-info</code> y <code>btn-block</code>.",
|
||||
@@ -660,7 +660,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 0,
|
||||
"nameEs": "Advierte a tus usuarios sobre acciones peligrosas",
|
||||
"titleEs": "Advierte a tus usuarios sobre acciones peligrosas",
|
||||
"descriptionEs": [
|
||||
"Bootstrap incluye varios colores pre-definidos para botones. La clase <code>btn-danger</code> es el color de botón que usarías para notificar a los usuarios que el botón ejecuta una acción destructiva, como por ejemplo eliminar la foto de un gato.",
|
||||
"Crea un botón con el texto \"Delete\" y dale la clase <code>btn-danger</code>.",
|
||||
@@ -749,7 +749,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 0,
|
||||
"nameEs": "Usa la cuadrícula de Bootstrap para poner elementos lado a lado",
|
||||
"titleEs": "Usa la cuadrícula de Bootstrap para poner elementos lado a lado",
|
||||
"descriptionEs": [
|
||||
"Bootstrap utiliza un sistema de cuadrícula adaptativa que facilita el poner elementos en fila y especificar la anchura relativa de cada elemento. La mayoría de las clases de Bootstrap pueden ser aplicadas a un elemento <code>div</code>.",
|
||||
"Aquí hay un diagrama del funcionamiento de la cuadrícula de 12 columnas Bootstrap:",
|
||||
@@ -849,7 +849,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 0,
|
||||
"nameEs": "Reemplaza el CSS personalizado por Bootstrap",
|
||||
"titleEs": "Reemplaza el CSS personalizado por Bootstrap",
|
||||
"descriptionEs": [
|
||||
"Podemos limpiar nuestro código y hacer que nuestra aplicación de fotos de gatos se vea más convencional, usando los estilos pre-construidos de Bootstrap, en lugar de los estilos personalizados que creamos antes.",
|
||||
"No te preocupes, luego habrá más tiempo para personalizar nuestro CSS.",
|
||||
@@ -935,7 +935,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 0,
|
||||
"nameEs": "Usa span para elementos en línea",
|
||||
"titleEs": "Usa span para elementos en línea",
|
||||
"descriptionEs": [
|
||||
"Puedes utilizar span para crear elementos en línea. ¿Recuerdas cuando usamos la clase <code>btn-block</code> para hacer que el botón llenara toda la línea?",
|
||||
"Esta imagen ilustra la diferencia entre elementos en línea (<code>inline</code>) y elementos a nivel de bloque (<code>block-level</code>):",
|
||||
@@ -1023,7 +1023,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 0,
|
||||
"nameEs": "Crea un encabezado personalizado",
|
||||
"titleEs": "Crea un encabezado personalizado",
|
||||
"descriptionEs": [
|
||||
"Crearemos un encabezado simple para nuestra aplicación de fotos de gatos poniendo el título y la relajante imagen del gato en la misma línea.",
|
||||
"Recuerda, Bootstrap usa un sistema de cuadrícula adaptativo, el cual facilita poner elementos en filas y especificar el ancho relativo de cada elemento. La mayoría de las clases de Bootstrap pueden aplicarse a un elemento <code>div</code>.",
|
||||
@@ -1114,7 +1114,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 0,
|
||||
"nameEs": "Agrega iconos de Font Awesome a los botones",
|
||||
"titleEs": "Agrega iconos de Font Awesome a los botones",
|
||||
"descriptionEs": [
|
||||
"Font Awesome es una librería de iconos muy conveniente. Estos iconos son imágenes vectoriales, almacenadas en formato <code>.svg</code>, y son tratados como si fueran fuentes. Puedes especificar su tamaño usando pixeles, y tomarán el tamaño de fuente de su elemento HTML padre.",
|
||||
"Puedes añadir Font Awesome a cualquier aplicación sólo incluyendo y agregando el siguiente código al comienzo de tu HTML:",
|
||||
@@ -1198,7 +1198,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 0,
|
||||
"nameEs": "Agrega Font Awesome a todos los botones",
|
||||
"titleEs": "Agrega Font Awesome a todos los botones",
|
||||
"descriptionEs": [
|
||||
"Font Awesome es una librería de iconos muy conveniente. Estos iconos son imágenes vectoriales, almacenadas en formato <code>.svg</code>, y son tratados como si fueran fuentes. Puedes especificar su tamaño usando pixeles, y tomarán el tamaño de fuente de su elemento HTML padre.",
|
||||
"Utiliza Font Awesome para agregar un icono <code>info-circle</code> a tu botón informativo y un icono <code>trash</code> a tu botón de eliminar."
|
||||
@@ -1277,7 +1277,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 0,
|
||||
"nameEs": "Crea botones de opción con estilo adaptativo",
|
||||
"titleEs": "Crea botones de opción con estilo adaptativo",
|
||||
"descriptionEs": [
|
||||
"¡Puedes utilizar las clases <code>col-xs-*</code> de Bootstrap en elementos <code>form</code> también! De esta forma, nuestros botones de opción estarán igualmente distribuidos en la página, sin importar qué tan ancha es la resolución de la pantalla.",
|
||||
"Anida todos los botones de opción dentro de un elemento <code><div class=\"row\"></code>. Luego, anida cada uno de ellos dentro de un elemento <code><div class=\"col-xs-6\"></code>."
|
||||
@@ -1363,7 +1363,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 0,
|
||||
"nameEs": "Crea casillas de selección con estilo adaptativo",
|
||||
"titleEs": "Crea casillas de selección con estilo adaptativo",
|
||||
"descriptionEs": [
|
||||
"¡Puedes utilizar las clases <code>col-xs-*</code> de Bootstrap en elementos <code>form</code> también! De esta forma, nuestros botones de opción estarán igualmente distribuidos en la página, sin importar qué tan ancha es la resolución de la pantalla.",
|
||||
"Anida todas las casillas de selección en un elemento <code><div class=\"row\"></code>. Luego, anida cada una de ellas en un elemento <code><div class=\"col-xs-4\"></code>."
|
||||
@@ -1458,7 +1458,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 0,
|
||||
"nameEs": "Estiliza cajas de texto como controles de formulario",
|
||||
"titleEs": "Estiliza cajas de texto como controles de formulario",
|
||||
"descriptionEs": [
|
||||
"Puedes agregar el icono <code>fa-paper-plane</code> de Font Awesome incluyendo <code><i class=\"fa fa-paper-plane\"></i></code> dentro de tu elemento <code>button</code> de envío.",
|
||||
"Dale a la entrada de texto de tu formulario la clase <code>form-control</code>. Dale al botón de envío de tu formulario las clases <code>btn btn-primary</code>. También, incluye en ese botón el icono <code>fa-paper-plane</code> de Font Awesome."
|
||||
@@ -1554,7 +1554,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 0,
|
||||
"nameEs": "Alínea elementos de formulario de forma adaptativa con Bootstrap",
|
||||
"titleEs": "Alínea elementos de formulario de forma adaptativa con Bootstrap",
|
||||
"descriptionEs": [
|
||||
"Ahora vamos a poner el elemento <code>input</code> y el elemento <code>button</code> que dice submit de tu formulario en la misma línea. Lo haremos de la misma forma que lo hicimos anteriormente: usando un elemento <code>div</code> con la clase <code>row</code>, y otros elementos <code>div</code> dentro de ese, usando la clase <code>col-xs-*</code>.",
|
||||
"Anida ambos, el elemento <code>input</code> y el elemento <code>button</code> que dice submit de tu formulario dentro de un <code>div</code> con la clase <code>row</code>. Anida el elemento <code>input</code> de tu formulario dentro de un div con cla clase <code>col-xs-7</code>. Anida el elemento <code>button</code> que dice submit de tu formulario en un elemento <code>div</code> con la clase <code>col-xs-5</code>.",
|
||||
@@ -1584,7 +1584,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 0,
|
||||
"nameEs": "Crea un encabezado con Bootstrap",
|
||||
"titleEs": "Crea un encabezado con Bootstrap",
|
||||
"descriptionEs": [
|
||||
"Ahora vamos a comenzar un proyecto desde cero para practicar nuestras habilidades con HTML, CSS y Bootstrap.",
|
||||
"Crearemos un área de juego con jQuery, el cual utilizaremos en nuestros desafíos con jQuery.",
|
||||
@@ -1611,7 +1611,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 0,
|
||||
"nameEs": "Aloja la página dentro de un elemento Div contenedor fluido de Bootstrap",
|
||||
"titleEs": "Aloja la página dentro de un elemento Div contenedor fluido de Bootstrap",
|
||||
"descriptionEs": [
|
||||
"Ahora asegurémonos de que todo el contenido en nuestra página pueda adaptarse a dispositivos móviles.",
|
||||
"Anida tu elemento <code>h3</code> dentro de un elemento <code>div</code> con la clase <code>container-fluid</code>."
|
||||
@@ -1639,7 +1639,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 0,
|
||||
"nameEs": "Crea una fila en Bootstrap",
|
||||
"titleEs": "Crea una fila en Bootstrap",
|
||||
"descriptionEs": [
|
||||
"Ahora crearemos una fila de Bootstrap con nuestros elementos en línea.",
|
||||
"Crea un elemento <code>div</code> debajo de la etiqueta <code>h3</code>, con la clase <code>row</code>."
|
||||
@@ -1667,7 +1667,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 0,
|
||||
"nameEs": "Parte tu fila en Bootstrap",
|
||||
"titleEs": "Parte tu fila en Bootstrap",
|
||||
"descriptionEs": [
|
||||
"Ahora que tenemos una fila en Bootstrap, vamos a partirla en dos columnas para alojar nuestros elementos.",
|
||||
"Crea dos elementos <code>div</code> dentro de tu fila, ambos con la clase <code>col-xs-6</code>."
|
||||
@@ -1700,7 +1700,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 0,
|
||||
"nameEs": "Crea pozos en Bootstrap",
|
||||
"titleEs": "Crea pozos en Bootstrap",
|
||||
"descriptionEs": [
|
||||
"Bootstrap tiene una clase llamada <code>well</code> que crea una sensación visual de profundidad para tus columnas.",
|
||||
"Anida un elemento <code>div</code> con la clase <code>well</code> dentro de cada uno de tus elementos <code>div</code> que tienen la clase <code>col-xs-6</code>."
|
||||
@@ -1741,7 +1741,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 0,
|
||||
"nameEs": "Agrega elementos dentro de los pozos de Bootstrap",
|
||||
"titleEs": "Agrega elementos dentro de los pozos de Bootstrap",
|
||||
"descriptionEs": [
|
||||
"Ahora estamos a una profundidad de varios elementos <code>div</code> dentro de cada columna de nuestra fila. No iremos más profundo que esto. Ahora podemos agregar nuestros elementos <code>button</code>.",
|
||||
"Anida tres elementos <code>button</code> dentro de cada uno de tus elementos <code>div</code> que tienen la clase <code>well</code>."
|
||||
@@ -1781,7 +1781,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 0,
|
||||
"nameEs": "Aplica el estilo de botón predeterminado de Bootstrap",
|
||||
"titleEs": "Aplica el estilo de botón predeterminado de Bootstrap",
|
||||
"descriptionEs": [
|
||||
"Bootstrap tiene otra clase de botón llamada <code>btn-default</code>.",
|
||||
"Aplica las clases <code>btn</code> y <code>btn-default</code> a cada uno de tus elementos <code>button</code>."
|
||||
@@ -1820,7 +1820,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 0,
|
||||
"nameEs": "Crea una clase para usar con selectores de jQuery",
|
||||
"titleEs": "Crea una clase para usar con selectores de jQuery",
|
||||
"descriptionEs": [
|
||||
"No todas las clases necesitan tener un código CSS correspondiente. A veces creamos clases sólo con el propósito de seleccionar esos elementos más fácilmente usando jQuery.",
|
||||
"Dale a cada uno de tus elementos <code>button</code> la clase <code>target</code>."
|
||||
@@ -1864,7 +1864,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 0,
|
||||
"nameEs": "Asígnales atributos de identificación (id) a tus elementos de Bootstrap",
|
||||
"titleEs": "Asígnales atributos de identificación (id) a tus elementos de Bootstrap",
|
||||
"descriptionEs": [
|
||||
"Recuerda que, además de los atributos de clase, también puedes darle a cada uno de tus elementos un atributo <code>id</code>.",
|
||||
"Cada id debe ser único para un elemento específico y ser usado solamente una vez por página.",
|
||||
@@ -1913,7 +1913,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 0,
|
||||
"nameEs": "Etiqueta tus pozos de Bootstrap",
|
||||
"titleEs": "Etiqueta tus pozos de Bootstrap",
|
||||
"descriptionEs": [
|
||||
"Para que todo esté más claro, vamos a ponerle a todos nuestros pozos una etiqueta que sea igual a su id.",
|
||||
"Sobre tu pozo de la izquierda, dentro de su elemento <code>div</code> que tiene la clase <code>col-xs-6</code>, agrega un elemento <code>h4</code> con el texto <code>#left-well</code>.",
|
||||
@@ -1961,7 +1961,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 0,
|
||||
"nameEs": "Dale a cada elemento un ID único",
|
||||
"titleEs": "Dale a cada elemento un ID único",
|
||||
"descriptionEs": [
|
||||
"También quisiéramos referirnos a cada botón por su id utilizando jQuery.",
|
||||
"Dale a cada uno de tus botones un id único, comenzando con <code>target1</code> y terminando con <code>target6</code>.",
|
||||
@@ -2008,7 +2008,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 0,
|
||||
"nameEs": "Etiqueta los botones con Bootstrap",
|
||||
"titleEs": "Etiqueta los botones con Bootstrap",
|
||||
"descriptionEs": [
|
||||
"De la misma forma en que etiquetamos nuestros pozos, ahora vamos a etiquetar nuestros botones.",
|
||||
"Dale a cada uno de tus elementos <code>button</code> un texto que corresponda con su <code>id</code>."
|
||||
@@ -2054,7 +2054,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 0,
|
||||
"nameEs": "Usa elementos para explicar tu código",
|
||||
"titleEs": "Usa elementos para explicar tu código",
|
||||
"descriptionEs": [
|
||||
"Cuando comencemos a usar jQuery, modificarmemos los elementos HTML sin necesidad de hacer cambios reales en el código HTML.",
|
||||
"Vamos a asegurar que cualquier persona sepa que no debe modificar nada en este código directamente.",
|
||||
|
@@ -240,7 +240,6 @@
|
||||
],
|
||||
"type": "Waypoint",
|
||||
"challengeType": 7,
|
||||
"nameEs": "Reclama tu certificado de Desarrollo de interfaces",
|
||||
"descriptionEs": [
|
||||
[
|
||||
"http://i.imgur.com/k8btNUB.jpg",
|
||||
@@ -266,7 +265,8 @@
|
||||
"¡Felicitaciones! Hemos agregado tu certificado de Desarrollo de interfaces a tu portafolio. A menos que elijas no mostrar tus soluciones, este certificado será públicamente visible y verificable.",
|
||||
""
|
||||
]
|
||||
]
|
||||
],
|
||||
"titleEs": "Reclama tu certificado de Desarrollo de interfaces"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
@@ -18,7 +18,7 @@
|
||||
"tests": [],
|
||||
"type": "Waypoint",
|
||||
"challengeType": 7,
|
||||
"nameEs": "Únete a nuestra red de alumnos en LinkedIn",
|
||||
"titleEs": "Únete a nuestra red de alumnos en LinkedIn",
|
||||
"descriptionEs": [
|
||||
[
|
||||
"http://i.imgur.com/vJyiXzU.gif",
|
||||
@@ -39,12 +39,12 @@
|
||||
"https://reddit.com/r/freecodecamp"
|
||||
]
|
||||
],
|
||||
"releasedOn": "February 10, 2016",
|
||||
"challengeSeed": [],
|
||||
"tests": [],
|
||||
"releasedOn": "February 10, 2016",
|
||||
"type": "Waypoint",
|
||||
"challengeType": 7,
|
||||
"nameEs": "Unete a nuestro Subreddit",
|
||||
"titleEs": "Unete a nuestro Subreddit",
|
||||
"descriptionEs": [
|
||||
[
|
||||
"http://i.imgur.com/DYjJuCG.gif",
|
||||
@@ -71,12 +71,12 @@
|
||||
"https://medium.freecodecamp.com"
|
||||
]
|
||||
],
|
||||
"releasedOn": "February 10, 2016",
|
||||
"challengeSeed": [],
|
||||
"tests": [],
|
||||
"type": "Waypoint",
|
||||
"challengeType": 7,
|
||||
"releasedOn": "February 10, 2016",
|
||||
"nameEs": "Lee noticias de codificación en nuestros canal de publicaciones Medium",
|
||||
"titleEs": "Lee noticias de codificación en nuestros canal de publicaciones Medium",
|
||||
"descriptionEs": [
|
||||
[
|
||||
"http://i.imgur.com/FxSOL4a.gif",
|
||||
@@ -103,12 +103,12 @@
|
||||
"https://twitch.tv/freecodecamp"
|
||||
]
|
||||
],
|
||||
"releasedOn": "February 10, 2016",
|
||||
"challengeSeed": [],
|
||||
"tests": [],
|
||||
"type": "Waypoint",
|
||||
"challengeType": 7,
|
||||
"releasedOn": "February 10, 2016",
|
||||
"nameEs": "Miranos programar en vivo por Twitch.tv",
|
||||
"titleEs": "Miranos programar en vivo por Twitch.tv",
|
||||
"descriptionEs": [
|
||||
[
|
||||
"http://i.imgur.com/8rtyRY1.gif",
|
||||
@@ -133,7 +133,7 @@
|
||||
"tests": [],
|
||||
"type": "Waypoint",
|
||||
"challengeType": 7,
|
||||
"nameEs": "Comprométete con una meta y con una organización sin fines de lucro",
|
||||
"titleEs": "Comprométete con una meta y con una organización sin fines de lucro",
|
||||
"descriptionEs": [
|
||||
[
|
||||
"http://i.imgur.com/Og1ifsn.gif",
|
||||
@@ -144,4 +144,4 @@
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -19,6 +19,9 @@
|
||||
"",
|
||||
"sumAll([1, 4]);"
|
||||
],
|
||||
"solutions": [
|
||||
"function sumAll(arr) {\n var sum = 0;\n arr.sort(function(a,b) {return a-b;});\n for (var i = arr[0]; i <= arr[1]; i++) {\n sum += i; \n }\n return sum;\n}"
|
||||
],
|
||||
"tests": [
|
||||
"assert(typeof sumAll([1, 4]) === 'number', 'message: <code>sumAll([1, 4])</code> should return a number.');",
|
||||
"assert.deepEqual(sumAll([1, 4]), 10, 'message: <code>sumAll([1, 4])</code> should return 10.');",
|
||||
@@ -32,16 +35,13 @@
|
||||
"Math.min()",
|
||||
"Array.reduce()"
|
||||
],
|
||||
"isRequired": true,
|
||||
"challengeType": 5,
|
||||
"nameEs": "Suma todos los números en un rango",
|
||||
"titleEs": "Suma todos los números en un rango",
|
||||
"descriptionEs": [
|
||||
"Te pasaremos un vector que contiene dos números. Crea una función que devuelva la suma de esos dos números y todos los números entre ellos.",
|
||||
"El número menor no siempre será el primer elemento en el vector.",
|
||||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código."
|
||||
],
|
||||
"isRequired": true,
|
||||
"solutions": [
|
||||
"function sumAll(arr) {\n var sum = 0;\n arr.sort(function(a,b) {return a-b;});\n for (var i = arr[0]; i <= arr[1]; i++) {\n sum += i; \n }\n return sum;\n}"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -60,6 +60,9 @@
|
||||
"",
|
||||
"diff([1, 2, 3, 5], [1, 2, 3, 4, 5]);"
|
||||
],
|
||||
"solutions": [
|
||||
"function diff(arr1, arr2) {\n var newArr = [];\n var h1 = Object.create(null);\n arr1.forEach(function(e) {\n h1[e] = e;\n });\n \n var h2 = Object.create(null);\n arr2.forEach(function(e) {\n h2[e] = e;\n });\n \n Object.keys(h1).forEach(function(e) {\n if (!(e in h2)) newArr.push(h1[e]);\n });\n Object.keys(h2).forEach(function(e) {\n if (!(e in h1)) newArr.push(h2[e]);\n });\n // Same, same; but different.\n return newArr;\n}"
|
||||
],
|
||||
"tests": [
|
||||
"assert(typeof diff([1, 2, 3, 5], [1, 2, 3, 4, 5]) === \"object\", 'message: <code>diff([1, 2, 3, 5], [1, 2, 3, 4, 5])</code> should return an array.');",
|
||||
"assert.sameMembers(diff([\"diorite\", \"andesite\", \"grass\", \"dirt\", \"pink wool\", \"dead shrub\"], [\"diorite\", \"andesite\", \"grass\", \"dirt\", \"dead shrub\"]), [\"pink wool\"], 'message: <code>[\"diorite\", \"andesite\", \"grass\", \"dirt\", \"pink wool\", \"dead shrub\"], [\"diorite\", \"andesite\", \"grass\", \"dirt\", \"dead shrub\"]</code> should return <code>[\"pink wool\"]</code>.');",
|
||||
@@ -78,15 +81,12 @@
|
||||
"Array.indexOf()",
|
||||
"Array.concat()"
|
||||
],
|
||||
"isRequired": true,
|
||||
"challengeType": 5,
|
||||
"nameEs": "Obtén la diferencia entre dos vectores",
|
||||
"titleEs": "Obtén la diferencia entre dos vectores",
|
||||
"descriptionEs": [
|
||||
"Crea una función que compare dos vectores y que devuelva un nuevo vector que contenga los elementos que sólo se encuentre en uno de los vectores dados, pero no en ambos En otras palabras, devuelve la diferencia simétrica entre los dos vectores.",
|
||||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código."
|
||||
],
|
||||
"isRequired": true,
|
||||
"solutions": [
|
||||
"function diff(arr1, arr2) {\n var newArr = [];\n var h1 = Object.create(null);\n arr1.forEach(function(e) {\n h1[e] = e;\n });\n \n var h2 = Object.create(null);\n arr2.forEach(function(e) {\n h2[e] = e;\n });\n \n Object.keys(h1).forEach(function(e) {\n if (!(e in h2)) newArr.push(h1[e]);\n });\n Object.keys(h2).forEach(function(e) {\n if (!(e in h1)) newArr.push(h2[e]);\n });\n // Same, same; but different.\n return newArr;\n}"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -104,6 +104,9 @@
|
||||
"",
|
||||
"convert(36);"
|
||||
],
|
||||
"solutions": [
|
||||
"function convert(num) {\n var ref = [['M', 1000], ['CM', 900], ['D', 500], ['CD', 400], ['C', 100], ['XC', 90], ['L', 50], ['XL', 40], ['X', 10], ['IX', 9], ['V', 5], ['IV', 4], ['I', 1]];\n var res = [];\n ref.forEach(function(p) {\n while (num >= p[1]) {\n res.push(p[0]);\n num -= p[1];\n }\n });\n return res.join('');\n}"
|
||||
],
|
||||
"tests": [
|
||||
"assert.deepEqual(convert(2), \"II\", 'message: <code>convert(2)</code> should return \"II\".');",
|
||||
"assert.deepEqual(convert(3), \"III\", 'message: <code>convert(3)</code> should return \"III\".');",
|
||||
@@ -138,16 +141,13 @@
|
||||
"Array.indexOf()",
|
||||
"Array.join()"
|
||||
],
|
||||
"isRequired": true,
|
||||
"challengeType": 5,
|
||||
"nameEs": "Convertior de números romanos",
|
||||
"titleEs": "Convertior de números romanos",
|
||||
"descriptionEs": [
|
||||
"Convierte el número dado en numeral romano.",
|
||||
"Todos los <a href=\"http://www.mathsisfun.com/roman-numerals.html\" target=\"_blank\">numerales romanos</a> en las respuestas deben estar en mayúsculas.",
|
||||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código."
|
||||
],
|
||||
"isRequired": true,
|
||||
"solutions": [
|
||||
"function convert(num) {\n var ref = [['M', 1000], ['CM', 900], ['D', 500], ['CD', 400], ['C', 100], ['XC', 90], ['L', 50], ['XL', 40], ['X', 10], ['IX', 9], ['V', 5], ['IV', 4], ['I', 1]];\n var res = [];\n ref.forEach(function(p) {\n while (num >= p[1]) {\n res.push(p[0]);\n num -= p[1];\n }\n });\n return res.join('');\n}"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -167,6 +167,9 @@
|
||||
"",
|
||||
"where([{ first: \"Romeo\", last: \"Montague\" }, { first: \"Mercutio\", last: null }, { first: \"Tybalt\", last: \"Capulet\" }], { last: \"Capulet\" });"
|
||||
],
|
||||
"solutions": [
|
||||
"function where(collection, source) {\n var arr = [];\n var keys = Object.keys(source);\n collection.forEach(function(e) {\n if(keys.every(function(key) {return e[key] === source[key];})) {\n arr.push(e); \n }\n });\n return arr;\n}"
|
||||
],
|
||||
"tests": [
|
||||
"assert.deepEqual(where([{ first: \"Romeo\", last: \"Montague\" }, { first: \"Mercutio\", last: null }, { first: \"Tybalt\", last: \"Capulet\" }], { last: \"Capulet\" }), [{ first: \"Tybalt\", last: \"Capulet\" }], 'message: <code>where([{ first: \"Romeo\", last: \"Montague\" }, { first: \"Mercutio\", last: null }, { first: \"Tybalt\", last: \"Capulet\" }], { last: \"Capulet\" })</code> should return <code>[{ first: \"Tybalt\", last: \"Capulet\" }]</code>.');",
|
||||
"assert.deepEqual(where([{ \"a\": 1 }, { \"a\": 1 }, { \"a\": 1, \"b\": 2 }], { \"a\": 1 }), [{ \"a\": 1 }, { \"a\": 1 }, { \"a\": 1, \"b\": 2 }], 'message: <code>where([{ \"a\": 1 }, { \"a\": 1 }, { \"a\": 1, \"b\": 2 }], { \"a\": 1 })</code> should return <code>[{ \"a\": 1 }, { \"a\": 1 }, { \"a\": 1, \"b\": 2 }]</code>.');",
|
||||
@@ -179,16 +182,13 @@
|
||||
"Object.hasOwnProperty()",
|
||||
"Object.keys()"
|
||||
],
|
||||
"isRequired": true,
|
||||
"challengeType": 5,
|
||||
"nameEs": "¿Dónde estás que no te veo?",
|
||||
"titleEs": "¿Dónde estás que no te veo?",
|
||||
"descriptionEs": [
|
||||
"Crea una función que busque en un vector de objetos (primer argumento) y devuelva un vector con todos los objetos que compartan el valor indicado para una propiedad dada (segundo argumento). Cada pareja de propiedad y valor debe estar presente en el objeto de la colección para ser incluido en el vector devuelto por la función",
|
||||
"Por ejemplo, si el primer argumento es <code>[{ first: \"Romeo\", last: \"Montague\" }, { first: \"Mercutio\", last: null }, { first: \"Tybalt\", last: \"Capulet\" }]</code>, y el segundo argumento es <code>{ last: \"Capulet\" }</code>, entonces tu función debe devolver el tercer objeto del vector en el primer argumento, ya que contiene la propiedad y el valor indicados en el segundo argumento.",
|
||||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código."
|
||||
],
|
||||
"isRequired": true,
|
||||
"solutions": [
|
||||
"function where(collection, source) {\n var arr = [];\n var keys = Object.keys(source);\n collection.forEach(function(e) {\n if(keys.every(function(key) {return e[key] === source[key];})) {\n arr.push(e); \n }\n });\n return arr;\n}"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -209,6 +209,9 @@
|
||||
"",
|
||||
"myReplace(\"A quick brown fox jumped over the lazy dog\", \"jumped\", \"leaped\");"
|
||||
],
|
||||
"solutions": [
|
||||
"function myReplace(str, before, after) {\n if (before.charAt(0) === before.charAt(0).toUpperCase()) {\n after = after.charAt(0).toUpperCase() + after.substring(1);\n } else {\n after = after.charAt(0).toLowerCase() + after.substring(1);\n }\n return str.replace(before, after);\n}"
|
||||
],
|
||||
"tests": [
|
||||
"assert.deepEqual(myReplace(\"Let us go to the store\", \"store\", \"mall\"), \"Let us go to the mall\", 'message: <code>myReplace(\"Let us go to the store\", \"store\", \"mall\")</code> should return \"Let us go to the mall\".');",
|
||||
"assert.deepEqual(myReplace(\"He is Sleeping on the couch\", \"Sleeping\", \"sitting\"), \"He is Sitting on the couch\", 'message: <code>myReplace(\"He is Sleeping on the couch\", \"Sleeping\", \"sitting\")</code> should return \"He is Sitting on the couch\".');",
|
||||
@@ -222,8 +225,9 @@
|
||||
"String.replace()",
|
||||
"Array.join()"
|
||||
],
|
||||
"isRequired": true,
|
||||
"challengeType": 5,
|
||||
"nameEs": "Buscar y reemplazar",
|
||||
"titleEs": "Buscar y reemplazar",
|
||||
"descriptionEs": [
|
||||
"Crea una función que busque un fragmento en una frase dada y lo reemplace por otro fragmento, devolviendo la nueva frase.",
|
||||
"El primer argumento es la frase en la que se ejecutará la búsqueda y el reemplazo",
|
||||
@@ -231,10 +235,6 @@
|
||||
"El tercer argumento es lo que reemplazará a la palabra indicada en el segundo argumento",
|
||||
"NOTA: Debes respetar mayúsculas y minúsculas de la palabra original cuando ejecutes el reemplazo. Por ejemplo, si quisieras reemplazar la palabra \"Libro\" con la palabra \"perro\", deberías insertar en vez la palabra \"Perro\"",
|
||||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código."
|
||||
],
|
||||
"isRequired": true,
|
||||
"solutions": [
|
||||
"function myReplace(str, before, after) {\n if (before.charAt(0) === before.charAt(0).toUpperCase()) {\n after = after.charAt(0).toUpperCase() + after.substring(1);\n } else {\n after = after.charAt(0).toLowerCase() + after.substring(1);\n }\n return str.replace(before, after);\n}"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -253,6 +253,9 @@
|
||||
"",
|
||||
"translate(\"consonant\");"
|
||||
],
|
||||
"solutions": [
|
||||
"function translate(str) {\n if (isVowel(str.charAt(0))) return str + \"way\";\n var front = [];\n str = str.split('');\n while (str.length && !isVowel(str[0])) {\n front.push(str.shift());\n }\n return [].concat(str, front).join('') + 'ay';\n}\n\nfunction isVowel(c) {\n return ['a', 'e', 'i', 'o', 'u'].indexOf(c.toLowerCase()) !== -1;\n}"
|
||||
],
|
||||
"tests": [
|
||||
"assert.deepEqual(translate(\"california\"), \"aliforniacay\", 'message: <code>translate(\"california\")</code> should return \"aliforniacay\".');",
|
||||
"assert.deepEqual(translate(\"paragraphs\"), \"aragraphspay\", 'message: <code>translate(\"paragraphs\")</code> should return \"aragraphspay\".');",
|
||||
@@ -268,17 +271,14 @@
|
||||
"String.substr()",
|
||||
"String.split()"
|
||||
],
|
||||
"isRequired": true,
|
||||
"challengeType": 5,
|
||||
"nameEs": "Latín de los cerdos",
|
||||
"titleEs": "Latín de los cerdos",
|
||||
"descriptionEs": [
|
||||
"Traduce la cadena de texto que se te provee al Latín de los cerdos (Pig Latin)",
|
||||
"<a href=\"http://en.wikipedia.org/wiki/Pig_Latin\" target=\"_blank\">Pig Latin</a> toma la primera consonante (o grupo de consonantes) de una palabra en inglés, la mueve al final de la palabra y agrega un \"ay\".",
|
||||
"Si la palabra comienza con una vocal, simplemente añade \"way\" al final.",
|
||||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código."
|
||||
],
|
||||
"isRequired": true,
|
||||
"solutions": [
|
||||
"function translate(str) {\n if (isVowel(str.charAt(0))) return str + \"way\";\n var front = [];\n str = str.split('');\n while (str.length && !isVowel(str[0])) {\n front.push(str.shift());\n }\n return [].concat(str, front).join('') + 'ay';\n}\n\nfunction isVowel(c) {\n return ['a', 'e', 'i', 'o', 'u'].indexOf(c.toLowerCase()) !== -1;\n}"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -299,6 +299,9 @@
|
||||
"",
|
||||
"pair(\"GCG\");"
|
||||
],
|
||||
"solutions": [
|
||||
"var lookup = Object.create(null);\nlookup.A = 'T';\nlookup.T = 'A';\nlookup.C = 'G';\nlookup.G = 'C';\n\nfunction pair(str) {\n return str.split('').map(function(p) {return [p, lookup[p]];});\n}"
|
||||
],
|
||||
"tests": [
|
||||
"assert.deepEqual(pair(\"ATCGA\"),[[\"A\",\"T\"],[\"T\",\"A\"],[\"C\",\"G\"],[\"G\",\"C\"],[\"A\",\"T\"]], 'message: <code>pair(\"ATCGA\")</code> should return <code>[[\"A\",\"T\"],[\"T\",\"A\"],[\"C\",\"G\"],[\"G\",\"C\"],[\"A\",\"T\"]]</code>.');",
|
||||
"assert.deepEqual(pair(\"TTGAG\"),[[\"T\",\"A\"],[\"T\",\"A\"],[\"G\",\"C\"],[\"A\",\"T\"],[\"G\",\"C\"]], 'message: <code>pair(\"TTGAG\")</code> should return <code>[[\"T\",\"A\"],[\"T\",\"A\"],[\"G\",\"C\"],[\"A\",\"T\"],[\"G\",\"C\"]]</code>.');",
|
||||
@@ -309,8 +312,9 @@
|
||||
"Array.push()",
|
||||
"String.split()"
|
||||
],
|
||||
"isRequired": true,
|
||||
"challengeType": 5,
|
||||
"nameEs": "Emparejando bases de ADN",
|
||||
"titleEs": "Emparejando bases de ADN",
|
||||
"descriptionEs": [
|
||||
"A la cadena de ADN que se te pasa le hace falta una hebra. Toma cada una de las letras, obtén su pareja correspondiente y devuelve los resultados en un segundo vector",
|
||||
"<a href=\"http://es.wikipedia.org/wiki/Apareamiento_de_bases\" target=\"_blank\">Parejas de bases</a> son pares de AT y CG. Encuentra el elemento que hace falta para cada una de las letras que se te presentan.",
|
||||
@@ -318,10 +322,6 @@
|
||||
"Por ejemplo, si te pasáramos la cadena GCG, tu función debería devolver el vector: [[\"G\", \"C\"], [\"C\",\"G\"],[\"G\", \"C\"]]",
|
||||
"Cada letra que se te provee y su pareja deben estar contenidos en un vector, y cada uno de estos vectores debe estar contenidos en un vector.",
|
||||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código."
|
||||
],
|
||||
"isRequired": true,
|
||||
"solutions": [
|
||||
"var lookup = Object.create(null);\nlookup.A = 'T';\nlookup.T = 'A';\nlookup.C = 'G';\nlookup.G = 'C';\n\nfunction pair(str) {\n return str.split('').map(function(p) {return [p, lookup[p]];});\n}"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -339,6 +339,9 @@
|
||||
"",
|
||||
"fearNotLetter(\"abce\");"
|
||||
],
|
||||
"solutions": [
|
||||
"function fearNotLetter(str) {\n var s = str.split('').map(function(c) {return c.charCodeAt(0);});\n for (var i = 1; i < s.length; i++) {\n if (s[i]-1 != s[i-1]) {\n return String.fromCharCode(s[i]-1);\n }\n }\n}"
|
||||
],
|
||||
"tests": [
|
||||
"assert.deepEqual(fearNotLetter(\"abce\"), \"d\", 'message: <code>fearNotLetter(\"abce\")</code> should return \"d\".');",
|
||||
"assert.deepEqual(fearNotLetter(\"abcdefghjklmno\"), \"i\", 'message: <code>fearNotLetter(\"abcdefghjklmno\")</code> should return \"i\".');",
|
||||
@@ -350,16 +353,13 @@
|
||||
"String.charCodeAt()",
|
||||
"String.fromCharCode()"
|
||||
],
|
||||
"isRequired": true,
|
||||
"challengeType": 5,
|
||||
"nameEs": "Letras perdidas",
|
||||
"titleEs": "Letras perdidas",
|
||||
"descriptionEs": [
|
||||
"Crea una función que devuelva la letra que falta en el rango de letras que se le pasa",
|
||||
"Si todas las letras en el rango están presentes, la función debe devolver undefined.",
|
||||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código."
|
||||
],
|
||||
"isRequired": true,
|
||||
"solutions": [
|
||||
"function fearNotLetter(str) {\n var s = str.split('').map(function(c) {return c.charCodeAt(0);});\n for (var i = 1; i < s.length; i++) {\n if (s[i]-1 != s[i-1]) {\n return String.fromCharCode(s[i]-1);\n }\n }\n}"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -378,6 +378,9 @@
|
||||
"",
|
||||
"boo(null);"
|
||||
],
|
||||
"solutions": [
|
||||
"function boo(bool) {\n // What is the new fad diet for ghost developers? The Boolean.\n return typeof bool === \"boolean\";\n}\n\nboo(null);"
|
||||
],
|
||||
"tests": [
|
||||
"assert.strictEqual(boo(true), true, 'message: <code>boo(true)</code> should return true.');",
|
||||
"assert.strictEqual(boo(false), true, 'message: <code>boo(false)</code> should return true.');",
|
||||
@@ -394,16 +397,13 @@
|
||||
"MDNlinks": [
|
||||
"Boolean Objects"
|
||||
],
|
||||
"isRequired": true,
|
||||
"challengeType": 5,
|
||||
"nameEs": "¡Bu!",
|
||||
"titleEs": "¡Bu!",
|
||||
"descriptionEs": [
|
||||
"Crea una función que verifique si el valor que se le pasa es de tipo booleano. Haz que la función devuelva true o false según corresponda.",
|
||||
"Los primitivos booleanos primitivos son: true y false",
|
||||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código."
|
||||
],
|
||||
"isRequired": true,
|
||||
"solutions": [
|
||||
"function boo(bool) {\n // What is the new fad diet for ghost developers? The Boolean.\n return typeof bool === \"boolean\";\n}\n\nboo(null);"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -423,6 +423,9 @@
|
||||
"",
|
||||
"unite([1, 3, 2], [5, 2, 1, 4], [2, 1]);"
|
||||
],
|
||||
"solutions": [
|
||||
"function unite(arr1, arr2, arr3) {\n return [].slice.call(arguments).reduce(function(a, b) {\n return [].concat(a, b.filter(function(e) {return a.indexOf(e) === -1;}));\n }, []);\n}"
|
||||
],
|
||||
"tests": [
|
||||
"assert.deepEqual(unite([1, 3, 2], [5, 2, 1, 4], [2, 1]), [1, 3, 2, 5, 4], 'message: <code>unite([1, 3, 2], [5, 2, 1, 4], [2, 1])</code> should return <code>[1, 3, 2, 5, 4]</code>.');",
|
||||
"assert.deepEqual(unite([1, 3, 2], [1, [5]], [2, [4]]), [1, 3, 2, [5], [4]], 'message: <code>unite([1, 3, 2], [1, [5]], [2, [4]])</code> should return <code>[1, 3, 2, [5], [4]]</code>.');",
|
||||
@@ -434,18 +437,15 @@
|
||||
"Arguments object",
|
||||
"Array.reduce()"
|
||||
],
|
||||
"isRequired": true,
|
||||
"challengeType": 5,
|
||||
"nameEs": "Intersección ordenada",
|
||||
"titleEs": "Intersección ordenada",
|
||||
"descriptionEs": [
|
||||
"Escribe una función que tome dos o más vectores y que devuelva un nuevo vector con los valores únicos en el orden de aparición de los vectores que se te pasaron",
|
||||
"En otra palabras, todos los valores presentes en todos los vectores deben aparecer en el vector final en su orden original, pero sin duplicados.",
|
||||
"Los valores únicos deben aparecer en el orden original, pero el vector final no necesariamente debe mostrar los elementos en orden numérico.",
|
||||
"Puedes usar de referencia las pruebas de verificación si necesitas ejemplos.",
|
||||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código."
|
||||
],
|
||||
"isRequired": true,
|
||||
"solutions": [
|
||||
"function unite(arr1, arr2, arr3) {\n return [].slice.call(arguments).reduce(function(a, b) {\n return [].concat(a, b.filter(function(e) {return a.indexOf(e) === -1;}));\n }, []);\n}"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -463,6 +463,9 @@
|
||||
"",
|
||||
"convert(\"Dolce & Gabbana\");"
|
||||
],
|
||||
"solutions": [
|
||||
"var MAP = { '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''};\n\nfunction convert(str) {\n return str.replace(/[&<>\"']/g, function(c) {\n return MAP[c];\n });\n}"
|
||||
],
|
||||
"tests": [
|
||||
"assert.match(convert(\"Dolce & Gabbana\"), /Dolce & Gabbana/, 'message: <code>convert(\"Dolce & Gabbana\")</code> should return <code>Dolce &​amp; Gabbana</code>.');",
|
||||
"assert.match(convert(\"Hamburgers < Pizza < Tacos\"), /Hamburgers < Pizza < Tacos/, 'message: <code>convert(\"Hamburgers < Pizza < Tacos\")</code> should return <code>Hamburgers &​lt; Pizza &​lt; Tacos</code>.');",
|
||||
@@ -477,15 +480,12 @@
|
||||
"RegExp",
|
||||
"HTML Entities"
|
||||
],
|
||||
"isRequired": true,
|
||||
"challengeType": 5,
|
||||
"nameEs": "Convierte entidades HTML",
|
||||
"titleEs": "Convierte entidades HTML",
|
||||
"descriptionEs": [
|
||||
"Convierte los caracteres <code>&</code>, <code><<code>, <code>><code>, <code>\"<code>' (comilla), y <code>'<code> (apóstrofe), contenidos en la cadena de texto que se te pasa, en sus entidades HTML correspondientes",
|
||||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código."
|
||||
],
|
||||
"isRequired": true,
|
||||
"solutions": [
|
||||
"var MAP = { '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''};\n\nfunction convert(str) {\n return str.replace(/[&<>\"']/g, function(c) {\n return MAP[c];\n });\n}"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -504,6 +504,9 @@
|
||||
"",
|
||||
"spinalCase('This Is Spinal Tap');"
|
||||
],
|
||||
"solutions": [
|
||||
"function spinalCase(str) {\n // \"It's such a fine line between stupid, and clever.\"\n // --David St. Hubbins\n str = str.replace(/([a-z](?=[A-Z]))/g, '$1 ');\n return str.toLowerCase().replace(/\\ |\\_/g, '-');\n}"
|
||||
],
|
||||
"tests": [
|
||||
"assert.deepEqual(spinalCase(\"This Is Spinal Tap\"), \"this-is-spinal-tap\", 'message: <code>spinalCase(\"This Is Spinal Tap\")</code> should return <code>\"this-is-spinal-tap\"</code>.');",
|
||||
"assert.strictEqual(spinalCase('thisIsSpinalTap'), \"this-is-spinal-tap\", 'message: <code>spinalCase(\"thisIsSpinalTap\")</code> should return <code>\"this-is-spinal-tap\"</code>.');",
|
||||
@@ -515,15 +518,12 @@
|
||||
"RegExp",
|
||||
"String.replace()"
|
||||
],
|
||||
"isRequired": true,
|
||||
"challengeType": 5,
|
||||
"nameEs": "separado-por-guiones",
|
||||
"titleEs": "separado-por-guiones",
|
||||
"descriptionEs": [
|
||||
"Convierte la cadena de texto que se te pasa al formato spinal case. Spinal case es cuando escribes todas las palabras en-minúsculas-unidas-por-guiones.",
|
||||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código."
|
||||
],
|
||||
"isRequired": true,
|
||||
"solutions": [
|
||||
"function spinalCase(str) {\n // \"It's such a fine line between stupid, and clever.\"\n // --David St. Hubbins\n str = str.replace(/([a-z](?=[A-Z]))/g, '$1 ');\n return str.toLowerCase().replace(/\\ |\\_/g, '-');\n}"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -542,6 +542,9 @@
|
||||
"",
|
||||
"sumFibs(4);"
|
||||
],
|
||||
"solutions": [
|
||||
"function sumFibs(num) {\n var a = 1; \n var b = 1;\n var s = 0;\n while (a <= num) {\n if (a % 2 !== 0) { \n s += a; \n }\n a = [b, b=b+a][0];\n }\n return s;\n}"
|
||||
],
|
||||
"tests": [
|
||||
"assert(typeof sumFibs(1) === \"number\", 'message: <code>sumFibs(1)</code> should return a number.');",
|
||||
"assert.deepEqual(sumFibs(1000), 1785, 'message: <code>sumFibs(1000)</code> should return 1785.');",
|
||||
@@ -554,17 +557,14 @@
|
||||
"MDNlinks": [
|
||||
"Remainder"
|
||||
],
|
||||
"isRequired": true,
|
||||
"challengeType": 5,
|
||||
"nameEs": "Suma todos los números de Fibonacci que son impares",
|
||||
"titleEs": "Suma todos los números de Fibonacci que son impares",
|
||||
"descriptionEs": [
|
||||
"Crea una función que devuelva la suma de todos los números impares en la secuencia de Fibonacci hasta el número que se le pasa como argumento, incluyéndolo en caso de ser un número de la secuencia.",
|
||||
"Los primeros números de la secuencia son 1, 1, 2, 3, 5 y 8, y cada número siguiente es la suma de los dos números anteriores.",
|
||||
"Por ejemplo, si se te pasa el número 4, la función deberá devolver 5, ya que los números impares menores que 4 son 1, 1 y 3.",
|
||||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código."
|
||||
],
|
||||
"isRequired": true,
|
||||
"solutions": [
|
||||
"function sumFibs(num) {\n var a = 1; \n var b = 1;\n var s = 0;\n while (a <= num) {\n if (a % 2 !== 0) { \n s += a; \n }\n a = [b, b=b+a][0];\n }\n return s;\n}"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -583,6 +583,9 @@
|
||||
"",
|
||||
"sumPrimes(10);"
|
||||
],
|
||||
"solutions": [
|
||||
"function eratosthenesArray(n) {\n var primes = [];\n if (n > 2) {\n var half = n>>1;\n var sieve = Array(half);\n for (var i = 1, limit = Math.sqrt(n)>>1; i <= limit; i++) {\n if (!sieve[i]) {\n for (var step = 2*i+1, j = (step*step)>>1; j < half; j+=step) {\n sieve[j] = true;\n }\n }\n }\n primes.push(2);\n for (var p = 1; p < half; p++) {\n if (!sieve[p]) primes.push(2*p+1);\n }\n }\n return primes;\n}\n\nfunction sumPrimes(num) {\n return eratosthenesArray(num+1).reduce(function(a,b) {return a+b;}, 0);\n}\n\nsumPrimes(10);"
|
||||
],
|
||||
"tests": [
|
||||
"assert.deepEqual(typeof sumPrimes(10), 'number', 'message: <code>sumPrimes(10)</code> should return a number.');",
|
||||
"assert.deepEqual(sumPrimes(10), 17, 'message: <code>sumPrimes(10)</code> should return 17.');",
|
||||
@@ -593,17 +596,14 @@
|
||||
"For Loops",
|
||||
"Array.push()"
|
||||
],
|
||||
"isRequired": true,
|
||||
"challengeType": 5,
|
||||
"nameEs": "Suma todos los números primos",
|
||||
"titleEs": "Suma todos los números primos",
|
||||
"descriptionEs": [
|
||||
"Suma todos los números primos hasta, e incluyendo, el número que se te pasa",
|
||||
"Números primos son todos aquellos que sólo son divisibles entre 1 y entre sí mismos. Por ejemplo, el número 2 es primo porque solo es divisible por 1 y por 2. Por el contrario, el número 1 no es primo, ya que sólo puede dividirse por sí mismo",
|
||||
"El número que se le provee a la función no puede ser primo",
|
||||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código."
|
||||
],
|
||||
"isRequired": true,
|
||||
"solutions": [
|
||||
"function eratosthenesArray(n) {\n var primes = [];\n if (n > 2) {\n var half = n>>1;\n var sieve = Array(half);\n for (var i = 1, limit = Math.sqrt(n)>>1; i <= limit; i++) {\n if (!sieve[i]) {\n for (var step = 2*i+1, j = (step*step)>>1; j < half; j+=step) {\n sieve[j] = true;\n }\n }\n }\n primes.push(2);\n for (var p = 1; p < half; p++) {\n if (!sieve[p]) primes.push(2*p+1);\n }\n }\n return primes;\n}\n\nfunction sumPrimes(num) {\n return eratosthenesArray(num+1).reduce(function(a,b) {return a+b;}, 0);\n}\n\nsumPrimes(10);"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -623,6 +623,9 @@
|
||||
"",
|
||||
"smallestCommons([1,5]);"
|
||||
],
|
||||
"solutions": [
|
||||
"function gcd(a, b) {\n while (b !== 0) {\n a = [b, b = a % b][0];\n }\n return a;\n}\n\nfunction lcm(a, b) {\n return (a * b) / gcd(a, b);\n}\n\nfunction smallestCommons(arr) {\n arr.sort(function(a,b) {return a-b;});\n var rng = [];\n for (var i = arr[0]; i <= arr[1]; i++) {\n rng.push(i);\n }\n return rng.reduce(lcm);\n}"
|
||||
],
|
||||
"tests": [
|
||||
"assert.deepEqual(typeof smallestCommons([1, 5]), 'number', 'message: <code>smallestCommons([1, 5])</code> should return a number.');",
|
||||
"assert.deepEqual(smallestCommons([1, 5]), 60, 'message: <code>smallestCommons([1, 5])</code> should return 60.');",
|
||||
@@ -633,17 +636,14 @@
|
||||
"MDNlinks": [
|
||||
"Smallest Common Multiple"
|
||||
],
|
||||
"isRequired": true,
|
||||
"challengeType": 5,
|
||||
"nameEs": "Mínimo común múltiplo",
|
||||
"titleEs": "Mínimo común múltiplo",
|
||||
"descriptionEs": [
|
||||
"En el ejercicio se te provee un vector con dos números. Crea una función que encuentre el número más pequeño que sea divisible entre ambos números, así como entre todos los números enteros entre ellos.",
|
||||
"Tu función debe aceptar como argumento un vector con dos números, los cuales no necesariamente estarán en orden.",
|
||||
"Por ejemplo, si se te pasan los números 1 y 3, deberás encontrar el mínimo común múltiplo de 1 y 3 que es divisible por todos los números <em>entre</em> 1 y 3.",
|
||||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código."
|
||||
],
|
||||
"isRequired": true,
|
||||
"solutions": [
|
||||
"function gcd(a, b) {\n while (b !== 0) {\n a = [b, b = a % b][0];\n }\n return a;\n}\n\nfunction lcm(a, b) {\n return (a * b) / gcd(a, b);\n}\n\nfunction smallestCommons(arr) {\n arr.sort(function(a,b) {return a-b;});\n var rng = [];\n for (var i = arr[0]; i <= arr[1]; i++) {\n rng.push(i);\n }\n return rng.reduce(lcm);\n}"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -661,6 +661,9 @@
|
||||
"",
|
||||
"find([1, 2, 3, 4], function(num){ return num % 2 === 0; });"
|
||||
],
|
||||
"solutions": [
|
||||
"function find(arr, func) {\n var num;\n arr.some(function(e) {\n if (func(e)) {\n num = e;\n return true;\n }\n });\n return num;\n}"
|
||||
],
|
||||
"tests": [
|
||||
"assert.strictEqual(find([1, 3, 5, 8, 9, 10], function(num) { return num % 2 === 0; }), 8, 'message: <code>find([1, 3, 5, 8, 9, 10], function(num) { return num % 2 === 0; })</code> should return 8.');",
|
||||
"assert.strictEqual(find([1, 3, 5, 9], function(num) { return num % 2 === 0; }), undefined, 'message: <code>find([1, 3, 5, 9], function(num) { return num % 2 === 0; })</code> should return undefined.');"
|
||||
@@ -669,15 +672,12 @@
|
||||
"MDNlinks": [
|
||||
"Array.filter()"
|
||||
],
|
||||
"isRequired": true,
|
||||
"challengeType": 5,
|
||||
"nameEs": "Buscando la verdad",
|
||||
"titleEs": "Buscando la verdad",
|
||||
"descriptionEs": [
|
||||
"Crea una función que busque dentro de un vector (primer argumento) y que devuelva el primer elemento que pase una prueba de verdad (segundo argumento).",
|
||||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código."
|
||||
],
|
||||
"isRequired": true,
|
||||
"solutions": [
|
||||
"function find(arr, func) {\n var num;\n arr.some(function(e) {\n if (func(e)) {\n num = e;\n return true;\n }\n });\n return num;\n}"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -696,6 +696,9 @@
|
||||
"",
|
||||
"drop([1, 2, 3], function(n) {return n < 3; });"
|
||||
],
|
||||
"solutions": [
|
||||
"function drop(arr, func) {\n // Drop them elements.\n while (arr.length && !func(arr[0])) {\n arr.shift();\n }\n return arr;\n}"
|
||||
],
|
||||
"tests": [
|
||||
"assert.deepEqual(drop([1, 2, 3, 4], function(n) {return n >= 3;}), [3, 4], 'message: <code>drop([1, 2, 3, 4], function(n) {return n >= 3;})</code> should return <code>[3, 4]</code>.');",
|
||||
"assert.deepEqual(drop([0, 1, 0, 1], function(n) {return n === 1;}), [1, 0, 1], 'message: <code>drop([0, 1, 0, 1], function(n) {return n === 1;})</code> should return <code>[1, 0, 1]</code>.');",
|
||||
@@ -710,16 +713,13 @@
|
||||
"Array.shift()",
|
||||
"Array.slice()"
|
||||
],
|
||||
"isRequired": true,
|
||||
"challengeType": 5,
|
||||
"nameEs": "¡Fuera de aquí!",
|
||||
"titleEs": "¡Fuera de aquí!",
|
||||
"descriptionEs": [
|
||||
"Toma los elementos contenidos en el vector que se te provee en el primer argumento de la función y elimínalos uno por uno, hasta que la función provista en el segundo argumento devuelva true.",
|
||||
"Retorna el resto del vector, de lo contrario retorna un vector vacío.",
|
||||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código."
|
||||
],
|
||||
"isRequired": true,
|
||||
"solutions": [
|
||||
"function drop(arr, func) {\n // Drop them elements.\n while (arr.length && !func(arr[0])) {\n arr.shift();\n }\n return arr;\n}"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -737,6 +737,9 @@
|
||||
"",
|
||||
"steamroller([1, [2], [3, [[4]]]]);"
|
||||
],
|
||||
"solutions": [
|
||||
"function steamroller(arr) {\n if (!Array.isArray(arr)) {\n return [arr];\n }\n var out = [];\n arr.forEach(function(e) {\n steamroller(e).forEach(function(v) {\n out.push(v);\n });\n });\n return out;\n}"
|
||||
],
|
||||
"tests": [
|
||||
"assert.deepEqual(steamroller([[[\"a\"]], [[\"b\"]]]), [\"a\", \"b\"], 'message: <code>steamroller([[[\"a\"]], [[\"b\"]]])</code> should return <code>[\"a\", \"b\"]</code>.');",
|
||||
"assert.deepEqual(steamroller([1, [2], [3, [[4]]]]), [1, 2, 3, 4], 'message: <code>steamroller([1, [2], [3, [[4]]]])</code> should return <code>[1, 2, 3, 4]</code>.');",
|
||||
@@ -747,15 +750,12 @@
|
||||
"MDNlinks": [
|
||||
"Array.isArray()"
|
||||
],
|
||||
"isRequired": true,
|
||||
"challengeType": 5,
|
||||
"nameEs": "Aplanadora",
|
||||
"titleEs": "Aplanadora",
|
||||
"descriptionEs": [
|
||||
"Aplana el vector anidado que se te provee. Tu función debe poder aplanar vectores de cualquier forma.",
|
||||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código."
|
||||
],
|
||||
"isRequired": true,
|
||||
"solutions": [
|
||||
"function steamroller(arr) {\n if (!Array.isArray(arr)) {\n return [arr];\n }\n var out = [];\n arr.forEach(function(e) {\n steamroller(e).forEach(function(v) {\n out.push(v);\n });\n });\n return out;\n}"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -773,6 +773,9 @@
|
||||
"",
|
||||
"binaryAgent(\"01000001 01110010 01100101 01101110 00100111 01110100 00100000 01100010 01101111 01101110 01100110 01101001 01110010 01100101 01110011 00100000 01100110 01110101 01101110 00100001 00111111\");"
|
||||
],
|
||||
"solutions": [
|
||||
"function binaryAgent(str) {\n return str.split(' ').map(function(s) { return parseInt(s, 2); }).map(function(b) { return String.fromCharCode(b);}).join('');\n}"
|
||||
],
|
||||
"tests": [
|
||||
"assert.deepEqual(binaryAgent('01000001 01110010 01100101 01101110 00100111 01110100 00100000 01100010 01101111 01101110 01100110 01101001 01110010 01100101 01110011 00100000 01100110 01110101 01101110 00100001 00111111'), \"Aren't bonfires fun!?\", 'message: <code>binaryAgent(\"01000001 01110010 01100101 01101110 00100111 01110100 00100000 01100010 01101111 01101110 01100110 01101001 01110010 01100101 01110011 00100000 01100110 01110101 01101110 00100001 00111111\")</code> should return \"Aren't bonfires fun!?\"');",
|
||||
"assert.deepEqual(binaryAgent('01001001 00100000 01101100 01101111 01110110 01100101 00100000 01000110 01110010 01100101 01100101 01000011 01101111 01100100 01100101 01000011 01100001 01101101 01110000 00100001'), \"I love FreeCodeCamp!\", 'message: <code>binaryAgent(\"01001001 00100000 01101100 01101111 01110110 01100101 00100000 01000110 01110010 01100101 01100101 01000011 01101111 01100100 01100101 01000011 01100001 01101101 01110000 00100001\")</code> should return \"I love FreeCodeCamp!\"');"
|
||||
@@ -782,16 +785,13 @@
|
||||
"String.charCodeAt()",
|
||||
"String.fromCharCode()"
|
||||
],
|
||||
"isRequired": true,
|
||||
"challengeType": 5,
|
||||
"nameEs": "Mensaje secreto",
|
||||
"titleEs": "Mensaje secreto",
|
||||
"descriptionEs": [
|
||||
"Haz que la función devuelva el mensaje en inglés escondido en el código binario de la cadena de texto que se le pasa.",
|
||||
"La cadena de texto binaria estará separada por espacios.",
|
||||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código."
|
||||
],
|
||||
"isRequired": true,
|
||||
"solutions": [
|
||||
"function binaryAgent(str) {\n return str.split(' ').map(function(s) { return parseInt(s, 2); }).map(function(b) { return String.fromCharCode(b);}).join('');\n}"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -810,6 +810,9 @@
|
||||
"",
|
||||
"every([{\"user\": \"Tinky-Winky\", \"sex\": \"male\"}, {\"user\": \"Dipsy\", \"sex\": \"male\"}, {\"user\": \"Laa-Laa\", \"sex\": \"female\"}, {\"user\": \"Po\", \"sex\": \"female\"}], \"sex\");"
|
||||
],
|
||||
"solutions": [
|
||||
"function every(collection, pre) {\n // Does everyone have one of these?\n return collection.every(function(e) { return e[pre]; });\n}"
|
||||
],
|
||||
"tests": [
|
||||
"assert.strictEqual(every([{\"user\": \"Tinky-Winky\", \"sex\": \"male\"}, {\"user\": \"Dipsy\", \"sex\": \"male\"}, {\"user\": \"Laa-Laa\", \"sex\": \"female\"}, {\"user\": \"Po\", \"sex\": \"female\"}], \"sex\"), true, 'message: <code>every([{\"user\": \"Tinky-Winky\", \"sex\": \"male\"}, {\"user\": \"Dipsy\", \"sex\": \"male\"}, {\"user\": \"Laa-Laa\", \"sex\": \"female\"}, {\"user\": \"Po\", \"sex\": \"female\"}], \"sex\")</code> should return true.');",
|
||||
"assert.strictEqual(every([{\"user\": \"Tinky-Winky\", \"sex\": \"male\"}, {\"user\": \"Dipsy\"}, {\"user\": \"Laa-Laa\", \"sex\": \"female\"}, {\"user\": \"Po\", \"sex\": \"female\"}], \"sex\"), false, 'message: <code>every([{\"user\": \"Tinky-Winky\", \"sex\": \"male\"}, {\"user\": \"Dipsy\"}, {\"user\": \"Laa-Laa\", \"sex\": \"female\"}, {\"user\": \"Po\", \"sex\": \"female\"}], \"sex\")</code> should return false.');",
|
||||
@@ -821,17 +824,14 @@
|
||||
"assert.strictEqual(every([{\"single\": \"double\"}, {\"single\": undefined}], \"single\"), false, 'message: <code>every([{\"single\": \"double\"}, {\"single\": undefined}], \"single\")</code> should return false');",
|
||||
"assert.strictEqual(every([{\"single\": \"double\"}, {\"single\": NaN}], \"single\"), false, 'message: <code>every([{\"single\": \"double\"}, {\"single\": NaN}], \"single\")</code> should return false');"
|
||||
],
|
||||
"isRequired": true,
|
||||
"type": "bonfire",
|
||||
"challengeType": 5,
|
||||
"nameEs": "Que todo sea verdadero",
|
||||
"titleEs": "Que todo sea verdadero",
|
||||
"descriptionEs": [
|
||||
"Verifica si la función en el segundo argumento devuelve true para todos los elementos de la colección en el primer argumento.",
|
||||
"Recuerda que puedes accesar a las propiedades de un objeto, ya sea a través de la notación por punto o de la notación por corchete usando [].",
|
||||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código."
|
||||
],
|
||||
"isRequired": true,
|
||||
"solutions": [
|
||||
"function every(collection, pre) {\n // Does everyone have one of these?\n return collection.every(function(e) { return e[pre]; });\n}"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -853,6 +853,9 @@
|
||||
"",
|
||||
"add(2,3);"
|
||||
],
|
||||
"solutions": [
|
||||
"function add() {\n var a = arguments[0];\n if (toString.call(a) !== '[object Number]') return; \n if (arguments.length === 1) {\n return function(b) {\n if (toString.call(b) !== '[object Number]') return;\n return a + b;\n };\n }\n var b = arguments[1];\n if (toString.call(b) !== '[object Number]') return; \n return a + arguments[1];\n}"
|
||||
],
|
||||
"tests": [
|
||||
"assert.deepEqual(add(2, 3), 5, 'message: <code>add(2, 3)</code> should return 5.');",
|
||||
"assert.deepEqual(add(2)(3), 5, 'message: <code>add(2)(3)</code> should return 5.');",
|
||||
@@ -865,8 +868,9 @@
|
||||
"Closures",
|
||||
"Arguments object"
|
||||
],
|
||||
"isRequired": true,
|
||||
"challengeType": 5,
|
||||
"nameEs": "Argumentos opcionales",
|
||||
"titleEs": "Argumentos opcionales",
|
||||
"descriptionEs": [
|
||||
"Crea una función que sume dos argumentos. Si sólo se le pasa un argumento a la función, haz que devuelva otra función que acepte un argumento y que devuelva la suma correspondiente.",
|
||||
"Por ejemplo, <code>add(2, 3)</code> debe devolver <code>5</code>, y <code>add(2)</code> debe devolver una función.",
|
||||
@@ -875,10 +879,6 @@
|
||||
"<code>sumTwoAnd(3)</code> devuelve <code>5</code>.",
|
||||
"Si alguno de los argumentos no es un número válido, haz que devuelva undefined.",
|
||||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código."
|
||||
],
|
||||
"isRequired": true,
|
||||
"solutions": [
|
||||
"function add() {\n var a = arguments[0];\n if (toString.call(a) !== '[object Number]') return; \n if (arguments.length === 1) {\n return function(b) {\n if (toString.call(b) !== '[object Number]') return;\n return a + b;\n };\n }\n var b = arguments[1];\n if (toString.call(b) !== '[object Number]') return; \n return a + arguments[1];\n}"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
@@ -22,7 +22,6 @@
|
||||
],
|
||||
"tests": [],
|
||||
"type": "zipline",
|
||||
"nameRu": "Создайте генератор случайных цитат",
|
||||
"descriptionRu": [
|
||||
"<span class='text-info'>Задание:</span> Создайте <a href='http://codepen.io' target='_blank'>CodePen.io</a> который успешно копирует вот этот: <a href='http://codepen.io/FreeCodeCamp/full/bELoPJ' target='_blank'>http://codepen.io/FreeCodeCamp/full/bELoPJ</a>.",
|
||||
"<span class='text-info'>Правило #1:</span> Не подсматривайте код приведенного на CodePen примера. Напишите его самостоятельно.",
|
||||
@@ -36,7 +35,6 @@
|
||||
"Когда выполните задание кликните кнопку \"I've completed this challenge\" и добавьте ссылку на ваш CodePen. Если вы программировали с кем-то в паре, также добавьте имя вашего напарника.",
|
||||
"Если вы хотите получить немедленную оценку вашего проекта, нажмите эту кнопку и добавьте ссылку на ваш CodePen. В противном случае мы проверим его перед тем как вы приступите к проектам для некоммерческих организаций.<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>"
|
||||
],
|
||||
"nameEs": "Crea una máquina de frases aleatorias",
|
||||
"descriptionEs": [
|
||||
"<span class='text-info'>Objetivo:</span> Crea una aplicación con <a href='http://codepen.io' target='_blank'>CodePen.io</a> cuya funcionalidad sea similar a la de esta: <a href='http://codepen.io/FreeCodeCamp/full/bELoPJ' target='_blank'>http://codepen.io/FreeCodeCamp/full/bELoPJ</a>.",
|
||||
"<span class='text-info'>Regla #1:</span> No veas el código del proyecto de ejemplo en CodePen. Encuentra la forma de hacerlo por tu cuenta.",
|
||||
@@ -48,7 +46,9 @@
|
||||
"Puedes obtener retroalimentación sobre tu proyecto por parte de otros campistas, compartiendolo en nuestra <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Sala de chat para revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)."
|
||||
],
|
||||
"isRequired": true,
|
||||
"challengeType": 3
|
||||
"challengeType": 3,
|
||||
"titleRu": "Создайте генератор случайных цитат",
|
||||
"titleEs": "Crea una máquina de frases aleatorias"
|
||||
},
|
||||
{
|
||||
"id": "bd7158d8c442eddfaeb5bd10",
|
||||
@@ -71,7 +71,6 @@
|
||||
"tests": [],
|
||||
"type": "zipline",
|
||||
"challengeType": 3,
|
||||
"nameRu": "Покажите местную погоду",
|
||||
"descriptionRu": [
|
||||
"<span class='text-info'>Задание:</span> Создайте <a href='http://codepen.io' target='_blank'>CodePen.io</a> который успешно копирует вот этот: <a href='http://codepen.io/FreeCodeCamp/full/bELRjV' target='_blank'>http://codepen.io/FreeCodeCamp/full/bELRjV</a>.",
|
||||
"<span class='text-info'>Правило #1:</span> Не подсматривайте код приведенного на CodePen примера. Напишите его самостоятельно.",
|
||||
@@ -86,7 +85,6 @@
|
||||
"Когда выполните задание кликните кнопку \"I've completed this challenge\" и добавьте ссылку на ваш CodePen. Если вы программировали с кем-то в паре, также добавьте имя вашего напарника.",
|
||||
"Если вы хотите получить немедленную оценку вашего проекта, нажмите эту кнопку и добавьте ссылку на ваш CodePen. В противном случае мы проверим его перед тем как вы приступите к проектам для некоммерческих организаций.<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>"
|
||||
],
|
||||
"nameEs": "Muestra el clima local",
|
||||
"descriptionEs": [
|
||||
"<span class='text-info'>Objetivo:</span> Crea una aplicación con <a href='http://codepen.io' target='_blank'>CodePen.io</a> cuya funcionalidad sea similar a la de esta: <a href='http://codepen.io/FreeCodeCamp/full/bELRjV' target='_blank'>http://codepen.io/FreeCodeCamp/full/bELRjV</a>.",
|
||||
"<span class='text-info'>Regla #1:</span> No veas el código del proyecto de ejemplo en CodePen. Encuentra la forma de hacerlo por tu cuenta.",
|
||||
@@ -94,12 +92,14 @@
|
||||
"<span class='text-info'>Historia de usuario:</span> Pedo obtener información acerca del clima en mi localización actual.",
|
||||
"<span class='text-info'>Historia de usuario:</span> Puedo ver un icono diferente o una imagen de fondo diferente (e.g. montaña con nieve, desierto caliente) dependiendo del clima.",
|
||||
"<span class='text-info'>Historia de usuario:</span> Puedo pulsar un botón para cambiar la unidad de temperatura de grados Fahrenheit a Celsius y viceversa.",
|
||||
"Recomendamos utilizar <a href='http://openweathermap.org/current#geo' target='_blank'>Open Weather API</a>. Al utilizarlo tendrás que crear una llave API gratuita. Normalmente debes evitar exponer llaves de API en CodePen, pero por el momento no hemos encontrado un API de clima que no requiera llave.",
|
||||
"Recomendamos utilizar <a href='http://openweathermap.org/current#geo' target='_blank'>Open Weather API</a>. Al utilizarlo tendrás que crear una llave API gratuita. Normalmente debes evitar exponer llaves de API en CodePen, pero por el momento no hemos encontrado un API de clima que no requiera llave.",
|
||||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado.",
|
||||
"Cuando hayas terminado, pulsa el botón de \"I've completed this challenge\" e incluye un enlace a tu CodePen.",
|
||||
"Puedes obtener retroalimentación sobre tu proyecto por parte de otros campistas, compartiendolo en nuestra <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Sala de chat para revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)."
|
||||
],
|
||||
"isRequired": true
|
||||
"isRequired": true,
|
||||
"titleRu": "Покажите местную погоду",
|
||||
"titleEs": "Muestra el clima local"
|
||||
},
|
||||
{
|
||||
"id": "bd7158d8c442eddfaeb5bd19",
|
||||
@@ -123,13 +123,11 @@
|
||||
"tests": [],
|
||||
"type": "zipline",
|
||||
"challengeType": 3,
|
||||
"nameEs": "Crea un buscador de Wikipedia",
|
||||
"descriptionEs": [
|
||||
"<span class='text-info'>Objetivo:</span> Crea una aplicación con <a href='http://codepen.io' target='_blank'>CodePen.io</a> cuya funcionalidad sea similar a la de esta: <a href='http://codepen.io/FreeCodeCamp/full/pgNRvJ' target='_blank'>http://codepen.io/FreeCodeCamp/full/pgNRvJ</a>.",
|
||||
"<span class='text-info'>Regla #1:</span> No veas el código del proyecto de ejemplo en CodePen. Encuentra la forma de hacerlo por tu cuenta.",
|
||||
"<span class='text-info'>Regla #2:</span> Satisface las siguientes <a href='http://en.wikipedia.org/wiki/User_story' target='_blank'>historias de usuario</a>. Usa cualquier librería o APIs que necesites. Dale tu estilo personal.",
|
||||
|
||||
"<span class='text-info'>Historia de usuario:</span> Pedo obtener información acerca del clima en mi localización actual.",
|
||||
"<span class='text-info'>Historia de usuario:</span> Pedo obtener información acerca del clima en mi localización actual.",
|
||||
"<span class='text-info'>Historia de usuario:</span> Puedo ver un icono diferente o una imagen de fondo diferente (e.g. montaña con nieve, desierto caliente) dependiendo del clima.",
|
||||
"<span class='text-info'>Historia de usuario:</span> Puedo pulsar un botón para cambiar la unidad de temperatura de grados Fahrenheit a Celsius y viceversa.",
|
||||
"<span class='text-info'>Historia de usuario:</span> Puedo buscar entradas en Wikipedia en un cuadro de búsqueda y ver las entradas de Wikipedia resultantes.",
|
||||
@@ -141,7 +139,8 @@
|
||||
"Cuando hayas terminado, pulsa el botón de \"I've completed this challenge\" e incluye un enlace a tu CodePen.",
|
||||
"Puedes obtener retroalimentación sobre tu proyecto por parte de otros campistas, compartiendolo en nuestra <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Sala de chat para revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)."
|
||||
],
|
||||
"isRequired": true
|
||||
"isRequired": true,
|
||||
"titleEs": "Crea un buscador de Wikipedia"
|
||||
},
|
||||
{
|
||||
"id": "bd7158d8c442eddfaeb5bd1f",
|
||||
@@ -167,7 +166,6 @@
|
||||
"tests": [],
|
||||
"type": "zipline",
|
||||
"challengeType": 3,
|
||||
"nameRu": "Используйте Twitch.tv JSON API",
|
||||
"descriptionRu": [
|
||||
"<span class='text-info'>Задание:</span> Создайте <a href='http://codepen.io' target='_blank'>CodePen.io</a> который успешно копирует вот этот: <a href='http://codepen.io/FreeCodeCamp/full/adBpOw' target='_blank'>http://codepen.io/FreeCodeCamp/full/adBpOw</a>.",
|
||||
"<span class='text-info'>Правило #1:</span> Не подсматривайте код приведенного на CodePen примера. Напишите его самостоятельно.",
|
||||
@@ -186,7 +184,6 @@
|
||||
"Когда выполните задание кликните кнопку \"I've completed this challenge\" и добавьте ссылку на ваш CodePen. Если вы программировали с кем-то в паре, также добавьте имя вашего напарника.",
|
||||
"Если вы хотите получить немедленную оценку вашего проекта, нажмите эту кнопку и добавьте ссылку на ваш CodePen. В противном случае мы проверим его перед тем как вы приступите к проектам для некоммерческих организаций.<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>"
|
||||
],
|
||||
"nameEs": "Usa el API JSON de Twitch.tv",
|
||||
"descriptionEs": [
|
||||
"<span class='text-info'>Objetivo:</span> Crea una aplicación con <a href='http://codepen.io' target='_blank'>CodePen.io</a> cuya funcionalidad sea similar a la de esta: <a href='http://codepen.io/FreeCodeCamp/full/adBpOw' target='_blank'>http://codepen.io/FreeCodeCamp/full/adBpOw</a>.",
|
||||
"<span class='text-info'>Regla #1:</span> No veas el código del proyecto de ejemplo en CodePen. Encuentra la forma de hacerlo por tu cuenta.",
|
||||
@@ -202,7 +199,9 @@
|
||||
"Cuando hayas terminado, pulsa el botón de \"I've completed this challenge\" e incluye un enlace a tu CodePen.",
|
||||
"Puedes obtener retroalimentación sobre tu proyecto por parte de otros campistas, compartiendolo en nuestra <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Sala de chat para revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)."
|
||||
],
|
||||
"isRequired": true
|
||||
"isRequired": true,
|
||||
"titleRu": "Используйте Twitch.tv JSON API",
|
||||
"titleEs": "Usa el API JSON de Twitch.tv"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
@@ -50,7 +50,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 0,
|
||||
"nameEs": "Aprende cómo funcionan las etiquetas de programa y la función de documento listo.",
|
||||
"titleEs": "Aprende cómo funcionan las etiquetas de programa y la función de documento listo.",
|
||||
"descriptionEs": [
|
||||
"Ahora estamos listos para aprender jQuery, la herramienta de JavaScript más popular de todos los tiempos. No te preocupes por JavaScript en si --lo cubriremos pronto.",
|
||||
"Antes de que podamos comenzar a usar jQuery, tenemos que añadir algunas cosas a nuestro HTML.",
|
||||
@@ -109,7 +109,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 0,
|
||||
"nameEs": "Elige elementos HTML usando selectores y jQuery",
|
||||
"titleEs": "Elige elementos HTML usando selectores y jQuery",
|
||||
"descriptionEs": [
|
||||
"Ya tenemos una <code>función de documento listo</code>.",
|
||||
"Ahora vamos a escribir nuestra primera instrucción jQuery. Todas las funciones de jQuery comienzan con un <code>$</code>, al que suele referirse como <code>operador dólar</code>, o simplemente como <code>bling</code>. ",
|
||||
@@ -168,7 +168,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 0,
|
||||
"nameEs": "Elige elementos por su clase usando jQuery",
|
||||
"titleEs": "Elige elementos por su clase usando jQuery",
|
||||
"descriptionEs": [
|
||||
"¿Viste como hicimos rebotar todos tus elementos <code>button</code>? Los seleccionamos con <code>$(\"button\")</code>, y luego les añadimos algunas clases CSS con <code>.addClass(\"animated bounce\");.</code> ",
|
||||
"Acabas de usar la función <code>addClass()</code> de jQuery, que te permite añadir clases a los elementos.",
|
||||
@@ -230,7 +230,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 0,
|
||||
"nameEs": "Elige elementos por ID usando jQuery",
|
||||
"titleEs": "Elige elementos por ID usando jQuery",
|
||||
"descriptionEs": [
|
||||
"También puedes elegir un elemento por su atributo id.",
|
||||
"Primero selecciona tu elemento <code>button</code> con el id <code>target3</code> mediante el uso del selector <code>$(\"#target3\")</code>.",
|
||||
@@ -290,7 +290,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 0,
|
||||
"nameEs": "Elimina tus funciones jQuery",
|
||||
"titleEs": "Elimina tus funciones jQuery",
|
||||
"descriptionEs": [
|
||||
"Estas animaciones eran divertidas al principio, pero ahora se están volviendo una distracción.",
|
||||
"Elimina esas tres funciones jQuery de tu <code>función de documento listo</code>, pero deja intacta la declaración de la <code>función de documento listo</code>."
|
||||
@@ -348,7 +348,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 0,
|
||||
"nameEs": "Elige un mismo elemento con múltiples selectores jQuery",
|
||||
"titleEs": "Elige un mismo elemento con múltiples selectores jQuery",
|
||||
"descriptionEs": [
|
||||
"Ahora ya sabes tres formas de seleccionar elementos: por tipo <code>$(\"button\")</code>, por clase <code>$(\".btn\")</code>, y por identificación <code>$(\"#target1\")</code>. ",
|
||||
"Aunque es posible agregar varias clases en una sola llamada a <code>.addClass()</code>, vamos a añadirlas al mismo elemento de tres maneras diferentes.",
|
||||
@@ -408,7 +408,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 0,
|
||||
"nameEs": "Elimina clases de un elemento con jQuery",
|
||||
"titleEs": "Elimina clases de un elemento con jQuery",
|
||||
"descriptionEs": [
|
||||
"De la misma manera que puedes agregar clases a un elemento con la función <code>addClass()</code> de jQuery, puedes eliminarlas con la función <code>removeClass()</code>.",
|
||||
"He aquí cómo puedes hacerlo para un botón específico:",
|
||||
@@ -469,7 +469,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 0,
|
||||
"nameEs": "Cambia el CSS de un elemento usando jQuery",
|
||||
"titleEs": "Cambia el CSS de un elemento usando jQuery",
|
||||
"descriptionEs": [
|
||||
"También podemos cambiar el CSS de un elemento HTML directamente con jQuery.",
|
||||
"jQuery tiene una función llamada <code>.css()</code> que te permite cambiar el CSS de un elemento.",
|
||||
@@ -530,7 +530,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 0,
|
||||
"nameEs": "Desactiva un elemento usando jQuery",
|
||||
"titleEs": "Desactiva un elemento usando jQuery",
|
||||
"descriptionEs": [
|
||||
"También puedes cambiar propiedades que no son CSS de los elementos HTML con jQuery. Por ejemplo, puedes desactivar los botones. ",
|
||||
"Al deshabilitar un botón, se volverá gris y no podrá pulsarse.",
|
||||
@@ -591,7 +591,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 0,
|
||||
"nameEs": "Cambia el texto de un elemento usando jQuery",
|
||||
"titleEs": "Cambia el texto de un elemento usando jQuery",
|
||||
"descriptionEs": [
|
||||
"Con jQuery, puedes cambiar el texto que está entre las etiquetas de apertura y cierre de un elemento. Incluso puedes cambiar marcado HTML.",
|
||||
"jQuery tiene una función llamada <code>.html()</code> que te permite añadir etiquetas HTML y texto dentro de un elemento. Cualquier contenido que estuviese previamente dentro del elemento será remplazado por completo con el contenido que proveas usando esta función.",
|
||||
@@ -648,7 +648,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 0,
|
||||
"nameEs": "Elimina un elemento usando jQuery",
|
||||
"titleEs": "Elimina un elemento usando jQuery",
|
||||
"descriptionEs": [
|
||||
"Ahora quitemos un elemento HTML de tu página usando jQuery.",
|
||||
"jQuery tiene una función llamada <code>.remove()</code> que eliminará un elemento HTML por completo",
|
||||
@@ -706,7 +706,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 0,
|
||||
"nameEs": "Usa appendTo para mover elementos con jQuery",
|
||||
"titleEs": "Usa appendTo para mover elementos con jQuery",
|
||||
"descriptionEs": [
|
||||
"Ahora intentemos mover elementos de un <code>div</code> a otro.",
|
||||
"jQuery tiene una función llamada <code>appendTo()</code> que te permite seleccionar elementos HTML y anexarlos a otro elemento.",
|
||||
@@ -768,7 +768,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 0,
|
||||
"nameEs": "Clona un elemento usando jQuery",
|
||||
"titleEs": "Clona un elemento usando jQuery",
|
||||
"descriptionEs": [
|
||||
"Además de mover elementos, puedes copiarlos de un sitio a otro.",
|
||||
"jQuery tiene una función llamada <code>clone()</code> que hace una copia de un elemento.",
|
||||
@@ -835,7 +835,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 0,
|
||||
"nameEs": "Elige el padre de un elemento usando jQuery",
|
||||
"titleEs": "Elige el padre de un elemento usando jQuery",
|
||||
"descriptionEs": [
|
||||
"Cada elemento HTML tiene un elemento <code>padre</code> del cual <code>hereda</code> propiedades.",
|
||||
"Por ejemplo, tu elemento <code>h3</code> <code>jQuery Playground</code> tiene el elemento padre <code><div class=\"container-fluid\"></code>, que a su vez tiene el padre <code>body</code>. ",
|
||||
@@ -900,7 +900,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 0,
|
||||
"nameEs": "Elige los hjos de un elemento usando jQuery",
|
||||
"titleEs": "Elige los hjos de un elemento usando jQuery",
|
||||
"descriptionEs": [
|
||||
"Muchos elementos HTML tienen <code>hijos</code>, los cuales <code>heredan</code> sus propiedades de sus elementos padres",
|
||||
"Por ejemplo, cada elemento HTML es un hijo de tu elemento <code>body</code>, y tu elemento <code>h3</code> \"jQuery Playground\" es un hijo de tu elemento <code><div class=\"container-fluid\"></code>.",
|
||||
@@ -966,7 +966,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 0,
|
||||
"nameEs": "Elige un hijo específico de un elemento usando jQuery",
|
||||
"titleEs": "Elige un hijo específico de un elemento usando jQuery",
|
||||
"descriptionEs": [
|
||||
"Seguramente habrás entendido porque los atributos id son tan convenientes para elegir con selectores jQuery. Pero no siempre contarás con estos agradables identificadores para trabajar. ",
|
||||
"Afortunadamente, jQuery tiene algunos otros trucos para elegir los elementos adecuados.",
|
||||
@@ -1033,7 +1033,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 0,
|
||||
"nameEs": "Elige elementos con numeración par usando jQuery",
|
||||
"titleEs": "Elige elementos con numeración par usando jQuery",
|
||||
"descriptionEs": [
|
||||
"También puedes elegir todos los elementos con numeración par.",
|
||||
"He aquí cómo elegirías todos los elementos impares con clase <code>target</code> y como les agregarías unas clases:",
|
||||
@@ -1096,7 +1096,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 0,
|
||||
"nameEs": "Usa jQuery para modificar la página entera",
|
||||
"titleEs": "Usa jQuery para modificar la página entera",
|
||||
"descriptionEs": [
|
||||
"Hemos terminado de jugar en nuestro patio de recreo jQuery. ¡Vamos a derribarlo!",
|
||||
"jQuery también puede elegir el elemento <code>body</code>.",
|
||||
|
@@ -49,7 +49,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 0,
|
||||
"nameEs": "Activa eventos de pulsación con jQuery",
|
||||
"titleEs": "Activa eventos de pulsación con jQuery",
|
||||
"descriptionEs": [
|
||||
"En esta sección, vamos a aprender cómo obtener datos de las APIs. Las APIs - o interfaces de programación de aplicaciones - son herramientas que utilizan los computadores para comunicarse entre sí.",
|
||||
"También aprenderemos cómo actualizar HTML con los datos que obtenemos de estas API usando una tecnología llamada Ajax.",
|
||||
@@ -58,7 +58,7 @@
|
||||
"Antes de poder hacer esto, tenemos que implementar un <code>evento de pulsación</code> dentro de nuestra función <code>$(document).ready()</code>, añadiendo este código:",
|
||||
"<blockquote>$(\"#getMessage\").on(\"click\", function(){</br></br>});</blockquote>"
|
||||
],
|
||||
"namePt": "Ativando eventos de clique com jQuery",
|
||||
"titlePt": "Ativando eventos de clique com jQuery",
|
||||
"descriptionPt": [
|
||||
"Nesta sessão, vamos aprender como obter dados de uma API. As APIS - Interface de Programação de Aplicativos - são ferramentas usadas pelos computadores para se comunicarem entre si.",
|
||||
"Também aprenderemos como utilizar o HTML com os dados obtidos de uma API usando uma tecnologia chamada Ajax",
|
||||
@@ -112,14 +112,14 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 0,
|
||||
"nameEs": "Cambia texto con eventos de pulsación",
|
||||
"titleEs": "Cambia texto con eventos de pulsación",
|
||||
"descriptionEs": [
|
||||
"Cuando nuestro evento de pulsación ocurre, podemos utilizar jQuery para actualizar un elemento HTML.",
|
||||
"Hagamos que cuando un usuario pulse el botón \"Get Message\", el texto del elemento con la clase <code>message</code> cambie para decir \"Here is the message\".",
|
||||
"Podemos hacerlo añadiendo el siguiente código dentro de nuestro evento de pulsación:",
|
||||
"<code>$(\".message\").html(\"Here is the message\");</code>"
|
||||
],
|
||||
"namePt": "Mundando texto com eventos de clique",
|
||||
"titlePt": "Mundando texto com eventos de clique",
|
||||
"descriptionPt": [
|
||||
"Quando nosso evento de clique ocorre, podemos utilizar o jQuery para atualixar um elemento HTML",
|
||||
"Vamos fazer que quando um usuário clicar no botão \"Get Message\", o texto do elemento com a classe <code>message</code> passe a dizer \"Here is the message\".",
|
||||
@@ -183,7 +183,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 0,
|
||||
"nameEs": "Obtén JSON con el método getJSON de jQuery",
|
||||
"titleEs": "Obtén JSON con el método getJSON de jQuery",
|
||||
"descriptionEs": [
|
||||
"También puedes solicitar los datos de una fuente externa. Aquí es donde entran en juego las API. ",
|
||||
"Recuerda que las API - o interfaces de programación de aplicaciones - son herramientas que utilizan los ordenadores para comunicarse entre sí.",
|
||||
@@ -195,7 +195,7 @@
|
||||
"<blockquote>$.getJSON(\"/json/cats.json\", function(json) {</code></br> $(\".message\").html(JSON.stringify(json));</br>});</blockquote>",
|
||||
"Una vez lo añadas, pulsa el botón \"Get Message\". Tu función Ajax sustituirá el texto \"The message will go here\" con la salida JSON en bruto de la API de fotos de gato de Free Code Camp."
|
||||
],
|
||||
"namePt": "Obter um JSON com o método getJSON do jQuery",
|
||||
"titlePt": "Obter um JSON com o método getJSON do jQuery",
|
||||
"descriptionPt": [
|
||||
"Também é possivel solicitar os dados de uma fonte externa. É aqui onde as API's entram em jogo. ",
|
||||
"Lembre que as API's - Interface de Programação de Aplicativos - são ferramentas que os computadores usam para se comunicar entre si.",
|
||||
@@ -263,7 +263,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 0,
|
||||
"nameEs": "Convierte datos JSON a datos HTML",
|
||||
"titleEs": "Convierte datos JSON a datos HTML",
|
||||
"descriptionEs": [
|
||||
"Ahora que estamos obteniendo datos de una API JSON, mostremóslos en nuestro HTML.",
|
||||
"Podemos usar el método <code>.forEach()</code> para recorrer nuestros datos y modificar nuestros elementos HTML.",
|
||||
@@ -272,7 +272,7 @@
|
||||
"Aquí está el código que hace esto:",
|
||||
"<blockquote>json.forEach(function(val) {</br> var keys = Object.keys(val);</br> html += \"<div class = 'cat'>\";</br> keys.forEach(function(key) {</br> html += \"<b>\" + key + \"</b>: \" + val[key] + \"<br>\";</br> });</br> html += \"</div><br>\";</br>});</blockquote>"
|
||||
],
|
||||
"namePt": "Converter dados JSON para HTML",
|
||||
"titlePt": "Converter dados JSON para HTML",
|
||||
"descriptionPt": [
|
||||
"Agora que estamos obtendo os dados de uma API JSON, vamos mostra-los em nosso HTML",
|
||||
"Podemos usar o método <code>.forEach()</code> para percorrer os nossos dados e modificar o elementos HTML.",
|
||||
@@ -344,14 +344,14 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 0,
|
||||
"nameEs": "Presenta imágenes de fuentes de datos",
|
||||
"titleEs": "Presenta imágenes de fuentes de datos",
|
||||
"descriptionEs": [
|
||||
"Hemos visto en las dos últimas lecciones que cada objeto en nuestro vector JSON contiene una llave <code>imageLink</code> con un valor que corresponde a la url de la imagen de un gato.",
|
||||
"Cuando estamos recorriendo estos objetos, usemos esta propiedad <code>imageLink</code> para visualizar la imagen en un elemento <code>img</code>.",
|
||||
"Aquí está el código que hace esto:",
|
||||
"<code>html += \"<img src = '\" + val.imageLink + \"'>\";</code>"
|
||||
],
|
||||
"namePt": "Apresentar as imagens da fonte de dados",
|
||||
"titlePt": "Apresentar as imagens da fonte de dados",
|
||||
"descriptionPt": [
|
||||
"Como temos visto nas ultimas lições, cada objeto em nosso array JSON contém a chave <code>imageLink</code> com um valor que corresponde a url da imagem de um gato.",
|
||||
"Quando estamos percorrendo por estes objetos, usamos a propriedade <code>imageLink</code> para visualizar a imagem em um elemento <code>img</code>.",
|
||||
@@ -423,14 +423,14 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 0,
|
||||
"nameEs": "Pre-filtra JSON",
|
||||
"titleEs": "Pre-filtra JSON",
|
||||
"descriptionEs": [
|
||||
"Si no queremos presentar cada foto de gato que obtengamos de la API JSON de fotos de gato de Free Code Camp, podemos pre-filtrar el json antes de iterar a través de este.",
|
||||
"Vamos a filtrar el gato cuya llave \"id\" tiene un valor de 1.",
|
||||
"Aquí está el código para hacer esto:",
|
||||
"<blockquote>json = json.filter(function(val) {</br> return (val.id !== 1);</br>});</blockquote>"
|
||||
],
|
||||
"namePt": "Pré-filtro JSON",
|
||||
"titlePt": "Pré-filtro JSON",
|
||||
"descriptionPt": [
|
||||
"Se não queremos apresentar cada foto de gato que obtemos da API JSON de fotos de gatos do Free Code Camp, podemos realizar um pré-filtro o JSON antes de iterar através dele.",
|
||||
"Vamos filtrar o gato cuja a chave \"id\" tenha o valor 1.",
|
||||
@@ -467,7 +467,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 0,
|
||||
"nameEs": "Recibir datos de Geo-localización",
|
||||
"titleEs": "Recibir datos de Geo-localización",
|
||||
"descriptionEs": [
|
||||
"Otra cosa interesante que podemos hacer es acceder a la ubicación actual de nuestros usuarios. Todos los navegadores han incorporado un geo-localizador que nos puede dar esta información. ",
|
||||
"El navegador puede obtener la longitud y latitud actual de nuestros usuarios.",
|
||||
@@ -476,7 +476,7 @@
|
||||
"Aquí hay un código que hace esto:",
|
||||
"<blockquote>if (navigator.geolocation) {</br> navigator.geolocation.getCurrentPosition(function(position) {</br> $(\"#data\").html(\"latitude: \" + position.coords.latitude + \"<br>longitude: \" + position.coords.longitude);</br> });</br>}</blockquote>"
|
||||
],
|
||||
"namePt": "Receber dados de Geo-localização",
|
||||
"titlePt": "Receber dados de Geo-localização",
|
||||
"descriptionPt": [
|
||||
"Outra coisa interessante que podemos fazer é acessar a atual localização do nosso usuário. Todos os navegadores tem implementado um geo-localizador que pode nos fornecer essa informação.",
|
||||
"O navegador pode obter a longitude e latitude atual de nossos usuários",
|
||||
|
@@ -46,7 +46,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Declara objetos de JavaScript como variables",
|
||||
"titleEs": "Declara objetos de JavaScript como variables",
|
||||
"descriptionEs": [
|
||||
"Antes de sumergirnos en Programación Orientada a Objetos, vamos a revisar los objetos de JavaScript.",
|
||||
"Dale a tu objeto <code>motorBike</code> un atributo <code>wheels</code>, otro llamado <code>motors</code> y otro <code>seats</code> y asignales números."
|
||||
@@ -92,7 +92,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Construye objetos de JavaScript con funciones",
|
||||
"titleEs": "Construye objetos de JavaScript con funciones",
|
||||
"descriptionEs": [
|
||||
"También podemos crear objetos utilizando funciones <code>constructoras</code>.",
|
||||
"A cada función <code>constructora</code> se le da un nombre comenzando en mayúsculas para que quede claro que es una <code>constructora</code>.",
|
||||
@@ -150,7 +150,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Crea instancias de objetos con funciones constructoras",
|
||||
"titleEs": "Crea instancias de objetos con funciones constructoras",
|
||||
"descriptionEs": [
|
||||
"¡Ahora usemos esa gran <code>constructora</code> que hicimos en la última lección!",
|
||||
"Para utilizar una función <code>constructora</code> la llamamos con la palabra reservada <code>new</code> al frente, como:",
|
||||
@@ -208,7 +208,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Crea objetos únicos pasando parámetros a la constructora",
|
||||
"titleEs": "Crea objetos únicos pasando parámetros a la constructora",
|
||||
"descriptionEs": [
|
||||
"La <code>constructora</code> que tenemos es fabulosa, pero ¿qué hacer si no queremos crear siempre el mismo objeto?",
|
||||
"Para solucionar esto podemos añadir<code>parámetros</code>en nuestra <code>constructora</code>. Hacemos esto como en el siguiente ejemplo: ",
|
||||
@@ -287,7 +287,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Crea propiedades privadas de un objeto",
|
||||
"titleEs": "Crea propiedades privadas de un objeto",
|
||||
"descriptionEs": [
|
||||
"Los objetos tienen sus propios atributos, llamados <code>propiedades</code>, y sus propias funciones, llamadas<code>métodos</code>.",
|
||||
"En los desafíos anteriores, se utilizó la palabra reservada <code>this</code> para referenciar <code>propiedades públicas</code>del objeto actual.",
|
||||
@@ -328,7 +328,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Iterar sobre vectores con .map",
|
||||
"titleEs": "Iterar sobre vectores con .map",
|
||||
"descriptionEs": [
|
||||
"El método <code>map</code> es una manera conveniente de iterar sobre vectores. He aquí un ejemplo de uso: ",
|
||||
"<code>var porCuatro = vectorAntiguo.map(function(val){</code>",
|
||||
@@ -368,7 +368,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Condensa vectores con .reduce",
|
||||
"titleEs": "Condensa vectores con .reduce",
|
||||
"descriptionEs": [
|
||||
"El método <code>reduce</code> de un vector, se utiliza para iterar a través del vector y condensarlo en un valor.",
|
||||
"Para usar <code>reduce</code> tu le pasas una función de devolución de llamada cuyos argumentos sean un acumulador (en este caso, <code>valorPrevio</code>) y el valor actual (<code>valorActual</code>). ",
|
||||
@@ -410,7 +410,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Filtrar vectores con .filter",
|
||||
"titleEs": "Filtrar vectores con .filter",
|
||||
"descriptionEs": [
|
||||
"El método <code>filter</code> se utiliza para iterar a través de un vector y filtrar los elementos que hagan falsa un condición determinada.",
|
||||
"<code>filter</code> recibe una función de devolución de llamada que a su vez recibe como argumento el valor actual (que hemos llamado <code>val</code>).",
|
||||
@@ -452,7 +452,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Ordena vectores con .sort",
|
||||
"titleEs": "Ordena vectores con .sort",
|
||||
"descriptionEs": [
|
||||
"Puedes utilizar el método <code>sort</code> para ordenar alfabética o numéricamente los valores de un vector.",
|
||||
"A diferencia de los métodos de vector que hemos visto,<code>sort</code>en realidad altera el vector en su lugar. Sin embargo, también devuelve este vector ordenado. ",
|
||||
@@ -493,7 +493,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Invierte vectores con .reverse",
|
||||
"titleEs": "Invierte vectores con .reverse",
|
||||
"descriptionEs": [
|
||||
"Puedes utilizar el método <code>reverse</code> para invertir los elementos en un vector.",
|
||||
"<code>reverse</code> es otro método de vector que altera el vector mismo, y también devuelve el vector invertido.",
|
||||
@@ -533,7 +533,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Concatena vectores con .concat",
|
||||
"titleEs": "Concatena vectores con .concat",
|
||||
"descriptionEs": [
|
||||
"<code>concat</code> se puede utilizar para combinar el contenido de dos vectores en uno solo.",
|
||||
"<code>concat</code> recibe un vector como argumento y devuelve un nuevo vector con los elementos del vector que recibe concatenados al final.",
|
||||
@@ -569,7 +569,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Divide cadenas con .split",
|
||||
"titleEs": "Divide cadenas con .split",
|
||||
"descriptionEs": [
|
||||
"Puedes utilizar el método <code>split</code> para dividir una cadena en un vector.",
|
||||
"<code>split</code> utiliza el argumento que recibe como delimitador para determinar en qué puntos debe dividir la cadena.",
|
||||
@@ -604,7 +604,7 @@
|
||||
],
|
||||
"type": "waypoint",
|
||||
"challengeType": 1,
|
||||
"nameEs": "Une cadenas con .join",
|
||||
"titleEs": "Une cadenas con .join",
|
||||
"descriptionEs": [
|
||||
"Podemos usar el método <code>join</code> para unir los elementos de un vector en una cadena, separándolos con el delimitador que proporciones como argumento.",
|
||||
"El siguiente es un ejemplo del uso de <code>join</code> para unir todos los elementos de un vector en una cadena con todos los elementos separados entre si por palabra` Na`: ",
|
||||
|
Reference in New Issue
Block a user