С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/302: Рейтинг темы: голосов - 302, средняя оценка - 4.85
208 / 95 / 15
Регистрация: 27.07.2018
Сообщений: 323

Кодирование строки цифр в RLE

26.11.2018, 20:27. Показов 62369. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
RLE означает “run-length encoding” — это способ сокращённой записи последовательности чего угодно (в случае этой задачи — цифр), при котором для подряд идущих группы одинаковых цифр (run) записываются длина этой группы (run length) и сама эта цифра. Таким образом, “99999” превратится в “5 9” («пять девяток»), и так далее. RLE широко используется в самых разных областях.

Напишите программу, которая кодирует строку цифр в RLE.

Формат ввода
Строка цифр длиной не меньше 1.

Формат вывода
Пары: количество повторений цифры подряд в введённой строке и сама цифра, как описано в условии и показано в примере.

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
Ввод                                                                                            Вывод
010000100001111111110111110000000000000011111111
                                                                                                1 0
                                                                                                1 1
                                                                                                4 0
                                                                                                1 1
                                                                                                4 0
                                                                                                9 1
                                                                                                1 0
                                                                                                5 1
                                                                                                14 0
                                                                                                8 1
Python
1
2
3
4
5
6
7
8
9
10
string = input()
cout = 1
for i in range(len(string)):
    if i <= len(string):
        if string[i] == string[i + 1]:
            cout += 1
        else:
            a = string[i]
            print(cout, string[i])
            cout = 1
Ошибка - пытается обратиться к несуществующему элементу, как по другому можно реализовать, без ошибки?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.11.2018, 20:27
Ответы с готовыми решениями:

Кодирование RLE на питон
Что не так? Почему не выводит строчку с кодированием? def rle_encode(data): #кодирование encoding = '' prev_char = '' ...

кодирование RLE
я составила для себя алгоритм допустим в файле |65|65|66| считали 65 считали следущее т.е. опять 65 считали следущее т.е....

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

8
151 / 86 / 35
Регистрация: 05.08.2017
Сообщений: 257
26.11.2018, 20:34
По моему я там тебе доступно объяснил
Орёл и решка
0
9037 / 2937 / 494
Регистрация: 05.10.2013
Сообщений: 7,962
Записей в блоге: 216
27.11.2018, 15:06
Лучший ответ Сообщение было отмечено 8Observer8 как решение

Решение

Цитата Сообщение от CyberGame Посмотреть сообщение
как по другому можно реализовать, без ошибки?
Ты уже знаешь функции, списки и triple?

И эту конструкцию знаешь?
Python
1
if __name__ == "__main__":
Проверь, работает:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
def rle(str):
    result = []
    count = 0
 
    if len(str) == 1:
        result.append((1, int(str[0])))
        return result
 
    for i in range(len(str)):
        count += 1
        if (i + 1) == len(str) or str[i] != str[i + 1]:
            result.append((count, int(str[i])))
            count = 0
            
    return result
 
if __name__ == "__main__":
 
    str = input()
    result = rle(str)
 
    for amount, figure in result:
        print(amount, figure)
0
9037 / 2937 / 494
Регистрация: 05.10.2013
Сообщений: 7,962
Записей в блоге: 216
28.11.2018, 04:11
Это unit-тесты, которые я писал в время решения задачи. C Python идёт встроенный модуль unittest. Тесты помогают в контреле правильности решения.

Команда для запуска тестов:
Python
1
python -m unittest
test_rle.py

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
import unittest
 
from rle import rle
 
class RleTest(unittest.TestCase):
 
    def test_1of1(self):
        result = rle("1")
        expected = [(1, 1)]
        self.assertEqual(expected, result)
 
    def test_2of9(self):
        result = rle("99")
        expected = [(2, 9)]
        self.assertEqual(expected, result)
 
    def test_5of9(self):
        result = rle("99999")
        expected = [(5, 9)]
        self.assertEqual(expected, result)
 
    def test_1of1_4of0(self):
        result = rle("10000")
        expected = [(1, 1), (4, 0)]
        self.assertEqual(expected, result)
0
67 / 64 / 3
Регистрация: 02.11.2019
Сообщений: 227
20.11.2019, 18:54
Не работает!!!
0
 Аватар для Semen-Semenich
5220 / 3468 / 1172
Регистрация: 21.03.2016
Сообщений: 8,295
20.11.2019, 19:58
вроде так. проверь
Python
1
2
3
4
5
6
7
8
9
10
11
string = input()
cout = 1
for i in range(len(string)-1):
    if i <= len(string):
        if string[i] == string[i + 1]:
            cout += 1
        else:
            a = string[i]
            print(cout, string[i])
            cout = 1
print(cout, string[i])
1
 Аватар для ZuzaZuzev
0 / 0 / 0
Регистрация: 27.10.2024
Сообщений: 13
24.11.2024, 12:37
Python
1
2
3
4
5
6
7
8
9
10
src = input().strip() + "\0"
saved = src[0]
count = 0
for x in src:
    if x == saved:
        count += 1
    else:
        print(count, saved)
        saved = x
        count = 1
0
0 / 0 / 0
Регистрация: 28.11.2024
Сообщений: 1
28.11.2024, 13:31
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
str = input()
cout = 1
for i in range(len(str)):
    if i <= len(str):
        try:
            if str[i] == str[i + 1]:
                cout += 1
            else:
                a = str[i]
                print(cout, str[i])
                cout = 1
        except IndexError:
            break
print(cout, str[i])
0
26 / 20 / 7
Регистрация: 30.09.2022
Сообщений: 66
29.11.2024, 00:03
Python
1
2
3
4
5
6
7
8
9
10
11
12
st = '010000100001111111110111110000000000000011111111'
stack = []
stack.append(st[0])
for i in st[1:]:
    if stack[-1] == i:
        stack.append(i)
    else:
        print(len(stack), stack[0])
        stack.clear()
        stack.append(i)
else:
    print(len(stack), stack[0])
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.11.2024, 00:03
Помогаю со студенческими работами здесь

Кодирование RLE и вывод на экран
Что я делаю не так? #include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; using namespace std; ...

Кодирование сообщения методом RLE
Подскажите, как это вообще делать? Выполнить вручную кодирование сообщения методом RLE. В качестве исходной фразы взять текст из...

Реализовать RLE кодирование и декодирование
не могу сообразить каким образом реализовать RLE кодирование на С. Может тут мне помогут...

Кодирование длин серий (RLE)
Я уже полдня пытаюсь ошибку найти, всё 100 раз перепроверил и не могу всё равно найти в чем ошибка. У меня на входе файл 92,8 КБ, а на...

Кодирование длин серий RLE
Есть код алгоритма кодирования длин серий RLE. Но есть траблы с декодированием:( Вот код #include &lt;iostream&gt; #include...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru