跳转到主要内容

使用单次导入获取谜题数据

项目描述

pyversions pypi womm actions codecov

Speedhackers,使用单行导入语句获取谜题数据

from aocd import data

如果这听起来太神奇,可以使用简单的函数调用以字符串形式返回您的数据

>>> from aocd import get_data
>>> get_data(day=24, year=2015)
'1\n2\n3\n7\n11\n13\n17\n19\n23\n31...

如果您只想打印或保留自己的原始输入文件,有一个脚本可以做到这一点

aocd > input.txt  # saves today's data
aocd 13 2018 > day13.txt  # save some other day's data

注意,aocd将在客户端缓存谜题输入和答案(包括错误猜测),以节省不必要的服务器请求。

2.0.0版本新增: 获取示例数据(以及相应的答案)。从2022年5月开始有

$ aocd 2022 5 --example
                          --- Day 5: Supply Stacks ---
                      https://adventofcode.com/2022/day/5
------------------------------- Example data 1/1 -------------------------------
    [D]
[N] [C]
[Z] [M] [P]
 1   2   3

move 1 from 2 to 1
move 3 from 1 to 3
move 2 from 2 to 1
move 1 from 1 to 2
--------------------------------------------------------------------------------
answer_a: CMZ
answer_b: MCD
--------------------------------------------------------------------------------

如何抓取示例?请查看aocd-example-parser以获取详细信息。

快速入门

使用pip安装

pip install advent-of-code-data

如果您想在Jupyter笔记本中使用它,有一些额外的依赖项

pip install 'advent-of-code-data[nb]'

拼图输入因用户而异。 因此,导出您的会话ID,例如

export AOC_SESSION=cafef00db01dfaceba5eba11deadbeef

注意: Windows用户应使用set而不是export

会话ID是一个在您登录AoC时设置的cookie。您可以使用浏览器检查器找到它。如果您在AoC上进行任何操作,您可能已经知道这些技巧,但如果您需要帮助,您可以在此查看

注意: 如果您不喜欢环境变量,您也可以将令牌存储在文件中。默认位置为~/.config/aocd/token。如果希望将令牌存储在其他位置,请设置AOCD_DIR环境变量。

0.9.0版本新增。有一个名为 aocd-token 的实用脚本,该脚本尝试从浏览器的cookie存储中查找会话令牌。此功能为实验性,需要您额外安装包 browser-cookie3。目前仅支持Chrome和Firefox浏览器。在macOS上,可能会出现请求权限的认证对话框,因为Python正在尝试读取浏览器存储文件。这是预期的,脚本实际上正在抓取这些私有文件以访问AoC会话令牌。

如果此实用脚本能够找到您的令牌,您可以使用以下方法将其保存到文件中

$ aocd-token > ~/.config/aocd/token

自动提交

0.4.0版本新增。基本用法

from aocd import submit
submit(my_answer, part="a", day=25, year=2017)

请注意,相同的文件名自省(按年/日)也适用于自动提交。还有“级别”的自省,即部分a或部分b,aocd可以自动判断您是否已完成部分a,并相应地提交正确部分的答案。在这种情况下,只需使用

from aocd import submit
submit(my_answer)

AoC的响应信息将在终端中打印出来。如果您给出了正确答案,则拼图将在您的网络浏览器中刷新(例如,您可以阅读下一部分的说明)。 请谨慎操作! 如果您提交了错误的猜测,您的用户 被Eric限制提交频率,因此请在有相当把握答案正确后再提交!

2.0.0版本新增:防止提交明显错误的答案。例如,如果服务器之前告诉您您的答案“1234”太高,那么aocd将记住此信息,并防止您随后提交更高的值,如“1300”。

模型

0.8.0版本新增。

aocd.models 子模块中可以找到类 UserPuzzle。输入数据通过常规属性访问。示例用法

>>> from aocd.models import Puzzle
>>> puzzle = Puzzle(year=2017, day=20)
>>> puzzle
<Puzzle(2017, 20) at 0x107322978 - Particle Swarm>
>>> 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 = 299
That's not the right answer; your answer is too high. If you're stuck, there are some general tips on the about page, or you can ask for hints on the subreddit. Please wait one minute before trying again. (You guessed 299.) [Return to Day 20]
>>> puzzle.answer_a = 299
aocd will not submit that answer again. You've previously guessed 299 and the server responded:
That's not the right answer; your answer is too high. If you're stuck, there are some general tips on the about page, or you can ask for hints on the subreddit. Please wait one minute before trying again. (You guessed 299.) [Return to Day 20]

