Wszyscy wiedzą, co to jest kodowanie ciągłe. Był już przedmiotem wielu wyzwań związanych z golfem. Będziemy patrzeć na pewną odmianę.
Przykład
Normal: 11222222222222222222233333111111111112333322
Run-length: 112(19)3(5)1(11)2333322
Liczba w nawiasach określa liczbę wystąpień poprzedniego symbolu. W tym przykładzie zakodowano tylko serie 5 lub więcej znaków. Wynika to z faktu, że kodowanie przebiegów 4 lub mniej nie poprawia liczby znaków.
Wyzwanie
Napisz funkcję / program, który implementuje tę odmianę kodowania długości przebiegu, ale może również kodować przebiegi dwóch symboli. Serie dwóch symboli muszą być również ujęte w nawiasy. Grupa zostanie również umieszczona w nawiasach. Twój program musi zaakceptować ciąg jako dane wejściowe i wygenerować zmodyfikowany ciąg z modyfikacjami, które skracają ciąg.
Przykład
Normal: 111244411144411144411167676767222222277777222222277777123123123123
Double run-length: 1112((444111)(3))67676767((2(7)7(5))(2))123123123123
Notatki
111
nie został zakodowany, ponieważ kodowanie go (1(3)
) nie jest krótsze.- Ciąg
444111
występuje 3 razy, więc jest zakodowany. 676767
nie został zakodowany, ponieważ((67)(4))
jest dłuższy niż wcześniej.222222277777222222277777
nie został zakodowany jako((222222277777)(2))
. Dlaczego? Ponieważ222222277777
sam można sprowadzić do2(7)7(5)
.123123123123
nie jest zakodowany, ponieważ twój program ma obsługiwać dwa symbole, a nie trzy.
To jest golf-golfwięc najkrótszy kod wygrywa. Tie-breaker to wcześniejsze zgłoszenie.
Jeśli coś przeoczyłem lub jeśli czegoś nie jesteś pewien, powiadom mnie w komentarzach.
67
s.441444144414
->((4414)(3))
?4414
jest technicznie serią 4. Moje sformułowanie jest po prostu złe.111111111
można zakodować jako(1)(9)
?Odpowiedzi:
Siatkówka, 162 bajty
Wypróbuj online!
źródło
10101010100100100100100
, wynik będzie((10)(5))0((100)(4))
, ale((10)(4))((100)(5))
będzie o jeden znak krótszy.