Elyse 的魔法


故事

作为一个准魔术师,Elyse 需要练习一些基本功。她有一摞牌,想对它们做一些操作。

为了简单一点,她只用 1 到 10 这十张牌。

我们把牌面值限制在 1 到 10,这样就只需要处理数字, 使用这个故事设计的练习也就只需依赖数字。

任务

以下任务示例符合 Elyse 身为初学者的故事:

  • 从牌堆中取出一张牌
  • 替换牌堆中的一张牌
  • 在牌堆顶部插入一张牌
  • 从牌堆中移除一张牌
  • 移除牌堆最上面的牌
  • 在牌堆底部插入一张牌
  • 移除牌堆最下面的牌
  • 查看牌堆的大小

这个故事可以继续延伸,用来教授数组分析:

  • 找出某张牌的位置
  • 判断某张牌是否存在
  • 判断每张牌是否为偶数
  • 检查牌堆中是否有奇数牌
  • 从牌堆中取出第一张奇数牌
  • 确定第一张偶数牌的位置

这个故事可以继续延伸,用来教授数组变换:

  • 把每张牌的值翻倍
  • 为牌堆中每个 3 创建多份副本
  • 找出牌堆正中间的两张牌
  • 让最外侧的两张牌出现在牌堆中间
  • 所有不是 2 的牌都消失
  • 把打乱的牌堆整理成完全有序的牌堆
  • 把每张牌都改成牌的总数

这个故事可以继续延伸,用来教授数组解构:

  • 取出第一张牌(不使用常规手段,例如下标访问或方法)
  • 取出第二张牌(不使用常规手段,例如下标访问或方法)
  • 交换前两张牌(不使用常规手段,例如下标访问或方法)
  • 丢弃最上面的牌(不使用常规手段,例如下标访问或方法)
  • 插入人头牌(不使用常规手段,例如下标访问或方法)

术语

以下是对说明中反复出现的术语的建议,而非硬性规则(包括起始文件中的说明):

  • 主角是 Elyse,她的代词是 she/her。如果需要指代这个角色,请使用她的名字或用代词指代她。
  • 不要用 array(或等价的数据类型),要用牌堆这个词
  • 不要用 element,要用牌这个词
  • 不要用 length,要用牌堆的大小
  • 最上面的牌是_第一个元素_
  • 最下面的牌是_最后一个元素_

实现

备选版本

故事的另一个版本以你(学生)为主角,只关注如何重新排列牌组。

故事

你是一名魔术师,手里有一副牌。为了顺利完成魔术,你需要能把一张牌从一个位置移到另一个位置。也就是说,你需要能重新排列整副牌。当然,你希望能朝两个方向移动牌,并且能说出“从牌堆顶部”或“从牌堆底部”。

任务

以下任务示例符合你想重新排列牌的故事:

  • 实现一个函数 arrange,把牌堆中的一张牌从给定位置移到另一个位置,并返回新的牌堆
  • 实现一个函数 rearrange,功能相同,但会直接修改原牌堆

实现

参考资料