这是一个看似简单的问题:给定一个按升序生成整数序列的迭代器列表,编写一个简洁的生成器,只生成每个序列中出现的整数.
在昨晚阅读了几篇论文之后,我决定在Python中破解一个完全最小的全文索引器,如此处所示(尽管该版本现在已经很老了).
我的问题在于search()
函数,它必须迭代每个发布列表并仅产生每个列表上显示的文档ID.正如您从上面的链接中看到的那样,我当前的非递归"工作"尝试非常糟糕.
示例:
postings = [[1, 100, 142, 322, 12312],
[2, 100, 101, 322, 1221],
[100, 142, 322, 956, 1222]]
Run Code Online (Sandbox Code Playgroud)
应该产量:
[100, 322]
Run Code Online (Sandbox Code Playgroud)
至少有一个优雅的递归函数解决方案,但我想尽可能避免这种情况.但是,一个涉及嵌套生成器表达式,itertools
滥用或任何其他类型的代码高尔夫的解决方案非常受欢迎.:-)
应该可以安排函数只需要与最小列表中的项目一样多的步骤,并且不将整个整数集吸入内存.将来,这些列表可能从磁盘读取,并且大于可用RAM.
在过去的30分钟里,我对我的舌尖有了一个想法,但我无法将其纳入代码中.请记住,这只是为了好玩!
我已经在一个(差不多完成的)Javascript项目上工作了14个多月了.该项目最初是我希望在一夜之间完成的黑客攻击,但随着时间的推移,Javascript部分已经成长为68个独立文件和10,314个非空行,遗憾的是目前依赖于C预处理器进行构建.
很难解释我最终是如何使用cpp来实现Javascript的:这只是一个黑客,我需要的东西能给我宏扩展,ifdef,define,并且不需要太多努力.经过大约3秒钟的考虑,我意识到cpp对于任务是"完美的":
像所有真正的黑客,这个破解是现在这么硬编码到,我真的恨也别想将需要更换的工作项目.我的项目是达到我想要的代码库迁移到自己的专用测试服务器(而不是我的笔记本电脑),但是在建立一个Linux实例,我发现舞台是GNU CPP版本4.1不再预处理后的Javascript与崩溃一起出错.
我认为现在是真正解决这个问题的好时机,而不是将特定版本的GCC添加到构建要求列表中.但问题是,我找不到具有与cpp相同功能和特性的替换预处理器!我考虑过m4,但是m4本身就是一个痛苦的世界.我发现的其他特定于Javascript的预处理器缺少我目前所依赖的所有功能,例如:
__FILE__
& __LINE__
我正在认真考虑为Javascript实现一个全新的预处理器,它完全借用了C预处理器语法,因为它运行得很好.我只是想知道在这之前是否有更好的选择.:)也许已经有一个类似cpp的通用预处理器我可以交换?替换这68个文件中的所有预处理器语法所需的工作接近简单地重新实现预处理器所需的工作量.
到目前为止,依靠C预处理器,我感到非常惊讶; 在这项任务中,它比健康的心灵理解更有效.另一个对我开放的选择是为Linux,Darwin-i386,Win32静态构建cpp-4.1版本,并将这些二进制文件存储在项目的存储库中.
救命!
我目前正在尝试构建一个本质上需要跨服务器和每个客户端进行良好时间同步的应用程序.我的应用程序有替代设计可以消除这种同步需求,但是当我的应用程序不存在时,我的应用程序很快就会开始吮吸.
如果我遗漏了一些东西,我的基本问题是:在同一时刻在多个地点发起一个事件.我能说的最好,这样做的唯一方法就是需要某种时间同步,但我可能错了.我尝试过以不同方式对问题进行建模,但这一切都回到了a)一个糟糕的应用程序,或者b)需要时间同步.
让我们假设我真的需要同步时间.
我的应用程序基于Google AppEngine构建.虽然AppEngine不保证其服务器上的时间同步状态,但通常它是非常好的,大约几秒钟(即优于NTP),但是有时它会糟糕地说,比如大约10秒钟同步 我的应用程序可以处理2-3秒不同步,但10秒对于用户体验是不可能的.所以基本上,我选择的服务器平台没有提供非常可靠的时间概念.
我的应用程序的客户端部分是用JavaScript编写的.我们再次遇到客户端没有可靠的时间概念的情况.我没有做任何测量,但我完全期望我的一些最终用户拥有设置为1901,1970,2024等的计算机时钟.基本上,我的客户端平台没有提供可靠的时间概念.
这个问题开始让我有点生气.到目前为止,我能想到的最好的事情就是在HTTP之上实现像NTP这样的东西(这并不像听起来那么疯狂).这可以通过在因特网的不同部分中调试2或3个服务器来工作,并且使用传统方式(PTP,NTP)来尝试确保它们的同步至少在几百毫秒的量级.
然后,我将创建一个JavaScript类,该类使用这些HTTP时间源(以及可从XMLHTTPRequest获得的相关往返信息)实现NTP交集算法.
正如你所知,这个解决方案也很糟糕.它不仅非常复杂,而且只能解决问题的一半,即为客户提供当前时间的良好概念.然后,我必须在服务器上妥协,或者允许客户端在发出请求时根据它们告诉服务器当前时间(大安全性禁止,但我可以减轻一些更明显的滥用此行为),或让服务器向我的一个神奇的HTTP-over-NTP服务器发出单个请求,并希望该请求足够快地完成.
这些解决方案都很糟糕,我迷失了.
提醒:我想要一堆Web浏览器,希望多达100个或更多,能够在同一时间触发事件.
我昨晚碰到了下面的内容,我仍然无法解释它:
class Foo(object):
@property
def dave(self):
vars(self)['dave'] = 1
return 2
f = Foo()
print f.dave
print f.dave
Run Code Online (Sandbox Code Playgroud)
运行此代码会产生:
2
2
Run Code Online (Sandbox Code Playgroud)
问题是为什么?我对属性访问的理解是在类字典之前检查实例字典,并且任何基础的字典,但是如上面所见,实例字典似乎没有在类字典中找到描述符之前被检查.
python ×2
code-golf ×1
distributed ×1
generator ×1
iterator ×1
javascript ×1
join ×1
preprocessor ×1
rules ×1
time ×1