Числовой алгоритм на JavaScript

Дано натуральное число. Если в нем есть цифры а и b, то определить, какая из них расположена в числе правее. Если одна или обе эти цифры встречаются в числе несколько раз, то должны быть рассмотрены последние из одинаковых цифр.

Вот код, который имеется, но

  1. он не совсем корректно работает;
  2. подскажите пожалуйста, как можно решить эту задачу с использованием только числового алгоритма

<script type="text/javascript">
    let s = prompt("Enter number");
    let a = prompt("Enter a");
    let b = prompt("Enter b");

    function index(s, c){
    let ic=0;
    for (let i=0; i< s.length; i++){
    if (s[i]==c)
        ic = i;
    }
    return ic;
    }
    if (index(s,a)>index(s,b))
        alert("a is to the right");
    else if (index(s,a)<index(s,b))
        alert("b is to the right");
    else
        alert("a is equal to b");

</script>


Ответы (2 шт):

Автор решения: Qwertiy

function check(x, a, b) {
  if (a === b) {
    for (; x; x = Math.floor(x / 10)) {
      if (x % 10 === a) {
        return "equal"
      }
    }
    
    return "none"
  }

  for (; x; x = Math.floor(x / 10)) {
    if (x % 10 === a) {
      for (; x; x = Math.floor(x / 10)) {
        if (x % 10 === b) {
          return "right"
        }
      }
      
      return "only a"
    }
    
    if (x % 10 === b) {
      for (; x; x = Math.floor(x / 10)) {
        if (x % 10 === a) {
          return "left"
        }
      }
      
      return "only b"
    }
  }
  
  return "none"
}

console.log(check(1234567, 5, 5))
console.log(check(1234567, 4, 6))
console.log(check(1234567, 6, 4))
console.log(check(1234554789, 4, 5))
console.log(check(1234567, 3, 9))
console.log(check(1234567, 9, 3))
console.log(check(1234567, 8, 9))
console.log(check(1234567, 8, 8))
.as-console-wrapper.as-console-wrapper { max-height: 100vh }

→ Ссылка
Автор решения: OPTIMUS PRIME

Он не совсем корректно работает...

Нигде не проверяется, а встречается ли вообще цифра.

prompt = function() {
  return (1e9 + Math.random() * 1e9) | 0;
  // удобнее будет тестить, не заморачиваясь со вводом.
};
alert = console.log;

/***/
let num = prompt("Enter number");
let a = 4; // prompt("Enter a");
let b = 1; // prompt("Enter b");

console.log(num, a, b);

let a_index = right_index(num, a);
let b_index = right_index(num, b);

if (a === b) {
  alert("Цифры равны, индекс: " + a_index);
} else if (a_index == -1) {
  alert("Цифра " + a + " не встречается.");
} else if (b_index == -1) {
  alert("Цифра " + b + " не встречается.");  
} else if (b_index < a_index) {  
  alert("Цифра a(" + a + ") правее.");  
} else if (a_index < b_index) { // можно просто else.
  alert("Цифра b(" + b + ") правее.");  
}

/***/
function right_index(str, char) {
  str = "" + str; // Конвертация в строку, если прилетит число вместо строки.
  
  for (let i = str.length - 1; i >= 0; i--) {
    if (str[i] == char) return i;
    // Цикл справа налево. Если нашелся - сразу возвращает.
  }
  
  return -1; // Не нашлось.
}

→ Ссылка