• Skip to primary navigation
  • Skip to main content
  • Skip to footer

Cursos online y materiales digitales para estudiantes y desarrolladores web

  • CURSOS
  • BLOG
  • QUIÉNES SOMOS
  • FAQ
  • ACCEDER
  • CONTACTO

Berlín, Tokio y Moscú también son capitales

Publicado el 23/04/2020 por didacticode 41 Comments

La casa de papel

La casa de papel

Programación

Uso de condicionales y arrays


Me enteré de que habían asaltado La Fábrica Nacional de Moneda y Timbre por la televisión. Por lo visto los nombres de los presuntos atracadores eran capitales y ciudades del mundo: Tokio, Río, Berlín, Moscú… una idea curiosa, oye.

Al poco, recibí un pequeño encargo:

Querida Ada, nos estamos haciendo un lío con los nombres de los atracadores que no te imaginas. Necesitamos que crees un programa que, dada una capital indique si se trata de uno de los nombres elegidos por El Profesor para alguno de los miembros de su equipo o no.
Necesitamos tenerlo para dentro de 10 días… ¡hay demasiados rehenes en juego!

La propuesta no podía ser más fácil, ¿verdad? Pues apareció Edu volando y comenzó a atiborrarme a preguntas:

¿Lo vas a hacer con ifs anidados o encadenados? ¿o con un solo if? ¿sabes que hasta podías hacerlo con un switch? ¿y que puedes agrupar varias opciones en una? Se me está ocurriendo una idea mejor… ¿estás pensando lo mismo que yo?

Pues nada, que me puse manos a la obra barajando todas las opciones que me comentó Edu. ¡Cualquiera lo aguanta si no!

¿Os animáis a hacerlo conmigo? ¡Dejad vuestras dudas en los comentarios! 😉

Aquí os dejo enlaces al material que os vendrá bien repasar. ¡Ánimo!

Javascript – #1.19. Condicionales. Sentencia if-else

Javascript – #1.20. Condicionales. Sentencia switch

Javascript – #1.11. Operadores lógicos

Javascript – #1.09. Operadores de cadena

¿Tú cómo lo harías? ¡Deja tus ideas en los comentarios!

Y si quieres compartir código, te recomiendo que utilices alguna herramienta online de testing de código como Codepen, JSFiddle, PlayCode, etc. o repositorios como GitHub, GitLab, BitBucket…

Filed Under: Reto Tagged With: condicionales, javascript, la casa de papel, programación estructurada, reto

Reader Interactions

Comments

  1. Jesús Martínez Méndez says

    23/04/2020 at 17:10

    Estoy ansioso de ampliar mis conocimientos

    Accede para responder
  2. didacticode says

    23/04/2020 at 21:33

    ¡Así me gusta, Jesús, esa es la actitud! Espero estar a la altura… 🙂

    Accede para responder
  3. neilhenao@gmail.com says

    25/04/2020 at 00:23

    Hola, Maravilloso este espacio. Gracias

    Accede para responder
  4. didacticode says

    25/04/2020 at 12:59

    ¡¡Gracias a ti por estar por aquí, Neil!! 🙂

    Accede para responder
  5. Leonardo Tulian says

    25/04/2020 at 15:09

    function DetectorDeDelincuentes(nombre ){
    let mensaje;
    if( nombre ===’Tokio’ || nombre === ‘Río’ || nombre ===’ Berlín’ || nombre === ‘Moscú’ ) mensaje = ‘Nombre de Delicuente’
    else mensaje = ‘Nombre de Capital’;
    return mensaje;
    };

    Accede para responder
    • didacticode says

      25/04/2020 at 21:03

      ¡Hola, Leonardo! ¡Buen trabajo! Es una de las ideas que barajaba 😉
      Veamos si hay más ideas por ahí… ¡un saludo!

      Accede para responder
    • Ada Lovecode says

      01/05/2020 at 12:21

      Mmmmmm… creo que esa opción no funciona, Valentín…

      Accede para responder
  6. neilhenao@gmail.com says

    27/04/2020 at 02:27

    var nombre = prompt(“Por favor digite un nombre”);

    switch(nombre) {
    case ‘berlin’:
    document.write(nombre + “: es un personaje de la serie.”);
    break;
    case ‘tokio’:
    document.write(nombre + “: es un personaje de la serie.”);
    break;
    case ‘moscu’:
    document.write(nombre + “: es un personaje de la serie.”);
    break;
    default:
    document.write(nombre + “: NO es un personaje de la serie.”);
    break;
    }

    Accede para responder
  7. José Acuña says

    27/04/2020 at 02:43

    ‘use strict’;

    realizarPregunta();

    /**
    * https://didacticode.com/reto-la-casa-de-papel/
    *
    * @return void
    */
    function realizarPregunta() {
    let respuesta = prompt(‘¿Nombre de la capital?’);

    if (respuesta === null) {
    alert(‘Has decidido no responder.’);
    } else {
    respuesta = respuesta.trim();

    if (respuesta.length === 0 || respuesta === ”) {
    alert(‘Debes proporcionar el nombre de la capital.’);
    } else {
    if (esMiembroEquipo(respuesta)) {
    alert(capitalizarNombreMiembro(respuesta) + ‘ es miembro del equipo :-)’);
    } else {
    alert(capitalizar(respuesta) + ‘ no es miembro del equipo :-(‘);
    }
    }
    }
    }

    /**
    * Determina si una capital dada es uno de los nombres elegidos por El Profesor
    * para alguno de los miembros de su equipo.
    *
    * @param string capital
    * El nombre de la capital.
    *
    * @return boolean
    */
    function esMiembroEquipo(capital) {
    if (typeof capital !== ‘string’) {
    throw ‘El par\u00e1metro \’capital\’ de la funci\u00f3n \’esMiembroEquipo\’, debe ser de tipo cadena.’;
    }

    capital = eliminarDiacriticos(capital.toLowerCase().trim());

    if (capital.length === 0 || capital === ”) {
    throw ‘El par\u00e1metro \’capital\’ de la funci\u00f3n \’esMiembroEquipo\’, no puede estar en blanco.’;
    }

    let esMiembro = false;

    switch (capital) {
    case ‘tokio’:
    case ‘rio’:
    case ‘berlin’:
    case ‘moscu’:
    esMiembro = true;
    break;
    }

    return esMiembro;
    }

    /**
    * Elimina los diacríticos de un texto (ES6).
    *
    * @param string texto
    * Texto a normalizar.
    *
    * @return string
    */
    function eliminarDiacriticos(texto) {
    if (typeof texto !== ‘string’) {
    throw ‘El par\u00e1metro \’texto\’ de la funci\u00f3n \’eliminarDiacriticos\’, debe ser de tipo cadena.’;
    }

    return texto.normalize(‘NFD’).replace(/[\u0300-\u036f]/g, ”);
    }

    /**
    * Capitaliza una palabra.
    *
    * @param string texto
    * Palabra a ser capitalizada.
    *
    * @return string
    */
    function capitalizar(texto) {
    if (typeof texto !== ‘string’) {
    throw ‘El par\u00e1metro \’texto\’ de la funci\u00f3n \’capitalizar\’, debe ser de tipo cadena.’;
    }

    return texto.substr(0, 1).toUpperCase() + texto.substr(1, texto.length);
    }

    /**
    * Devuelve el nombre de la capital miembro; capitalizado y con acentos
    * diacríticos si los tuviere.
    *
    * @param string capital
    * El nombre de la capital.
    *
    * @return string
    */
    function capitalizarNombreMiembro(capital) {
    if (typeof capital !== ‘string’) {
    throw ‘El par\u00e1metro \’capital\’ de la funci\u00f3n \’capitalizarNombreMiembro\’, debe ser de tipo cadena.’;
    }

    capital = eliminarDiacriticos(capital.toLowerCase().trim());

    if (capital.length === 0 || capital === ”) {
    throw ‘El par\u00e1metro \’capital\’ de la funci\u00f3n \’capitalizarNombreMiembro\’, no puede estar en blanco.’;
    }

    let nombre = ”;

    switch (capital) {
    case ‘tokio’:
    nombre = ‘Tokio’;
    break;
    case ‘rio’:
    nombre = ‘Río’;
    break;
    case ‘berlin’:
    nombre = ‘Berlín’;
    break;
    case ‘moscu’:
    nombre = ‘Moscú’;
    break;
    }

    return nombre;
    }

    Accede para responder
    • Ada Lovecode says

      27/04/2020 at 14:08

      Por cierto, junto con la respuesta (cuando la publique) me encantaría dejar un enlace a tu snippet. ¡Si me lo permites! 🙂

      Accede para responder
  8. José Acuña says

    27/04/2020 at 02:49

    El caracter » debe ser remplazado por dos comillas simples para que el código se ejecute correctamente.

    Accede para responder
  9. José Acuña says

    27/04/2020 at 02:53

    Los caracteres ‘ y ’ también, deben ser remplazados por una comilla simple para que el código se ejecute correctamente.

    Accede para responder
  10. José Acuña says

    27/04/2020 at 04:12

    Este es el enlace al código fuente en GitLab.
    https://gitlab.com/snippets/1970429

    Accede para responder
  11. Merce says

    27/04/2020 at 09:53

    Scanner teclado= new Scanner(System.in);
    String[] nombres={“Berlin”,”Tokio”,”Río”,”Berlín”,”Moscú”};

    System.out.print(“Introduce un nombre: “);
    String nombre = teclado.nextLine();

    boolean delincuente = false;
    for (String nom : nombres) {
    if(nombre.equals(nom)){
    delincuente=true;
    break;
    }
    }

    if(delincuente){
    System.out.println(“Nombre de delincuente”);
    }else{
    System.out.println(“Nombre de capital”);
    }

    Accede para responder
  12. Ada Lovecode says

    27/04/2020 at 14:01

    ¡Buen trabajo, Neil! ¿Crees que se puede reducir el código? 😉
    La semana que viene te lo cuento, jejeje.

    Accede para responder
  13. Ada Lovecode says

    27/04/2020 at 14:07

    ¡Me quito el sombrero, José!
    Modularizado, con JSDoc, validaciones… se nota que trabajas en esto 😉
    ¡Gracias por tu propuesta!

    Accede para responder
  14. Ada Lovecode says

    27/04/2020 at 14:09

    ¡Ea, qué buena, Merce! Con Java y utilizando un array. ¡Buena idea!

    Accede para responder
  15. Manuel says

    27/04/2020 at 21:14

    const atracadores = [‘tokio’,’río’,’rio’,’berlín’,’berlin’,’moscú’,’moscu’];
    function revisaAtracadores(nombre){
    for(var i of atracadores){
    if(i == nombre.toLowerCase()){
    return true;
    }
    }
    return false;
    }

    Accede para responder
  16. Valentin says

    28/04/2020 at 01:47

    No es un código para nada útil, si se requiere agregar mas nombres. Pero mi objetivo es que sea lo mas corto posible.

    let nombre = prompt(‘Ingrese el nombre’);
    if (nombre === (‘Tokio’ || ‘Río’ || ‘Berlín’||’Moscú’)) {
    alert(‘Pertenece al grupo’);
    }else{
    alert(‘No pertenece al grupo’);
    }

    Accede para responder
  17. Ada Lovecode says

    05/05/2020 at 17:47

    ¡Hola, Jackie!
    Me encantan los comentarios de tu código: “Opción larga y aburrida”, jejeje.
    Yo no he tenido en cuenta la validación (que es super importante, ojo) y me he centrado en la algoritmia de la comprobación… con 10 propuestas, entre ellas, las tuyas.
    Así que echa un ojo… ¡a ver si te convence alguna más que la tuya! 😉
    PD. Veo tus 10 líneas y bajo a 8, jejeje.

    Accede para responder
    • Álvaro Ortiz Pedroso says

      27/04/2020 at 17:26

      var capital = prompt(“Introduce la capital para descubrir si es un atracador: “);

      var array = [“Tokio”, “Rio”, “Berlin”, “Moscu”]; // Array que contiene todos los nombres de los atracadores

      var esAtracador = false;

      for (i = 0; i < array.length; i++) {
      if (capital == array[i]) {
      esAtracador = true;
      }
      }

      if (esAtracador) {
      alert("Atracador");
      } else {
      alert("Pais")
      }

      Accede para responder
    • Dev010101 says

      27/04/2020 at 22:59

      Hola Ada, gracias por hacerme pensar xD dejo lo que se me ocurrió, solo aplico condicionales a algunas partes…

      let capital = “Paris”;

      //Construtor de atracadores
      function Atracador(nombre,alias){
      this.nombre = nombre;
      this.alias = alias;
      }

      //creacion de atracadores
      let atracador1 = new Atracador(“John Smith”,”Tokio”);
      let atracador2 = new Atracador(“Laura Torrealba”,”Viena”);
      let atracador3 = new Atracador(“Mario Jimenez”,”Seul”);

      //atracadores en una matriz para facilitar el recorrido
      let atracadoresArray = [atracador1,atracador2,atracador3];

      //busca atracador segun el alias (capital)
      function buscarAtracador(capital){
      let tam = atracadoresArray.length;
      for(let i = 0; i < tam; i++){
      if(atracadoresArray[i].alias === capital){
      return 1;
      }
      }
      return -1;
      }

      //muestra resultado
      if(buscarAtracador(capital) === 1){
      console.log("Si esta");
      }else{
      console.log("No esta");
      }

      Saludos

      Accede para responder
    • Dev010101 says

      27/04/2020 at 23:07

      Hola, te falto asociar el nombre del delincuente al alias de cada uno

      Accede para responder
    • Valentin says

      28/04/2020 at 01:37

      El if lo podrías poner asi: if (nombre === (‘Tokio’ || ‘Río’ || ‘Berlín’||’Moscú’))

      Accede para responder
    • Ada Lovecode says

      28/04/2020 at 23:03

      ¡Bien pensado, Álvaro! Recuerda que Javascript también ofrece algún método para comprobar si un elemento está en un array, jejeje 😉

      Accede para responder
    • Ada Lovecode says

      28/04/2020 at 23:07

      ¡Así me gusta, con const! 🙂 ¡Muy buena, Manuel! Otra para la propuesta 😉

      Accede para responder
    • Ada Lovecode says

      28/04/2020 at 23:11

      ¡Buen intento, Dev010101!
      En principio no necesitamos asociar el atracador al nombre, que podría ser una vuelta de tuerca. Tomo nota 😉
      En la resolución veremos las alternativas que podemos seguir y cuáles pueden ser las mejores… aunque no hay solución mala (solo menos eficiente 😉
      ¡Nos vemos en el siguiente!

      Accede para responder
    • Ada Lovecode says

      28/04/2020 at 23:15

      ¡Hola, Valentín! Directo y al grano 🙂
      Hombre, los nombres los vas a tener que añadir sí o sí en este o en cualquiera (no tenemos en cuenta ficheros, bases de datos ni nada parecido). ¡Así que no está nada mal! Otro para la saca 😉

      Accede para responder
    • Rafael García says

      28/04/2020 at 23:50

      Buenas noches, yo para simplificar optaría por:
      – Crear el array con los nombres
      – Compararía con array.indexOf(nombreIntroducido) === -1
      Llamadme clásico 😛

      Accede para responder
    • Luis Fernando says

      29/04/2020 at 08:58

      Solucion en C++ para N delincuentes y M posibles delincuentes a evaluar:
      int main(){

      set delincuentes;

      int numero_de_delincuentes;
      cin >> numero_de_delincuentes;

      for(int i = 0; i > nombre;
      delincuentes.insert(nombre);
      }

      int numero_de_posibles_delincuentes;
      cin >> numero_de_posibles_delincuentes;

      for(int i = 0; i > nombre_a_evaluar;

      cout << nombre_a_evaluar << " ";
      (delincuentes.count(nombre_a_evaluar)) ? cout << "es delincuente" : cout << "es ciudad";
      }

      return 0;
      }

      Accede para responder
    • Ada Lovecode says

      29/04/2020 at 09:43

      ¡Me uno a tu propuesta, Rafael! De hecho, es de mis favoritas 😉

      Accede para responder
    • Ada Lovecode says

      29/04/2020 at 09:44

      ¡Hombre, una respuesta en C++! ¡Bienvenida sea! 🙂

      Accede para responder
    • Nestor says

      02/05/2020 at 01:11

      Te contesto desde un movil por eso no te mando el código pero mi respuesta lo haría parecida a la de rafa pero con array.include() . Seria lo más sencillo
      Return [Nombres_asaltantes].include(nombre_buscado)
      Saludos

      Accede para responder
    • Ada Lovecode says

      04/05/2020 at 22:59

      ¡Efectivamente, Néstor! Para mi, la opción “estrella”… ¡ya lo veréis en la resolución!
      PD. Por cierto, sería “includes”, no “include” 😉
      ¡Buena propuesta! ¡Mil gracias!

      Accede para responder
    • Jackie says

      05/05/2020 at 15:42

      Veo un poco de todo por aquí… y para traer más variedad al asunto te dejo aquí un enlace al repositorio de GitHub:

      https://github.com/Jackie1430/LaCasicaDePapel

      He añadido al ejercicio un “validador” para obligar al usuario a responder contenido adecuado a la pregunta, eliminando la posibilidad de que responda con espacios en blanco o cosas similares.
      Un saludo Ada 😉

      Accede para responder
    • Ada Lovecode says

      07/05/2020 at 18:15

      ¡Jejeje! ¡Hecho! 😉

      Accede para responder
  18. Alejandro Almonacid says

    08/05/2021 at 04:49

    Yo lo hice de esta forma

    https://github.com/alealmonacid/Reto-1-La-Casa-de-Papel-I

    https://alealmonacid.github.io/Reto-1-La-Casa-de-Papel-I/

    Me gustó el resultado

    Accede para responder
    • didacticode says

      09/05/2021 at 07:27

      ¡Buen trabajo, Alejandro! No solo lo has resuelto sino que además, lo has puesto “bonito”. Me gusta tu manera de resolverlo con una función flecha y, por supuesto, el operador ternario, que es de mis favoritos.
      ¡Sigue así y gracias por compartir!

      Accede para responder

Trackbacks

  1. Reto resuelto: Berlín, Tokio y Moscú también son capitales dice:
    18/11/2020 a las 20:12

    […] desde que recibimos el reto sobre los personajes de La Casa de Papel al que pusimos por nombre «Berlín, Tokio y Moscú también son capitales» y que podéis consultar a […]

    Accede para responder
  2. Reto resuelto: Dustin, Suzie y la constante de Planck dice:
    18/11/2020 a las 20:56

    […] La semana pasada recibíamos el reto para ponérselo difícil a los personajes de Stranger Things, cuyo título era «Dustin, Suzie y la constante de Planck«. […]

    Accede para responder

Responder a neilhenao@gmail.com Cancelar la respuesta

Lo siento, debes estar conectado para publicar un comentario.

Footer

Didacticode

Cursos para estudiantes y docentes del mundo de la informática.
Retos: retos resueltos de programación.
Tips&Tricks: trucos y consejos.
Boleticodes: boletines de noticias.
Quiénes somos: Ada, Edu... y Laura.
Contacto¡Contacta conmigo!

Legal

Aviso legal
Política de privacidad
Cookies

Redes Sociales

Youtube
Twitter
Instagram
Facebook
Twitch
LinkedIn
Gitlab
Github

Didacticode © 2022

¡Cómo no! Este sitio también utiliza cookies para mejorar la experiencia de tu visita.

Puedes informarte más sobre qué cookies estamos utilizando o desactivarlas en los AJUSTES.

Resumen de privacidad
Didacticode

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.