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

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

01.08.2019, 15:56. Показов 15389. Ответов 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
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
01.08.2019, 17:19
itertools.groupby
0
1293 / 677 / 367
Регистрация: 07.01.2019
Сообщений: 2,302
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,302
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
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru