Advent Of Code 2022 第二十一天 - 猴子数学
本文是关于 Advent Of Code 2022 的。
编程圣诞日历, 圣诞节前每天一个编程问题。
有兴趣的朋友可以在官网答题, 用自己喜欢的编程方式去收集星星⭐️。在官网答题需要登陆并下载为你单独生成的谜题输入, 每个人的都不一样。
问题
按照指示解码文件, 然后找到精灵们的位置。
第一部分
猴子回来了! 你担心它们会再次试图偷你的东西,但看起来它们只是坚守阵地,对你发出各种猴子的声音。
最后,其中一只大象意识到你不会说猴子话,于是过来解释。原来,它们无意中听到你说要找到小树林;如果你回答它们的 谜语 ,它们可以告诉你一条捷径。
每只猴子都有一个工作:要么喊出一个特定的数字,要么喊出一个数学运算的结果。所有喊数字的猴子从一开始就知道自己的数字;但是,数学运算的猴子需要等待另外两只猴子喊出一个数字,而这两只猴子可能也在等待其他猴子。
你的工作是在猴子们自己算出来之前,算出名为root
的猴子将喊出的数字。
比如说:
1 | root: pppw + sjmn |
每一行都包含一只猴子的名字,一个冒号,然后是这只猴子的工作。
- 一个单独的数字意味着这只猴子的工作就是喊出这个数字。
- 像
aaaa + bbbb
这样的工作意味着猴子等待aaaa
和bbbb
分别喊出它们的数字;然后猴子喊出这两个数字的和。 aaaa - bbbb
意味着猴子喊出aaaa
的数字减去bbbb
的数字。- 工作
aaaa * bbbb
将喊出aaaa
的数字乘以bbbb
的数字。 - 工作
aaaa / bbbb
将喊出aaaa
的数字除以bbbb
的数字。
因此,在上面的例子中,猴子drzm
必须等待猴子hmdt
和zczc
喊出他们的号码。幸运的是,hmdt
和zczc
的工作都是简单地喊出一个数字,所以他们马上就会这样做。32
和2
。猴子drzm
可以通过找到32
减去2
来喊出它的数字: 30
。
然后,猴子sjmn
有它的一个数字(30
,来自猴子drzm
),并且已经有它的另一个数字,5
,来自dbpl
。这使得它可以通过找到30
乘以5
来喊出自己的数字: 150
。
这个过程一直持续到root
喊出一个数字: 152
。
然而,你的实际情况涉及相当多的猴子。名为root
的猴子会喊出什么数字?
第二部分
由于某种猴子-大象-人类的错误翻译,你似乎误解了关于这个谜语的几个关键细节。
首先,你给名为 root
的猴子找错了工作;具体来说,你找错了数学运算。猴子 root
的正确操作应该是 =
,这意味着它仍然在监听两个数字(和以前一样来自两只猴子),但现在要检查这两个数字是否匹配。
第二,你为以humn:
开头的工作找错了猴子。这不是一只猴子–这是你。事实上,你的工作也错了:你需要弄清楚你需要喊什么数字,以便root
的检查通过。(在你的输入中出现在humn:
后面的数字现在已经不重要了)。
在上面的例子中,你需要喊出的数字是 301
以通过root
的检验。(这使得root
从它的两只猴子那里得到相同的数字,150
。)
你喊什么数字才能通过root
的测试?