FLAMASTE - Flamaster w pythonie

0

Witam, robię program do zadania Flamaster na stronie spoj w pythonie i mam strasznie dziwny błąd.

Treść:
Kasia niedawno poznała wszystkie literki w szkole. Z wielką pasją potrafiła całe dnie spędzać na pisaniu długich słów swoim ulubionym flamastrem. Pisała i pisała "tasiemce" tak długo, aż flamaster wypisał się. Kasia posmutniała. Z trudem, ale udało jej się uprosić swoją mamę, aby kupiła jej nowy pisak. Musiała jednak obiecać, że tym razem będzie bardziej oszczędna przy jego używaniu żeby wystarczył na dłużej. Kasia zaczęła zastanawiać się w jaki sposób będzie mogła zrealizować obietnicę daną mamie.

Postanowiła, że aby zaoszczędzić wkład flamastra będzie wypisywała skróconą wersję wymyślanych wyrazów. Jeśli miała zamiar napisać więcej niż dwie takie same literki obok siebie w wyrazie, to teraz napisze literkę a następnie liczbę, określającą ilość wystąpień tej literki.
Zadanie
Twoim zadaniem jest dla zadanego wyrazu, który wymyśliła Kasia, podanie skróconej wersji tego wyrazu.

Wejście
W pierwszej linijce wejścia znajduje się liczba naturalna C, 1 ≤ C ≤ 50, oznaczająca ilość zestawów danych. W kolejnych C wierszach wejścia znajdują się zestawy danych. Każdy zestaw składa się z niepustego wyrazu złożonego z samych dużych liter alfabetu amerykańskiego. Długość wyrazu nie przekracza 200 znaków.
Wyjście
Dla każdego zestawu danych, dla zadanego wyrazu, na wyjściu powinna znaleźć się jego skrócona wersja.

t = int(input())

for i in range(t):
    txt = str(input())
    n = len(txt)
    t = 0
    d = txt[0]
    for j in range(n):
        if txt[j] == d:
            t += 1
        else:
            if t > 2:
                print(txt[j-1] + str(t), end='')
            elif t == 2:
                print(txt[j-1]+txt[j-1], end='')
            else:
                print(txt[j-1], end='')
            t = 1
        d = txt[j]

    print("")

program po wywołaniu zjada mi zawsze ostatnią literkę nie ważne ile razy ona występuje
4
OPSS
ABCDEF
ABBCCCDDDDEEEEEFGGHIIJKKKL
AAAAAAAAAABBBBBBBBBBBBBBBB

Dla takiego testu odpowiedzią jest:
OP
ABCDE
ABBC3D4E5FGGHIIJK3
A10

Gdy poprawną odpowiedzią powinno być:
OPSS
ABCDEF
ABBC3D4E5FGGHIIJK3L
A10B16

Ktoś ma pomysł co może być nie tak?

1

Jak to debugowałeś i nie zauważyłeś błędu gdy indeks jest na końcu wyrazu; prosty hack powinien załatwić sprawę:

t = int(input())

for i in range(t):
    txt = str(input())
    n = len(txt)
    t = 0
    d = txt[0]
    # pdb.set_trace()
    for j in range(n):
        
        if txt[j] == d:
            t += 1
        else:
            if t > 2:
                print(txt[j-1] + str(t), end='')
            elif t == 2:
                print(txt[j-1]+txt[j-1], end='')
            else:
                print(txt[j-1], end='')
            t = 1
        d = txt[j]
        if j == n - 1:
          if t > 2:
                print(txt[j-1] + str(t), end='')
          elif t == 2:
                print(txt[j-1]+txt[j-1], end='')
          else:
                print(txt[j], end='')


    print("")
2

A tak na marginesie, żeby tego nie robić ręcznie: itertools.groupby z biblioteki standardowej.

1 użytkowników online, w tym zalogowanych: 0, gości: 1