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

271
16 мая 2022, 00:30

Дано натуральное число. Если в нем есть цифры а и 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>

Answer 1

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 }

Answer 2

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

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

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; // Не нашлось.
}

READ ALSO
Как реализовать генерацию сочетаний без повторений?

Как реализовать генерацию сочетаний без повторений?

Как лучше реализовать функцию combine с сигнатурой (JavaScript)

147
Как получить ширину React компонентов

Как получить ширину React компонентов

Подскажите - как я могу получить ширину g и text компонентов, чтобы потом на основе их значений вычислить нужный мне угол поворота для rotate

179
Как переписать цикл for в reducer?

Как переписать цикл for в reducer?

господаПрошу помочь со следующим вопросом

174
Запоминание просмотренных элементов JS

Запоминание просмотренных элементов JS

Всем приветНа страницу из бд загружаются данные (как только пользователь доходит до конца, загружаются еще одни)

145