Swift Playgrounds 코딩배우기2 유형 챕터 과제 일부를 풀었다. 과제 - 세상의 가장자리는 몇 번 실패하고 내일 맑은 정신으로 재도전 예정. 매일 챕터 한 개를 해결하는 수준으로 시도하면 부담도 적고, 내용 복습을 통해 기억 손실을 줄일 수 있다.

[추가] 이 글을 발행한 다음날, 과제 - 세상의 가장자리, 과제 - 임의의 장소에 보석 놓기를 풀었고, 이 글 맨 아래에 코드를 추가했다.

유형 – 소개

  • 프로그래밍에서 유형은 청사진과 같다. 인스턴스는 청사진으로 지은 집과 같다.
  • 유형에서 기능은 속성이라고 불리며 동작은 메소드라고 불린다.
    • 속성은 유형 내 정의된 변수에 불과하다.
    • 메소드는 유형 내 정의된 함수에 불과하다.
  • bluePortal.isActive = false
    blurPortal 인스턴스의 isActive 속성을 거짓(false)로 변경하려는 상황이다.

아래는 각 과제를 해결하기 위해 내가 작성한 코드이다.

과제 – 포털 비활성화하기

greenPortal.isActive = false

func moveThree() {
    moveForward()
    moveForward()
    moveForward()
}

for i in 1...3 {
    moveThree()
    turnRight()
    moveThree()
    if isOnClosedSwitch {
        toggleSwitch()
    }
    turnRight()
    turnRight()
}

과제 – 포털 켜기 및 끄기

purplePortal.isActive = false

var numberOfGems = 0
var numberOfSwitch = 0

while numberOfGems != 7 {
    moveForward()
    if isOnGem {
        collectGem()
        numberOfGems += 1
    }
    if isBlocked {
        turnRight()
    }
    
    if numberOfGems == 4 {
        purplePortal.isActive = true
    }
    
    if isOnClosedSwitch {
        toggleSwitch()
        numberOfSwitch += 1
    }
    
    if numberOfSwitch == 1 {
        purplePortal.isActive = false
    }
    
}

과제 – 올바른 포털 설정하기

pinkPortal.isActive = false
bluePortal.isActive = false

var numberOfGems = 0

while numberOfGems != 4 {
    moveForward()
    if isOnGem {
        collectGem()
        numberOfGems += 1
    }
    if isBlocked {
        turnRight()
    }
    
    if numberOfGems == 1 {
        pinkPortal.isActive = true
    }
    
    if numberOfGems == 2 {
        bluePortal.isActive = true
    }
    
    if numberOfGems == 3 {
        bluePortal.isActive = false
    }
    
}

과제 – 세상의 가장자리

greenPortal.isActive = false
orangePortal.isActive = false

var numberOfGems = 0
var numberOfSwitch = 0

func fGem() {
    if isOnGem {
        turnRight()
        turnRight()
        collectGem()
        numberOfGems += 1
        moveForward()
        turnLeft()
    }
}

func fSwitch() {
    if isOnClosedSwitch {
        turnRight()
        turnRight()
        toggleSwitch()
        numberOfSwitch += 1
        moveForward()
        turnLeft()
    }
}

func navigate() {
    if !isBlocked && isBlockedRight && isBlockedLeft {
        moveForward()
    }
    if isBlocked {
        turnLeft()
    } else {
        moveForward()
    }
}

while numberOfGems != 6 || numberOfSwitch != 6 {
    fGem()
    fSwitch()
    navigate()
    if numberOfGems == 6 && numberOfSwitch == 2 {
        greenPortal.isActive = true
    }
    if numberOfGems == 6 && numberOfSwitch == 3 {
        greenPortal.isActive = false
    }
}

과제 – 임의의 장소에 보석 놓기

let totalGems = randomNumberOfGems
var numberOfGems = 0

func bothOn() {
    pinkPortal.isActive = true
    bluePortal.isActive = true
}

func bothOff() {
    pinkPortal.isActive = false
    bluePortal.isActive = false
}

func blueOn() {
    pinkPortal.isActive = false
    bluePortal.isActive = true
}

func pinkOn() {
    pinkPortal.isActive = true
    bluePortal.isActive = false
}

func gem() {
    if isOnGem {
        collectGem()
        numberOfGems += 1
    }
}

func navigate() {
    gem()
    moveForward()
    if isBlocked && !isBlockedLeft && !isBlockedRight {
        gem()
        turnRight()
        gem()
        moveForward()
    }
    if isBlocked && isBlockedLeft && isBlockedRight {
        gem()
        turnRight()
        gem()
        turnRight()
    }
    if !isBlockedRight && !isBlocked && isBlockedLeft {
        gem()
        turnRight()
    }
}

while totalGems != numberOfGems {
    for i in 1 ... 4 {
        bothOff()
        navigate()
    }
    for i in 1 ... 4 {
        blueOn()
        navigate()
    }
    for i in 1 ... 4 {
        pinkOn()
        navigate()
    }
    for i in 1 ... 4 {
        bothOn()
        navigate()
    }
}
Posted by:박세희 (Park Sehee)

성장의 기쁨, 나눔의 즐거움. hubby, daddy of two sons, lawyer, ever learner.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.