Im PPCG- Chatroom zeigt das Neunzehnte Byte mithilfe von Karotten ^(oder Karotten ) an, dass Sie mit einem der zuvor über Ihrem Kommentar abgegebenen Kommentare einverstanden sind.
Eine Caret-Nachricht besteht ausschließlich aus N ^Zeichen (wobei N eine positive Ganzzahl ist) und bedeutet Übereinstimmung mit der N-ten vorherigen Nachricht. Ein einzelnes ^bedeutet also Übereinstimmung mit der unmittelbar vorhergehenden Nachricht, ^^Übereinstimmung mit der Nachricht in zwei Zeilen, ^^^Übereinstimmung mit der Nachricht in drei Zeilen und so weiter.
Wenn eine Caret-Nachricht X mit einer anderen Caret-Nachricht Y übereinstimmt (oder auf diese zeigt), dann heißt es, dass X mit dem übereinstimmt, womit Y übereinstimmt. Es kann mehrere Schichten davon geben, und am Ende zeigen alle Caret-Nachrichten eine Übereinstimmung mit einer Nicht-Caret-Nachricht an.
Wenn ein Chat-Protokoll beispielsweise wie folgt aussieht: (eine Nachricht pro Zeile)
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]
Dann sind die Zeilen 1, 2 und 6 Nicht-Caret-Nachrichten und alle anderen Caret-Nachrichten, die auf Nicht-Caret-Nachrichten verweisen:
- Linie 3 zeigt direkt auf Linie 2.
- Linie 4 zeigt direkt auf Linie 1.
- Linie 5 zeigt auf Linie 3, die auf Linie 2 zeigt.
- Linie 7 zeigt auf Linie 6.
- Linie 8 zeigt auf Linie 5, die auf Linie 3 zeigt, die auf Linie 2 zeigt.
- Die Linie 9 zeigt auf die Linie 7, die auf die Linie 6 zeigt.
Daher können wir unter Einbeziehung der Benutzer, die die Nicht-Caret-Nachricht geschrieben haben (und unter der Annahme, dass die Leute ihre eigene Nachricht nicht pflegen), zu folgendem Schluss kommen:
- 2 Personen stimmen zu
I like dogs(Linien 1 und 4) - 4 Personen stimmen zu
I like cats(Zeilen 2, 3, 5 und 8.) - 3 Personen stimmen zu
I like turtles(Zeilen 6, 7 und 9.)
Herausforderung
Schreiben Sie ein Programm oder eine Funktion, die eine mehrzeilige Zeichenfolge ähnlich dem obigen Beispiel enthält, wobei jede Zeile eine Chat-Nachricht darstellt, wobei ältere Nachrichten an erster Stelle stehen.
Jede Zeile hat mindestens ein Zeichen und es gibt mindestens eine Zeile. Alle Nachrichten sind entweder Caret-Nachrichten, die nur aus ^'s bestehen, oder Nicht-Caret-Nachrichten, die aus Buchstaben und Leerzeichen bestehen ( [ a-zA-Z]+in Regex).
Geben Sie für jede Nicht-Caret-Nachricht in beliebiger Reihenfolge die Anzahl der Personen, die damit einverstanden sind, in einem eindeutigen Format aus, das den Nachrichtentext enthält, z
2 - I like dogs
4 - I like cats
3 - I like turtles
oder
I like cats (4)
I like dogs (2)
I like turtles (3)
oder
{"I like cats" : 4, "I like turtles" : 3, "I like dogs" : 2}
Sie können davon ausgehen, dass:
- Menschen stimmen immer mit ihren eigenen Botschaften überein und kümmern sich nicht um sich selbst.
- Keine zwei Nicht-Caret-Nachrichten sind identisch.
- Caret-Nachrichten zeigen nicht auf Dinge vor der ersten Nachricht.
- Zeilen enthalten keine führenden oder nachfolgenden Leerzeichen.
Der kürzeste Code in Bytes gewinnt.
Testfälle
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