爬山算法
#javascript #编程 #算法 #adventofcode

Advent of Code 2022 Day 12

第1部分

  1. 计划:求解视觉
  2. 每个字母播放Where's Waldo
  3. 通往d的最短路径然后e
  4. 将螺旋形成z
  5. 螺旋式行走

计划:视觉求解

  • 我不擅长编写传统最短路径算法,尤其是使用Dijkstra算法的算法 - 就像*
  • 我已经成功地递归地穿越了2D网格作为半烘烤的替代方法
  • 也许该技术在这里起作用
  • 但我首先想看看我是否可以使用我的眼睛得出正确的答案,并仔细分析我的难题输入

每封信玩Where's Waldo

在输入的浏览器中使用Find,我强调了每个字母:

A through Z highlighted

从头开始如何?

Z through A highlighted

嗯...我开始在字母的放置中注意到一些有趣的事情:

  • 将无法避免在螺旋中从d转移到z
  • 有两组ijk-一个似乎在d周围创建了一堵墙,另一组是我需要使用的
  • dz的所有字母 - 除了ijk外,出现在一个群集中
  • 有很多cs!
  • bs的一列
  • 有大量的a,但是我可能需要避免所有我在
  • 上开始的一切

通往d的最短路径然后e

  • 似乎有两条路径:一条从上方,一个从下方
  • 绘制弯曲线使从下面的一条线变短,尤其是因为es从ds的底部开始

Getting from A to E

将螺旋绘制为z

From E to Z

我现在看到我必须穿越两组ijk

因此,路径将是这些字母:

a b c d e f g h i j k i j k l m n o p q r s t u v w x y z

我对自己的道路形状和使我经历的字母充满信心。

现在是困难的部分:

  • 每组中每个字母的哪些特定实例将使我从az,以最少的步骤

走螺旋

  • 我把它很好,慢
  • 我两次计算一切

这就是它的发展:
Counting the steps

值得庆幸的是,这是正确的答案!

第2部分

幸运的是,没有太多选择

  • 当然,有很多as
  • 但是,由于我需要移至b,所以我只能从左边缘沿a挑选
  • 并选择比第一部分中最初的a是愚蠢的
  • 所以我的选择只是第1部分
  • 中首发的as
  • 那是愚蠢

从视觉上讲,黄色照明段从a开始,我相信它是最短的道路:
The shortest path starting at any a

我是对的!

我做的!!

  • 我解决了两个部分!
  • 用我的眼睛而不是程序!
  • 这使这个难题变得更加有趣!

我很高兴这个难题的网格足够小,可以使我接近。

我喜欢利用浏览器的Find工具检查每个字母。