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

Cursos online y materiales digitales para estudiantes y desarrolladores web

  • CURSOS
  • BLOG
  • QUIÉN SOY
  • FAQ
  • ACCEDER
  • CONTACTO

Reto: Gestión de pasajeros del expreso de Hogwarts

Publicado el 11/05/2020 por Ada 10 Comments

Harry Potter

Harry Potter

Programación

Procesar un array bidimensional


Acceder al reto en formato vídeo

Todo el mundo sabe que el Expreso de Hogwarts sale del andén 9 y 3/4 de la estación de trenes de King’s Cross, en Londres, y llega a al pueblo de Hogsmeade, donde se encuentra el Colegio Hogwarts de Magia y Hechicería. Sin paradas. Del tirón.

Por lo visto, quieren facilitar a sus estudiantes la movilidad entre el colegio y sus localidades de origen sin necesidad de tener que viajar a Londres, así que está montando una aplicación que controle, entre otras cosas, cómo es ese movimiento de pasajeros.

El mismo Albus Dumbledore se puso en contacto conmigo a través de su fénix, Fawkes, para transmitirme una de las funcionalidades que necesitan en su nuevo programa de gestión de trenes.

Señorita Ada:
Necesitamos controlar el número de pasajeros que llegan al final de un trayecto teniendo en cuenta cuántos suben y bajan en cada parada.
Le facilitaremos una lista del tipo: [s1,b1][s2,b2][s3,b3]… donde en cada par de elementos va el número de pasajeros que se suben (s) y el número de pasajeros que se bajan (b). Así, procesando esa lista, sabremos el número de pasajeros finales que debería llegar a fin de trayecto.
Ejemplo de entrada: [7,0][8,2][9,5][3,1]
Ejemplo de salida: 19 pasajeros
* Nota: En el primer par de números, el segundo siempre será 0 porque en la estación de origen no se baja nadie. No hace falta controlar ese número: se lo facilitaremos siempre de manera correcta.

Y cómo no, Edu con sus preguntas:

¿Vas a utilizar un for para recorrer los arrays? ¿O crees que necesitarás dos? ¿Has oído hablar de las funciones reductoras? ¿Los que no somos magos también podemos ir a Hogwarts? ¿Crees que habrá vagón bar en el tren?

Esta vez tenía mucho más clara la propuesta y cómo resolverla… aunque, sin duda, y como siempre… no había una única manera de hacerlo.

¿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: array, harry potter, javascript, reto

Reader Interactions

Comments

  1. Manuel Valenzuela says

    18/05/2020 at 08:12

    solución en SQL SERVER (lenguaje para manipulación de base de datos):

    –[7,0][8,2][9,5][3,1]

    DECLARE @tblPasajeros AS TABLE
    (
    id int
    , suben int
    , bajan int
    )

    INSERT INTO @tblPasajeros(id, suben, bajan)VALUES(1, 7, 0)
    INSERT INTO @tblPasajeros(id, suben, bajan)VALUES(2, 8, 2)
    INSERT INTO @tblPasajeros(id, suben, bajan)VALUES(3, 9, 5)
    INSERT INTO @tblPasajeros(id, suben, bajan)VALUES(4, 3, 1)

    DECLARE
    @vuelta INT
    , @totalVueltas INT
    , @finalPasajeros INT
    SET @vuelta = 1
    SET @finalPasajeros = 0

    SELECT @totalVueltas = COUNT(1) FROM @tblPasajeros
    –SELECT @totalVueltas

    WHILE @vuelta <= @totalVueltas
    BEGIN
    SELECT /*id,*/ @finalPasajeros = @finalPasajeros + (suben – bajan) FROM @tblPasajeros WHERE id = @vuelta

    SET @vuelta = @vuelta + 1
    END

    SELECT @finalPasajeros as [Pasajeros Llegan al Final]

    Resultado: 19 pasajeros llegan al final.

    Accede para responder
  2. Ada Lovecode says

    18/05/2020 at 12:04

    ¡¡Uau!! Me quito el sombrero, Manuel, no se me habría ocurrido la posibilidad de hacerlo con SQL Server. ¡Mil gracias por tu aporte! 🙂

    Accede para responder
  3. Manuel Valenzuela says

    18/05/2020 at 20:13

    Gracias por tu comentario, dejo tambien la solución en C# (CSharp), saludos!

    Accede para responder
  4. Manuel Valenzuela says

    18/05/2020 at 20:14

    using System;
    using System.Data;

    namespace Pasajeros
    {
    class Program
    {
    static void Main(string[] args)
    {

    // Step 1: get the DataTable.
    DataTable data = GetTable();
    int finalPasajeros = 0;

    // … Loop over all rows.
    foreach (DataRow row in data.Rows)
    {
    // … Write value of first field as integer.
    //Console.WriteLine(row.Field(0));

    finalPasajeros += Convert.ToInt32(row[1]) – Convert.ToInt32(row[2]);

    Console.WriteLine(
    Convert.ToInt32(row[1]).ToString() + ” – ” +
    Convert.ToInt32(row[2]).ToString() + ” = ” +
    (Convert.ToInt32(row[1]) – Convert.ToInt32(row[2])).ToString());

    }

    Console.WriteLine(finalPasajeros.ToString() + ” Pasajeros Llegan al Final “);
    Console.ReadKey();

    }

    //Fuente Consultada:
    //https://www.dotnetperls.com/datatable

    static DataTable GetTable()
    {
    // Step 2: here we create a DataTable.
    // … We add 3 columns, each with a Type.
    DataTable table = new DataTable();
    table.Columns.Add(“id”, typeof(int));
    table.Columns.Add(“suben”, typeof(int));
    table.Columns.Add(“bajan”, typeof(int));

    // [7,0][8,2][9,5][3,1]

    // Step 3: here we add 3 rows.
    table.Rows.Add(1, 7, 0);
    table.Rows.Add(2, 8, 2);
    table.Rows.Add(3, 9, 5);
    table.Rows.Add(4, 3, 1);

    return table;
    }
    }
    }

    Accede para responder
  5. Ada Lovecode says

    20/05/2020 at 17:34

    ¡De 10, qué bien, Manuel! ¡Mil gracias por el aporte! 🙂

    Accede para responder
  6. Maria del Carmen says

    09/07/2020 at 14:57

    Solución básica usando JavaScript.

    data = [
    [7,0],
    [8,2],
    [9,5],
    [3,1]
    ];

    const pasajerosFinales =
    data.reduce((total, pasajeros) => {
    return total += pasajeros[0]-pasajeros[1]
    }, 0);

    console.log(`El número de pasajeros al final del trajecto es: ${pasajerosFinales}.`);

    Accede para responder
  7. Ada Lovecode says

    09/07/2020 at 16:24

    ¡Buena respuesta, María del Carmen! De hecho, es muy parecida a la solución que os he hecho en el reto resuelto utilizando reduce.
    ¡Buen trabajo! 🙂
    https://didacticode.com/reto-resuelto-harry-potter/

    Accede para responder
  8. Maria del Carmen says

    10/07/2020 at 19:09

    Que bueno ver todas las maneras de llegar a una misma respuesta. Hoy me puse a darle un poco de forma (y complicarlo :p ). Todavia se puede arreglar mas (por ejemplo, como esta hasta ahora viernes deja que mas pasajeros se bajen de los que hay en el tren), pero me pongo en eso mas adelante. https://codepen.io/santiagocodes/pen/oNbdQma

    Accede para responder
    • didacticode says

      21/10/2020 at 19:36

      ¡Uau, María del Carmen!
      No había visto este comentario ni tu código y ¡¡está muy bien!! No solo desde el punto de vista algorítmico sino también desde el diseño. ¡Buen trabajo!

      Accede para responder

Trackbacks

  1. Reto resuelto: gestión de pasajeros del expreso de Hogwarts dice:
    14/11/2020 a las 10:53

    […] más recibimos un reto desde el mismo Colegio Hogwarts de Magia y Hechicería que titulamos «Gestión de pasajeros del expreso de Hogwarts» y que podéis consultar a […]

    Accede para responder

Deja una respuesta 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 © 2026

¡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 .

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.

Cookies estrictamente necesarias

Las cookies estrictamente necesarias tiene que activarse siempre para que podamos guardar tus preferencias de ajustes de cookies.