Ошибка в задаче со Stepik.org
Выполняя задание на Степике, столкнулся с проблемой. Написанная программка выдает правильные ответы, но не принимается проверкой, пишет:
Failed test #5 of 15. Wrong answer
(Здесь впервые задаю вопрос, не обессудьте, может не в верной форме))
Задание: Узнав, что ДНК не является случайной строкой, только что поступившие в Институт биоинформатики студенты группы информатиков предложили использовать алгоритм сжатия, который сжимает повторяющиеся символы в строке.
Кодирование осуществляется следующим образом: s = 'aaaabbсaa' преобразуется в 'a4b2с1a2', то есть группы одинаковых символов исходной строки заменяются на этот символ и количество его повторений в этой позиции строки.
Напишите программу, которая считывает строку, кодирует её предложенным алгоритмом и выводит закодированную последовательность на стандартный вывод. Кодирование должно учитывать регистр символов.
и решение:
s = input()
a = len(s)
b = ""
j = 1
for i in range(0, a-1):
if s[i] == s[i + 1]:
j +=1
if j == len(s):
b = s[0] + str(j)
else:
b = b +s[i]+ str(j)
j = 1
if len(s)>= 2 and s[a - 1]!= s[a - 2]:
b += s[a - 1] + "1"
elif len(s) >=3:
if s[a - 1] == s[a - 2] and s[a-2] != s[a - 3]:
b += s[a-1] + "2"
elif len(s) == 1:
b = b + s[0] + "1"
print(b)
Ответы (4 шт):
Нашел ошибку) Хотя решение по прежнему с костылями:
s = input()
a = len(s)
b = ""
j = 1
for i in range(0, a-1):
if s[i] == s[i + 1]:
j +=1
if j >= 1 and i == a-2:
b = b +s[i]+ str(j)
if j == len(s):
b = s[0] + str(j)
else:
b = b +s[i]+ str(j)
j = 1
if len(s)>= 2 and s[a - 1]!= s[a - 2]:
b += s[a - 1] + "1"
elif len(s) == 1:
b = b + s[0] + "1"
print(b)
Логика простая:
Запоминаем стартовый индекс
Если очередной символ отличается от символа по стартовому индексу:
Выводим символ по стартовому индексу и разность текущего индекса и стартового
Запоминаем стартовый индекс
Когда строка кончилась:
Выводим символ по стартовому индексу и разность с длиной строки
Итерируем по строке,инкремент на счетчик, как только нашли символ, отличающийся от предыдущего, в новую строку добавляем этот символ, счетчик обнуляем. Чтобы не упереться в конец строки, к оригинальной строке я добавил символ звездочки - "костыль", но в контексте этой задачи, всегда будет работать Выводим новую запись
s = input() + '*'
ns = ''
c = 0
for i in range(1, len(s)):
c += 1
if s[i] != s[i-1]:
ns += (s[i-1] + str(c))
c = 0
print(ns)
Прекрасная идея про "костыль", спасибо. Тоже долго решал, пока сюда не заглянул.
s = input() + ' '
symbol = s[0]
counter = 0
for i in range(len(s)):
if s[i] == symbol:
counter += 1
symbol = s[i]
elif s[i] != symbol:
print(symbol, counter, sep='', end='')
counter = 1
symbol = s[i]