只需一次导入即可获取拼图数据
advent-of-code-data的Python项目详细描述
fromaocdimportdata
可能对懒惰的Python和快速黑客有用。
注意:请使用此库的0.3+版本。它表示成功 请求客户端和速率限制get_data函数,如 requested by the AoC author。 谢谢!
自动提交
0.4.0版中的新版本。基本用途:
fromaocdimportsubmitsubmit(my_answer,part="a",day=25,year=2017)
注意,相同的文件名year/day的内省也适用于automated 提交。也有对“水平”的反思,即A部分或B部分, AOCD可以自动确定您是否已经完成了A部分 并相应地提交正确部分的答案。在这种情况下,只需使用:
fromaocdimportsubmitsubmit(my_answer)
来自AOC的响应消息将在终端中打印。如果你给了 正确的答案,则谜题将在您的Web浏览器中刷新 (例如,您可以阅读下一部分的说明)。 小心操作!如果您提交了错误的猜测,您的用户将 得到埃里克限制的价格,所以在你相当自信之前不要打电话给submit 你的答案是对的!
oop风格的接口
0.8.0版中的新版本。
输入数据通过常规属性访问。示例用法:
>>>fromaocd.modelsimportPuzzle>>>puzzle=Puzzle(year=2017,day=20)>>>puzzle<Puzzle(2017,20)at0x107322978-ParticleSwarm>>>>puzzle.input_data'p=<-1027,-979,-188>, v=<7,60,66>, a=<9,1,-7>\np=<-1846,-1539,-1147>, v=<88,145,67>, a=<6,-5,2> ...
提交答案也是通过常规的属性访问。您提交的任何错误答案都将被记住,AOCD将阻止您两次尝试提交相同的错误值:
>>>puzzle.answer_a=299That's not the right answer; your answer is too high. If you'restuck,therearesomegeneraltipsontheaboutpage,oryoucanaskforhintsonthesubreddit.Pleasewaitoneminutebeforetryingagain.(Youguessed299.)[ReturntoDay20]>>>puzzle.answer_a=299aocdwillnotsubmitthatansweragain.You've previously guessed 299 and the server responded:That's not the right answer; your answer is too high. If you'restuck,therearesomegeneraltipsontheaboutpage,oryoucanaskforhintsonthesubreddit.Pleasewaitoneminutebeforetryingagain.(Youguessed299.)[ReturntoDay20]
对于您的代码,可以使用setuptools style plugins来执行解决方案,即pkg_resources“入口点”。我的入口点名是“wim”,因此运行my code(在pip install advent-of-code-wim之后)的示例是:
>>>puzzle=Puzzle(year=2018,day=10)>>>puzzle.solve_for("wim")('XLZAKBGZ','10656')
根据多个不同的输入验证代码
0.8.0版中的新版本。
有没有试过在别人的输入下运行你的代码?AOC充满了棘手的边缘案例。您可能会发现,有时您只是幸运地得到了正确的答案,而您的代码将在其他一些数据集上失败。使用aocd,您可以为每个帐户(github/google/reddit/twitter)收集一些不同的身份验证令牌,并在多个数据集上验证您的答案。
要查看如何设置代码入口点的示例,请查看advent-of-code-sample以获得一些灵感。在将一堆会话令牌转储到~/.config/aocd/tokens.json之后,您可以通过运行aoc控制台脚本来执行类似的操作:
正如您在上面看到的,实际上我的2017 Day 20: Particle Swarm代码不正确,但是bug只出现在google令牌的数据集中。哇哦。而且,看起来我的2017 Day 13: Packet Scanners算法有点垃圾。太慢了。根据AoC FAQ:
every problem has a solution that completes in at most 15 seconds on ten-year-old hardware
顺便说一下,aoc运行程序将在超过60秒的时间内终止代码,您可以通过传递命令行选项(例如--timeout=120)来增加/减少此时间。
安装指南
使用pip安装
pip install advent-of-code-data
拼图输入因用户而异。因此导出会话ID,例如:
exportAOC_SESSION=cafef00db01dfaceba5eba11deadbeef
这是一个cookie,在您登录aoc时设置。你可以找到它 你的浏览器检查器。如果你在攻击AOC,你可能已经 知道这些技巧,但如果你需要帮助,你可以 look here。
注意:如果您不喜欢env变量,也可以将其放入文本文件中 在主目录中(使用文件名~/.config/aocd/token)。
它是如何工作的?
如果在 交互式口译员。否则,通过对 从中导入aocd模块的路径和文件名。
这意味着你的文件名应该是合理的。下面的例子 应该都正确解析,因为它们的路径中有 清晰可辨认作为AOC年份(2015年以上)或天数(1-25)。
q03.py xmas_problem_2016_25b_dawg.py ~/src/aoc/2015/p8.py
像problem_one.py这样的文件名不起作用,所以不要这样做。如果 你不喜欢奇怪的框架黑客,只要使用aocd.get_data()函数 祝你今天愉快!
>>>fromaocdimportget_data>>>get_data(day=2)'UULDRRRDDLRLURUUURUURDRUURRDRRURUD...>>>get_data(day=24,year=2015)'1\n2\n3\n7\n11\n13\n17\n19\n23\n31...
缓存失效?
aocd保存拼图输入、答案、名称和您的错误猜测,以避免命中 AOC服务器的使用频率超出了严格的要求(这也加快了速度)。 所有数据都保存在~/.config/aocd下的纯文本文件中。删除任何 缓存,您可以简单地删除目录树下的任何文件。 如果希望使用不同的路径,则导出AOCD_DIR环境 具有所需位置的变量。