Change nameXX properties to title XX properties

pull/18182/head
Rex Schrader 2016-03-11 15:17:34 -08:00 committed by SaintPeter
parent fe0ca1e732
commit b5128336a4
33 changed files with 1943 additions and 1954 deletions

View File

@ -85,82 +85,7 @@
"tests": [],
"type": "Waypoint",
"challengeType": 7,
"nameEs": "Aprende como funciona Free Code Camp",
"descriptionEs": [
[
"http://i.imgur.com/6ibIavQ.jpg",
"Una imagen de los 4 beneficios de Free Code Camp: Conéctate, Aprende JavaScript, Construye tu Portafolio, Ayuda organizaciones sin ánimo de lucro",
"Bienvenido a Free Code Camp. Somos una comunidad de código abierto formada por personas ocupadas quienes aprenden a programar y ayudan a organizaciones sin ánimo de lucro.",
""
],
[
"http://i.imgur.com/Elb3dfj.jpg",
"Una imagen de algunos de nuestros campistas programando juntos en Toronto.",
"<bold>Aprender a programar es difícil.</bold> Para tener éxito, necesitarás mucha práctica y apoyo. Por eso es que hemos creado un riguroso currículo y una comunidad de apoyo.",
""
],
[
"http://i.imgur.com/D7Y5luw.jpg",
"Una gráfica del crecimiento de trabajos en comparación con los graduados en un pregrado de ciencias de la computación. Hay 1.4 millones de empleos y solo 400 mil personas para ocuparlos.",
"Actualmente, hay miles de trabajos de programación sin ocupar, y la demanda de programadores crece cada año.",
""
],
[
"http://i.imgur.com/WD3STY6.jpg",
"Fotos de tres campistas quienes obtuvieron trabajos después de aprender a programar en Free Code Camp.",
"Free Code Camp es un camino probado para que obtengas tu primer trabajo de programación. De hecho, nadie actualmente ha completado nuestro programa entero, porque los campistas obtienen trabajos antes de poder hacerlo.",
""
],
[
"http://i.imgur.com/vLNso6h.jpg",
"Una ilustración mostrando que aprenderás HTML5, CSS3, JavaScript, Bases de Datos, Git, Node.js, react y D3.",
"Tenemos cientos de desafíos de programación opcionales que te enseñarán las tecnologías fundamentales para el desarrollo web como HTML5, Node.js y bases de datos.",
""
],
[
"http://i.imgur.com/UVB9hxp.jpg",
"Una foto de un campista en un café construyendo proyectos con Free Code Camp.",
"Creemos que los humanos aprender mejor haciendo. Así que en realidad emplearás la mayoría de tu tiempo construyendo proyectos. Te daremos una lista de especificaciones (historias de usuario ágiles), y te las ingeniarás para construir aplicaciones que cumplan esas especificaciones.",
""
],
[
"http://i.imgur.com/pbW7K5S.jpgk",
"Una imagen de los tiempos de nuestras certificaciones para desarrollo de interfaces, desarrollo al lado del servidor y visualización de datos (400 horas cada uno), para nuestros proyectos sin ánimo de lucro (800 horas) y preparación para entrevistas (80 horas) que dan un total de 2,080 horas e experiencia programando.",
"Nuestro currículo se divide en 4 certificaciones. Estas certificaciones están estandarizadas, y son verificables al instante por sus clientes como trabajador independiente y por sus futuros empleadores. Tal como todo lo demás en Free Code Camp, estas certificaciones son gratuitas. Recomendamos hacerlas en orden, pero usted es libre de saltar de una a otra. Las primeras tres certificaciones requieren 400 horas cada una, y la certificación final requiere 800 horas, e involucra construir proyectos de la vida real para organizaciones sin ánimo de lucro.",
""
],
[
"http://i.imgur.com/k8btNUB.jpg",
"Una imagen de nuestro Certificado de Desarrollo de Interfaces",
"Para obtener nuestra certificación verificada de Desarrollo de Interfaces, construirás 10 proyectos usando HTML, CSS, jQuery y JavaScript.",
""
],
[
"http://i.imgur.com/Et3iD74.jpg",
"Una imagen de nuestro Certificado de Visualización de Datos",
"Para obtener nuestra certificación en Visualización de Datos, construirás 10 proyectos usando React, Sass y D3.js.",
""
],
[
"http://i.imgur.com/8v3t84p.jpg",
"Una imagen de nuestro Certificado de Desarrollo al Lado del Servidor",
"Para obtener nuestro Certificado de Desarrollo al Lado del Servidor, construirás 10 proyectos empleando Node.js, Express y MongoDB. Usarás Git y Heroku para desplegarlos en la nube.",
""
],
[
"http://i.imgur.com/yXyxbDd.jpg",
"Una imagen de nuestro directorio de organizaciones sin ánimo de lucro.",
"Después de completar todos los tres certificados, harás equipo con otro campista y usarás metodologías de desarrollo ágil para construir dos proyectos de la vida real para organizaciones sin ánimo de lucro. También añadirás funcionalidad a dos proyectos de fuentes legadas de organizaciones sin ánimo de lucro. Cuando termines esto, tendrás un portafolio de aplicaciones reales que la gente usa a diario. ",
""
],
[
"http://i.imgur.com/PDGQ9ZM.jpg",
"Una imagen de nuestros campistas construyendo proyectos juntos en un café en Seoul.",
"Si completas todas las 2,080 horas de desafíos y proyectos, obtendrás un Certificado de Desarrollo de Pila Completa. Te ofreceremos gratuitamente una práctica en entrevistas para desarrolladores. Incluso ofrecemos un directorio de trabajos donde los empleadores contratan específicamente campistas que han recibido certificaciones de Free Code Camp.",
""
]
],
"nameFr": "Apprenez comment FreeCodeCamp fonctionne",
"titleFr": "Apprenez comment FreeCodeCamp fonctionne",
"descriptionFr": [
[
"http://i.imgur.com/6ibIavQ.jpg",
@ -234,10 +159,141 @@
"Si vous finissez les 2.080 heures de défis et projets, vous gagnerez notre certification complète Stack développement . Nous vous offrons gratuitement la pratique d'entrevue de codage . Nous offrons même un accès à notre si d'emploi où les employeurs embauchent spécifiquement les développeurs qui ont obtenu des certificats de Free Code Camp.",
""
]
],
"titleEs": "Aprende como funciona Free Code Camp",
"descriptionEs": [
[
"http://i.imgur.com/6ibIavQ.jpg",
"Una imagen de los 4 beneficios de Free Code Camp: Conéctate, Aprende JavaScript, Construye tu Portafolio, Ayuda organizaciones sin ánimo de lucro",
"Bienvenido a Free Code Camp. Somos una comunidad de código abierto formada por personas ocupadas quienes aprenden a programar y ayudan a organizaciones sin ánimo de lucro.",
""
],
[
"http://i.imgur.com/Elb3dfj.jpg",
"Una imagen de algunos de nuestros campistas programando juntos en Toronto.",
"<bold>Aprender a programar es difícil.</bold> Para tener éxito, necesitarás mucha práctica y apoyo. Por eso es que hemos creado un riguroso currículo y una comunidad de apoyo.",
""
],
[
"http://i.imgur.com/D7Y5luw.jpg",
"Una gráfica del crecimiento de trabajos en comparación con los graduados en un pregrado de ciencias de la computación. Hay 1.4 millones de empleos y solo 400 mil personas para ocuparlos.",
"Actualmente, hay miles de trabajos de programación sin ocupar, y la demanda de programadores crece cada año.",
""
],
[
"http://i.imgur.com/WD3STY6.jpg",
"Fotos de tres campistas quienes obtuvieron trabajos después de aprender a programar en Free Code Camp.",
"Free Code Camp es un camino probado para que obtengas tu primer trabajo de programación. De hecho, nadie actualmente ha completado nuestro programa entero, porque los campistas obtienen trabajos antes de poder hacerlo.",
""
],
[
"http://i.imgur.com/vLNso6h.jpg",
"Una ilustración mostrando que aprenderás HTML5, CSS3, JavaScript, Bases de Datos, Git, Node.js, react y D3.",
"Tenemos cientos de desafíos de programación opcionales que te enseñarán las tecnologías fundamentales para el desarrollo web como HTML5, Node.js y bases de datos.",
""
],
[
"http://i.imgur.com/UVB9hxp.jpg",
"Una foto de un campista en un café construyendo proyectos con Free Code Camp.",
"Creemos que los humanos aprender mejor haciendo. Así que en realidad emplearás la mayoría de tu tiempo construyendo proyectos. Te daremos una lista de especificaciones (historias de usuario ágiles), y te las ingeniarás para construir aplicaciones que cumplan esas especificaciones.",
""
],
[
"http://i.imgur.com/pbW7K5S.jpgk",
"Una imagen de los tiempos de nuestras certificaciones para desarrollo de interfaces, desarrollo al lado del servidor y visualización de datos (400 horas cada uno), para nuestros proyectos sin ánimo de lucro (800 horas) y preparación para entrevistas (80 horas) que dan un total de 2,080 horas e experiencia programando.",
"Nuestro currículo se divide en 4 certificaciones. Estas certificaciones están estandarizadas, y son verificables al instante por sus clientes como trabajador independiente y por sus futuros empleadores. Tal como todo lo demás en Free Code Camp, estas certificaciones son gratuitas. Recomendamos hacerlas en orden, pero usted es libre de saltar de una a otra. Las primeras tres certificaciones requieren 400 horas cada una, y la certificación final requiere 800 horas, e involucra construir proyectos de la vida real para organizaciones sin ánimo de lucro.",
""
],
[
"http://i.imgur.com/k8btNUB.jpg",
"Una imagen de nuestro Certificado de Desarrollo de Interfaces",
"Para obtener nuestra certificación verificada de Desarrollo de Interfaces, construirás 10 proyectos usando HTML, CSS, jQuery y JavaScript.",
""
],
[
"http://i.imgur.com/Et3iD74.jpg",
"Una imagen de nuestro Certificado de Visualización de Datos",
"Para obtener nuestra certificación en Visualización de Datos, construirás 10 proyectos usando React, Sass y D3.js.",
""
],
[
"http://i.imgur.com/8v3t84p.jpg",
"Una imagen de nuestro Certificado de Desarrollo al Lado del Servidor",
"Para obtener nuestro Certificado de Desarrollo al Lado del Servidor, construirás 10 proyectos empleando Node.js, Express y MongoDB. Usarás Git y Heroku para desplegarlos en la nube.",
""
],
[
"http://i.imgur.com/yXyxbDd.jpg",
"Una imagen de nuestro directorio de organizaciones sin ánimo de lucro.",
"Después de completar todos los tres certificados, harás equipo con otro campista y usarás metodologías de desarrollo ágil para construir dos proyectos de la vida real para organizaciones sin ánimo de lucro. También añadirás funcionalidad a dos proyectos de fuentes legadas de organizaciones sin ánimo de lucro. Cuando termines esto, tendrás un portafolio de aplicaciones reales que la gente usa a diario. ",
""
],
[
"http://i.imgur.com/PDGQ9ZM.jpg",
"Una imagen de nuestros campistas construyendo proyectos juntos en un café en Seoul.",
"Si completas todas las 2,080 horas de desafíos y proyectos, obtendrás un Certificado de Desarrollo de Pila Completa. Te ofreceremos gratuitamente una práctica en entrevistas para desarrolladores. Incluso ofrecemos un directorio de trabajos donde los empleadores contratan específicamente campistas que han recibido certificaciones de Free Code Camp.",
""
]
]
},
{
"id": "560add37cb82ac38a17513bf",
"descriptionJa": [
[
"http://i.imgur.com/EAR7Lvh.jpg",
"Gitterチャットルームの一場面です。",
"コーディングを始める前に、Free Code Camp のチャットルームに参加してください。いつでも、雑談や質問ができたりペアプログラミングをするための仲間を見つけ流ことができます。最初に Github アカウントが必要です。",
""
],
[
"http://i.imgur.com/n6GeSEm.gif",
"この gif は Github を開始するまでの流れを表しています。必要な欄に情報を入れて登録をしてください。そして Github からあなたのメールアドレス宛にメールが届きますのでアカウントを承認してください。",
"\"Open link in new tab\"をクリックして Github を開いてください。 必要な欄に情報を入力して GitHub アカウントを作ってください。実際に使われている email アドレスかを確認してください( GitHub にはこの情報が保存されます )。メールアドレス宛に GitHub からメールが来たことを確認してください。 メールにある\"verify email address\"をクリックして開いてください。<br><div class=\"small\">注意: もしすでに GitHub アカウントを持っていたら、あなたは \"Open link in new tab\" をクリックすることでこのステップを飛ばすことができます、新しく開かれたタブを閉じて \"go to my next step\" をクリックしてください。私たちはこの大事なステップが飛ばされてしまうのを防ぐために \"このステップを飛ばす\" ボタンは削除してあります。</div>",
"https://github.com/join"
],
[
"http://i.imgur.com/hFqAEr8.gif",
"この gif は Github の右上にあるプロフィール画像をクリックする方法です。あなたの写真をアップロードするか、自動で生成されるピクセルアートを利用してください。そして、残りの欄に情報を入力し submit ボタンを押してください。",
"GitHub の右上に表示されているピクセルアートをクリックしてください、そして settings を選んでください。あなたの画像をアップロードしてください。画像はあなたの顔が写っていると良いです。他のキャンパーズの仲間たちがチャットルームであなたを見かけるようになります。住んでいる場所や名前を登録することもできます",
"https://github.com/settings/profile"
],
[
"http://i.imgur.com/pYk0wOk.gif",
"この gif は GitHub のレポジトリへのスターをつける方法です。",
"オープンソースの Free Code Camp のレポジトリを開いてください。これは私たちボランティアチームの協力者が Free Code Camp で作っているものです。あなたは \"star\" を私たちのリポジトリに付けることができます。\"star を付けること\"は GitHub での \"いいね\" と一緒です。",
"https://github.com/freecodecamp/freecodecamp"
],
[
"http://i.imgur.com/OmRmLB4.gif",
"この git は私たちのチャットルームへのリンクをクリックして、\"sign in with GitHub\" ボタンをクリックしています。そして、テキストを入力してキャンパーズの仲間へメッセージを送る方法を表しています。",
"あなたは Github のアカウントを持っているので、私たちのチャットルームへ GitHub を利用してログインできます。\"Hellow world!\" と言って自己紹介をし、あなたがどうやって Free Code Camp を見つけたかや何故プログラミングを学びたいのかを私たちに話してください。",
"https://gitter.im/FreeCodeCamp/FreeCodeCamp"
],
[
"http://i.imgur.com/Ecs5XAd.gif",
"この gif は右上の settings ボタンを押すことで、通知の設定を変更する方法を表しています。",
"私たちのチャットルームはとても活発です。あなたは誰かがあなたに対してメンションを送った時にだけ通知してもらうように設定を変更した方が良いでしょう。",
""
],
[
"http://i.imgur.com/T0bGJPe.gif",
"この gif はどうやって該当するユーザに向けて個人的なメーッセージを送れるようにするかを表しています。",
"私たちのチャットルームは全て公開されているので、もしあなたが個人的な情報(メールアドレスや電話番号)を共有したい場合には、プライベートメッセージを利用してください。",
""
],
[
"http://i.imgur.com/vDTMJSh.gif",
"この gif はチャレンジとチャットルームへの行き来がタブを戻すことでできることを表しています。",
"私たちのチャレンジを通して作業をしている間はチャットルームを開いておくと良いでしょう。そうすることで、必要な時に助けを求めることができます。あなたは休憩をしているかのように他のキャンパーズと関わりを持てるでしょう。",
""
],
[
"http://i.imgur.com/WvQvNGN.gif",
"この gif は、チャットルームアプリをあなたのコンピュータに直接インストールするためにダウンロードする方法を表しています。",
"チャットルームのアプリをスマホや自分のパソコンにダウンロードして使うことができます。",
"https://gitter.im/apps"
]
],
"title": "Create a GitHub Account and Join our Chat Rooms",
"description": [
[
@ -298,8 +354,64 @@
"challengeSeed": [],
"tests": [],
"type": "Waypoint",
"challengeType": 7,
"nameEs": "Crea una Cuenta de GitHub y Únete a nuestras Salas de Chat",
"titleFr": "Créer un compte GitHub et rejoignez nos Salons de chat",
"descriptionFr": [
[
"http://i.imgur.com/EAR7Lvh.jpg",
"Une capture d'écran de notre l'un de nos Gitter salles de chat.",
"Avant de commencer à coder, nous allons rejoindre les salles de chat de Camp Code Free . Vous pouvez venir ici tout moment de la journée pour se détendre , poser des questions , ou trouver un autre camping de jumeler programme avec. D'abord, vous aurez besoin d'un compte GitHub.",
""
],
[
"http://i.imgur.com/n6GeSEm.gif",
"Un gif vous montrant à cliquer sur le lien ci-dessous pour aller à GitHub . Remplissez les champs nécessaires et cliquez sur soumettre . Ensuite, vérifiez votre boîte de réception pour un courriel de GitHub sorte que vous pouvez vérifier votre compte.",
"Cliquez sur le \"lien Ouvrir dans une nouvelle touche de tabulation\" ci-dessous pour ouvrir GitHub. Créer un compte GitHub en remplissant le formulaire . Assurez-vous d'utiliser votre adresse email réelle - GitHub gardera cette privé. Ensuite, vérifiez votre boîte de réception pour un courriel de GitHub. Ouvrez-le et cliquez sur \"l'adresse email sur vérifier\" l'intérieur. <br><div class=\"small\">Remarque: Si vous avez déjà un compte GitHub , vous pouvez sauter cette étape en cliquant sur \"Ouvrir le lien dans un nouvel onglet\", fermeture le nouvel onglet qui ouvre, puis en cliquant \"aller à ma prochaine étape\". Nous avons retiré notre bouton de \"l'étape de saut\" , car beaucoup de gens il suffit de cliquer à plusieurs reprises sans faire ces étapes importantes.</div>",
"https://github.com/join"
],
[
"http://i.imgur.com/hFqAEr8.gif",
"Un gif vous montrant comment cliquez sur l' image de profil dans le coin supérieur droit de GitHub. Télécharger une photo de vous-même ou vous allez continuer à utiliser l'art de pixel généré automatiquement . Ensuite, remplissez les champs du formulaire restants et cliquez sur soumettre.",
"Cliquez sur le pixel art dans le coin supérieur droit de GitHub , puis choisissez les paramètres . Télécharger une photo de vous-même. Une photo de votre visage qui fonctionne le mieux . Voici comment les autres campeurs vous voir dans nos salles de chat , donc regarder votre meilleur . Vous pouvez ajouter votre ville et votre nom si vous voulez.",
"https://github.com/settings/profile"
],
[
"http://i.imgur.com/pYk0wOk.gif",
"Un gif montrant comment vous pouvez activer un repo GitHub.",
"Ouvrez open-source du dépôt central de Camp Code Free . Ceci est où notre équipe de bénévoles collabore à la construction de Camp Code Free. Vous pouvez \"star\" notre référentiel. Mettant en \"vedette\" est la GitHub équivalent de \"goût\" quelque chose.",
"https://github.com/freecodecamp/freecodecamp"
],
[
"http://i.imgur.com/OmRmLB4.gif",
"Un gif vous montrant comment Cliquez sur le lien ci-dessous pour accéder à notre salle de chat et cliquez sur \"Se connecter avec\" bouton GitHub. Puis vous pouvez cliquer dans le champ de saisie de texte et saisissez un message à vos amis campeurs.",
"Maintenant que vous avez une GitHub compte, vous pouvez vous joindre à notre principale salle de chat en vous connectant à GitHub. Présentez-vous en disant \"Hello World!\" avertissez votre amis campeurs comment vous avez trouvé Libre Code Camp. Aussi nous dire pourquoi vous voulez apprendre à code.",
"https://gitter.im/FreeCodeCamp/FreeCodeCamp"
],
[
"http://i.imgur.com/Ecs5XAd.gif",
"Un gif vous montrant comment vous pouvez cliquez sur le bouton Réglages dans le coin supérieur droit et modifier vos paramètres de notification.",
"Nos salles de chat sont extrêmement actifs. Vous devez modifier vos paramètres pour vous're notifié que si quelqu'un vous mentionne.",
""
],
[
"http://i.imgur.com/T0bGJPe.gif",
"Un gif montrant comment vous pouvez cliquer sur une image de profil utilisateur pour lancer un message privé avec cet utilisateur.",
"Veuillez noter que tous nos salons de chat sont visibles pour le public. Si vous avez besoin de partager des informations sensibles, comme un numéro de téléphone ou l'adresse e-mail, faites-le dans un message privé.",
""
],
[
"http://i.imgur.com/vDTMJSh.gif",
"Un gif montrant que vous pouvez Tab et retour entre défis et nos salles de chat.",
"Garder notre salle de discussion ouverte pendant que vous travaillez à travers nos défis. De cette façon, vous pouvez demander de l'aide si vous êtes coincé. Vous pouvez également socialiser avec d'autres campeurs lorsque vous sentez comme prendre une pause.",
""
],
[
"http://i.imgur.com/WvQvNGN.gif",
"Un gif montrant comment vous pouvez cliquer sur le lien ci-dessous pour télécharger un natif salle de chat app pour votre ordinateur.",
"Vous pouvez également télécharger la salle de chat app pour votre ordinateur ou votre téléphone.",
"https://gitter.im/apps"
]
],
"titleEs": "Crea una Cuenta de GitHub y Únete a nuestras Salas de Chat",
"descriptionEs": [
[
"http://i.imgur.com/EAR7Lvh.jpg",
@ -357,120 +469,8 @@
"https://gitter.im/apps"
]
],
"nameFr": "Créer un compte GitHub et rejoignez nos Salons de chat",
"descriptionFr": [
[
"http://i.imgur.com/EAR7Lvh.jpg",
"Une capture d'écran de notre l'un de nos Gitter salles de chat.",
"Avant de commencer à coder, nous allons rejoindre les salles de chat de Camp Code Free . Vous pouvez venir ici tout moment de la journée pour se détendre , poser des questions , ou trouver un autre camping de jumeler programme avec. D'abord, vous aurez besoin d'un compte GitHub.",
""
],
[
"http://i.imgur.com/n6GeSEm.gif",
"Un gif vous montrant à cliquer sur le lien ci-dessous pour aller à GitHub . Remplissez les champs nécessaires et cliquez sur soumettre . Ensuite, vérifiez votre boîte de réception pour un courriel de GitHub sorte que vous pouvez vérifier votre compte.",
"Cliquez sur le \"lien Ouvrir dans une nouvelle touche de tabulation\" ci-dessous pour ouvrir GitHub. Créer un compte GitHub en remplissant le formulaire . Assurez-vous d'utiliser votre adresse email réelle - GitHub gardera cette privé. Ensuite, vérifiez votre boîte de réception pour un courriel de GitHub. Ouvrez-le et cliquez sur \"l'adresse email sur vérifier\" l'intérieur. <br><div class=\"small\">Remarque: Si vous avez déjà un compte GitHub , vous pouvez sauter cette étape en cliquant sur \"Ouvrir le lien dans un nouvel onglet\", fermeture le nouvel onglet qui ouvre, puis en cliquant \"aller à ma prochaine étape\". Nous avons retiré notre bouton de \"l'étape de saut\" , car beaucoup de gens il suffit de cliquer à plusieurs reprises sans faire ces étapes importantes.</div>",
"https://github.com/join"
],
[
"http://i.imgur.com/hFqAEr8.gif",
"Un gif vous montrant comment cliquez sur l' image de profil dans le coin supérieur droit de GitHub. Télécharger une photo de vous-même ou vous allez continuer à utiliser l'art de pixel généré automatiquement . Ensuite, remplissez les champs du formulaire restants et cliquez sur soumettre.",
"Cliquez sur le pixel art dans le coin supérieur droit de GitHub , puis choisissez les paramètres . Télécharger une photo de vous-même. Une photo de votre visage qui fonctionne le mieux . Voici comment les autres campeurs vous voir dans nos salles de chat , donc regarder votre meilleur . Vous pouvez ajouter votre ville et votre nom si vous voulez.",
"https://github.com/settings/profile"
],
[
"http://i.imgur.com/pYk0wOk.gif",
"Un gif montrant comment vous pouvez activer un repo GitHub.",
"Ouvrez open-source du dépôt central de Camp Code Free . Ceci est où notre équipe de bénévoles collabore à la construction de Camp Code Free. Vous pouvez \"star\" notre référentiel. Mettant en \"vedette\" est la GitHub équivalent de \"goût\" quelque chose.",
"https://github.com/freecodecamp/freecodecamp"
],
[
"http://i.imgur.com/OmRmLB4.gif",
"Un gif vous montrant comment Cliquez sur le lien ci-dessous pour accéder à notre salle de chat et cliquez sur \"Se connecter avec\" bouton GitHub. Puis vous pouvez cliquer dans le champ de saisie de texte et saisissez un message à vos amis campeurs.",
"Maintenant que vous avez une GitHub compte, vous pouvez vous joindre à notre principale salle de chat en vous connectant à GitHub. Présentez-vous en disant \"Hello World!\" avertissez votre amis campeurs comment vous avez trouvé Libre Code Camp. Aussi nous dire pourquoi vous voulez apprendre à code.",
"https://gitter.im/FreeCodeCamp/FreeCodeCamp"
],
[
"http://i.imgur.com/Ecs5XAd.gif",
"Un gif vous montrant comment vous pouvez cliquez sur le bouton Réglages dans le coin supérieur droit et modifier vos paramètres de notification.",
"Nos salles de chat sont extrêmement actifs. Vous devez modifier vos paramètres pour vous're notifié que si quelqu'un vous mentionne.",
""
],
[
"http://i.imgur.com/T0bGJPe.gif",
"Un gif montrant comment vous pouvez cliquer sur une image de profil utilisateur pour lancer un message privé avec cet utilisateur.",
"Veuillez noter que tous nos salons de chat sont visibles pour le public. Si vous avez besoin de partager des informations sensibles, comme un numéro de téléphone ou l'adresse e-mail, faites-le dans un message privé.",
""
],
[
"http://i.imgur.com/vDTMJSh.gif",
"Un gif montrant que vous pouvez Tab et retour entre défis et nos salles de chat.",
"Garder notre salle de discussion ouverte pendant que vous travaillez à travers nos défis. De cette façon, vous pouvez demander de l'aide si vous êtes coincé. Vous pouvez également socialiser avec d'autres campeurs lorsque vous sentez comme prendre une pause.",
""
],
[
"http://i.imgur.com/WvQvNGN.gif",
"Un gif montrant comment vous pouvez cliquer sur le lien ci-dessous pour télécharger un natif salle de chat app pour votre ordinateur.",
"Vous pouvez également télécharger la salle de chat app pour votre ordinateur ou votre téléphone.",
"https://gitter.im/apps"
]
],
"nameJa": "Githubアカウントを作成し、チャットに参加しましょう",
"descriptionJa": [
[
"http://i.imgur.com/EAR7Lvh.jpg",
"Gitterチャットルームの一場面です。",
"コーディングを始める前に、Free Code Camp のチャットルームに参加してください。いつでも、雑談や質問ができたりペアプログラミングをするための仲間を見つけ流ことができます。最初に Github アカウントが必要です。",
""
],
[
"http://i.imgur.com/n6GeSEm.gif",
"この gif は Github を開始するまでの流れを表しています。必要な欄に情報を入れて登録をしてください。そして Github からあなたのメールアドレス宛にメールが届きますのでアカウントを承認してください。",
"\"Open link in new tab\"をクリックして Github を開いてください。 必要な欄に情報を入力して GitHub アカウントを作ってください。実際に使われている email アドレスかを確認してください( GitHub にはこの情報が保存されます )。メールアドレス宛に GitHub からメールが来たことを確認してください。 メールにある\"verify email address\"をクリックして開いてください。<br><div class=\"small\">注意: もしすでに GitHub アカウントを持っていたら、あなたは \"Open link in new tab\" をクリックすることでこのステップを飛ばすことができます、新しく開かれたタブを閉じて \"go to my next step\" をクリックしてください。私たちはこの大事なステップが飛ばされてしまうのを防ぐために \"このステップを飛ばす\" ボタンは削除してあります。</div>",
"https://github.com/join"
],
[
"http://i.imgur.com/hFqAEr8.gif",
"この gif は Github の右上にあるプロフィール画像をクリックする方法です。あなたの写真をアップロードするか、自動で生成されるピクセルアートを利用してください。そして、残りの欄に情報を入力し submit ボタンを押してください。",
"GitHub の右上に表示されているピクセルアートをクリックしてください、そして settings を選んでください。あなたの画像をアップロードしてください。画像はあなたの顔が写っていると良いです。他のキャンパーズの仲間たちがチャットルームであなたを見かけるようになります。住んでいる場所や名前を登録することもできます",
"https://github.com/settings/profile"
],
[
"http://i.imgur.com/pYk0wOk.gif",
"この gif は GitHub のレポジトリへのスターをつける方法です。",
"オープンソースの Free Code Camp のレポジトリを開いてください。これは私たちボランティアチームの協力者が Free Code Camp で作っているものです。あなたは \"star\" を私たちのリポジトリに付けることができます。\"star を付けること\"は GitHub での \"いいね\" と一緒です。",
"https://github.com/freecodecamp/freecodecamp"
],
[
"http://i.imgur.com/OmRmLB4.gif",
"この git は私たちのチャットルームへのリンクをクリックして、\"sign in with GitHub\" ボタンをクリックしています。そして、テキストを入力してキャンパーズの仲間へメッセージを送る方法を表しています。",
"あなたは Github のアカウントを持っているので、私たちのチャットルームへ GitHub を利用してログインできます。\"Hellow world!\" と言って自己紹介をし、あなたがどうやって Free Code Camp を見つけたかや何故プログラミングを学びたいのかを私たちに話してください。",
"https://gitter.im/FreeCodeCamp/FreeCodeCamp"
],
[
"http://i.imgur.com/Ecs5XAd.gif",
"この gif は右上の settings ボタンを押すことで、通知の設定を変更する方法を表しています。",
"私たちのチャットルームはとても活発です。あなたは誰かがあなたに対してメンションを送った時にだけ通知してもらうように設定を変更した方が良いでしょう。",
""
],
[
"http://i.imgur.com/T0bGJPe.gif",
"この gif はどうやって該当するユーザに向けて個人的なメーッセージを送れるようにするかを表しています。",
"私たちのチャットルームは全て公開されているので、もしあなたが個人的な情報(メールアドレスや電話番号)を共有したい場合には、プライベートメッセージを利用してください。",
""
],
[
"http://i.imgur.com/vDTMJSh.gif",
"この gif はチャレンジとチャットルームへの行き来がタブを戻すことでできることを表しています。",
"私たちのチャレンジを通して作業をしている間はチャットルームを開いておくと良いでしょう。そうすることで、必要な時に助けを求めることができます。あなたは休憩をしているかのように他のキャンパーズと関わりを持てるでしょう。",
""
],
[
"http://i.imgur.com/WvQvNGN.gif",
"この gif は、チャットルームアプリをあなたのコンピュータに直接インストールするためにダウンロードする方法を表しています。",
"チャットルームのアプリをスマホや自分のパソコンにダウンロードして使うことができます。",
"https://gitter.im/apps"
]
]
"titleJa": "Githubアカウントを作成し、チャットに参加しましょう",
"challengeType": 7
},
{
"id": "560add56cb82ac38a17513c0",
@ -487,7 +487,7 @@
"tests": [],
"type": "Waypoint",
"challengeType": 7,
"nameEs": "Configura tu portafolio de código",
"titleEs": "Configura tu portafolio de código",
"descriptionEs": [
[
"http://i.imgur.com/tP2ccTE.gif",
@ -518,7 +518,16 @@
"tests": [],
"type": "Waypoint",
"challengeType": 7,
"nameEs": "Únete a un Campamento en Tu Ciudad",
"titleFr": "Configurer votre code portefeuille",
"descriptionFr": [
[
"http://i.imgur.com/tP2ccTE.gif",
"Un gif montrant comment vous pouvez cliquez sur l'image de votre profil dans votre coin supérieur droit à votre code portefeuille et connectez GitHub.",
"Vérifiez votre code portefeuille. Cliquez sur votre photo dans votre coin supérieur droit. Pour activer votre code portefeuille, vous'll nécessité de lier votre compte avec code sans GitHub Camp. Votre code portefeuille affiche votre progression et combien de bons points vous avez. Vous pouvez obtenir de bons points par remplir les défis et en aidant d'autres campeurs dans nos salles de chat. Si vous obtenez Brownie Points sur plusieurs jours d'affilée, vous'll obtenez une rayure.",
""
]
],
"titleEs": "Únete a un Campamento en Tu Ciudad",
"descriptionEs": [
[
"http://i.imgur.com/NAOFJWN.jpg",
@ -532,15 +541,6 @@
"Encuentra tu ciudad en esta lista y haz clic en esta. Esto te llevara al grupo de Facebook del Campamento de tu ciudad. Da clic en el botón de \"Unirse al grupo\" para unirte a el grupo. Alguien del mismo campamento debería aprobarte en breve. Si tu ciudad no esta en esta lista, ve al final del articulo de la wiki para ver instrucciones de como crear un campamento para tu ciudad.",
"https://github.com/FreeCodeCamp/freecodecamp/wiki/List-of-Free-Code-Camp-city-based-Campsites"
]
],
"nameFr": "Configurer votre code portefeuille",
"descriptionFr": [
[
"http://i.imgur.com/tP2ccTE.gif",
"Un gif montrant comment vous pouvez cliquez sur l'image de votre profil dans votre coin supérieur droit à votre code portefeuille et connectez GitHub.",
"Vérifiez votre code portefeuille. Cliquez sur votre photo dans votre coin supérieur droit. Pour activer votre code portefeuille, vous'll nécessité de lier votre compte avec code sans GitHub Camp. Votre code portefeuille affiche votre progression et combien de bons points vous avez. Vous pouvez obtenir de bons points par remplir les défis et en aidant d'autres campeurs dans nos salles de chat. Si vous obtenez Brownie Points sur plusieurs jours d'affilée, vous'll obtenez une rayure.",
""
]
]
},
{
@ -600,7 +600,58 @@
"tests": [],
"type": "Waypoint",
"challengeType": 7,
"nameEs": "Aprende que hacer si te quedas atascado",
"titleFr": "Apprenez quoi faire quand vous êtes bloqué ?",
"descriptionFr": [
[
"http://i.imgur.com/lzKvwU2.jpg",
"Le texte \"Coder est difficile.\"",
"Coder est difficile. Vous serez bloqué un jour ou l'autre. Même les développeurs expérimentés peuvent être bloqués. La solution est de savoir comment se débloquer.",
""
],
[
"http://i.imgur.com/sfsidp6.jpg",
"Le texte \"Etre un bon développeur prend du temps.\"",
"Etre un bon développeur prend du temps. Vous ne pouvez pas vous attendre à battre un maitre des echecs aprés 3 mois d'apprentissage. Ne vous attendez pas de construire le prochain Facebook aprés 3 mois de coding.",
""
],
[
"http://i.imgur.com/EoTfOyC.jpg",
"Une image de quelques uns de nos développeurs codant ensemble à Montreal.",
"Continuez de développer tous les jours et fréquentez d'autres développeurs et vous deviendrez un développeur prêt à l'emploi.",
""
],
[
"http://i.imgur.com/EWWZBag.jpg",
"Une image avec le texte \"1. Lisez l'erreur 2. Cherchez sur Google 3. Demandez de l'aide.",
"Chaque fois que vous êtes bloqué ou que vous ne savez pas quoi faire : Lisez-Cherchez-Demandez.",
""
],
[
"http://i.imgur.com/99BfAcK.jpg",
"Une image montrant la document jQuery",
"Lisez d'abord la documentation ou les messages d'erreurs. Le principal atout que les bon développeurs ont est la capacité d'interpréter et ensuite de suivre les instructions.",
""
],
[
"http://i.imgur.com/GxvrsFb.gif",
"Une image vous montrant comment fiare des recherches avancées sur Google. On commence par rentrer la requète \"jquery ne fonctionne pas lors du chargement de ma page\". Puis nous cliquons sur la barre de recherche et changeons la case à cocher \"Any time\" cochons la case \"au cours de l'année précédente\". Puis nous cliquons sur le résultat et lisons l'article et trouvons notre réponse.",
"Si cela ne vous aide pas, recherchez sur Google. De bonnes recherches sur Google demande pas mal de pratique. Quand vous recherchez sur Google, vous devez inclure le langage ou le framework que vous utilisez. Vous voulez aussi limiter vos résultats a une période récente.",
""
],
[
"http://i.imgur.com/LZYU7p2.gif",
"Une image vous montrant le lien ci-dessous pour rejoindre le char et demander \"jquery ne fonctionne pas lors du chargement de ma page\".",
"Si cela ne vous aide pas, demande à vos amis. Si vous avez des difficultés, vous pouvez demander aux autres développeurs sur le chat.",
"https://gitter.im/FreeCodeCamp/Help"
],
[
"http://i.imgur.com/ZRgXraT.gif",
"Une image vous montrant le cursus de notre carte des défis.",
"Maintenant vous être prêt pour commencer à coder. Le boutton \"Map\" situé en haut à droite de votre écran vous montrera notre carte des défis. Nous vous recommandons de les completer du début jusqu'à la fin, régulièrement. Notre communauté open source continue de d'améliorer nos défis, ne soyez donc pas surpris si ils changent ou évoluent. Ce n'est pas la peine de revenir en arrière, continuez à progresser. Vous pouvez toujours accéder à nos derniers défis juste en cliquant sur le boutton \"Learn\".",
""
]
],
"titleEs": "Aprende que hacer si te quedas atascado",
"descriptionEs": [
[
"http://i.imgur.com/lzKvwU2.jpg",
@ -650,57 +701,6 @@
"Ahora estas listo para empezar a programar. El botón de \"Mapa\" en tu esquina superior derecha te mostrará nuestro mapa de desafíos. Te recomendaos que completes los desafíos de arriba hacía abajo, a un ritmo sostenible. Nuestra comunidad de código abierto esta constantemente mejorando nuestros desafíos, así que no te sorprendas si cambian o se mueven alrededor. No te preocupes por volver hacia atrás - solo continúa avanzando. Siempre puedes ir a tu desafío más reciente pulsando el botón de \"Aprender\".",
""
]
],
"nameFr": "Apprenez quoi faire quand vous êtes bloqué ?",
"descriptionFr": [
[
"http://i.imgur.com/lzKvwU2.jpg",
"Le texte \"Coder est difficile.\"",
"Coder est difficile. Vous serez bloqué un jour ou l'autre. Même les développeurs expérimentés peuvent être bloqués. La solution est de savoir comment se débloquer.",
""
],
[
"http://i.imgur.com/sfsidp6.jpg",
"Le texte \"Etre un bon développeur prend du temps.\"",
"Etre un bon développeur prend du temps. Vous ne pouvez pas vous attendre à battre un maitre des echecs aprés 3 mois d'apprentissage. Ne vous attendez pas de construire le prochain Facebook aprés 3 mois de coding.",
""
],
[
"http://i.imgur.com/EoTfOyC.jpg",
"Une image de quelques uns de nos développeurs codant ensemble à Montreal.",
"Continuez de développer tous les jours et fréquentez d'autres développeurs et vous deviendrez un développeur prêt à l'emploi.",
""
],
[
"http://i.imgur.com/EWWZBag.jpg",
"Une image avec le texte \"1. Lisez l'erreur 2. Cherchez sur Google 3. Demandez de l'aide.",
"Chaque fois que vous êtes bloqué ou que vous ne savez pas quoi faire : Lisez-Cherchez-Demandez.",
""
],
[
"http://i.imgur.com/99BfAcK.jpg",
"Une image montrant la document jQuery",
"Lisez d'abord la documentation ou les messages d'erreurs. Le principal atout que les bon développeurs ont est la capacité d'interpréter et ensuite de suivre les instructions.",
""
],
[
"http://i.imgur.com/GxvrsFb.gif",
"Une image vous montrant comment fiare des recherches avancées sur Google. On commence par rentrer la requète \"jquery ne fonctionne pas lors du chargement de ma page\". Puis nous cliquons sur la barre de recherche et changeons la case à cocher \"Any time\" cochons la case \"au cours de l'année précédente\". Puis nous cliquons sur le résultat et lisons l'article et trouvons notre réponse.",
"Si cela ne vous aide pas, recherchez sur Google. De bonnes recherches sur Google demande pas mal de pratique. Quand vous recherchez sur Google, vous devez inclure le langage ou le framework que vous utilisez. Vous voulez aussi limiter vos résultats a une période récente.",
""
],
[
"http://i.imgur.com/LZYU7p2.gif",
"Une image vous montrant le lien ci-dessous pour rejoindre le char et demander \"jquery ne fonctionne pas lors du chargement de ma page\".",
"Si cela ne vous aide pas, demande à vos amis. Si vous avez des difficultés, vous pouvez demander aux autres développeurs sur le chat.",
"https://gitter.im/FreeCodeCamp/Help"
],
[
"http://i.imgur.com/ZRgXraT.gif",
"Une image vous montrant le cursus de notre carte des défis.",
"Maintenant vous être prêt pour commencer à coder. Le boutton \"Map\" situé en haut à droite de votre écran vous montrera notre carte des défis. Nous vous recommandons de les completer du début jusqu'à la fin, régulièrement. Notre communauté open source continue de d'améliorer nos défis, ne soyez donc pas surpris si ils changent ou évoluent. Ce n'est pas la peine de revenir en arrière, continuez à progresser. Vous pouvez toujours accéder à nos derniers défis juste en cliquant sur le boutton \"Learn\".",
""
]
]
}
]

View File

@ -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",

View File

@ -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"
}
]
}

View File

@ -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&#39;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&#39;m a little tea pot\")</code> should return \"I&#39;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' &harr; 'N', 'B' &harr; '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"
}
]
}

View File

@ -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>&gt;</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>&gt;</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>&gt;=</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>&gt;=</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>&lt;</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>&lt;</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 &lt; 5 // true<br>'3' &lt; 7 // true<br> 5 &lt; 5 // false<br> 3 &lt; 2 // false<br>'8' &lt; 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>&lt;=</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>&lt;=</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 &lt;= 5 // true<br>'7' &lt;= 7 // true<br> 5 &lt;= 5 // true<br> 3 &lt;= 2 // false<br>'8' &lt;= 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>&lt;= 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>&gt;= 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 &lt; arr.length; i++) {<br> for (var j=0; j &lt; 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. ",

View File

@ -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
]
}
]
}

View File

@ -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>&#60;div class=\"row\"&#62;</code>. Luego, anida cada uno de ellos dentro de un elemento <code>&#60;div class=\"col-xs-6\"&#62;</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>&#60;div class=\"row\"&#62;</code>. Luego, anida cada una de ellas en un elemento <code>&#60;div class=\"col-xs-4\"&#62;</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>&#60;i class=\"fa fa-paper-plane\"&#62;&#60;/i&#62;</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.",

View File

@ -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"
}
]
}

View File

@ -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 @@
]
}
]
}
}

View File

@ -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 = { '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&apos;'};\n\nfunction convert(str) {\n return str.replace(/[&<>\"']/g, function(c) {\n return MAP[c];\n });\n}"
],
"tests": [
"assert.match(convert(\"Dolce & Gabbana\"), /Dolce &amp; Gabbana/, 'message: <code>convert(\"Dolce & Gabbana\")</code> should return <code>Dolce &&#8203;amp; Gabbana</code>.');",
"assert.match(convert(\"Hamburgers < Pizza < Tacos\"), /Hamburgers &lt; Pizza &lt; Tacos/, 'message: <code>convert(\"Hamburgers < Pizza < Tacos\")</code> should return <code>Hamburgers &&#8203;lt; Pizza &&#8203;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>&lt;<code>, <code>&gt;<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 = { '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&apos;'};\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&#39;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}"
]
}
]

View File

@ -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"
}
]
}

View File

@ -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>&#60;div class=\"container-fluid\"&#62</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>&#60;div class=\"container-fluid\"&#62</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>.",

View File

@ -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 += \"&lt;div class = 'cat'&gt;\";</br> keys.forEach(function(key) {</br> html += \"&lt;b&gt;\" + key + \"&lt;/b&gt;: \" + val[key] + \"&lt;br&gt;\";</br> });</br> html += \"&lt;/div&gt;&lt;br&gt;\";</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 += \"&lt;img src = '\" + val.imageLink + \"'&gt;\";</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 + \"&lt;br&gt;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",

View File

