Dans le salon de discussion PPCG le dix - neuvième octet , l'utilisation de carets ^
(ou de carottes ) est un moyen d'indiquer que vous êtes d'accord avec l'un des commentaires précédents juste au-dessus du vôtre.
Un caret message se compose uniquement de N ^
caractères (où N est un entier positif) et cela signifie un accord avec le Nième message précédent. Donc, un seul ^
signifie accord avec le message immédiatement précédent, ^^
signifie accord avec le message deux lignes, ^^^
signifie accord avec le message trois lignes, et ainsi de suite.
De plus, lorsqu'un message de caret X est en accord (aka pointant vers) un autre message de caret Y, alors X est en accord avec ce avec quoi Y est d'accord. Il peut y avoir plusieurs couches de cela et, en fin de compte, tous les messages de caret indiquent un accord avec un message sans caret.
Par exemple, si une transcription de discussion ressemble à ceci: (un message par ligne)
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]
Ensuite, les lignes 1, 2 et 6 sont des messages non caret et toutes les autres sont des messages caret qui pointent vers des messages non caret:
- La ligne 3 pointe directement vers la ligne 2.
- La ligne 4 pointe directement vers la ligne 1.
- La ligne 5 pointe vers la ligne 3, qui pointe vers la ligne 2.
- La ligne 7 pointe vers la ligne 6.
- La ligne 8 pointe vers la ligne 5, qui pointe vers la ligne 3, qui pointe vers la ligne 2.
- La ligne 9 pointe vers la ligne 7, qui pointe vers la ligne 6.
Ainsi, en incluant les utilisateurs qui ont écrit le message non caret (et en supposant que les gens ne tiennent pas leur propre message), nous pouvons conclure que:
- 2 personnes d'accord avec
I like dogs
(lignes 1 et 4.) - 4 personnes d'accord avec
I like cats
(lignes 2, 3, 5 et 8.) - 3 personnes d'accord
I like turtles
(lignes 6, 7 et 9.)
Défi
Écrivez un programme ou une fonction qui accepte une chaîne multiligne similaire à l'exemple ci-dessus où chaque ligne représente un message de discussion, les anciens messages venant en premier.
Chaque ligne aura au moins un caractère et il y aura au moins une ligne. Tous les messages seront soit des messages d'insertion constitués uniquement de ^
', soit des messages non accompagnés de lettres et d'espaces ([ a-zA-Z]+
en regex).
Pour chaque message non caret, dans n'importe quel ordre, affichez le nombre de personnes qui sont d'accord avec lui dans un format clair contenant le texte du message, par exemple
2 - I like dogs
4 - I like cats
3 - I like turtles
ou
I like cats (4)
I like dogs (2)
I like turtles (3)
ou
{"I like cats" : 4, "I like turtles" : 3, "I like dogs" : 2}
Vous pouvez supposer que:
- Les gens sont toujours d'accord avec leurs propres messages et ne se soucient pas d'eux-mêmes.
- Il n'y a pas deux messages non-caret identiques.
- Les messages circonflexes n'indiqueront rien avant le premier message.
- Les lignes ne contiendront pas d'espaces de début ou de fin.
Le code le plus court en octets gagne.
Cas de test
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
Réponses:
CJam, 18 ans
2 octets éliminés grâce à Martin :)
Essayez-le en ligne
Explication:
la source
Pyth,
1918 octetsManifestation
Une approche similaire à l'aditsu, en particulier la partie rle.
la source
JavaScript (ES6), 110 octets
Explication
Tester
Afficher l'extrait de code
la source
Mathematica,
8377 octetsla source
Rubis 89
Il s'agit d'un programme qui obtient l'entrée de STDIN et imprime le résultat. Il garde une trace des messages et de leur nombre de votes dans la variable
v
, qui est unHash
.Démos en ligne:
la source
Python 2,7 -
122114 octetsÀ peu près la solution la plus simple qui existe, et pas particulièrement au golf.
la source
Python 2.7 96 octets
explication: écrasement sur place de l, chaque appel de
l[_] = ...
stocke le mot pointé et un dictionnaire est utilisé pour comptabiliser les résultats en initialisant ou en ajoutant au nombre actuel deb[l[_]]
la source
for _,i in enumerate(l):
.