您正在与庞大的敌人间谍网络作战。您知道每个间谍都有至少一个(有时是多个)他们喜欢使用的伪造身份。您真的想知道您实际上正在处理多少个间谍。
幸运的是,您的反情报特工正在做他们的工作,有时可以弄清楚何时两个假身份实际上是由同一个敌方间谍控制的。
也就是说:
- 您的代理人并不总是知道两个伪造的身份背后何时有相同的间谍。
- 如果代理告诉您两个假身份是由同一间谍控制的,则您相信它们是正确的。
代理讯息
代理会向您发送隐秘消息,告诉您哪些身份背后隐藏着相同的间谍。一个例子:
您需要处理2个代理和5个伪造身份。
第一代理向您发送一条消息:
Red Red Blue Orange Orange
这意味着他们认为有3个间谍:
- 第一个(红色)控制标识1和2
- 第二个(蓝色)控制标识3
- 第三个(橙色)控制标识4和5
第二个代理向您发送一条消息:
cat dog dog bird fly
这意味着他们认为有4个间谍:
- 第一个(猫)控制身份1
- 第二个(狗)控制身份2和3
- 第三个人(鸟)控制身份4
- 第四个(飞行)控制身份5
编译intel我们看到:
Identities: id1 id2 id3 id4 id5
Agent 1: |--same-spy--| |--same-spy--|
Agent 2: |--same-spy--|
Conclusion: |-----same-spy------||--same-spy--|
这意味着最多有2个间谍。
笔记
同一间谍拥有的身份不必是连续的,即消息如下:
dog cat dog
已验证。
同样,两个不同的代理可能会使用相同的词-并不表示任何意义,这只是一个巧合,例如:
Agent 1: Steam Water Ice
Agent 2: Ice Ice Baby
两种试剂都使用了冰- Ice
第一种试剂的Ice
使用与第二种试剂的两次使用无关。
挑战
编译所有特工的情报并计算出真正存在多少敌人间谍。(更精确地说,鉴于您所拥有的信息有限,请获得最低的上限。)
以字节为单位的最短代码获胜。
输入和输出规格
输入是n行的列表,代表来自代理的n条消息。每行包含k个以空格分隔的标记,所有行都相同。令牌是字母数字,任意长度。案件很重要。
输出应该是单个数字,代表基于代理程序的intel的不同间谍的数量。
例子
例子1
输入:
Angel Devil Angel Joker Thief Thief
Ra Ra Ras Pu Ti N
say sea c c see cee
输出:
2
例子2
输入:
Blossom Bubbles Buttercup
Ed Edd Eddy
输出:
3
例子3
输入:
Botswana Botswana Botswana
Left Middle Right
输出:
1
例子4
输入:
Black White
White Black
输出:
2
例子5
输入:
Foo Bar Foo
Foo Bar Bar
输出:
1
例子6
输入:
A B C D
A A C D
A B C C
A B B D
输出:
1
例子7
输入:
A B A C
输出:
3
例子八
输入:
A
B
C
输出:
1
例子9
输入:
X
输出:
1