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
Antworten:
CJam, 18
2 Bytes entfernt dank Martin :)
Probieren Sie es online
Erläuterung:
quelle
Pyth,
1918 BytesDemonstration
Eine ähnliche Herangehensweise an Aditsu, insbesondere den Rle-Teil.
quelle
JavaScript (ES6), 110 Byte
Erläuterung
Prüfung
Code-Snippet anzeigen
quelle
Mathematica,
83.77Bytesquelle
Ruby 89
Dieses Programm wird von STDIN eingegeben und gibt das Ergebnis aus. Es verfolgt die Nachrichten und deren Stimmenzahl in der Variablen
v
, bei der es sich um eine handeltHash
.Online-Demos:
quelle
Python 2.7 -
122114 BytesZiemlich genau die einfachste Lösung, die es gibt, und nicht besonders golfen.
quelle
Python 2.7 96 Bytes
Erklärung: In-Place-Überschreiben von l, jeder Aufruf von
l[_] = ...
speichert das Wort, auf das verwiesen wird, und ein Wörterbuch wird verwendet, um die Ergebnisse zu zählen, indem die aktuelle Anzahl von initialisiert oder addiert wirdb[l[_]]
quelle
for _,i in enumerate(l):
.