鱼C论坛

 找回密码
 立即注册
查看: 3779|回复: 12

[技术交流] [checkio游戏之]<<找朋友>>难度系数:★★★★☆☆

[复制链接]
发表于 2015-3-24 17:34:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
索菲亚的机器人是有灵魂而且不是愚蠢的;他们可以拥有朋友和交朋友。事实上,他们已经正在为自己的并且只是为了机器人的社交网络工作!索菲亚已经收到有关机器人之间的关系的数据,她想更多地了解它们之间的关系。

我们有在机器人名字之间的用直线连线所组成的数组。 每个连接都被表示为一个包含由连字符隔开的两个机器人的名字的字符串。 例如:"dr101-mr99" 指的是 dr101mr99 是朋友。 你需要写一个函数来确定机器人之间更复杂的关系。你将得到两个名字,尝试确定它们是通过共同纽带产生关系。例如:如果两个机器人有一个共同的朋友,或者他们的朋友拥有共同的朋友等等。
network.png
让我们看一下例子:
scout2scout3 有共同的朋友 scout1 所以他们是有关系的。 superscout2 是通过 sscoutscout4scout1来产生关系的。 但是 dr101sscout 是没有关系的。

输入: 三个参数:朋友的信息作为一个字符串元组;第一个名字(字符串形式);第二个名字(字符串形式)。

输出: 这两个机器人是否有关系。(bool)

范例:
  1. check_connection(
  2.     ("dr101-mr99", "mr99-out00", "dr101-out00", "scout1-scout2",
  3.      "scout3-scout1", "scout1-scout4", "scout4-sscout", "sscout-super"),
  4.     "scout2", "scout3") == True
  5. check_connection(
  6.     ("dr101-mr99", "mr99-out00", "dr101-out00", "scout1-scout2",
  7.      "scout3-scout1", "scout1-scout4", "scout4-sscout", "sscout-super"),
  8.     "dr101", "sscout") == False
复制代码


如何使用: 这个概念将帮助你找到纽带网络中没有过于明显的关系,还有如何运作社会网络。

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
拈花小仙 + 5 + 5 + 3 感谢楼主无私奉献!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-3-25 07:17:44 | 显示全部楼层

回帖奖励 +2 鱼币

支持楼主
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-25 21:32:23 | 显示全部楼层
先贴自己的:
  1. def check_connection(network, first, second):
  2.    
  3.     friend = {}
  4.    
  5.     for each in network:
  6.         fst, snd = each.split('-')
  7.         friend.setdefault(fst, set()).add(snd)
  8.         friend.setdefault(snd, set()).add(fst)

  9.     def con(fst, snd, path = []):
  10.         if snd in friend[fst]:
  11.             return True
  12.         else:
  13.             path.append(fst)
  14.             for each in friend[fst]:
  15.                 if each not in path:
  16.                     return con(each, snd)

  17.         return False

  18.     return con(first, second)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-25 22:41:24 | 显示全部楼层

回帖奖励 +2 鱼币

菜鸟路过
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-26 11:51:21 | 显示全部楼层
大牛的版本:
  1. def check_connection(network, first, second):
  2.     setlist = []
  3.     for connection in network:
  4.         s = ab = set(connection.split('-'))
  5.         # unify all set related to a, b
  6.         for t in setlist[:]: # we need to use copy
  7.             if t & ab:       # check t include a, b
  8.                 s |= t
  9.                 setlist.remove(t)
  10.         setlist.append(s)    # only s include a, b
  11.     return any(set([first, second]) <= s for s in setlist)
  12. &#8203;
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-26 15:49:59 | 显示全部楼层

回帖奖励 +2 鱼币

厉害 学习了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-26 16:12:31 | 显示全部楼层

回帖奖励 +2 鱼币

前来学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-26 17:02:08 | 显示全部楼层

回帖奖励 +2 鱼币

感谢楼主分享,学习了.:lol:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-26 17:34:19 | 显示全部楼层

回帖奖励 +2 鱼币

好像还挺有意思的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-30 09:30:26 | 显示全部楼层

回帖奖励 +2 鱼币

不错哦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-30 17:24:48 | 显示全部楼层

回帖奖励 +2 鱼币

学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-4-1 21:56:31 | 显示全部楼层

回帖奖励 +2 鱼币

我也学习了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-4-1 22:43:00 | 显示全部楼层

回帖奖励 +2 鱼币

厉害
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 13:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表