Помогите с задачей на js

143
06 июня 2019, 02:30

Задача в том, чтобы написать функцию, входным параметром которой является строка. Функция должна осуществлять действие, противоположное процедуре сжатия: если в исходной строке встречается подпоследовательность вида x(k), где x – символ, а k – строка, являющаяся записью числа i, то ее необходимо заменить на подпоследовательность, состоящую из i вхождений символа x. Также решить без использования строковых функций

Например: строка 1,2(3),3(2) должна принять вид 1,2,2,2,3,3

Прилагаю то, что готово на данный момент (работает только с единичными числами, и не удаляет количество вхождений символа x, то есть при строке 1,2(3),3(2) выведет 1,2223,332)

Подскажите, пожалуйста, как можно исправить и насколько правильные наработки на данный момент?

let str = prompt("Введите строку"); 
let result = ""; 
 
function k(str) { 
  for (let i = 0; i < str.length; i++) { 
    if (str[i] == "(") { 
      let n = str[i + 1]; 
      for (let j = 0; j < n - 1; j++) { 
        result += str[i - 1]; 
      } 
      continue; 
    } 
    if (str[i] == ")") 
      continue; 
    result += str[i]; 
  } 
  return result; 
} 
 
alert(k(str));

Answer 1

var s = "0(2),1,2(3),3(2),12(10)" 
console.log(s.replace(/\b(\d+)\((\d+)\)/g, (m,x,n) => Array(+n).fill(x)))

Answer 2

мне кажется, что здесь зря используется обращение по индексу назад (строка 9 в коде), ведь мы не знаем, какой длины число было до; лучше, если нельзя использовать встроенный метод split(","), либо написать свой, либо идти по строке и, пока не встретим запятую или "(", собирать текущее число. если первый встреченный символ был "," - просто добавляем число в вывод и идем дальше, если "(" - считываем число повторений (до символа ")") и столько раз добавляем текущее число к result (не забывая запятые, если число не последнее)

Answer 3

function solve(s) { 
  var res = [], cur = { val: 0, count: 1 }, type = 'val'; 
   
  for (var c of s + ",") { 
    switch (c) { 
      case ",": 
        for (var q=0; q<cur.count; ++q) res.push(cur.val); 
        type = 'val'; 
        cur.val = 0; 
        cur.count = 1; 
        break; 
      case "(": 
        type = 'count'; 
        cur.count = 0; 
        break; 
      case ")": 
        break; 
      default: // digit 
        cur[type] *= 10; 
        cur[type] += +c; 
    } 
  } 
   
  return res.join(","); 
} 
 
console.log(solve("0(2),1,2(3),3(2),12(10)"));

READ ALSO
Нарисовать линии на JS (jQuery)

Нарисовать линии на JS (jQuery)

появилась нужда сделать данную вещь, подскажите, с чего начать и как лучше сделать подобное?

130
Почему this.field.sort в консоль сортирует а в DOM нет?

Почему this.field.sort в консоль сортирует а в DOM нет?

Ребят, подскажите, почему thisfield

129