60 lines
2.5 KiB
Python
60 lines
2.5 KiB
Python
''' ****** Задание 18 из 20 *********
|
||
* RLE (Run-Length Encoding) — это способ сокращённой записи повторяющихся символов.
|
||
Вместо длинной группы одинаковых символов записывается сам символ и число его повторений.
|
||
Например, 99999 превращается в 9 5 («девять пять раз»).
|
||
|
||
Напишите программу, которая получает строку из цифр и выводит её RLE-представление: последовательность пар «цифра — количество подряд идущих повторений».
|
||
|
||
Формат ввода
|
||
Строка цифр длиной не меньше 1.
|
||
|
||
Формат вывода
|
||
Пары: сама цифра и количество повторений цифры подряд во введённой строке, как описано в условии и показано в примере.
|
||
|
||
|
||
Подсказка
|
||
Считайте данные (например в переменную text):
|
||
|
||
Преобразуйте данные:
|
||
|
||
|
||
reference = text[0] # в качестве опорной цифры возьмите первую
|
||
counter = 1 # мы точно знаем, что одна такая цифра есть =)
|
||
text = text[1:] + '_' # удалите первую цифру и добавьте "отличительный" признак конца строки
|
||
Организуйте цикл по text (например используя переменную digit)
|
||
|
||
Постройте алгоритм следующим образом:
|
||
|
||
если цифра равна опорной - увеличиваем количество;
|
||
если это новая цифра - выведите опорную и количество раз что вы ее наблюдали, обновите опорную цифру и счётчик.
|
||
В конце цикла вы увидите знак _, который точно не будет равен последней опорной цифре.
|
||
|
||
Пример 1
|
||
Ввод
|
||
|
||
010000100001111111110111110000000000000011111111
|
||
Вывод
|
||
|
||
0 1
|
||
1 1
|
||
0 4
|
||
1 1
|
||
0 4
|
||
1 9
|
||
0 1
|
||
1 5
|
||
0 14
|
||
1 8
|
||
'''
|
||
|
||
|
||
if __name__ == "__main__":
|
||
line = input()
|
||
temp_line, repeat = line[0], 1
|
||
for i in line[1:]:
|
||
if i == temp_line:
|
||
repeat += 1
|
||
else:
|
||
print(temp_line, repeat)
|
||
temp_line, repeat = i, 1
|
||
print(temp_line, repeat) |