Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Error reto #13 #329

Open
kevinjpuscan opened this issue Dec 14, 2024 · 1 comment
Open

Error reto #13 #329

kevinjpuscan opened this issue Dec 14, 2024 · 1 comment

Comments

@kevinjpuscan
Copy link

En los ejemplos presentados hay uno que según el comentario debería devolver true, pero en realidad debería devolver [0,1]:

// actual
isRobotBack('U?D?U') // true

// corregido
isRobotBack('U?D?U') // [0,1]
// 'U'  -> se mueve arriba
// '?D' -> se mueve abajo, ya que ya se hizo el movimiento 'U'
// '?U' -> se mueve arriba, ya que ya se hizo el movimiento 'D'

Al parecer justo ese ejemplo es uno de los test secretos por lo que solo forzando ese ejemplo en el código logré que pasara el ejercicio.

Captura de pantalla 2024-12-13 a las 10 59 50 p  m
@jlmasson
Copy link

@kevinjpuscan Al principio, me pareció que era [0, 1], pero después comprendí lo que decía el enunciado.
El siguiente movimiento se hace sólo si no se ha hecho antes. Lo que indica es que si ya se ha hecho anteriormente, indiferente de la posición.
// actual
isRobotBack('U?D?U') // true

// 'U' -> se mueve arriba
// '?D' -> se mueve abajo, ya que anteriormente no se ha hecho el movimiento 'D'
// '?U' -> no se hace el movimiento, ya que anteriormente se realizó el movimiento 'U'.

Te dejo una posible solución al problema

function isRobotBack(moves) {
  const defaultOp = '+';

  const negations = {
    U: 'D',
    D: 'U',
    L: 'R',
    R: 'L',
  };

  const counters = {
    U: 0,
    D: 0,
    L: 0,
    R: 0,
  }

  const operators = {
    '+': {
      x: 0,
      f: (current, counters) => {
        counters[current]++;
      },
    },
    '*' : {
      x: 1,
      f: (current, counters) => {
        counters[current] += 2
      },
    },
    '!': {
      x: 1,
      f: (current, counters) => {
        counters[negations[current]]++;
      },
    },
    '?': {
      x: 1,
      f: (current, counters) => {
        if (counters[current] === 0) {
          counters[current]++;
        }
      }
    },
  };

  let i = 0;

  while (i < moves.length) {
    let current = moves[i];
    const { x, f } = operators[current] || operators[defaultOp];
    
    i += x;
    current = moves[i];
    f(current, counters);
    i++;
  }

  const {U, D, R, L} = counters;
  const coords = [R - L, U - D];
  const [x, y] = coords;

  return x === y && x === 0 ? true : coords;
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants