2  돌아다니기 (Around)

2.1 Around 1

  • 문제 바로가기
  • 리보그를 세상한바퀴 돌게 만드는 것이다.
    • 로봇의 좌표 (x, y) = (1, 1) 라서 로봇의 최종위치를 한바퀴 돌아 반드시 (x, y) = (1, 1) 으로 이동시킨다.
  • 난이도: 1
    • 함수: move(), turn_left(), put()
  • 난이도: 2
    • 함수: move(), turn_left(), put()
    • 테스트 함수: front_is_clear(), wall_in_front(), object_here()
    • 반복 while, repeat/for 루프와 제어 if

2.1.1 실행결과

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

2.1.2 코드

repeat 4 :
    repeat 9 :
        move()
    turn_left()

2.2 Around 2

리보그가 토큰(token)을 가지고 다니는 점을 이용하여 리보그 세상을 한바퀴 삥 둘러 돌아다닌 후에 제자리로 돌아온 위치를 표식하고 이를 프로그램 종료 조건으로 설정한다.

  • 문제 바로가기
  • 리보그를 세상한바퀴 돌게 만드는 것이다.
    • 로봇의 좌표 (x, y) 가 임의 랜덤으로 주어졌기 때문에 로봇의 최종위치를 한바퀴 돌아 반드시 (x, y) 랜덤 위치로 이동시킨다.
  • 난이도: 3
    • 함수: move(), turn_left(), put()
    • 테스트 함수: front_is_clear(), wall_in_front(), right_is_clear(), wall_on_right(), object_here()
    • 반복 while, repeat/for 루프와 제어 if

2.2.1 실행결과

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

2.2.2 코드

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

# 목표지점 표식    
def drop_token():
    put("token")

drop_token()
move()

while not object_here():
    move()
    if wall_in_front() :
        turn_left()
    if right_is_clear() :
        turn_right()
        move()

2.3 Around 3

Around 2와 마찬가지로 토큰을 떨어뜨려 표식을 하고 자리를 한칸 이동한 후에 돌아다니는 작업을 수행한다.

  • 문제 바로가기
  • 리보그를 세상한바퀴 돌게 만드는 것이다.
    • 로봇의 좌표 (x, y) 가 임의 랜덤으로 주어졌기 때문에 로봇의 최종위치를 한바퀴 돌아 반드시 (x, y) 랜덤 위치로 이동시킨다.
  • 난이도: 4
    • 함수: move(), turn_left(), put()
    • 테스트 함수: front_is_clear(), wall_in_front(), right_is_clear(), wall_on_right(), object_here()
    • 반복 while, repeat/for 루프와 제어 if

2.3.1 실행결과

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

2.3.2 코드

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

# 목표지점 표식    
def drop_token():
    put("token")

drop_token()
turn_left()
move()

while not object_here():
    if right_is_clear():
        turn_right()
        move()
    elif front_is_clear():
        move()
    else:
        turn_left()

2.4 Around 4

본 문제를 해결하게 되면 앞선 Around 1,2,3번 문제도 작성한 프로그램으로 일반화시켜 해결할 수 있다.

  • 문제 바로가기
  • 리보그를 세상한바퀴 돌게 만드는 것이다.
    • 로봇의 좌표 (x, y) 가 임의 랜덤으로 주어졌기 때문에 로봇의 최종위치를 한바퀴 돌아 반드시 (x, y) 랜덤 위치로 이동시킨다.
  • 난이도: 5
    • 함수: move(), turn_left(), put()
    • 테스트 함수: front_is_clear(), wall_in_front(), right_is_clear(), wall_on_right(), object_here()
    • 반복 while, if/elif/else

2.4.1 실행결과

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

2.4.2 코드

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

def turn_around():
    turn_left()
    turn_left()
    
    
# 목표지점 표식    
def drop_token():
    put("token")

drop_token()
turn_around()
move()

while not object_here():
    if right_is_clear():
        turn_right()
        move()
    elif front_is_clear():
        move()
    else:
        turn_left()