4  장애물 넘기

4.1 장애물 1

4.1.1 실행결과

if (knitr:::is_latex_output()) {
  knitr::asis_output('\\url{....}')
} else {
  knitr::include_graphics("fig/Hurdle_01.gif")
}

4.1.2 코드

def turn_right():
    turn_left()
    turn_left()
    turn_left()

def jump_over_hurdle():    
    move()
    turn_left()
    move()
    turn_right()
    move()
    turn_right()
    move()
    turn_left()

# jump_over_hurdle()    

repeat 6:
   jump_over_hurdle()

4.2 장애물 2

  • 문제 바로가기
  • 선행 지식
    • 기본 함수 : move(), turn_left()
    • 조건 / 테스트 : at_goal() 혹은 부정(negation)
    • 반복: while()
  • 난이도: 3

4.2.1 실행결과

if (knitr:::is_latex_output()) {
  knitr::asis_output('\\url{....}')
} else {
  knitr::include_graphics("fig/Hurdle_02.gif")
}

4.2.2 코드

def turn_right():
    turn_left()
    turn_left()
    turn_left()

def jump_over_hurdle():    
    move()
    turn_left()
    move()
    turn_right()
    move()
    turn_right()
    move()
    turn_left()

# jump_over_hurdle()    

while not at_goal():
    jump_over_hurdle()

4.3 장애물 3

  • 문제 바로가기
  • 선행 지식
    • 기본 함수 : move(), turn_left()
    • 조건 / 테스트 : at_goal(), front_is_clear(), wall_in_front(), 혹은 부정(negation)
    • 반복과 제어: while() 루프와 if
  • 난이도: 4

4.3.1 실행결과

if (knitr:::is_latex_output()) {
  knitr::asis_output('\\url{....}')
} else {
  knitr::include_graphics("fig/Hurdle_03.gif")
}

4.3.2 코드

def turn_right():
    turn_left()
    turn_left()
    turn_left()

def jump_over_hurdle():
    # move() <-- 일반화를 위해 제거
    turn_left()
    move()
    turn_right()
    move()
    turn_right()
    move()
    turn_left()

# jump_over_hurdle()    

while not at_goal():
    if front_is_clear():
        move()
    elif wall_in_front():
        jump_over_hurdle()

4.4 장애물 4

  • 문제 바로가기
  • 선행 지식
    • 기본 함수 : move(), turn_left()
    • 조건 / 테스트 : at_goal(), front_is_clear(), wall_in_front(), 혹은 부정(negation)
    • 반복과 제어: while() 루프와 if
  • 난이도: 4.5
  • 장애물 4 프로그램은 장애물 1, 2, 3 프로그램도 정상 동작시킬 수 있어야 한다.

4.4.1 실행결과

if (knitr:::is_latex_output()) {
  knitr::asis_output('\\url{....}')
} else {
  knitr::include_graphics("fig/Hurdle_04.gif")
}

4.4.2 코드

def turn_right():
    turn_left()
    turn_left()
    turn_left()

def jump_over_hurdles():
    # 장애물 위쪽 올라가기
    if wall_in_front():
        turn_left()
        while not right_is_clear():
            move()
    # 장애물 위를 넘어가기            
    turn_right()
    move()
    turn_right()
    # 장애물 내려오기
    while front_is_clear():
        move()
    # 다시 경주자세로 자세 갖추기
    turn_left()

while not at_goal():
    if front_is_clear():
        move()
    elif wall_in_front():
        jump_over_hurdles()