在PPCG聊天室的第十九个字节中,使用脱字号^
(或红萝卜)是一种表示您同意之前发表的评论的一种方式。
脱字符号消息仅由N个^
字符组成(其中N为正整数),表示与第N个先前的消息一致。因此,单个^
表示与之前的消息^^
一致,表示与消息两个^^^
一致,表示与消息三个一致,依此类推。
另外,当插入符号消息X同意(又指向)另一个插入符号消息Y时,则称X与Y同意的消息相同。可能有多个层次,最后,所有插入符号消息都表示与一个非插入符号消息一致。
例如,如果聊天记录如下:(每行一条消息)
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]
然后,第1、2和6行是非插入符号消息,所有其他都是指向非插入符号消息的插入符号消息:
- 第3行直接指向第2行。
- 第4行直接指向第1行。
- 第5行指向第3行,第3行指向第2行。
- 第7行指向第6行。
- 第8行指向第5行,第5行指向第3行,第3行指向第2行。
- 第9行指向第7行,而第7行指向第6行。
因此,包括编写非插入符号消息的用户(并假设人们不插入自己的消息),我们可以得出以下结论:
- 2个人同意
I like dogs
(第1行和第4行)。 - 4个人同意
I like cats
(第2、3、5和8行) - 3个人同意
I like turtles
(第6、7和9行)。
挑战
编写一个包含多行字符串的程序或函数,类似于上面的示例,其中每行代表一个聊天消息,旧消息优先。
每行至少要有一个字符,并且至少要有一行。所有消息要么是仅由组成的插入号消息^
,要么是由字母和空格组成的非插入号消息([ a-zA-Z]+
在正则表达式中)。
对于每条非脱字符消息,以任何顺序,以包含消息文本的清晰格式输出同意该消息的人数。
2 - I like dogs
4 - I like cats
3 - I like turtles
要么
I like cats (4)
I like dogs (2)
I like turtles (3)
要么
{"I like cats" : 4, "I like turtles" : 3, "I like dogs" : 2}
您可以假设:
- 人们总是同意他们自己的信息,而不是在意自己。
- 没有两个非脱字符消息是相同的。
- 插入符号消息不会指向第一个消息之前的内容。
- 行将不包含前导或尾随空格。
以字节为单位的最短代码获胜。
测试用例
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
相关的。
—
Addison Crump 2015年
明年,我们可以解决这个问题可能有unicode:blog.unicode.org/2015/05/unicode-90-candidate-emoji.html#1F955胡萝卜
—
罗伯特·弗雷泽
👆@RobertFraser
—
DDPWNAGE 2015年