_gvsss Ответов: 1

Кодировка длины выполнения в python3


Учитывая строку, выведите кодированный вывод длины выполнения.
Размер входного сигнала : N <= 100000
Образец Теста :
ВХОД
информацию AaAb
ВЫХОД
а3в1

код, который я попробовал выполнить для приведенного выше примера случая, но моя проблема в том, что частные случаи не прошли
Извините если это наивное сомнение я новичок в программировании
Заранее спасибо

Что я уже пробовал:

from collections import Counter
text=input()
if(text==None):
    print(" ")
if(text.isalpha()):
    
        dict1=dict(Counter(text))
        for i,j in dict1.items():
            print(i,j,end="",sep="")

Richard MacCutchan

Мы не можем догадаться, какие тесты провалились или как они провалились.

_gvsss

да, я знаю эту часть, мое намерение состояло в том, что я ничего не упускаю, если таковые имеются, пожалуйста, дайте мне знать

Richard MacCutchan

Да, вы не объяснили, в чем проблема.

k5054

Что происходит, когда вы пытаетесь ввести "aaabbaa"? Выход должен быть a3b2a2

_gvsss

нет согласно моему кодексу так и будет
аааббаа
а5в2

Richard MacCutchan

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

k5054

Поскольку это "кодировка длины выполнения", можно было бы ожидать, что вы сможете каким-то образом "декодировать" вывод и получить исходный текст обратно. То, что у вас есть, дает один и тот же результат для любой комбинации из 5 А и 2 Б, если первый символ-это а. Это означает, что вы потеряли информацию при "кодировании", а это, вероятно, не то, что вы хотите.

Patrice T

Но правильный ответ-a3b2a2

1 Ответов

Рейтинг:
9

CPallini

То Python реализация проекта C программист :-O

s = 'aaabbaa'
c = s[0]
n = 1
o = c
for k in range(1, len(s)):
  o = s[k]
  if o == c:
    n = n + 1
  else:
    print(c,n, sep='', end='')
    n = 1 
    c = o
print(o,n, sep='')


_gvsss

спасибо