您可以通过编写和使用一个在代码中注册到 "adventofcode.user" 组的 入口点 来执行您自己的解决方案。您的入口点应解析为可调用的,并且它将使用三个关键字参数 yeardaydata 被调用。例如,我的入口点名为“wim”,在 这里 被调用,并针对 我的代码 运行(在 pip install advent-of-code-wim 之后)将如下所示

>>> puzzle = Puzzle(year=2018, day=10)
>>> puzzle.solve_for("wim")
('XLZAKBGZ', '10656')

如果您以前从未编写过插件,请参阅 https://entrypoints.readthedocs.io/ 了解有关基于Python入口点的插件系统的更多信息。

验证您的代码针对多个不同的输入

0.8.0版本新增。

您尝试过使用其他人的输入运行您的代码吗?AoC充满了棘手的边缘情况。您可能会发现有时您只是运气好才得到了正确答案,并且您的代码在某个其他数据集上会失败。使用aocd,您可以收集您每个账户的几个不同认证令牌(github/google/reddit/twitter),并在多个数据集上验证您的答案。

要查看如何设置代码入口点的示例,请查看advent-of-code-sample获取灵感。在将大量会话令牌存入~/.config/aocd/tokens.json后,您可以通过运行aoc控制台脚本执行以下操作。

https://user-images.githubusercontent.com/6615374/52138567-26e09f80-2613-11e9-8eaf-c42757bc9b86.png

如上所示,我实际上为2017年20日:粒子群编写了错误的代码,但这个错误仅在google令牌的数据集中出现。哎呀。此外,我的2017年13日:数据包扫描仪算法有点糟糕。太慢了。根据AoC常见问题解答

每个问题都有一种解决方案,在十年前的硬件上最多15秒内完成。

顺便说一句,如果代码运行时间超过60秒,aoc运行器会终止您的代码。您可以通过传递命令行选项来增加/减少此时间,例如--timeout=120

1.1.0版本新增:添加了--quiet选项,以抑制插件输出的任何内容,以免弄乱aoc运行器的显示。

2.0.0版本新增:您可以使用从谜题页面抓取的示例输入数据和答案(如果可用)验证您的代码,使用aoc --example。这将把样本输入数据传递给您的求解器,而不是传递完整的用户输入数据。

这个库是如何工作的?

如果在使用交互式解释器时使用它,它将自动在导入时获取今天的数据。否则,日期通过从导入aocd模块的路径和文件名中进行内省来找到。

这意味着您的文件名应该是合理的。下面的示例都应该能够正确解析,因为它们的路径中有数字,这些数字明确地被识别为AoC年份(2015+)或天数(1-25)。

q03.py
xmas_problem_2016_25b_dawg.py
~/src/aoc/2015/p8.py

problem_one.py这样的文件名将不起作用,所以不要这样做。如果您不喜欢奇怪的框架技巧,只需使用aocd.get_data()函数即可,祝您有个好心情!

缓存失效?

aocd保存谜题输入、答案、文章和您的错误猜测,以避免更频繁地访问AoC服务器(这也提高了速度)。所有数据都持久化存储在~/.config/aocd下的纯文本文件中。要删除任何缓存,您只需删除该目录树下的任何文件即可。如果您希望使用不同的路径,则可以导出一个AOCD_DIR环境变量以指定所需的路径。

1.1.0版本新增:默认情况下,您的令牌文件也存储在~/.config/aocd下。如果您希望令牌和缓存的输入/答案存在于不同的位置,您可以设置环境变量AOCD_CONFIG_DIR以指定令牌的另一个位置。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分发

advent-of-code-data-2.0.1.tar.gz (44.4 kB 查看哈希值)

上传时间

构建分发

advent_of_code_data-2.0.1-py3-none-any.whl (36.5 kB 查看哈希值)

上传时间 Python 3

支持