Kodowanie długości serii (RLE)

Zadanie 4 z 9 · rozdział 25Trudność: 2 z 3stringcompressrun-length

Treść zadania

Kodowanie długości serii (ang. run-length encoding, RLE) to prosta metoda kompresji. Każdą serię jednakowych znaków stojących bezpośrednio obok siebie zapisujemy jako ten znak, a zaraz po nim liczbę jego powtórzeń (w zapisie dziesiętnym, więc może mieć kilka cyfr). Na przykład aaabcc koduje się jako a3b1c2, a dwanaście liter x pod rząd — jako x12.

Zakoduj podany napis metodą RLE. Ten sam znak może tworzyć kilka oddzielnych serii — każdą kodujemy osobno.

Dane wejściowe

Jedna linia: napis S złożony wyłącznie z liter alfabetu angielskiego (wielkość liter ma znaczenie).

Dane wyjściowe

Jedna linia: zakodowany napis.

Ograniczenia

  • 1 ≤ |S| ≤ 1000

Uwagi

  • Przechodź po napisie i licz, ile razy z rzędu powtarza się bieżący znak. Gdy seria się kończy (następny znak jest inny albo napis się skończył), dopisz do wyniku znak i licznik zamieniony na napis (str(licznik)).

Przykład

Wejście
AAAAAAAAAABBBBBBBBA
Wyjście
A10B8A1

Napis składa się z trzech serii: dziesięciu liter A, ośmiu liter B i jednej litery A.

Potrzebujesz teorii?

Zasady obowiązujące w rozdziale 25

Trudniejsze zadania na napisach: samodzielna zamiana i usuwanie fragmentów, przedrostki, kodowanie RLE, rotacje, szukanie najdłuższych powtórzeń i wspólnych fragmentów (programowanie dynamiczne) oraz sprawdzanie nawiasów za pomocą stosu. Spróbuj rozwiązywać je własnymi pętlami, bez gotowych metod w rodzaju replace czy startswith — właśnie o to w nich chodzi.

Konwencje wspólne:

  • Każde zadanie to osobny program: czyta standardowe wejście i wypisuje wynik na standardowe wyjście.
  • Program nie wypisuje komunikatów typu „Podaj napis:”. Tekst podany w input("…") jest ignorowany przez sprawdzarkę.
  • Każdy napis zajmuje jedną całą linię wejścia, razem ze spacjami — wczytuj go przez input(), bez strip() i split().
  • Wielkość liter ma znaczenie (A i a to różne znaki), a spacja też jest znakiem.
  • Podnapis to ciągły fragment napisu, np. kot jest podnapisem kotlet, a ket — nie.
  • Pozycje znaków (indeksy) liczymy od 0, tak jak w Pythonie.
  • Odpowiedzi logiczne wypisuj jako Prawda albo Fałsz (o ile zadanie nie mówi inaczej).

Zadanie pochodzi z otwartego zbioru Nauka-Programowania (z rozwiązaniami wzorcowymi). Zgłoś błąd w treści lub testach.

Python uruchomi się w przeglądarce przy pierwszym teście.

Kod zapisuje się automatycznie w tej przeglądarce. Tab wstawia wcięcie; aby opuścić edytor klawiaturą, naciśnij Esc, a potem Tab.

Testy

Program dostaje „Wejście” przez input() i musi wypisać „Oczekiwane wyjście”. Liczby porównywane są z tolerancją 0,01, a tekst podany w input("…") nie jest sprawdzany.

Test 1

Nie uruchomiono
Wejście
aaabbbcca
Oczekiwane wyjście
a3b3c2a1

Test 2

Nie uruchomiono
Wejście
x
Oczekiwane wyjście
x1

Test 3

Nie uruchomiono
Wejście
zzzzzz
Oczekiwane wyjście
z6

Test 4

Nie uruchomiono
Wejście
abc
Oczekiwane wyjście
a1b1c1

Test 5

Nie uruchomiono
Wejście
Mississippi
Oczekiwane wyjście
M1i1s2i1s2i1p2i1

Test 6

Nie uruchomiono
Wejście
aAaA
Oczekiwane wyjście
a1A1a1A1

Test 7

Nie uruchomiono
Wejście
abba
Oczekiwane wyjście
a1b2a1

Test 8

Nie uruchomiono
Wejście
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab
Oczekiwane wyjście
a120b1

Test 9

Nie uruchomiono
Wejście
bcccccaaaaccccccaaaaaabbbbaaabbaaacaccbbaaaaabccaaaccaaaaccccccccaaaabbbbaaaaaaaaaacbcccccccccbbcaaaabbbbcbbbcccccbbaaaaaacccacccaaaaacccccccbaaaccccaaabbcccaacccbaaaacccaaacbbbbbbbbbcbbbbbcccbbbbcbbabbbbaabbbaaaabbbbbbbccccccaaaacccccccaa
Oczekiwane wyjście
b1c5a4c6a6b4a3b2a3c1a1c2b2a5b1c2a3c2a4c8a4b4a10c1b1c9b2c1a4b4c1b3c5b2a6c3a1c3a5c7b1a3c4a3b2c3a2c3b1a4c3a3c1b9c1b5c3b4c1b2a1b4a2b3a4b7c6a4c7a2
Uruchom z własnymi danymi