轨道
/
Lean
Lean
/
练习
/
幼儿园花园
幼儿园花园

幼儿园花园

简单

简介

幼儿园班正在学习种植植物。老师觉得,给班里的孩子一些种子,让他们种在泥土里生长,是个不错的主意。为此,孩子们沿着窗台摆上了小杯子,每个杯子里种一种植物。孩子们可以从四种可供选择的种子中挑选自己最喜欢的:grass、clover、radishes 和 violets。

说明

你的任务是:给定一张图示,判断幼儿园班里的每个孩子负责哪些植物。

班里有 12 个孩子:

  • Alice、Bob、Charlie、David、Eve、Fred、Ginny、Harriet、Ileana、Joseph、Kincaid 和 Larry。

这里种着四种不同的种子:

植物 图示编码
Grass G
Clover C
Radish R
Violet V

每个孩子分到四个杯子,每行两个:

[window][window][window]
........................ # each dot represents a cup
........................

老师按照孩子名字的字母顺序来分配杯子,也就是说 Alice 排在最前面,Larry 排在最后。

下面是一张示例图示,表示 Alice 的植物:

[window][window][window]
VR......................
RG......................

在离窗户最近的第一行,她有一株 violet 和一株 radish。 第二行,她有一株 radish 和一些 grass。

你的程序会按从左到右的顺序收到这些植物,从离窗户最近的那一行开始。 据此,它应该能判断出每株植物分别属于哪个学生。

例如,如果告诉它花园长这样:

[window][window][window]
VRCGVVRVCGGCCGVRGCVCGCGV
VRCCCGCRRGVCGCRVVCVGCGCV

那么,如果问它 Alice 的植物,它应该给出:

  • Violets, radishes, violets, radishes

而问 Bob 的植物则会得到:

  • Clover, grass, clover, clover

向量

plants函数的返回值是一个Vector Plant 4。

向量表示长度固定的数组。这个长度也可以在运行时确定。可以把它们看作一个由Array和一个证明组成的组合,这个证明表明该数组具有所需的长度。也就是说,你必须提供这个证明,才能构造出一个Vector。

本章很好地介绍了 Lean 中的定理证明。如果想更深入地了解,这本书被列为 Lean 官网上的官方资源。

Lean 提供了许多策略,可以自动完成整个证明,或者其中的一部分。你可能想看看语言参考。

通过 GitHub 编辑 链接将在新窗口或新标签页中打开
Lean Exercism

准备好开始 幼儿园花园 了吗?

注册 Exercism,借助 100 个练习 和真人导师指导,学习并掌握 Lean,全部免费。