Swift Playgrounds

コードを学ぼう2【階段を置く】解答例と解説

階段を置く

解答例

world.place(Stair(), facing: south, atColumn: 3, row: 1)
world.place(Stair(), facing: south, atColumn: 3, row: 3)
world.place(Stair(), facing: west, atColumn: 1, row: 4)
world.place(Stair(), facing: west, atColumn: 1, row: 6)
world.place(Stair(), facing: east, atColumn: 5, row: 6)
world.place(Stair(), facing: north, atColumn: 2, row: 7)
world.place(Stair(), facing: north, atColumn: 4, row: 7)

func toggleSide() {
  while !isBlocked {
    toggleSwitch()
    moveForward()
  }
  toggleSwitch()
}

func turnCorner() {
  turnRight()
  move(distance: 2)
  turnLeft()
  move(distance: 2)
  turnRight()
}

move(distance: 4)
turnLeft()
move(distance: 3)
turnRight()

for i in 1 ... 2 {
  toggleSide()
  turnCorner()
}

toggleSide()

解説

前回、ブロックを置くときにはまず最初に、インスタンスの初期化をしてからworldに設置しました。
それを、初期化とともに一度に設置します。
インスタンスの名前をつけずに、Stairという型を使うことにより、
一行で済みますね。
階段などの場合は、それぞれ挙動があるわけでもなく設置するだけなので、
別にそれぞれの名前がなくても大丈夫ですよね。
』を書く場合は、最初が大文字で最後に『()』が必要になります。

要点まとめ

・ショートカットを使えば、インスタンスの初期化と配置を同時に行うことができる

解答例その2

world.place(Stair(), facing: south, atColumn: 3, row: 1)
world.place(Stair(), facing: south, atColumn: 3, row: 3)
world.place(Stair(), facing: west, atColumn: 1, row: 5)
world.place(Stair(), facing: east, atColumn: 5, row: 5)
world.place(Stair(), facing: north, atColumn: 3, row: 7)

func toggle3() {
  move(distance: 3)
  turnRight()
  move(distance: 3)
  toggleSwitch()
  turnRight()
  moveForward()
  toggleSwitch()
  turnRight()
  turnRight()
  move(distance: 2)
  toggleSwitch()
  turnRight()
  turnRight()
  moveForward()
  turnRight()
}

move(distance: 2)

for i in 1 ... 3 {
  toggle3()
}