Что не так с кодом на Python 3?
Есть задача на Python 3 с условием: Дана цепочка, состоящая из синих (B) и красных (R) точек. Нужно удалить наименьшее одинаковое количество синих и красных точек так, чтобы сначала шли только синие, а потом – только красные.
Входные данные
Входная строка содержит только символы 'B' и 'R' без пробелов.
Выходные данные
Нужно вывести полученную цепочку, в которой сначала идут только синие точки, а потом – только красные. Во второй строке нужно вывести количество удалённых (синих и красных) точек. и примерами: Примеры Ввод BBBRBBRBRBRRRRRR Вывод BBBBBRRRRRRR 4 Пытаюсь пол часа решить, использую разные варианты, но всё равно не получается. Вот последний вариант кода:
n = input()
s = ''
count = 0
for g in range(0, len(n)):
if g == len(n) - 1:
break
if n[g] == 'B' and n[g + 1] == 'B':
s += 'B'
continue
elif n[g] == 'B' and n[g + 1] == 'R':
if count == 0:
s += 'B'
else:
s += 'R'
continue
elif n[g] == 'R' and n[g + 1] == 'B':
s += 'R'
count += 1
continue
elif n[g] == 'R' and n[g + 1] == 'R':
continue
print(s)
print(count)
Что я делаю не так? В чём и где ошибки? Подскажите, пожалуйста, как правильно решить задачу и что использовать?!
Ответы (2 шт):
Это конечно не лучший вариант, но все же рабочий
def ed(a):
if a:
b = a.split('R')
r = a.split('B')
sorted_b = [y for y in b if y]
sorted_a = [y for y in r if y]
sorted_b.sort()
sorted_a.sort()
count_b = sorted_b.count(sorted_b[0])
count_a = sorted_a.count(sorted_a[0])
cb = min(map(len, sorted_b))
bb = ''.join(list(filter(lambda x: len(x) > cb, sorted_b)))
cr = min(map(len, sorted_a))
rr = ''.join(list(filter(lambda x: len(x) > cr, sorted_a)))
res = bb.count('B') * "B" + rr.count("R") * "R"
return f'{res} {count_a + count_b}'
print(ed("BBBRBBRBRBRRRRRR"))
Вывод будет:
BBBBBRRRRRR 5
данное решение подойдет сугубо для данного ввода строки, выглядит так:
s = "BBBRBBRBRBRRRRRR"
bb = s[:s.find('RR')]
rr = s[s.find('RR'):]
bb = bb.replace('R', '')
print(bb + rr, s.count('BR'))
1-делим на две части строку, до момента, где начинаются RR,
2-потом в первой заменяем R на пуcтое значение, т.е. удаляем.
3-в выводе "склеиваем" назад в строку, подсчитываем буквосочетание BR