“社交网络”编程难题

时间:2011-04-05 17:28:59

标签: algorithm perl puzzle

电影社交网络中有一个简洁的序列,其中角色编写perl脚本以从校园中的女生联谊会Web服务器抓取图像。他的目标是为每个联谊会的每个成员拍摄一张照片,并且至少有错过的成员。通常情况下,这只是让他从一个公共目录中抓取它或其他一些小东西,比如一个返回所有成员的空搜索,但他描述了一个非常有趣的设置并且永远不会为它提供解决方案。

一个女生联谊会的网站允许搜索并返回匹配成员的图片。但是,如果搜索返回超过20个匹配项,则不会显示任何内容。

假设没有其他方式可以访问图片并且没有联谊会成员的名单,那么在这种情况下是否有一种优雅的方式来获得至少大多数成员图片?或者任何方式?

编辑:Here's a link到电影中的场景,略微剪切以仅显示编码部分。

5 个答案:

答案 0 :(得分:11)

拿起电话,索取一个校园目录并将这些名字输入联谊会的搜索中,以便一次取回一名成员。

毕竟,这是社交网络。

答案 1 :(得分:4)

我没有看过这部电影,但让我说出一些假设:

  • 您有一个按名称搜索的搜索字段。
  • 你不知道任何姐妹会会员的名字。
  • 没有其他方法可以访问图片(搜索框除外)。

在这种情况下,我认为没有一个优雅的答案。这可能是那些电影“我用一种未知语言翻译古代平板电脑”的时刻之一。我的猜测是你最好的选择是蛮力搜索。

  1. 如果您使用通用名称(和姓氏)进行搜索,则可以获得大多数成员。
  2. 如果你有时间和意愿,实际的蛮力(逐字母等)最终会填补第1项所遗漏的空白。
  3. 修改 另外,从理论上讲,如果联谊会足够大并且每个人都被命名为“简史密斯”,那么就没有解决方案。

答案 2 :(得分:2)

findall(prefix):
   res = set()
   for char in alphabet:
      sresults = search(prefix + char)
      if len(sresults) == 0 and len(prefix) < ABORT_SIZE:
          res += findall(prefix + char)
      else:
          res += sresults
   return res
findall("")

请注意,如果名称的分布大致相等,则解决方案将花费很长时间,因为如果有20个人匹配“abc”且1个匹配“abd”,它将无限地枚举“ab”的所有后缀。您可以修改ABORT_SIZE以平衡时间和完整性。它应该高于log | alphabet | (n),其中n是最终结果的(未知)数。

答案 3 :(得分:1)

我猜你可以使用某种“字典攻击” - 你知道你可以从美国人口普查局下载所有的姓氏和/或名字吗?我的另一个选择是@phihag提出的。

答案 4 :(得分:0)

我这里有“The Accidental Billionaires”这本书,它直接引用了他的LiveJournal,并且......没有发生。你知道编写脚本的人对代码一无所知,对吧?

从我正在阅读的内容中,他使用了一些LWP蜘蛛'Lowell'和'Adams',然后他得到了'Dunster',这是一个有20个结果问题的人,他写道:“我会来的晚点回来”。所以我可以看到,他可能刚刚放弃了。

他还写道:“这需要几次尝试来编译脚本”。