@ -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`: ",

View File

@ -13,9 +13,7 @@
"tests": [],
"type": "waypoint",
"challengeType": 3,
"nameEs": "Desafios para aprender D3",
"descriptionEs": []
"titleEs": "Desafios para aprender D3"
}
]
}

View File

@ -92,7 +92,6 @@
],
"type": "Waypoint",
"challengeType": 7,
"nameEs": "Reclama tu certificado de Visualización de datos",
"descriptionEs": [
[
"http://i.imgur.com/Et3iD74.jpg",
@ -118,7 +117,8 @@
"¡Felicitaciones! Hemos agregado tu certificado de Visualización de datos a tu portafolio. A menos que elijas no mostrar tus soluciones, este certificado será públicamente visible y verificable.",
""
]
]
],
"titleEs": "Reclama tu certificado de Visualización de datos"
}
]
}

View File

@ -19,14 +19,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": [
"150324699"
],
"tests": [],
"isRequired": true,
"releasedOn": "January 1, 2016",
"type": "zipline",
"challengeType": 3,
"nameEs": "Visualiza datos utilizando un gráfico de barras",
"titleEs": "Visualiza datos utilizando un gráfico de barras",
"descriptionEs": [
"<strong>Objetivo:</strong> Construye una aplicación en <a href='http://codepen.io' target='_blank'>CodePen.io</a> que funcione de forma similar al siguiente ejemplo: <a href='http://codepen.io/FreeCodeCamp/full/adBBWd' target='_blank'>http://codepen.io/FreeCodeCamp/full/adBBWd</a>.",
"<strong>Regla #1:</strong> No veas el código del proyecto de ejemplo. Encuentra la forma de hacerlo por tu cuenta.",
@ -38,8 +39,7 @@
"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.",
"Cuando termines, haz clic en el botón de \"I've completed this challenge\" e incluye el vínculo de tu proyecto en CodePen. ",
"Puedes obtener retroalimentación acerca de tu proyecto de parte de tus compañeros campistas compartiéndolo en nuestro <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Cuarto de revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)."
],
"isRequired": true
]
},
{
"id": "bd7178d8c242eddfaeb5bd13",
@ -56,14 +56,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": [
"150324700"
],
"tests": [],
"isRequired": true,
"releasedOn": "January 1, 2016",
"type": "zipline",
"challengeType": 3,
"nameEs": "Visualiza datos utilizando un gráfico de dispersión",
"titleEs": "Visualiza datos utilizando un gráfico de dispersión",
"descriptionEs": [
"<strong>Objetivo:</strong> Construye una aplicación en <a href='http://codepen.io' target='_blank'>CodePen.io</a> que funcione de forma similar al siguiente ejemplo: <a href='http://codepen.io/FreeCodeCamp/full/GoNNEy' target='_blank'>http://codepen.io/FreeCodeCamp/full/GoNNEy</a>.",
"<strong>Regla #1:</strong> No veas el código del proyecto de ejemplo. Encuentra la forma de hacerlo por tu cuenta.",
@ -75,8 +76,7 @@
"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.",
"Cuando termines, haz clic en el botón de \"I've completed this challenge\" e incluye el vínculo de tu proyecto en CodePen. ",
"Puedes obtener retroalimentación acerca de tu proyecto de parte de tus compañeros campistas compartiéndolo en nuestro <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Cuarto de revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)."
],
"isRequired": true
]
},
{
"id": "bd7188d8c242eddfaeb5bd13",
@ -94,14 +94,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": [
"150324701"
],
"tests": [],
"isRequired": true,
"releasedOn": "January 1, 2016",
"type": "zipline",
"challengeType": 3,
"nameEs": "Visualiza datos utilizando un mapa de calor",
"titleEs": "Visualiza datos utilizando un mapa de calor",
"descriptionEs": [
"<strong>Objetivo:</strong> Construye una aplicación en <a href='http://codepen.io' target='_blank'>CodePen.io</a> que funcione de forma similar al siguiente ejemplo: <a href='http://codepen.io/FreeCodeCamp/full/rxWWGa' target='_blank'>http://codepen.io/FreeCodeCamp/full/rxWWGa</a>.",
"<strong>Regla #1:</strong> No veas el código del proyecto de ejemplo. Encuentra la forma de hacerlo por tu cuenta.",
@ -114,8 +115,7 @@
"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.",
"Cuando termines, haz clic en el botón de \"I've completed this challenge\" e incluye el vínculo de tu proyecto en CodePen. ",
"Puedes obtener retroalimentación acerca de tu proyecto de parte de tus compañeros campistas compartiéndolo en nuestro <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Cuarto de revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)."
],
"isRequired": true
]
},
{
"id": "bd7198d8c242eddfaeb5bd13",
@ -135,14 +135,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": [
"150324458"
],
"tests": [],
"isRequired": true,
"releasedOn": "January 1, 2016",
"type": "zipline",
"challengeType": 3,
"nameEs": "Muestra asociaciones utilizando un gráfico de fuerzas dirigidas",
"titleEs": "Muestra asociaciones utilizando un gráfico de fuerzas dirigidas",
"descriptionEs": [
"<strong>Objetivo:</strong> Construye una aplicación en <a href='http://codepen.io' target='_blank'>CodePen.io</a> que funcione de forma similar al siguiente ejemplo: <a href='http://codepen.io/FreeCodeCamp/full/KVNNXY' target='_blank'>http://codepen.io/FreeCodeCamp/full/KVNNXY</a>.",
"<strong>Regla #1:</strong> No veas el código del proyecto de ejemplo. Encuentra la forma de hacerlo por tu cuenta.",
@ -157,8 +158,7 @@
"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.",
"Cuando termines, haz clic en el botón de \"I've completed this challenge\" e incluye el vínculo de tu proyecto en CodePen. ",
"Puedes obtener retroalimentación acerca de tu proyecto de parte de tus compañeros campistas compartiéndolo en nuestro <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Cuarto de revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)."
],
"isRequired": true
]
},
{
"id": "bd7108d8c242eddfaeb5bd13",
@ -176,14 +176,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": [
"150324698"
],
"tests": [],
"isRequired": true,
"releasedOn": "January 1, 2016",
"type": "zipline",
"challengeType": 3,
"nameEs": "Mapea datos a lo largo del Globo",
"titleEs": "Mapea datos a lo largo del Globo",
"descriptionEs": [
"<strong>Objetivo:</strong> Construye una aplicación en <a href='http://codepen.io' target='_blank'>CodePen.io</a> que funcione de forma similar al siguiente ejemplo: <a href='http://codepen.io/FreeCodeCamp/full/mVEJag' target='_blank'>http://codepen.io/FreeCodeCamp/full/mVEJag</a>.",
"<strong>Regla #1:</strong> No veas el código del proyecto de ejemplo. Encuentra la forma de hacerlo por tu cuenta.",
@ -196,8 +197,7 @@
"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.",
"Cuando termines, haz clic en el botón de \"I've completed this challenge\" e incluye el vínculo de tu proyecto en CodePen. ",
"Puedes obtener retroalimentación acerca de tu proyecto de parte de tus compañeros campistas compartiéndolo en nuestro <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Cuarto de revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)."
],
"isRequired": true
]
}
]
}

View File

@ -26,8 +26,9 @@
],
"tests": [],
"type": "zipline",
"isRequired": true,
"challengeType": 3,
"nameRu": "Создайте предпросмотрщик языка разметки Markdown",
"titleRu": "Создайте предпросмотрщик языка разметки Markdown",
"descriptionRu": [
"<strong>Задание:</strong> Создайте приложение <a href='http://codepen.io' target='_blank'>CodePen.io</a>, функционал которого схож с этим: <a href='http://codepen.io/FreeCodeCamp/full/obYYqW' target='_blank'>http://codepen.io/FreeCodeCamp/full/obYYqW</a>.",
"<strong>Правило #1:</strong> Не подсматривайте код приложения-примера. Напишите его самостоятельно.",
@ -41,7 +42,7 @@
"Когда закончите, нажмите кнопку \"I've completed this challenge\" и укажите ссылку на вашу работу на CodePen.",
"Вы можете получить отзыв о вашем проекте от коллег, поделившись ссылкой на него в нашем <a href='//gitter.im/freecodecamp/codereview' target='_blank'>чате для рассмотрения кода</a>. Также вы можете поделиться ею через Twitter и на странице Free Code Camp вашего города на Facebook."
],
"nameEs": "Crea un visualizador de lenguaje de marcado (Markdown)",
"titleEs": "Crea un visualizador de lenguaje de marcado (Markdown)",
"descriptionEs": [
"<strong>Objetivo:</strong> Construye una aplicación en <a href='http://codepen.io' target='_blank'>CodePen.io</a> que funcione de forma similar al siguiente ejemplo: <a href='http://codepen.io/FreeCodeCamp/full/obYYqW' target='_blank'>http://codepen.io/FreeCodeCamp/full/obYYqW</a>.",
"<strong>Regla #1:</strong> No veas el código del proyecto de ejemplo. Encuentra la forma de hacerlo por tu cuenta.",
@ -54,8 +55,7 @@
"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.",
"Cuando termines, haz clic en el botón de \"I've completed this challenge\" e incluye el vínculo de tu proyecto en CodePen. ",
"Puedes obtener retroalimentación acerca de tu proyecto de parte de tus compañeros campistas compartiéndolo en nuestro <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Cuarto de revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)."
],
"isRequired": true
]
},
{
"id": "bd7156d8c242eddfaeb5bd13",
@ -80,8 +80,9 @@
],
"tests": [],
"type": "zipline",
"isRequired": true,
"challengeType": 3,
"nameRu": "Создайте таблицу Кемперов-Лидеров",
"titleRu": "Создайте таблицу Кемперов-Лидеров",
"descriptionRu": [
"<strong>Задание:</strong> Создайте приложение <a href='http://codepen.io' target='_blank'>CodePen.io</a>, функционал которого схож с этим: <a href='http://codepen.io/FreeCodeCamp/full/qbqqJm/' target='_blank'>http://codepen.io/FreeCodeCamp/full/qbqqJm/</a>.",
"<strong>Правило #1:</strong> Не подсматривайте код приложения-примера. Напишите его самостоятельно.",
@ -96,7 +97,7 @@
"Когда закончите, нажмите кнопку \"I've completed this challenge\" и укажите ссылку на вашу работу на CodePen.",
"Вы можете получить отзыв о вашем проекте от коллег, поделившись ссылкой на него в нашем <a href='//gitter.im/freecodecamp/codereview' target='_blank'>чате для рассмотрения кода</a>. Также вы можете поделиться ею через Twitter и на странице Free Code Camp вашего города на Facebook."
],
"nameEs": "Crea un marcador para los campistas",
"titleEs": "Crea un marcador para los campistas",
"descriptionEs": [
"<strong>Objetivo:</strong> Construye una aplicación en <a href='http://codepen.io' target='_blank'>CodePen.io</a> que funcione de forma similar al siguiente ejemplo: <a href='http://codepen.io/FreeCodeCamp/full/qbqqJm/' target='_blank'>http://codepen.io/FreeCodeCamp/full/qbqqJm/</a>.",
"<strong>Regla #1:</strong> No veas el código del proyecto de ejemplo. Encuentra la forma de hacerlo por tu cuenta.",
@ -110,8 +111,7 @@
"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.",
"Cuando termines, haz clic en el botón de \"I've completed this challenge\" e incluye el vínculo de tu proyecto en CodePen. ",
"Puedes obtener retroalimentación acerca de tu proyecto de parte de tus compañeros campistas compartiéndolo en nuestro <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Cuarto de revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)."
],
"isRequired": true
]
},
{
"id": "bd7155d8c242eddfaeb5bd13",
@ -137,8 +137,9 @@
],
"tests": [],
"type": "zipline",
"isRequired": true,
"challengeType": 3,
"nameRu": "Создайте хранилище рецептов",
"titleRu": "Создайте хранилище рецептов",
"descriptionRu": [
"<strong>Задание:</strong> Создайте приложение <a href='http://codepen.io' target='_blank'>CodePen.io</a>, функционал которого схож с этим: <a href='http://codepen.io/FreeCodeCamp/full/LGbbqj' target='_blank'>http://codepen.io/FreeCodeCamp/full/LGbbqj</a>.",
"<strong>Правило #1:</strong> Не подсматривайте код приложения-примера. Напишите его самостоятельно.",
@ -154,7 +155,7 @@
"Когда закончите, нажмите кнопку \"I've completed this challenge\" и укажите ссылку на вашу работу на CodePen.",
"Вы можете получить отзыв о вашем проекте от коллег, поделившись ссылкой на него в нашем <a href='//gitter.im/freecodecamp/codereview' target='_blank'>чате для рассмотрения кода</a>. Также вы можете поделиться ею через Twitter и на странице Free Code Camp вашего города на Facebook."
],
"nameEs": "Crea una caja de recetas",
"titleEs": "Crea una caja de recetas",
"descriptionEs": [
"<strong>Objetivo:</strong> Construye una aplicación en <a href='http://codepen.io' target='_blank'>CodePen.io</a> que funcione de forma similar al siguiente ejemplo: <a href='http://codepen.io/FreeCodeCamp/full/LGbbqj' target='_blank'>http://codepen.io/FreeCodeCamp/full/LGbbqj</a>.",
"<strong>Regla #1:</strong> No veas el código del proyecto de ejemplo. Encuentra la forma de hacerlo por tu cuenta.",
@ -169,8 +170,7 @@
"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.",
"Cuando termines, haz clic en el botón de \"I've completed this challenge\" e incluye el vínculo de tu proyecto en CodePen. ",
"Puedes obtener retroalimentación acerca de tu proyecto de parte de tus compañeros campistas compartiéndolo en nuestro <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Cuarto de revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)."
],
"isRequired": true
]
},
{
"id": "bd7154d8c242eddfaeb5bd13",
@ -198,8 +198,9 @@
],
"tests": [],
"type": "zipline",
"isRequired": true,
"challengeType": 3,
"nameRu": "Создайте игру \"Жизнь\"",
"titleRu": "Создайте игру \"Жизнь\"",
"descriptionRu": [
"<strong>Задание:</strong> Создайте приложение <a href='http://codepen.io' target='_blank'>CodePen.io</a>, функционал которого схож с этим: <a href='http://codepen.io/FreeCodeCamp/full/dGOOrZ' target='_blank'>http://codepen.io/FreeCodeCamp/full/dGOOrZ</a>.",
"<strong>Правило #1:</strong> Не подсматривайте код приложения-примера. Напишите его самостоятельно.",
@ -217,7 +218,7 @@
"Когда закончите, нажмите кнопку \"I've completed this challenge\" и укажите ссылку на вашу работу на CodePen.",
"Вы можете получить отзыв о вашем проекте от коллег, поделившись ссылкой на него в нашем <a href='//gitter.im/freecodecamp/codereview' target='_blank'>чате для рассмотрения кода</a>. Также вы можете поделиться ею через Twitter и на странице Free Code Camp вашего города на Facebook."
],
"nameEs": "Crea un Juego de la vida",
"titleEs": "Crea un Juego de la vida",
"descriptionEs": [
"<strong>Objetivo:</strong> Construye una aplicación en <a href='http://codepen.io' target='_blank'>CodePen.io</a> que funcione de forma similar al siguiente ejemplo: <a href='http://codepen.io/FreeCodeCamp/full/dGOOrZ' target='_blank'>http://codepen.io/FreeCodeCamp/full/dGOOrZ</a>.",
"<strong>Regla #1:</strong> No veas el código del proyecto de ejemplo. Encuentra la forma de hacerlo por tu cuenta.",
@ -234,8 +235,7 @@
"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.",
"Cuando termines, haz clic en el botón de \"I've completed this challenge\" e incluye el vínculo de tu proyecto en CodePen. ",
"Puedes obtener retroalimentación acerca de tu proyecto de parte de tus compañeros campistas compartiéndolo en nuestro <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Cuarto de revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)."
],
"isRequired": true
]
},
{
"id": "bd7153d8c242eddfaeb5bd13",
@ -264,8 +264,9 @@
],
"tests": [],
"type": "zipline",
"isRequired": true,
"challengeType": 3,
"nameRu": "Создайте Roguelike-подобную игру Подземелье",
"titleRu": "Создайте Roguelike-подобную игру Подземелье",
"descriptionRu": [
"<strong>Задание:</strong> Создайте приложение <a href='http://codepen.io' target='_blank'>CodePen.io</a>, функционал которого схож с этим: <a href='http://codepen.io/FreeCodeCamp/full/dGOOEJ/' target='_blank'>http://codepen.io/FreeCodeCamp/full/dGOOEJ/</a>.",
"<strong>Правило #1:</strong> Не подсматривайте код приложения-примера. Напишите его самостоятельно.",
@ -284,7 +285,7 @@
"Когда закончите, нажмите кнопку \"I've completed this challenge\" и укажите ссылку на вашу работу на CodePen.",
"Вы можете получить отзыв о вашем проекте от коллег, поделившись ссылкой на него в нашем <a href='//gitter.im/freecodecamp/codereview' target='_blank'>чате для рассмотрения кода</a>. Также вы можете поделиться ею через Twitter и на странице Free Code Camp вашего города на Facebook."
],
"nameEs": "Crea un juego de dragones al estilo Rogue",
"titleEs": "Crea un juego de dragones al estilo Rogue",
"descriptionEs": [
"<strong>Objetivo:</strong> Construye una aplicación en <a href='http://codepen.io' target='_blank'>CodePen.io</a> que funcione de forma similar al siguiente ejemplo: <a href='http://codepen.io/FreeCodeCamp/full/dGOOEJ/' target='_blank'>http://codepen.io/FreeCodeCamp/full/dGOOEJ/</a>.",
"<strong>Regla #1:</strong> No veas el código del proyecto de ejemplo. Encuentra la forma de hacerlo por tu cuenta.",
@ -302,8 +303,7 @@
"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.",
"Cuando termines, haz clic en el botón de \"I've completed this challenge\" e incluye el vínculo de tu proyecto en CodePen. ",
"Puedes obtener retroalimentación acerca de tu proyecto de parte de tus compañeros campistas compartiéndolo en nuestro <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Cuarto de revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)."
],
"isRequired": true
]
}
]
}

View File

@ -13,8 +13,7 @@
"tests": [],
"type": "waypoint",
"challengeType": 3,
"nameEs": "Desafios para aprender React",
"descriptionEs": []
"titleEs": "Desafios para aprender React"
}
]
}

View File

@ -13,8 +13,7 @@
"tests": [],
"type": "waypoint",
"challengeType": 3,
"nameEs": "Desafios para aprender Sass",
"descriptionEs": []
"titleEs": "Desafios para aprender Sass"
}
]
}

View File

@ -98,7 +98,7 @@
"type": "Waypoint",
"challengeType": 7,
"isRequired": false,
"nameEs": "Prepárate para nuestros Proyectos de Desarrollo en el lado del servidor",
"titleEs": "Prepárate para nuestros Proyectos de Desarrollo en el lado del servidor",
"descriptionEs": [
[
"http://i.imgur.com/4IZjWZ3.gif",
@ -199,15 +199,15 @@
"Once you've finished implementing these user stories, click the \"I've completed this challenge\" button and enter the URLs for both your GitHub repository and your live app running on Heroku.",
"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": [
"150324691"
],
"tests": [],
"isRequired": true,
"releasedOn": "January 1, 2016",
"type": "basejump",
"challengeType": 4,
"isRequired": true,
"nameEs": "Microservicio de Marca Temporal",
"titleEs": "Microservicio de Marca Temporal",
"descriptionEs": [
"<strong>Objetivo:</strong> Desarolla una aplicación de Pila Completa en JavaScript que sea funcionalmente similar a esta: <a href='https://timestamp-ms.herokuapp.com/' target='_blank'>https://timestamp-ms.herokuapp.com/</a> y despliegala en Heroku.",
"Ten en cuenta que para cada proyecto, deberías crear un nuevo repositorio en GitHub y un nuevo proyecto en Heroku. Si no recuerdas como hacer esto, vuelve a visitar <a href='/challenges/get-set-for-our-back-end-development-projects'>http://freecodecamp.com//challenges/get-set-for-our-back-end-development-projects</a>.",
@ -230,15 +230,15 @@
"Once you've finished implementing these user stories, click the \"I've completed this challenge\" button and enter the URLs for both your GitHub repository and your live app running on Heroku.",
"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": [
"150324460"
],
"tests": [],
"isRequired": true,
"releasedOn": "January 1, 2016",
"type": "basejump",
"challengeType": 4,
"isRequired": true,
"nameEs": "Microservicio para analizar el encabezado de una petición",
"titleEs": "Microservicio para analizar el encabezado de una petición",
"descriptionEs": [
"<strong>Objetivo:</strong> Desarrolla una aplicación de Pila Completa en JavaScript que sea funcionalmente similar a esta: <a href='https://cryptic-ridge-9197.herokuapp.com/api/whoami/' target='_blank'>https://cryptic-ridge-9197.herokuapp.com/api/whoami/</a> y despliegala en Heroku.",
"Ten en cuenta que para cada proyecto, deberías crear un nuevo repositorio en GitHub y un nuevo proyecto en Heroku. Si no recuerdas como hacer esto, vuelve a visitar <a href='/challenges/get-set-for-our-back-end-development-projects'>http://freecodecamp.com//challenges/get-set-for-our-back-end-development-projects</a>.",
@ -261,15 +261,15 @@
"Once you've finished implementing these user stories, click the \"I've completed this challenge\" button and enter the URLs for both your GitHub repository and your live app running on Heroku.",
"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": [
"150324692"
],
"tests": [],
"isRequired": true,
"releasedOn": "January 1, 2016",
"type": "basejump",
"challengeType": 4,
"isRequired": true,
"nameEs": "Microservicio para acortar URLs",
"titleEs": "Microservicio para acortar URLs",
"descriptionEs": [
"<strong>Objetivo:</strong> Desarrolla una aplicación de Pila Completa en JavaScript que sea funcionalmente similar a esta: <a href='https://shurli.herokuapp.com/' target='_blank'>https://shurli.herokuapp.com/</a> y despliegala en Heroku.",
"Ten en cuenta que para cada proyecto, deberías crear un nuevo repositorio en GitHub y un nuevo proyecto en Heroku. Si no recuerdas como hacer esto, vuelve a visitar <a href='/challenges/get-set-for-our-back-end-development-projects'>http://freecodecamp.com//challenges/get-set-for-our-back-end-development-projects</a>.",
@ -280,7 +280,6 @@
"Una vez que hayas terminado de implementar estas historias de usuarios, pulsa el botón \"I've completed this challenge\" e introduce los URLs de tu repositorio en GitHub y de tu aplicación en vivo en Heroku.",
"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)."
]
},
{
"id": "bd7158d8c443edefaeb5bdee",
@ -295,15 +294,15 @@
"Once you've finished implementing these user stories, click the \"I've completed this challenge\" button and enter the URLs for both your GitHub repository and your live app running on Heroku.",
"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": [
"150324461"
],
"tests": [],
"isRequired": true,
"releasedOn": "January 1, 2016",
"type": "basejump",
"challengeType": 4,
"isRequired": true,
"nameEs": "Capa de abstracción para buscar imágenes",
"titleEs": "Capa de abstracción para buscar imágenes",
"descriptionEs": [
"<strong>Objetivo:</strong> Desarolla una aplicación de Pila Completa en JavaScript que te permite buscar imágenes como esta: <a href='https://cryptic-ridge-9197.herokuapp.com/api/imagesearch/lolcats%20funny?offset=10' target='_blank'>https://cryptic-ridge-9197.herokuapp.com/api/imagesearch/lolcats%20funny?offset=10</a> y examinar las búsquedas recientes como esta: <a href='https://cryptic-ridge-9197.herokuapp.com/api/latest/imagesearch/' target='_blank'>https://cryptic-ridge-9197.herokuapp.com/api/latest/imagesearch/</a>. Después, despliegala en Heroku.",
"Ten en cuenta que para cada proyecto, deberías crear un nuevo repositorio en GitHub y un nuevo proyecto en Heroku. Si no recuerdas como hacer esto, vuelve a visitar <a href='/challenges/get-set-for-our-back-end-development-projects'>http://freecodecamp.com//challenges/get-set-for-our-back-end-development-projects</a>.",
@ -328,15 +327,15 @@
"Once you've finished implementing these user stories, click the \"I've completed this challenge\" button and enter the URLs for both your GitHub repository and your live app running on Heroku.",
"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": [
"150324457"
],
"tests": [],
"isRequired": true,
"releasedOn": "January 1, 2016",
"type": "basejump",
"challengeType": 4,
"isRequired": true,
"nameEs": "Microservicio de metadatos de archivos",
"titleEs": "Microservicio de metadatos de archivos",
"descriptionEs": [
"<strong>Objetivo:</strong> Desarrolla una aplicación de Pila Completa en JavaScript que sea funcionalmente similar a esta: <a href='https://cryptic-ridge-9197.herokuapp.com/' target='_blank'>https://cryptic-ridge-9197.herokuapp.com/</a> y despliegala en Heroku.",
"Ten en cuenta que para cada proyecto, deberías crear un nuevo repositorio en GitHub y un nuevo proyecto en Heroku. Si no recuerdas como hacer esto, vuelve a visitar <a href='/challenges/get-set-for-our-back-end-development-projects'>http://freecodecamp.com//challenges/get-set-for-our-back-end-development-projects</a>.",

View File

@ -23,7 +23,7 @@
],
"type": "waypoint",
"challengeType": 1,
"nameEs": "Utiliza la consola de JavaScript",
"titleEs": "Utiliza la consola de JavaScript",
"descriptionEs": [
"Tanto Chrome como Firefox tienen excelentes consolas JavaScript, también conocidas como DevTools, para depurar tu código JavaScript.",
"Puedes encontrar las Herramientas para desarrolladores (<code>Developer tools</code>) en el menú de Chrome o la Consola web (<code>Web Console</code>) en el menú de FireFox. Si estás utilizando un navegador diferente, o un dispositivo móvil, nuestra recomendación es que cambies a la versión de escritorio de Firefox o Chrome.",
@ -56,7 +56,7 @@
],
"type": "waypoint",
"challengeType": 1,
"nameEs": "Usando typeof",
"titleEs": "Usando typeof",
"descriptionEs": [
"Puedes usar <code>typeof</code> para verificar la <code>estructura de datos</code>, o el tipo, de una variable.",
"Ten en cuenta que, en JavaScript, los vectores son técnicamente un tipo de objeto.",

View File

@ -92,7 +92,6 @@
],
"type": "Waypoint",
"challengeType": 7,
"nameEs": "Reclama tu certificado de desarrollo del lado del servidor",
"descriptionEs": [
[
"http://i.imgur.com/8v3t84p.jpg",
@ -118,7 +117,8 @@
"¡Felicitaciones! Hemos agregado tu certificado de desarrollo del lado del servidor. A menos que elijas no mostrar tus soluciones, este certificado será públicamente visible y verificable.",
""
]
]
],
"titleEs": "Reclama tu certificado de desarrollo del lado del servidor"
}
]
}

View File

@ -28,7 +28,6 @@
"tests": [],
"type": "basejump",
"challengeType": 4,
"nameEs": "Crea una aplicación de votaciones",
"descriptionEs": [
"<strong>Objetivo:</strong> Construye una aplicación de pila completa (full stack) en JavaScript que funcione de forma similar al siguiente proyecto: <a href='https://fcc-voting-arthow4n.herokuapp.com/' target='_blank'>https://fcc-voting-arthow4n.herokuapp.com/</a> y despliégala en Heroku.",
"Ten en cuenta que para cada proyecto, debes crear un nuevo repositorio en GitHub y un nuevo proyecto en Heroku. Si no recuerdas cómo hacerlo, visita de nuevo <a href='/challenges/get-set-for-our-back-end-development-projects'>http://freecodecamp.com/challenges/get-set-for-our-back-end-development-projects</a>.",
@ -44,7 +43,8 @@
"Una vez hayas terminado de implementar estas historias de usuario, pulsa el botón de \"I've completed this challenge\" e incluye las URLs de tu repositorio GitHub y de tu aplicación corriendo en Heroku.",
"Puedes obtener retroalimentación acerca de tu proyecto de parte de tus compañeros campistas compartiéndolo en nuestro <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Cuarto de 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 aplicación de votaciones"
},
{
"id": "bd7158d8c443eddfaeb5bdff",
@ -67,7 +67,6 @@
"tests": [],
"type": "basejump",
"challengeType": 4,
"nameEs": "Crea una aplicación de coordinación de vida nocturna",
"descriptionEs": [
"<strong>Objetivo:</strong> Construye una aplicación de pila completa (full stack) en JavaScript que funcione de forma similar al siguiente proyecto: <a href='http://whatsgoinontonight.herokuapp.com/' target='_blank'>http://whatsgoinontonight.herokuapp.com/</a> y despliégala en Heroku.",
"Ten en cuenta que para cada proyecto, debes crear un nuevo repositorio en GitHub y un nuevo proyecto en Heroku. Si no recuerdas cómo hacerlo, visita de nuevo <a href='/challenges/get-set-for-our-back-end-development-projects'>http://freecodecamp.com/challenges/get-set-for-our-back-end-development-projects</a>.",
@ -80,7 +79,8 @@
"Una vez hayas terminado de implementar estas historias de usuario, pulsa el botón de \"I've completed this challenge\" e incluye las URLs de tu repositorio GitHub y de tu aplicación corriendo en Heroku.",
"Puedes obtener retroalimentación acerca de tu proyecto de parte de tus compañeros campistas compartiéndolo en nuestro <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Cuarto de 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 aplicación de coordinación de vida nocturna"
},
{
"id": "bd7158d8c443eddfaeb5bd0e",
@ -102,7 +102,6 @@
"tests": [],
"type": "basejump",
"challengeType": 4,
"nameEs": "Grafica el mercado de acciones",
"descriptionEs": [
"<strong>Objetivo:</strong> Construye una aplicación de pila completa (full stack) en JavaScript que funcione de forma similar al siguiente proyecto: <a href='http://watchstocks.herokuapp.com/' target='_blank'>http://watchstocks.herokuapp.com/</a> y despliégalo en Heroku.",
"Ten en cuenta que para cada proyecto, debes crear un nuevo repositorio en GitHub y un nuevo proyecto en Heroku. Si no recuerdas cómo hacerlo, visita de nuevo <a href='/challenges/get-set-for-our-back-end-development-projects'>http://freecodecamp.com/challenges/get-set-for-our-back-end-development-projects</a>.",
@ -114,7 +113,8 @@
"Una vez hayas terminado de implementar estas historias de usuario, pulsa el botón de \"I've completed this challenge\" e incluye las URLs de tu repositorio GitHub y de tu aplicación corriendo en Heroku.",
"Puedes obtener retroalimentación acerca de tu proyecto de parte de tus compañeros campistas compartiéndolo en nuestro <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Cuarto de 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": "Grafica el mercado de acciones"
},
{
"id": "bd7158d8c443eddfaeb5bd0f",
@ -136,7 +136,6 @@
"tests": [],
"type": "basejump",
"challengeType": 4,
"nameEs": "Administra un club de intercambio de libros",
"descriptionEs": [
"<strong>Objetivo:</strong> Construye una aplicación de pila completa (full stack) en JavaScript que funcione de forma similar al siguiente proyecto: <a href='http://bookjump.herokuapp.com/' target='_blank'>http://bookjump.herokuapp.com/</a> y despliégalo en Heroku.",
"Ten en cuenta que para cada proyecto, debes crear un nuevo repositorio en GitHub y un nuevo proyecto en Heroku. Si no recuerdas cómo hacerlo, visita de nuevo <a href='/challenges/get-set-for-our-back-end-development-projects'>http://freecodecamp.com/challenges/get-set-for-our-back-end-development-projects</a>.",
@ -148,7 +147,8 @@
"Una vez hayas terminado de implementar estas historias de usuario, pulsa el botón de \"I've completed this challenge\" e incluye las URLs de tu repositorio GitHub y de tu aplicación corriendo en Heroku.",
"Puedes obtener retroalimentación acerca de tu proyecto de parte de tus compañeros campistas compartiéndolo en nuestro <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Cuarto de 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": "Administra un club de intercambio de libros"
},
{
"id": "bd7158d8c443eddfaeb5bdee",
@ -173,7 +173,6 @@
"tests": [],
"type": "basejump",
"challengeType": 4,
"nameEs": "Crea un clon de Pinterest",
"descriptionEs": [
"<strong>Objetivo:</strong> Construye una aplicación de pila completa (full stack) en JavaScript que funcione de forma similar al siguiente proyecto: <a href='http://pintech.herokuapp.com/' target='_blank'>http://pintech.herokuapp.com/</a> y despliégalo en Heroku.",
"Ten en cuenta que para cada proyecto, debes crear un nuevo repositorio en GitHub y un nuevo proyecto en Heroku. Si no recuerdas cómo hacerlo, visita de nuevo <a href='/challenges/get-set-for-our-back-end-development-projects'>http://freecodecamp.com/challenges/get-set-for-our-back-end-development-projects</a>.",
@ -188,7 +187,8 @@
"Una vez hayas terminado de implementar estas historias de usuario, pulsa el botón de \"I've completed this challenge\" e incluye las URLs de tu repositorio GitHub y de tu aplicación corriendo en Heroku.",
"Puedes obtener retroalimentación acerca de tu proyecto de parte de tus compañeros campistas compartiéndolo en nuestro <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Cuarto de 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 clon de Pinterest"
}
]
}

View File

@ -40,7 +40,7 @@
"tests": [],
"type": "waypoint",
"challengeType": 2,
"nameEs": "Guarda las revisiones de tu código por siempre con Git",
"titleEs": "Guarda las revisiones de tu código por siempre con Git",
"descriptionEs": [
"Haremos este desafío en Cloud 9, un poderoso editor en línea con un ambiente de trabajo Ubuntu Linux completo, corriendo totalmente en la nube.",
"Si todavía no tienes una cuenta en Cloud 9, crea una ahora en <a href='http://c9.io' target='_blank'>http://c9.io</a>.",

View File

@ -39,7 +39,7 @@
"tests": [],
"type": "waypoint",
"challengeType": 2,
"nameEs": "Guarda tus datos en MongoDB",
"titleEs": "Guarda tus datos en MongoDB",
"descriptionEs": [
"Haremos este desafío en Cloud 9, un poderoso editor en línea con un ambiente de trabajo Ubuntu Linux completo, corriendo totalmente en la nube.",
"Si todavía no tienes una cuenta en Cloud 9, crea una ahora en <a href='http://c9.io' target='_blank'>http://c9.io</a>.",

View File

@ -42,7 +42,7 @@
"tests": [],
"type": "waypoint",
"challengeType": 2,
"nameEs": "Administrando paquetes con NPM",
"titleEs": "Administrando paquetes con NPM",
"descriptionEs": [
"Haremos este desafío en Cloud 9, un poderoso editor en línea con un ambiente de trabajo Ubuntu Linux completo, corriendo totalmente en la nube.",
"Si todavía no tienes una cuenta en Cloud 9, crea una ahora en <a href='http://c9.io' target='_blank'>http://c9.io</a>.",
@ -105,7 +105,7 @@
"tests": [],
"type": "waypoint",
"challengeType": 2,
"nameEs": "Inicia un servidor en Node.js",
"titleEs": "Inicia un servidor en Node.js",
"descriptionEs": [
"Haremos este desafío en Cloud 9, un poderoso editor en línea con un ambiente de trabajo Ubuntu Linux completo, corriendo totalmente en la nube.",
"Si todavía no tienes una cuenta en Cloud 9, crea una ahora en <a href='http://c9.io' target='_blank'>http://c9.io</a>.",
@ -149,7 +149,7 @@
"tests": [],
"type": "waypoint",
"challengeType": 2,
"nameEs": "Continuemos trabajando con servidores en Node.js",
"titleEs": "Continuemos trabajando con servidores en Node.js",
"descriptionEs": [
"Sigamos con el desafío de LearnYouNode de Node School. Para este Waypoint, trabajaremos con las lecciones 11 a 13.",
"Asegúrate de que siempre te encuentres en el directorio \"workspace\" de tu proyecto. Puedes regresar a este directorio cuando quieras usando el comando: <code>cd ~/workspace</code>.",
@ -180,7 +180,7 @@
"tests": [],
"type": "waypoint",
"challengeType": 2,
"nameEs": "Terminemos de trabajar con servidores en Node.js",
"titleEs": "Terminemos de trabajar con servidores en Node.js",
"descriptionEs": [
"Sigamos con el desafío de LearnYouNode de Node School. Para este Waypoint, trabajaremos con las lecciones 11 a 13.",
"Asegúrate de que siempre te encuentres en el directorio \"workspace\" de tu proyecto. Puedes regresar a este directorio cuando quieras usando el comando: <code>cd ~/workspace</code>.",
@ -225,7 +225,7 @@
"tests": [],
"type": "waypoint",
"challengeType": 2,
"nameEs": "Creando Web Apps con Express.js",
"titleEs": "Creando Web Apps con Express.js",
"descriptionEs": [
"Haremos este desafío en Cloud 9, un poderoso editor en línea con un ambiente de trabajo Ubuntu Linux completo, corriendo totalmente en la nube.",
"Si todavía no tienes una cuenta en Cloud 9, crea una ahora en <a href='http://c9.io' target='_blank'>http://c9.io</a>.",

View File

@ -32,7 +32,6 @@
],
"type": "hike",
"challengeType": 6,
"nameEs": "Notación O mayúscula: ¿Qué es y porque te debe interesar?",
"descriptionEs": [
"La complejidad temporal es una forma de discutir cunto tiempo toma un algoritmo específico. Esto es útil al ajustar software para que opere tan rápido como sea posible.",
"Cuando escribes código, debes tener en cuenta cuanto se va a demorar su ejecución. Nadie quiere crear un producto que fruste a los usuarios por su lentitud.",
@ -42,7 +41,8 @@
"Además, pueden haber preguntas en entrevistas sobre la notación O mayúscula y de complejidad temporal.",
"Tu empleador podrá querer saber que el código que escribes no tardará demasiado en cargar en la página de los usuarios, y el conocimiento de la notación O mayúscula muestra que reconoces esto mientras escribies tu código.",
"Lo que esperamos que te quede de este video es que la notación O mayúscula te ayuda a identificar cuando podría haber problemas (en ocasiones problemas MAYÚSCULOS) en velocidad y memoria cuando tu sitio o aplicación crezcan."
]
],
"titleEs": "Notación O mayúscula: ¿Qué es y porque te debe interesar?"
},
{
"id": "56b15f15632298c12f31517a",
@ -84,7 +84,6 @@
],
"type": "hike",
"challengeType": 6,
"nameEs": "Notación O mayúscula: Unos pocos ejemplos",
"descriptionEs": [
"La complejidad en tiempo comunmente se estima contando la cantidad de operaciones elementales que un algoritmo efectua (una operación elemental es una cuya ejecución requiere una cantidad de tiempo fijo).",
"La complejidad temporal se clasifica por la naturaleza de la función T(n) donde T representa una función matemática para el tiempo que tarda el algoritmo y n representa la cantidad de elementos sobre los que actua el algoritmo.",
@ -104,7 +103,8 @@
"bigocheatsheet.com/",
"El curso de Coursera de Princeton no es para débiles de corazón. Con ejemplos y prácticas en Java, este curso cubre iteración sobre los datos especifcamente algoritmos de ordenamiento y búsqueda.",
"coursera.org/course/algs4partI"
]
],
"titleEs": "Notación O mayúscula: Unos pocos ejemplos"
}
]
}

View File

@ -32,7 +32,6 @@
],
"type": "hike",
"challengeType": 6,
"nameEs": "Herramientas de desarrollo de Chrome: Elementos",
"descriptionEs": [
"Esta es información básica y una mini-lección sobre la pestaña Elements en las herramientas de desarrollo de Chrome. Echa un vistazo a la documentación más detallada aquí: developers.google.com/web/tools/iterate/inspect-styles/basics ",
"Vamos a utilizar la página web mckellen.com/ por sugerencia del usuario de FreeCodeCamp kmiasko.",
@ -42,7 +41,8 @@
"También hay que señalar que todo el código que veas en ese 'árbol' es código HTML actual, no el original que había cuando se cargó la página. Si utilizas jQuery o JavaScript para cambiar algo, esté árbol se actualizará.",
"El relleno, los bordes y los márgenes se inspeccionan fácilmente y puedes editarlos usando la caja con colores que encontrarás al lado derecho o en la parte de abajo.",
"Por favor, echa un vistazo a la documentación de las herramientas de desarrollo de Chrome en developers.google.com/web/tools/chrome-devtools/"
]
],
"titleEs": "Herramientas de desarrollo de Chrome: Elementos"
},
{
"id": "56b15f15632298c12f315183",
@ -71,7 +71,6 @@
],
"type": "hike",
"challengeType": 6,
"nameEs": "Herramientas de desarrollo de Chrome: red",
"descriptionEs": [
"La pestaña network (red) ayuda a responder preguntas como '¿Qué elemento o parte de la página fue el más demorado?' o '¿Qué inició una petición?'",
"El panel de red registra información detallada sobre cuánto tarda en cargar cada elemento de su página o aplicación.",
@ -80,7 +79,8 @@
"Cuanto más larga sea la línea de un color determinado, tanto más tiempo tomó ese tipo de contenido en la solicitud. En últimas quieres líneas cortas, y si cualquier solicitud tiene largas líneas, sabes que puede estar ralentizando la página web.",
"Si pulsas sobre una solicitud en la bitácora, podrás obtener información más detallada.",
"Consulta más documentación detallada aquí: developers.google.com/web/tools/profile-performance/network-performance/resource-loading"
]
],
"titleEs": "Herramientas de desarrollo de Chrome: red"
},
{
"id": "56b15f15632298c12f315182",
@ -111,7 +111,6 @@
],
"type": "hike",
"challengeType": 6,
"nameEs": "Herramientas de desarrollo de Chrome: Fuentes",
"descriptionEs": [
"La pestaña 'fuentes' es más útil para la depuración de JavaScript. Cuanto más grande sea tu proyecto, tanto más difícil resulta encontrar exactamente dónde se produce un problema. ",
"Puedes seleccionar diferentes partes del código para ser 'puntos de interrupción', puestos de control que detendrán la ejecución del código en ese preciso momento. ",
@ -121,7 +120,8 @@
"Una vez has establecido todos los puntos de interrupción, puedes recorrer el código y examinar el estado de tu página o aplicación en cada punto de interrupción.",
"Al igual que con los elementos, puedes editar en vivo mediante las herramientas de desarrollo, pero recuerda que debes guardar esos cambios para que no pierdas tu progreso.",
"Revisa documentación más detallada aquí: developers.google.com/web/tools/javascript/breakpoints/"
]
],
"titleEs": "Herramientas de desarrollo de Chrome: Fuentes"
},
{
"id": "56b15f15632298c12f315181",
@ -152,7 +152,6 @@
],
"type": "hike",
"challengeType": 6,
"nameEs": "Herramientas de desarrollo de Chrome: Línea de tiempo",
"descriptionEs": [
"El panel Línea de tiempo te permite grabar y analizar toda la actividad en tu aplicación mientras se ejecuta. Es el mejor lugar para comenzar a investigar los problemas de rendimiento que percibas en tu aplicación. ",
"Al igual que usas el panel de red para averiguar cuánto tiempo toman las partes de la página para comunicarse con el Internet y utilizas fuentes para averiguar dónde algo se daña, puedes utilizar la línea de tiempo para averiguar con más detalle lo que está pasando y el tiempo que tarda.",
@ -162,9 +161,8 @@
"Cuando uses la línea de tiempo, recuerda que debes utilizar el botón 'limpiar' (clear) para iniciar la grabación y antes de cargar la página, dependiendo de lo que desees capturar.",
"Te darás cuenta de que cuando grabas eventos JS, al pulsar en el título o en una 'llamada a una función' al lado izquierdo, te llevará al documento y a la línea de esa función en el panel de recursos. ",
"Revisa documentación más detallada aquí: developers.google.com/web/tools/profile-performance/evaluate-performance/timeline-tool"
]
],
"titleEs": "Herramientas de desarrollo de Chrome: Línea de tiempo"
},
{
"id": "56b15f15632298c12f315180",
@ -192,14 +190,14 @@
],
"type": "hike",
"challengeType": 6,
"nameEs": "Herramientas de desarrollo de Chrome: Perfiles",
"descriptionEs": [
"El panel Perfiles te permite perfilar el tiempo de ejecución y el uso de memoria de una aplicación web o de una página. Esto se aplica principalmente a la ejecución de JavaScript en su página o aplicación. ",
"Hay tres tipos de perfiles que se pueden recolectar: el perfil de la CPU, instantáneas de la memoria con estructura montón (Heap), y el perfil de la memoria con estructura montón. Los perfiles de memoria en estructura montón tienen más que ver con el uso de memoria, mientras que un perfil de la CPU tiene más que ver con el rendimiento de JavaScript. ",
"Un perfilador llamado V8 se usa mientras se ejecuta el código para identificar lo que en el JavaScript toma mucho tiempo, facilitándote de esta forma optimizar tu código.",
"Cada uno de estos perfiles se puede ver a la izquierda, y se puede tomar múltiples perfiles de cada uno. En general, la pestaña de perfiles es muy útil cuando deseas optimizar tu código. ",
"Revisa documentación más detallada aquí: developers.google.com/web/tools/profile-performance/rendering-tools/js-execution"
]
],
"titleEs": "Herramientas de desarrollo de Chrome: Perfiles"
},
{
"id": "56b15f15632298c12f31517f",
@ -221,13 +219,13 @@
],
"type": "hike",
"challengeType": 6,
"nameEs": "Herramientas de desarrollo de Chrome: Recursos",
"descriptionEs": [
"El panel de Recursos te permite inspeccionar los recursos que se cargan en la página, incluyendo IndexedDB o bases de datos SQL Web, almacenamiento local y de sesión, las galletas (cookies), memoria caché de aplicaciones, imágenes, fuentes y hojas de estilo.",
"Puedes ver y editar toda esta información dentro del navegador.",
"A medida que vayas construyendo aplicaciones web más avanzadas, juega con el panel de recursos y verás cómo te ayudará a entender los requisitos de tu aplicación y de tu página en tiempo real.",
"Revisa documentación más detallada aquí: developers.google.com/web/tools/iterate/manage-data/index"
]
],
"titleEs": "Herramientas de desarrollo de Chrome: Recursos"
},
{
"id": "56b15f15632298c12f31517e",
@ -256,7 +254,6 @@
],
"type": "hike",
"challengeType": 6,
"nameEs": "Herramientas de desarrollo de Chrome: Las auditorías",
"descriptionEs": [
"La herramienta de auditoría te guía para mejorar tu página paso a paso.",
"En este vídeo, se utiliza esta herramienta con un generador de citas aleatorias desarrollado como uno de los proyectos de desarrollo de interfaces.",
@ -264,7 +261,8 @@
"Es importante tenerlas en cuenta para contextualizarlos con el resto de conocimiento que tienes de tu sitio.",
"A veces, puede ser que sea lo acertado, pero en ocasiones, por tu situación las sugerencias que da son equivocadas.",
"Usa esta herramienta cuando desees mejorar tu sitio o aplicación, pero no sepas por dónde empezar."
]
],
"titleEs": "Herramientas de desarrollo de Chrome: Las auditorías"
},
{
"id": "56b15f15632298c12f31517d",
@ -294,7 +292,6 @@
],
"type": "hike",
"challengeType": 6,
"nameEs": "Herramientas de desarrollo de Chrome: Consola",
"descriptionEs": [
"El panel de la consola ofrece dos funciones principales: registro de datos de diagnóstico en el proceso de desarrollo y proporcionar un intérprete de órdenes que puedes utilizar para interactuar con el documento y las Herramientas de desarrollo",
"Al utilizar la consola, puedes ver los datos en bruto o estructurados mediante instrucciones estándar JS y órdenes específicas para la consola.",
@ -303,7 +300,8 @@
"Hay diferentes órdenes que registrarán en bitácoras de manera diferente, como console.log() para registrar información básica, console.error() y console.warn() para registrar en bitácoras 'información llamativa'.",
"La consola puede realizar un seguimiento de excepciones, que básicamente registra cuando algo sale mal. Puede incluso hacer una pausa en el código durante esas excepciones, función que posiblemente recuerdes de la pestaña 'Fuente'. ",
"Revisa documentación más detallada aquí: developers.google.com/web/tools/javascript/console/"
]
],
"titleEs": "Herramientas de desarrollo de Chrome: Consola"
},
{
"id": "56b15f15632298c12f31517c",
@ -324,13 +322,12 @@
],
"type": "hike",
"challengeType": 6,
"nameEs": "Herramientas de desarrollo de Chrome: Resumen",
"descriptionEs": [
", Las herramientas de desarrollo de Chrome son impresionantes, y cuanto más te puedas sumergir y tratar de utilizarlas, más rápido aumentará tu nivel. ",
", Utiliza la documentación, incluso si nunca has leído documentación antes: developers.google.com/web/tools/chrome-devtools/ ",
", Una vez que comiences a sentirte cómodo en una pestaña, rétate aprendiendo a usar una diferente. Trabajar eficazmente con todas las pestañas te servirá exponencialmente más que pegarte en tu zona de confort."
]
],
"titleEs": "Herramientas de desarrollo de Chrome: Resumen"
}
]
}

View File

@ -42,7 +42,6 @@
],
"type": "hike",
"challengeType": 6,
"nameEs": "Fundamentes básicos del computador: Las 4 partes básicas de un computador",
"descriptionEs": [
"Una máquina necesita por lo menos cuatro partes básicas para ser considerada un computador.",
"Hoy vamos a hablar acerca de conceptos básicos de hardware.",
@ -57,7 +56,8 @@
"Ahora, la CPU tiene acceso exclusivo a esta memoria.",
"No se puede llegar a la memoria desde la entrada o desde la salida sin el uso de la CPU.",
"Por lo tanto, sólo para repasar, tenemos 4 partes básicas de la computadora: los dispositivos de entrada, los dispositivos de salida, la CPU y la memoria."
]
],
"titleEs": "Fundamentes básicos del computador: Las 4 partes básicas de un computador"
},
{
"id": "bd7127d8c441eddfbeb5bddf",
@ -97,7 +97,6 @@
],
"type": "hike",
"challengeType": 6,
"nameEs": "Fundamentos básicos del computador: Más Hardware",
"descriptionEs": [
"En este video cubrimos las funciones básicas de una placa base, tarjetas de expansión, y la fuente de poder.",
"Vamos a revisar rápidamente - las 4 partes básicas de un computador son dispositivos de entrada, como el ratón o el teclado, dispositivos de salida, monitor o altavoces, la CPU, la unidad central de procesamiento, y la memoria.",
@ -111,7 +110,8 @@
"Por lo general es la parte que tiene un ventilador en él para evitar que se sobrecaliente.",
"Así que vamos a hacer un repaso rápido.",
"Además de las cuatro partes básicas dispositivos de entrada, dispositivos de salida, CPU, y la memoria, también por lo general tenemos una placa base, las tarjetas de expansión, y una fuente de poder."
]
],
"titleEs": "Fundamentos básicos del computador: Más Hardware"
},
{
"id": "bd7129d8a441eddfbeb5bddf",
@ -149,7 +149,6 @@
],
"type": "hike",
"challengeType": 6,
"nameEs": "Fundamentos básicos del computador: Chips y la Ley de Moore",
"descriptionEs": [
"Discutiremos lo que constituye un chip y por qué la tecnología se vuelve más barata cada año.",
"En este video vamos a estar hablando sobre chips y algo que se llama la Ley de Moore.",
@ -161,7 +160,8 @@
"Lo que hace que estos chips sean más grandes o más rápidos es la cantidad de transistores en un solo chip.",
"La Ley de Moore es la observación de que la cantidad de transistores que caben en un chip se ha duplicado cada dos años desde 1965.",
"Esto es importante porque hace que la tecnología sea más económica y accesible."
]
],
"titleEs": "Fundamentos básicos del computador: Chips y la Ley de Moore"
},
{
"id": "bd7126d8c441eddfbeb5bddf",
@ -195,7 +195,6 @@
],
"type": "hike",
"challengeType": 6,
"nameEs": "Fundamentos básicos del computador: Introducción a código binario",
"descriptionEs": [
"Cómo se ve lo binario, y lo que puede significar.",
"Los 0s y 1s pueden interpretarse como datos mucho más complejos.",
@ -204,7 +203,8 @@
"Aquellos 1s y 0s pueden ser casi cualquier cosa, pero por lo general son sólo números, letras y símbolos.",
"Vamos a revisar cómo decodificar un número en binario, pero como podrás adivinar, la traducción binaria se puede hacer con una rápida búsqueda en Google.",
"La parte más importante de esto es que entiendas el concepto de que incluso cosas simples como 1s y 0s se pueden traducir en algo muy complejo, que es la base para todos los lenguajes de programación existentes en la actualidad."
]
],
"titleEs": "Fundamentos básicos del computador: Introducción a código binario"
},
{
"id": "bd7125d8c441eddfbeb5bddf",
@ -240,7 +240,6 @@
],
"type": "hike",
"challengeType": 6,
"nameEs": "Fundamentos básicos del computador: decodificar un número binario",
"descriptionEs": [
"En este vídeo, decodificaremos un número escrito en notación binaria.",
"Hablemos sobre el sistema de numeración binario, también conocido como un montón de 1s y 0s una y otra vez.",
@ -251,7 +250,8 @@
"Si hay un 1, dejamos el número (2 a la potencia de la posición) y lo agregamos a los números de otras posiciones que estén en \"1\" o \"encendidas\".",
"Si es un 0, hacemos caso omiso del número de esa posición.",
"En este video, la suma de los números da 75."
]
],
"titleEs": "Fundamentos básicos del computador: decodificar un número binario"
},
{
"id": "bd7124d8c441eddfbeb5bddf",
@ -290,7 +290,6 @@
],
"type": "hike",
"challengeType": 6,
"nameEs": "Fundamentos básicos del computador: Cómo medir el tamaño de los datos",
"descriptionEs": [
"¿Cómo se mide el tamaño/cantidad de datos, a partir de un bit y continuando hasta un petabyte.",
"Hoy vamos a estar hablando de tamaño de los datos.",
@ -304,7 +303,8 @@
"Después de eso no hay Megabyte, o 1024 bytes a la potencia de dos.",
"Entonces es Gigabyte, 1024 Bytes a la tercera potencia; Terabyte, 1024 bytes a la cuarta potencia y petabyte que es 1024 a la quinta potencia.",
"!Crecieron realmente rápidamente!"
]
],
"titleEs": "Fundamentos básicos del computador: Cómo medir el tamaño de los datos"
},
{
"id": "bd7123d8c441eddfbeb5bddf",
@ -338,7 +338,6 @@
],
"type": "hike",
"challengeType": 6,
"nameEs": "Fundamentos básicos del computador: medición de la velocidad de datos",
"descriptionEs": [
"La velocidad de datos y el tamaño de los datos se miden de manera diferente.",
"En este video, cubrimos cómo se mide la velocidad de los datos.",
@ -351,7 +350,8 @@
"En la velocidad de red, hablamos de gigabits por segundo (¡mil millones de bits por segundo!).",
"La conclusión principal es que la velocidad se mide generalmente en bits mientras que el tamaño se mide en bytes.",
"Además, si tienes una velocidad de internet de cierta cantidad de bits por segundo, ten en cuenta que te están hablando de algo que es la octava parte de la cantidad en bytes, que es la manera típica como mides tamaños de datos."
]
],
"titleEs": "Fundamentos básicos del computador: medición de la velocidad de datos"
},
{
"id": "bd7122d8c441eddfbeb5bddf",
@ -385,7 +385,6 @@
],
"type": "hike",
"challengeType": 6,
"nameEs": "Fundamentos básicos del computador: Bytes en binario",
"descriptionEs": [
"En binario se puede hacer más que representar números - mediante bytes, puede simbolizar todos los símbolos alfanuméricos, los cuales pueden ser interpretados en códigos más complejos",
"Vamos a hablar sobre el nivel más básico que un computador puede comprender otros lenguajes como JavaScript.",
@ -394,7 +393,8 @@
"Todos los números (255 y menos), las letras y símbolos se pueden traducir en bytes que el computador puede entender.",
"Por lo tanto, todos los números, letras y símbolos en su código JavaScript se puede traducir.",
"Hay una gran cantidad de lenguajes con los cuales los computadores pueden operar, y lo que quiero que te quede de este video es que todos los datos en tu computador se reducen a bytes binarios."
]
],
"titleEs": "Fundamentos básicos del computador: Bytes en binario"
},
{
"id": "bd7121d8c441eddfbeb5bddf",
@ -433,7 +433,6 @@
],
"type": "hike",
"challengeType": 6,
"nameEs": "Fundamentos básicos del computador: Tipos de Computadores",
"descriptionEs": [
"Este video cubre los conceptos básicos de los supercomputadores, servidores, estaciones de trabajo, PC y microcontroladores.",
"Vamos a discutir los diferentes tipos de computadores.",
@ -447,7 +446,8 @@
"Tal vez has oído \"¡Soy un Mac!\" o \"¡Soy un PC!\", Algo que indica que son diferentes, pero en realidad mi propio MacBook personal sigue siendo un PC, un computador personal.",
"Es a la vez un Mac y un PC.",
"El último tipo de equipo del que hablaremos es un microcontrolador, el tipo de equipo que puedes tener en tu carro que es realmente bueno en una pequeña tarea especializada, pero no se utilizaría la misma forma que un PC."
]
],
"titleEs": "Fundamentos básicos del computador: Tipos de Computadores"
},
{
"id": "bd7120d8c441eddfbeb5bddf",
@ -488,7 +488,6 @@
],
"type": "hike",
"challengeType": 6,
"nameEs": "Fundamentos básicos del computador: Más sobre la placa base",
"descriptionEs": [
"Un poco más de detalle sobre lo que constituye una placa base y sus funciones estándar en un computador.",
"Hoy vamos a hablar más sobre la placa base.",
@ -504,7 +503,8 @@
"Además de las ranuras de expansión, las placas base tienen puertos.",
"En tu computador, probablemente sabes que hay un lugar para conectar USB, FireWire, tarjeta SD, Ethernet, e incluso un plug-in de audio para escuchar a través de auriculares.",
"Todos estos son considerados puertos, un lugar en la placa base donde puedes conectar la CPU a algun dispositivo externo bien para obtener o para dar información."
]
],
"titleEs": "Fundamentos básicos del computador: Más sobre la placa base"
},
{
"id": "bd712fd8c441eddfbeb5bddf",
@ -545,7 +545,6 @@
],
"type": "hike",
"challengeType": 6,
"nameEs": "Fundamentos básicos del computador: Redes de datos",
"descriptionEs": [
"Este video cubre los conceptos básicos de redes de área local, redes de área amplia y redes privadas virtuales.",
"En este vídeo se habla de redes de datos.",
@ -560,7 +559,8 @@
"Podrían utilizar una WAN.",
"Podrías pensar que estas es posible conectarlas usando Internet, y en el caso de una VPN (red privada virtual, que conceptualmente es básicamente lo mismo que una una WAN), tendrías la razón.",
"Sin embargo, por lo general una WAN alquila un cable de una empresa de Internet para crear la conexión."
]
],
"titleEs": "Fundamentos básicos del computador: Redes de datos"
},
{
"id": "bd712ed8c441eddfbeb5bddf",
@ -594,7 +594,6 @@
],
"type": "hike",
"challengeType": 6,
"nameEs": "Fundamentos básicos del computador: Direcciones IP",
"descriptionEs": [
"Cada dispositivo tiene una dirección IP.",
"Las direcciones IP se asignan en función de la ubicación, y son vitales para que Internet funcione.",
@ -608,7 +607,8 @@
"Este número no es lo suficientemente específico como para que llames al 911, les des tu dirección IP, y así les permitas saber donde vives.",
"Sin embargo, es lo suficientemente específico como para buscar en Google \"¿Dónde está el mejor helado cerca de mí\" y Google podría darte información cercana a tu ubicación.",
"Esto se hace utilizando tu dirección IP."
]
],
"titleEs": "Fundamentos básicos del computador: Direcciones IP"
},
{
"id": "bd712dd8c441eddfbeb5bddf",
@ -644,7 +644,6 @@
],
"type": "hike",
"challengeType": 6,
"nameEs": "Fundamentos básicos del computador: ¿Cómo funciona Internet",
"descriptionEs": [
"Esta es una descripción breve y descripción de cómo funciona Internet.",
"Para una explicación más en profundidad, dale un vistazo a web.stanford.edu/class/msande91si/www-spr04/readings/week1/InternetWhitepaper.htm",
@ -659,7 +658,8 @@
"Lo que quiero que te lleves de este video es que tu dispositivo, que tiene una dirección IP, puede enviar una petición de información, y que esa información regresará a tu dispositivo por medio de servidores y enrutadores que componen el Internet.",
"Ahora bien, esta explicación es realmente básica.",
"Para obtener más información, echa un vistazo a web.stanford.edu/class/msande91si/www-spr04/readings/week1/InternetWhitepaper.htm."
]
],
"titleEs": "Fundamentos básicos del computador: ¿Cómo funciona Internet"
},
{
"id": "bd712cd8c441eddfbeb5bddf",
@ -685,7 +685,6 @@
],
"type": "hike",
"challengeType": 6,
"nameEs": "Fundamentos básicos del computador: Software",
"descriptionEs": [
"Diferenciamos entre hardware y software, y también discutimos las diferencias entre el sistema operativo y el software de aplicación.",
"En este video, vamos a discutir los fundamentos del software.",
@ -695,7 +694,8 @@
"Los dos tipos de software de los cuales vamos a hablar hoy son el sistema operativo y las aplicaciones.",
"Hay tres sistemas operativos principales: Windows, Mac y Linux.",
"Las aplicaciones comprenden el resto del software, como tu navegador web, juegos, cosas como Photoshop, con lo que ves tu correo, o con lo que editas documentos, etc."
]
],
"titleEs": "Fundamentos básicos del computador: Software"
},
{
"id": "56b15f15632298c12f31510f",
@ -729,7 +729,6 @@
],
"type": "hike",
"challengeType": 6,
"nameEs": "Fundamentos básicos del computador: Redes de distribución de contenido",
"descriptionEs": [
"Una red de distribución de contenido (del inglés <em>Content Delivery Network</em>) es un sistema (red) de servidores distribuidos que sirven páginas web y otros contenidos web a los usuarios en función de su ubicación geográfica, el origen de la página web y un servidor de entrega de contenido.",
"El objetivo de una RDC (CDN) es establecer conexiones de red de mayor calidad.",
@ -742,7 +741,8 @@
"Como usuario, es probable que utilices RDC todo el tiempo sin darte cuenta.",
"Como desarrollador, es posible que desees utilizar RDCs como las bibliotecas de Google para ayudar a que tu página cargue más rápido.",
"Como empresa, una RDC sería útil si quieres que tu producto o sitio llegue a los usuarios de manera más eficiente en el esquema más grande de su red y en Internet en su conjunto."
]
],
"titleEs": "Fundamentos básicos del computador: Redes de distribución de contenido"
},
{
"id": "bd7129d80441eddfbeb5bddf",
@ -778,7 +778,6 @@
],
"type": "hike",
"challengeType": 6,
"nameEs": "Analógico vs digital y compresión de archivos",
"descriptionEs": [
"¿Cómo los computadores pueden volver sonido analógico en archivos digitales, y los pros y los contras de la compresión de datos?",
"Vamos a discutir datos anàlogos frente a datos digitales en un nivel muy básico.",
@ -793,7 +792,8 @@
"Otra forma es tomando una medida desde un punto medio y no desde 0, de forma que los número registrados sean más pequeños.",
"En imágenes, se hace midiendo grupos de a 16 píxeles en lugar de hacer mediciones individuales.",
"Lo que te llevas de este video es que querrás utilizar archivos digitales pues son de mayor calidad, y cuando te fijes en compresión, tendrás que decidir qué tan lejos estás dispuesto a ir para garantizar que el usuario tenga la mejor experiencia posible."
]
],
"titleEs": "Analógico vs digital y compresión de archivos"
},
{
"id": "bd7129d8b441eddfbeb5bddf",
@ -845,7 +845,6 @@
],
"type": "hike",
"challengeType": 6,
"nameEs": "Enrutadores y paquetes",
"descriptionEs": [
"En este video, vamos a entrar en más detalle respecto a enrutadores y paquetes, conceptos importantes para entender cómo funciona Internet.",
"Vamos a hablar más acerca de los enrutadores y cómo se relacionan con la creación de redes.",
@ -871,7 +870,8 @@
"Las tramas no tienen que recorrer la misma ruta hasta el destino final.",
"Pueden tomar cualquier ruta abierta, la que sea más rápida, y dado que tienen la dirección IP final, todos los enrutadores saben dónde enviarlos.",
"Una vez que llegan al destino final, ese computador sabe cómo poner junta toda la información."
]
],
"titleEs": "Enrutadores y paquetes"
},
{
"id": "bd7029d8c441eddfbeb5bddf",
@ -916,7 +916,6 @@
],
"type": "hike",
"challengeType": 6,
"nameEs": "Código Fuente",
"descriptionEs": [
"En este video se discute lo que es código fuente, intérpretes y compiladores, y lo que significa fuentes abiertas.",
"Vamos a hablar sobre el código fuente: lo que el código fuente es, donde lo puedes ver, y cómo el computador lo entiende.",
@ -936,7 +935,8 @@
"Podrías preguntarte, \"¿y eso qué?\", pero lo que es increíble es que si deseas cambiar o mejorar FreeCodeCamp, puedes describir la mejora y tal vez implementarla.",
"Es una gran manera para los sitios web y para el software de crecer de forma fuerte y rápida debido a la comunidad que trabaja en conjunto para mejorarlo.",
"Una regla no escrita al contribuir a proyectos de fuentes abiertas es que en general deberías compartir tus mejoras para que también sean de fuentes abiertas, y al retornar esa mejora al público también les permites a otros utilizar tus mejoras."
]
],
"titleEs": "Código Fuente"
},
{
"id": "bd7119d8c441eddfbeb5bddf",
@ -966,7 +966,6 @@
],
"type": "hike",
"challengeType": 6,
"nameEs": "Las variables en el código",
"descriptionEs": [
"Las variables se utilizan con frecuencia en Javascript y en muchos otros lenguajes de programación.",
"En este video, vamos a hablar acerca de las variables en el código.",
@ -975,7 +974,8 @@
"Cuando se ejecute <code>console.log(x)</code> presentará \"Briana\".",
"Pero ten cuidado - si pones <code>console.log(\"x\")</code>, con la <code>x</code> entre comillas, se presentará la \"x\".",
"Lo que yo quiero que te lleves con este video es que existen las variables en el código, y que puedes almacenar todo, desde una simple cadena hasta una función, todo con un simple nombre."
]
],
"titleEs": "Las variables en el código"
},
{
"id": "bd712bd8c441eddfbeb5bddf",
@ -1012,7 +1012,6 @@
],
"type": "hike",
"challengeType": 6,
"nameEs": "¿Qué hacen los programadores?",
"descriptionEs": [
"Los programadores (también conocidos como codificadores, desarrolladores, o ingenieros de software) resuelven problemas convirtiendo grandes ideas en pequeños pasos que un computador puede entender.",
"En este video, vamos a discutir lo que hacen los programadores.",
@ -1024,7 +1023,8 @@
"Todo se hace secuencialmente, de manera directa, por lo que hacer referencia a algo que está por debajo y que todavía no ha sucedido dará lugar a un problema.",
"Los computadores sólo leen de arriba hacía abajo, como tu leerías un libro.",
"Los programadores son los responsables de dividir sus ideas en pequeños pasos y escribirlos de una manera que las computadoras pueden entenderlos."
]
],
"titleEs": "¿Qué hacen los programadores?"
},
{
"id": "bd712ad8c441eddfbeb5bddf",
@ -1110,8 +1110,7 @@
]
],
"type": "hike",
"challengeType": 6,
"nameEs": "Seguridad en los computadores",
"challengeType": 6,
"descriptionEs": [
"Lo fundamental de la seguridad en los computadores y cómo proteger su información.",
"Echemos una mirada a la seguridad en los computadores.",
@ -1140,7 +1139,8 @@
"Una de las formas en que se puede comprometer tu información es cuando los 'los chicos malos' encuentran huecos en las versiones viejas de los programas",
"Estos defectos se corrigen en las versiones nuevas, por lo que evitarás problemas si mantienes el software actualizado.",
"Estas son algunas cosas muy básicas que debes saber acerca de cómo proteger la información de tu computador."
]
],
"titleEs": "Seguridad en los computadores"
}
]
}

View File

@ -30,7 +30,6 @@
],
"type": "hike",
"challengeType": 6,
"nameEs": "El DOM: ¿Qué es el Modelo de objetos del documento?",
"descriptionEs": [
"El DOM es la representación interna y programática de una página web del navegador. Lenguajes como javascript te permiten modificar el DOM, y por lo tanto el sitio web, sin editar el código HTML de la página.",
"Técnicamente, el DOM es un API (interfaz de programación de aplicaciones). Hay varios tipos de APIs, pero este API en particular interactúa con documentos XML y HTML. Está a cargo de cómo se accesan y se manipulan esos documentos.",
@ -38,7 +37,8 @@
"Puedes insertar nuevos elementos, o cambiar el estilo o contenido de los elementos previamente existentes.",
"Esto se puede hacer con javascript puro, como: document.getElementById(id), element.getElementsByTagName(name), o document.createElement(name).",
"También puedes usar librerías como jQuery para simplificar, estandarizar y automatizar la manipulación del DOM, como por ejemplo: $('#caja2').append('Esto se agregará a caja2!')"
]
],
"titleEs": "El DOM: ¿Qué es el Modelo de objetos del documento?"
},
{
"id": "56b15f15632298c12f31518e",
@ -66,14 +66,14 @@
],
"type": "hike",
"challengeType": 6,
"nameEs": "El DOM: Estilo en el encabezado, código al pie de página",
"descriptionEs": [
"Creo que ya te habrán dicho que los enlaces a código de estilo (CSS) deben ser incluidos en el encabezado (<code>header</code>) y que los enlaces al código (JS) deben estar incluidos al pie de página (<code>footer</code>). ¿Alguna vez te preguntaste por qué?",
"Si alguna vez has visto una página web que carga el texto primero, y después de un momento carga el formato y el estilo, entonces era una página que no tenía los enlaces hacia el estilo y el código en los lugares correctos.",
"Esto tiene que ver con la forma en que el navegador decide si ha cargado suficiente información para mostrar. Hay un evento llamado 'DOMContentLoaded', y una vez que ese evento ocurre, lo que sea que se haya cargado hasta entonces será mostrado.",
"El DOM le dirá al navegador que está listo una vez que el código HTML ha sido cargado, y a veces el CSS y JS no se han alcanzado a cargar. Si pones el CSS en el encabezado y el JS al pie de página, puedes estar seguro que todo el contenido será cargado antes que el DOM desencadene el evento 'DOMContentLoaded', el cual muestra tu contenido al usuario.",
"Esta es una explicación simplificada, al igual que la que encontrarás en el resto de estos videos. Si quieres más información, creo que el siguiente enlace es de bastante ayuda: ablogaboutcode.com/2011/06/14/how-javascript-loading-works-domcontentloaded-and-onload/"
]
],
"titleEs": "El DOM: Estilo en el encabezado, código al pie de página"
}
]
}

View File

@ -30,7 +30,6 @@
],
"type": "hike",
"challengeType": 6,
"nameEs": "JavaScript Lingo: MDN y Documentación",
"descriptionEs": [
"Esta es una introducción básica a MDN y el concepto de la documentación.",
"MDN, Mozilla Developer Network, es una fantástica colaboración de fuentes abiertas que documenta no sólo JavaScript, sino muchos otros lenguajes y temas. Si no has oído hablar de ellos, deberías darles un vistazo ahora. Personalmente obtengo mucha información de developer.mozilla.org/en-US/docs/Web/JavaScript ",
@ -38,7 +37,8 @@
"A medida que continúes aprendiendo JavaScript, jQuery, y prácticamente cualquier otro lenguaje o servicio para desarrollo o programación, la documentación será tu amiga.",
"Cuanto más rápido te sientas cómodo leyendo y referenciando documentación, más rápido crecerás como desarrollador.",
"Estos vídeos no van a enseñarte JavaScript - te presentan términos y conceptos que serán valiosos a medida que continúes practicando y aprendiendo."
]
],
"titleEs": "JavaScript Lingo: MDN y Documentación"
},
{
"id": "56b15f15632298c12f31518d",
@ -65,13 +65,13 @@
],
"type": "hike",
"challengeType": 6,
"nameEs": "JavaScript Lingo: Tipos de valores",
"descriptionEs": [
"Aprende sobre los tres tipos más básicos de valores: Booleanos, cadenas y números",
"Un booleano es un valor <code>true</code> (verdadero) o <code>false</code> (falso). Estas palabras son especiales y reservadas. No puedes nombrar a una variable como \"true\", porque esa palabra es ya universal como un valor lógico (así como lo es \"false\"). ",
"Una cadena es un conjunto de caracteres que se establecen entre apóstrofes (') o entre comillas (\"). Una cadena puede ser \"true\", siempre y cuando sea con comillas o con apóstrofes. ",
"Los números se explican por sí mismos - un número es un valor que se compone sólo de dígitos, aunque también puede contener un decimal o un signo negativo."
]
],
"titleEs": "JavaScript Lingo: Tipos de valores"
},
{
"id": "56b15f15632298c12f31518b",
@ -101,7 +101,6 @@
],
"type": "hike",
"challengeType": 6,
"nameEs": "JavaScript Lingo: Variables y capitalizaciónCamello",
"descriptionEs": [
"Vamos a cubrir lo que constituye una variable, y el razonamiento detrás de la capitalizaciónCamello (<em>camelCase</em>).",
"Una variable, también conocida como una 'var', es el nombre o el espacio para un booleano, una cadena, un número, u otra pieza de información estática.",
@ -109,7 +108,8 @@
"Tu 'declaras' variables por primera vez con <code>var</code> en frente de ella, pero después puedes referenciarla más adelante en tu programa.",
"capitalizaciónCamello es una forma en la que juntas varias palabras y aún así las mantienes legibles. La primera letra de la primera palabra va en minúsculas al igual que el resto de la primera palabra, pero la primera letra de cada palabra que siga se escribe en mayúsculas. No hay espacios. Ejemplos: brianaAmaSusMascotas, laMejorComidaEsElQueso, y valeLaPenaAprenderProgramacion.",
"Al asignar un nombre de variable, usa capitalizaciónCamello. Además, trata de mantener los nombres descriptivos y cortos para que los demás (¡e incluso tu!) puedan entender a lo que se refiere la variable simplemente por el nombre."
]
],
"titleEs": "JavaScript Lingo: Variables y capitalizaciónCamello"
},
{
"id": "56b15f15632298c12f31518a",
@ -138,7 +138,6 @@
],
"type": "hike",
"challengeType": 6,
"nameEs": "JavaScript Lingo: Vectores y objetos",
"descriptionEs": [
"Si desea almacenar más de una pieza de información en una variable, puedes hacerlo mediante la creación de un vector o de un objeto.",
"** Exención de responsabilidad: Los objetos de JS no son exactamente lo mismo que los objetos en otros lenguajes. Vamos a discutir aquí objetos con respecto a JS. ",
@ -146,7 +145,8 @@
"Los objetos son un tipo de datos que pueden verse o comportarse como un vector, en la medida que se trata de más valores almacenados en una variable de una manera organizada. Oirás que un objeto se puede representar en JSON, y con frecuencia cuando haces llamadas a la API de algunos sitios (para obtener información que necesitas mostrar en tu propia página) está será devuelta en JSON. ",
"Un ejemplo de la notación de objetos es: <code>var obj = { 'nombre': 'Briana', 'comida': 'queso', 'perro': 'Maurice'};</code>",
"Fíjate que un objeto se encierra entre llaves { ... }, que los diferentes atributos se separan por comas, que cada atributo consta de una palabra llave y de un valor. Por ejemplo son llaves 'nombre', 'comida' y 'perro' y sus respectivos valores son 'Briana', 'queso' y 'Maurice'. En este ejmplo todos los valores fueron cadenas, aunque también son válidos booleanos, números y otros tipos de datos."
]
],
"titleEs": "JavaScript Lingo: Vectores y objetos"
},
{
"id": "56b15f15632298c12f315189",
@ -173,12 +173,12 @@
],
"type": "hike",
"challengeType": 6,
"nameEs": "JavaScript Lingo: Encontrando e indexando valores en vectores",
"descriptionEs": [
"Hay muchas razones por las que puedes necesitar acceder a una determinada pieza de información al interior de un conjunto más amplio, lo cual haces referenciando su índice.",
"No vamos a entrar en la sintaxis, pero debes saber que el primer elemento en un vector tiene en realidad el índice 0.",
"Esto también aplica para cadenas y objetos. Todos estos índices comienzan en 0, por lo que si en tu programa usas <code>miVector[2]</code>, realmente vas a obtener la tercera pieza de información del vector <code>miVector</code>."
]
],
"titleEs": "JavaScript Lingo: Encontrando e indexando valores en vectores"
},
{
"id": "56b15f15632298c12f315188",
@ -208,7 +208,6 @@
],
"type": "hike",
"challengeType": 6,
"nameEs": "JavaScript Lingo: Manipulación de los datos",
"descriptionEs": [
"Métodos y funciones son formas con las que puedes modificar variables u otros conjuntos de información.",
"Los métodos están integrados en JavaScript, y te familiarizarás con estos cuando realices los desafíos sobre algoritmos.",
@ -217,7 +216,8 @@
"Las funciones, al igual que las variables, son algo que tu defines y creas.",
"Durante tu práctica con algoritmos en FreeCodeCamp, vas a crear funciones que reciben una determinada pieza de información y la manipulan de la forma que elijas.",
"Vas a estar más familiarizado con la sintaxis, pero por ahora, sólo recuerda que con los métodos y funciones puedes hacer casi cualquier cosa con tu código."
]
],
"titleEs": "JavaScript Lingo: Manipulación de los datos"
},
{
"id": "56b15f15632298c12f315187",
@ -247,7 +247,6 @@
],
"type": "hike",
"challengeType": 6,
"nameEs": "JavaScript Lingo: Matemáticas",
"descriptionEs": [
"Hay un objeto estático de nombre 'Math' en JS con muchos propiedades y métodos incluidos.",
"Vas a querer investigar más de este cuando manipules números. Consulta la documentación de MDN antes de escribir tus propias funciones, pues ya podrían estar definidas allí. ",
@ -256,7 +255,8 @@
"Cuando trabajes con números, también debes estar consciente de que JS tiene un atributo interesante llamado 'formato de coma flotante'.",
"Dependiendo de la cantidad de números, su tamaño y la cantidad de cálculos, JS puede devolver un número que es inexacto en 0,00004.",
"Hay maneras de evitar esto, y en general no plantean problemas, pero es algo que debes tener en cuenta si te encuentras con algunos problemas que parecen no tienen sentido."
]
],
"titleEs": "JavaScript Lingo: Matemáticas"
},
{
"id": "56b15f15632298c12f315186",
@ -283,12 +283,12 @@
],
"type": "hike",
"challengeType": 6,
"nameEs": "JavaScript Lingo: Ciclos",
"descriptionEs": [
"Si hay un conjunto de valores (vamos a utilizar un vector en este ejemplo, pero no tiene que ser así) y deseas realizar la misma operación a cada valor del conjunto, puedes usar algo llamado ciclo. ",
"Los ciclos tienen una sintaxis compleja a la que inicialmente es difícil acostumbrarse, pero una vez que la entiendas, son de gran utilidad. Yo usé ciclos en muchas de mis soluciones. ",
"No es necesario que entiendas todo aquí - sólo que sepas que existen ciclos cuando necesitas recorrer un conjunto de datos y que pueden reducir la cantidad de código que debes escribir."
]
],
"titleEs": "JavaScript Lingo: Ciclos"
},
{
"id": "56b15f15632298c12f315185",
@ -318,8 +318,6 @@
],
"type": "hike",
"challengeType": 6,
"id": "56b15f15632298c12f315185",
"nameEs": "JavaScript Lingo: expresiones regulares (RegExp)",
"descriptionEs": [
"Las RegExp no siguen el formato del resto de JS, y pueden requerir una curva de aprendizaje.",
"Las epresiones regulares (abreviado <em>RegExp</em>) también pueden ser una herramienta muy útil y eficiente.",
@ -328,7 +326,8 @@
"Si quisieras crear una página de registro que verifique las contraseñas para que contengan al menos un número y una letra mayúscula, puedes usar expresiones regulares.",
"Si quieres asegurarte de que las fechas introducidas en una página sean todas fechas válidas en el futuro, puedes usar RegExp.",
"Si bien hay infinitas maneras de utilizar RegExp, muchas de estas incluyen validaciones o ediciones automáticas de información."
]
],
"titleEs": "JavaScript Lingo: expresiones regulares (RegExp)"
}
]
}