Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.09.2019, 09:23
Аспирант
Отправить личное сообщение для gsdev99 Посмотреть профиль Найти все сообщения от gsdev99
 
Регистрация: 03.02.2019
Сообщений: 53

Задача на сжатие строки
Всем привет. Поделитесь своими идеями решения вот этой задачи:
// Дана строка, состоящая из букв A-Z:
// AAAABBBCCXYZDDDDEEEFFFAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBbbb
// Нужно написать функцию RLE, которая на выходе даст строку вида:
// A4B3C2XYZD4E3F3A6B28b3
function rle(str) {
  // your code
}
Ответить с цитированием
  #2 (permalink)  
Старый 17.09.2019, 10:19
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 11,422

Циклом обойти строку сравнивая символ с последующим, если равны увеличивать счетчик одинаковых, если нет, запоминать символ в результате со счетчиком.

var s = 'AAAABBBCCXYZDDDDEEEFFFAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBbbb';
// A4B3C2XYZD4E3F3A6B28b3

function rle(s) {
    for(var i=0, a = 0, b = ''; i <= s.length; ++i) {
        if(s.charAt(i) == s.charAt(i+1)) a++;
        else {
            b += s.charAt(i) + (a ? a + 1 : '');
            a = 0;
        } 
    }
    return b;
}

alert(rle(s))
Ответить с цитированием
  #3 (permalink)  
Старый 17.09.2019, 11:08
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 715

var str = 'AAAABBBCCXYZDDDDEEEFFFAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBbbb';

function rle(s) {
  return s.replace(/(.)\1*/g, function (m, c) { return c + (m.length > 1 ? m.length : ''); });
}

alert(rle(str))
Ответить с цитированием
  #4 (permalink)  
Старый 17.09.2019, 11:09
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 27,323

gsdev99,
var s = 'AAAABBBCCXYZDDDDEEEFFFAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBbbb';
// A4B3C2XYZD4E3F3A6B28b3

function rle(s) {

    return s.replace(/(.)\1+/g, function(a, c) {
    return c + a.length
});
}

alert(rle(s))
Ответить с цитированием
  #5 (permalink)  
Старый 17.09.2019, 11:15
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 715

рони,
я долго тупил, не мог понять, куда у тебя единицы деваются, не сразу заметил что плюсик вместо *
Ответить с цитированием
  #6 (permalink)  
Старый 17.09.2019, 11:20
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 11,422

А мне кажется, что это очередной "студент" с задачкой на применение стандартного, а не красивого. Хотя бог его знает.
Ответить с цитированием
  #7 (permalink)  
Старый 17.09.2019, 11:45
Аспирант
Отправить личное сообщение для gsdev99 Посмотреть профиль Найти все сообщения от gsdev99
 
Регистрация: 03.02.2019
Сообщений: 53

Это "очередной студент" в поисках применения красивого )) Ребята, всем спасибо )
Ответить с цитированием
  #8 (permalink)  
Старый 17.09.2019, 12:02
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 11,422

Значит не похоже на задачу, от которой сквозит простотой. Даже подумалось, что тернарный оператор и тот лишний будет, а рег. выражения тем более.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отправка данных аякс по Enter, перенос строки Enter+Ctrl shyxeroks Элементы интерфейса 1 30.03.2017 16:00
Скрипт не работает на добавленные строки Гробовщик jQuery 2 20.02.2015 13:18
Удаление совпадения строки из строки feniks7 Общие вопросы Javascript 3 24.07.2013 22:15
Чтение массива из адресной строки Xalyavbich Общие вопросы Javascript 0 27.06.2012 15:56
Для события onCLick получить индекс строки и объект грида. progi2007 ExtJS 4 05.08.2009 11:31