Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/75: Рейтинг темы: голосов - 75, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 01.08.2019
Сообщений: 3

Решение задачи на RLE-сжатие

01.08.2019, 15:56. Показов 15282. Ответов 7

Студворк — интернет-сервис помощи студентам
RLE-сжатие – один из самых простых методов сжатия строки, основанный на сокращении подстрок, состоящих из одинаковых символов. Сжатие осуществляется следующим образом:
Строка разбивается на минимальное количество подстрок, состоящих из одинаковых символов. Например, abbcaaa превращается в строки a, bb, c, aaa.
Каждая из полученных строк превращается в строку, состоящую из числа и буквы. Числом является количество повторений символа в этой строке, буква берётся из первого символа обрабатываемой строки. Число не добавляется, если количество символов в строке равно единице. Из предыдущего массива строк мы получаем a, 2b, c, 3a.
Затем полученные строки конкатенируются в исходном порядке. В рассмотренном примере в итоге получим a2bc3a.
Вам дана строка s, уже сжатая в RLE-формате. Назовём строку, из которой была получена s, строкой t. Вам даны q запросов, каждый из них представлен целыми числами l и r. В каждом запросе вам необходимо найти длину сжатой подстроки t[l…r].

Формат ввода
В первой строке входного файла записана строка s, состоящая из строчных букв латинского алфавита и цифр 1≤|s|≤1000000). Гарантируется, что существует такая непустая строка t, из которой RLE-сжатием получается строка s. Также гарантируется, что в строке t не было больше 1000000000 одинаковых подряд идущих символов.В следующей строке дано количество запросов q(1≤q≤100000). Каждая из следующих q
строк содержит два числа li ri(1≤li≤ri≤|t|) — параметры запросов.

Формат вывода
Выведите q чисел, каждое в отдельной строке — ответы на запросы в том порядке, в котором запросы были заданы во входных данных.

Пример 1
Ввод
a2bc3a
5
1 7
5 7
1 2
3 5
4 4
Вывод
6
2
2
3
1

Пример 2
Ввод
x1000000000yz
3
2 1000000001
2 1000000002
5938493 15938493
Вывод
11
12
9
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.08.2019, 15:56
Ответы с готовыми решениями:

Сжатие RLE в JScript
Доброго времени суток! Мне нужно написать скрипт. В текстовом файле input.txt записана строка (там могут быть любые символы). Необходимо...

RLE-сжатие списка
Помогите пожалуйста люди добрые. Задать функцию rle_encode(List), которая кодирует список List методом повторов. Если подряд...

Сжатие данных RLE
Подскажите как изменить функцию декодирования, чтобы числа тоже могли декодироваться, если например кодируемое сообщение "абсд...

7
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
01.08.2019, 17:19
itertools.groupby
0
1293 / 677 / 367
Регистрация: 07.01.2019
Сообщений: 2,301
01.08.2019, 17:25
Было уже
0
01.08.2019, 17:42

Не по теме:

tooru, боян :D

0
0 / 0 / 0
Регистрация: 01.08.2019
Сообщений: 3
01.08.2019, 17:45  [ТС]
Мне нужно, чтобы решение не включало импорты
0
1293 / 677 / 367
Регистрация: 07.01.2019
Сообщений: 2,301
01.08.2019, 18:10
Цитата Сообщение от AndreShah Посмотреть сообщение
Мне нужно, чтобы решение не включало импорты
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
def main():
    """Demo usage of functions."""
    rle = "WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWBWWWWWWWWWWWWWW"
    encoded = encode(rle)
    decoded = decode(encoded)
 
    print("Test Vector: " + rle)
 
    # Expected output: 12WB12W3B24WB14W
    print("Encoded Result: " + formatOutput(encoded))
 
    # Expected output: WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWBWWWWWWWWWWWWWW
    print("Decoded Result: " + decoded)
 
 
def encode(sequence):
    """Encode a sequence of characters and return the result as a list of tuples (data value and number of observed instances of value).
    Keyword arguments:
    sequence -- a sequence of characters to encode represented as a string.
    """
    count = 1
    result = []
 
    for x,item in enumerate(sequence): 
        if x == 0:
            continue
        elif item == sequence[x - 1]:
            count += 1
        else:        
            result.append((sequence[x - 1], count))
            count = 1            
    
    result.append((sequence[len(sequence) - 1], count))
 
    return result
 
 
def decode(sequence):
    """Decodes the sequence and returns the result as a string.
    Keyword arguments:
    sequence -- a list of tuples (data value and number of observed instances of value).
    """
    result = []
 
    for item in sequence:
        result.append(item[0] * item[1])
 
    return "".join(result)
 
 
def formatOutput(sequence):
    """Returns a print friendly version of the encoded data. 
    Keyword arguments:
    sequence -- list of tuples (data value and number of observed instances of value).
    """
    result = []
 
    for item in sequence:
        if (item[1] == 1):
            result.append(item[0])
        else:
            result.append(str(item[1]) + item[0])
 
    return "".join(result)
    
 
if __name__ == "__main__":
    main()
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
01.08.2019, 18:28
Тогда копипастишь эквивалент itertools.groupby, там в хелпе есть.
0
1 / 1 / 0
Регистрация: 05.03.2019
Сообщений: 3
14.08.2019, 16:50
В следующей строке дано количество запросов q(1≤q≤100000). Каждая из следующих q строк содержит два числа li ri(1≤li≤ri≤|t|) — параметры запросов.
А мог бы кто то из людей в теме рассказать, что значат эти запросы в задаче?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.08.2019, 16:50
Помогаю со студенческими работами здесь

RLE сжатие и формат BMP
Здравствуйте, помогите найти программу, сжимающую bmp файлы с помощью встроенного в формат алгоритма RLE4 или RLE8. Стоит такая задача:...

Расшифровка кода (сжатие RLE)
Помогите с комментариями к коду. Сжатие RLE Кодирование: string str1 = text_input.Text, str = "", ch = ""; ...

Сжатие файлов методом RLE
Товарищи программисты, нужна ваша помощь. Пишу простенький архиватор, который будет сжимать файлы методом кодирования повторов. Есть...

Сжатие текстовых файлов RLE
Здравствуйте! Написал программу для школьного проекта, которая сжимает текстовые файлы по алгоритму RLE. Она способна сжимать тексты,...

Сжатие изображения методом RLE
При преобразовании массива байт в изображения выдает ошибку. Не могу понять в чем проблема. using System; using...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru