伊莉絲的魔法


故事

身為準魔術師的 Elyse,需要練習一些基本功。她有一疊卡片,想要好好操作一番。

為了輕鬆一點,她只使用 1 到 10 的卡片。

我們把卡片的值限制在 1 到 10,這樣一來只需要處理數字, 使用這個故事的練習也就只需要依賴數字。

任務

以下是符合 Elyse 這個初學者故事的一些範例任務:

  • 從牌堆取出一張卡片
  • 交換牌堆中的一張卡片
  • 在牌堆頂端插入一張卡片
  • 從牌堆移除一張卡片
  • 移除牌堆頂端的卡片
  • 在牌堆底部插入一張卡片
  • 從牌堆底部移除一張卡片
  • 檢查牌堆大小

這個故事可以延伸下去,進一步教陣列分析:

  • 找出某張卡片的位置
  • 判斷某張卡片是否存在
  • 判斷每張卡片是否為偶數
  • 檢查牌堆中是否含有奇數值的卡片
  • 從牌堆中取得第一張奇數卡片
  • 判斷第一張偶數卡片的位置

這個故事可以延伸下去,進一步教陣列轉換:

  • 把每張卡片的值加倍
  • 為牌堆中每個 3 建立多份複本
  • 找出牌堆正中央的兩張卡片
  • 最外側的兩張卡片會重新出現在牌堆中央
  • 所有不是 2 的卡片都會消失
  • 把洗過的牌堆轉換成完全有序的牌堆
  • 把每張卡片改成卡片的總數

這個故事可以延伸下去,進一步教陣列解構:

  • 取得第一張卡片(不使用傳統做法,例如索引子或方法)
  • 取得第二張卡片(不使用傳統做法,例如索引子或方法)
  • 交換前兩張卡片(不使用傳統做法,例如索引子或方法)
  • 捨棄頂端的卡片(不使用傳統做法,例如索引子或方法)
  • 插入人頭牌(不使用傳統做法,例如索引子或方法)

術語

以下是說明中(包括預留的註解)反覆出現的術語建議,並非規則:

  • 主角是 Elyse,她的代名詞是she/her。如果需要指稱這個角色,請使用她的名字,或以她的代名詞來稱呼她。
  • 不要用array(或對等的資料型態),改用牌堆或卡片牌堆
  • 不要用element,改用卡片
  • 不要用length,改用牌堆大小
  • 頂端卡片是_第一個元素_
  • 底部卡片是_最後一個元素_

實作

替代版本

這個故事的替代版本以你(學生)為主角,並且只聚焦在重新排列牌堆上。

故事

你是個魔術師,手裡拿著一疊牌。為了正確完成你的魔術,你必須能把一張卡片從某個位置移動到另一個位置。也就是說,你必須能重新排列這疊牌。當然,你會希望能往兩個方向移動卡片,也能說出「從牌堆頂端」或「從牌堆底部」。

任務

以下是符合你想重新排列卡片這個故事的一些範例任務:

  • 實作一個函式 arrange,把牌堆中的一張卡片從指定的位置移動到另一個位置,並回傳新的牌堆
  • 實作一個函式 rearrange,功能相同,但會直接修改原始的牌堆

實作

參考資料