W PPCG pokoju z XIX Byte , przy użyciu jest kursor ^(lub marchewki ) to sposób wskazujący, że zgadzasz się z jednym z wcześniej wykonanych komentarzach tuż nad twoim.
Wiadomość karetka składa się wyłącznie z N ^znaków (gdzie N jest dodatnią liczbą całkowitą) i oznacza zgodę na N-tą poprzednią wiadomość. Tak więc pojedynczy ^oznacza zgodę na wiadomość bezpośrednio poprzedzającą, ^^oznacza zgodę na wiadomość dwa wiersze w górę, ^^^oznacza zgodę na wiadomość trzy linie w górę i tak dalej.
Dodatkowo, gdy komunikat karetki X zgadza się (inaczej zwany w kierunku) innego komunikatu karetki Y, wtedy mówi się, że X zgadza się z tym, z czym Y się zgadza. Może być ich wiele warstw, a na koniec wszystkie komunikaty doraźne wskazują na zgodę na jeden komunikat nietradycyjny.
Na przykład, jeśli zapis rozmowy na czacie wygląda następująco: (jedna wiadomość na wiersz)
I like dogs [line 1]
I like cats [line 2]
^ [line 3]
^^^ [line 4]
^^ [line 5]
I like turtles [line 6]
^ [line 7]
^^^ [line 8]
^^ [line 9]
Następnie wiersze 1, 2 i 6 są wiadomościami bezobsługowymi, a wszystkie pozostałe są wiadomościami bezobsługowymi, które wskazują na wiadomości bezobsługowe:
- Linia 3 wskazuje bezpośrednio na linię 2.
- Linia 4 wskazuje bezpośrednio na linię 1.
- Linia 5 wskazuje na linię 3, która wskazuje na linię 2.
- Linia 7 wskazuje na linię 6.
- Linia 8 wskazuje na linię 5, która wskazuje na linię 3, która wskazuje na linię 2.
- Linia 9 wskazuje na linię 7, która wskazuje na linię 6.
Tak więc, włączając użytkowników, którzy napisali wiadomość bez opieki (i zakładając, że ludzie nie dbają o swoją wiadomość), możemy stwierdzić, że:
- 2 osoby zgadzają się z
I like dogs(linie 1 i 4) - 4 osoby zgadzają się z
I like cats(Linie 2, 3, 5 i 8) - 3 osoby zgadzają się z
I like turtles(linie 6, 7 i 9)
Wyzwanie
Napisz program lub funkcję, która pobiera ciąg wielowierszowy podobny do powyższego przykładu, w którym każda linia reprezentuje wiadomość czatu, a starsze wiadomości są pierwsze.
Każda linia będzie miała co najmniej jeden znak i będzie co najmniej jedna linia. Wszystkie wiadomości będą albo wiadomościami typu „daszek” składającymi się wyłącznie z ^„s”, albo wiadomościami typu „daszek” składającymi się z liter i spacji ( [ a-zA-Z]+wyrażenia regularne).
Dla każdej wiadomości bez znaku, w dowolnej kolejności, wypisz liczbę osób, które się z nią zgadzają, w czytelnym formacie, który zawiera tekst wiadomości, np.
2 - I like dogs
4 - I like cats
3 - I like turtles
lub
I like cats (4)
I like dogs (2)
I like turtles (3)
lub
{"I like cats" : 4, "I like turtles" : 3, "I like dogs" : 2}
Możesz założyć, że:
- Ludzie zawsze zgadzają się z własnymi przesłaniami i nie dbają o siebie.
- Nie ma dwóch identycznych komunikatów.
- Wiadomości z daszkiem nie będą wskazywać na rzeczy przed pierwszą wiadomością.
- Linie nie będą zawierać spacji wiodących ani końcowych.
Najkrótszy kod w bajtach wygrywa.
Przypadki testowe
bread is bread
1 - bread is bread
---
animals are fuzzy
^
^
^
^^^
^^
^^^^^^
7 - animals are fuzzy
---
pie
^
^^
pi
^
^^
^^^^
^
^^^^^
^^^^^
^^^
^^^^
^^
^
^^^^^^^^^
9 - pie
6 - pi
---
a
b
c
^
^
^
1 - a
1 - b
4 - c
---
a
b
c
^
^^
^^^
1 - a
1 - b
4 - c
---
a
b
c
^^^
^^^^
^^^^^
4 - a
1 - b
1 - c
---
W
^
^^
X
^^^
^^^^
Y
^^^^^
^^^^^^
Z
^^^^^^^
^^^^^^^^
1 - Y
3 - X
1 - Z
7 - W
---
ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqretuvwxyz
^
ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqretuvwxyz
2 - ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqretuvwxyz
1 - ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqretuvwxyz
---
I like dogs
I like cats
^
^^^
^^
I like turtles
^
^^^
^^
2 - I like dogs
4 - I like cats
3 - I like turtles