<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=%EB%8D%B0%EB%B8%94%EC%8A%A4%EC%BA%A0%ED%94%842005%2FRUR-PLE</id>
	<title>데블스캠프2005/RUR-PLE - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=%EB%8D%B0%EB%B8%94%EC%8A%A4%EC%BA%A0%ED%94%842005%2FRUR-PLE"/>
	<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EB%8D%B0%EB%B8%94%EC%8A%A4%EC%BA%A0%ED%94%842005/RUR-PLE&amp;action=history"/>
	<updated>2026-05-15T09:54:15Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=%EB%8D%B0%EB%B8%94%EC%8A%A4%EC%BA%A0%ED%94%842005/RUR-PLE&amp;diff=46087&amp;oldid=prev</id>
		<title>imported&gt;Unknown at 05:28, 7 February 2021</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EB%8D%B0%EB%B8%94%EC%8A%A4%EC%BA%A0%ED%94%842005/RUR-PLE&amp;diff=46087&amp;oldid=prev"/>
		<updated>2021-02-07T05:28:58Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;__TOC__&lt;br /&gt;
= [[데블스캠프2005]]/[[RUR-PLE]] =&lt;br /&gt;
* 준비자 : 01 남상협&lt;br /&gt;
* 일시 : 데블스 캠프 목요일&lt;br /&gt;
= 작성한 소스 =&lt;br /&gt;
== 수확 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 연습&lt;br /&gt;
|-&lt;br /&gt;
| [[데블스캠프2005/RUR-PLE/Sorting]]&lt;br /&gt;
|-&lt;br /&gt;
| [[데블스캠프2005/RUR-PLE/TwoMoreSelectableHarvest]]&lt;br /&gt;
|-&lt;br /&gt;
| [[데블스캠프2005/RUR-PLE/SelectableHarvest]]&lt;br /&gt;
|-&lt;br /&gt;
| [[데블스캠프2005/RUR-PLE/Harvest/Refactoring]]&lt;br /&gt;
|-&lt;br /&gt;
| [[데블스캠프2005/RUR-PLE/Newspaper/Refactoring]]&lt;br /&gt;
|-&lt;br /&gt;
| [[데블스캠프2005/RUR-PLE/Newspaper]]&lt;br /&gt;
|-&lt;br /&gt;
| [[데블스캠프2005/RUR-PLE/Harvest]]&lt;br /&gt;
|}&lt;br /&gt;
= 시간 배분 =&lt;br /&gt;
* 총 소요 예상 시간 : 4시간 5분&lt;br /&gt;
* 간단한 설명 5분&lt;br /&gt;
* 로봇 사용법 5분&lt;br /&gt;
* 왼쪽으로 돌기 5분 + 연습 5분&lt;br /&gt;
* 삐삐 옮기기 설명 + 연습 5분&lt;br /&gt;
* 디버깅 방법 5분&lt;br /&gt;
* 벽 만들기 5분 + 연습 20분(신문배달, 수확)&lt;br /&gt;
* 중복 피하기 5분 + 예전 소스에서 중복 제거(10분)&lt;br /&gt;
* if문 사용 + 연습 5분&lt;br /&gt;
* not 사용 + 연습(수확2) 40분&lt;br /&gt;
* while 사용 + 연습(수확3) 10분&lt;br /&gt;
* sorting 문제 120분&lt;br /&gt;
= RUR-PLE 이란 ? =&lt;br /&gt;
* 프로그래밍 언어를 배우는것은 재밌어야 한다는 취지에서 만들어진 환경이다.  실제로 해보면 재밌다.  도움도 많이 된다.&lt;br /&gt;
* Python 언어를 사용하여 컴퓨터 프로그래밍 언어를 배울수 있는 환경이다.&lt;br /&gt;
* Python 문법 기반이지만, 몰라도 상관없다. 주어진 함수들을 가지고 해결해 나가기 때문이다. 변수도 안쓴다. -_-&lt;br /&gt;
* 실제로 로봇에 프로그래밍 해서 그 로봇이 현실에서 자신이 프로그래밍 하는데로 움직이는것을 보면 정말 좋겠지만 여건이 안되는 만큼 -_-; 화면으로나마 그 로봇이 움직이는 것을 보면서 프로그래밍 해볼 수 있다.  여기에서 작성하는 코드들이 무슨 쓸모가 있을까 싶기도 하겠지만, 추후에 실제 로봇의 동작을 프로그래밍해서 넣는다면 여기서 쓰이는 방식과 비슷하게 넣을것이다.(하드웨어적으로 복잡한것을 명령어로 추상화 시킨다음에 그 명령어을 적절하게 복합적으로 사용하여 원하는 행동을 로봇이 하게 만드는 식으로..)  즉 말그대로 로봇 프로그래밍을 간접적으로나 해볼 수 있다.&lt;br /&gt;
= 규칙들 =&lt;br /&gt;
== 규칙 1 ==&lt;br /&gt;
* 컴퓨터 프로그래밍을 익히는 것은 악기를 익히는 것과 비슷하다.  당신은 그것에 관해 단순히 읽기 말고 해봐야 한다. &lt;br /&gt;
== 규칙 2 ==&lt;br /&gt;
* 사람들이 읽기 쉬운 프로그램을 작성해야 한다.&lt;br /&gt;
&lt;br /&gt;
== 규칙 3 ==&lt;br /&gt;
* 컴퓨터 프로그램을 작성할때는 반복을 하지 마라.&lt;br /&gt;
&lt;br /&gt;
= 간단한 러플 사용법 =&lt;br /&gt;
== 로봇 한번 움직여 볼까? ==&lt;br /&gt;
* 창에서 Robot: Code and Learn 탭을 선택한다.&lt;br /&gt;
* 왼쪽 코드 쓰는 화면에 아래와 같은 코드를 넣어 본다.&lt;br /&gt;
 move()&lt;br /&gt;
 turn_off()&lt;br /&gt;
* 그후 화면에 Mp3 Play 버튼 비슷하게 생긴 버튼을 클릭한다.&lt;br /&gt;
* 저장하라는 창이 나오면 test 라고 넣고 저장한다.&lt;br /&gt;
* 그리고 다시 play 버튼을 누른다.&lt;br /&gt;
=== 키보드로 로봇 움직이기 ===&lt;br /&gt;
* 화면의 로봇을 클릭한다.&lt;br /&gt;
* 왼쪽 방향 키보드를 누르면 방향이 바뀐다.&lt;br /&gt;
* 위쪽 방향 키보드를 누르면 앞으로 이동한다.&lt;br /&gt;
== 왼쪽으로 함 돌아 볼까? ==&lt;br /&gt;
* 아래와 같은 코드를 넣어 본다.&lt;br /&gt;
 move()&lt;br /&gt;
 turn_left()&lt;br /&gt;
 move()&lt;br /&gt;
 turn_off()&lt;br /&gt;
* 한칸 앞으로 간다음에 왼쪽으로 돌고나서 한칸 앞으로 가고 나서 정지하는것을 볼 수 있다.&lt;br /&gt;
=== 연습 ===&lt;br /&gt;
* 로봇이 길이 2인 사각형을 그리면서  반시계 방향으로 도는것을 만들어 보자.&lt;br /&gt;
http://rur-ple.sourceforge.net/images/left_square2.png&lt;br /&gt;
* 로봇이 아래 그림과 같이 움직이게 해본다.&lt;br /&gt;
http://rur-ple.sourceforge.net/images/back_home_start.png&lt;br /&gt;
http://rur-ple.sourceforge.net/images/back_home.png&lt;br /&gt;
== 삐삐(beeper) 옮기기 ==&lt;br /&gt;
* beeper를 옮겨 보자.&lt;br /&gt;
* beeper를 드는 명령어 : pick_beeper()&lt;br /&gt;
* beeper를 내려 놓는 명령어 : put_beeper()&lt;br /&gt;
* beepers1.wld 파일을 연다.&lt;br /&gt;
* 아래 그림과 같이 하는 코드를 짜본다.&lt;br /&gt;
http://rur-ple.sourceforge.net/images/beeper1.png&lt;br /&gt;
http://rur-ple.sourceforge.net/images/beeper2.png&lt;br /&gt;
&lt;br /&gt;
== 디버깅 방법? ==&lt;br /&gt;
* RUR-PLE에서도 디버깅을 한다.&lt;br /&gt;
* Play버튼 옆에 Play 모양과 작대기 하나 있는것은 step into와 비슷한 역할을 한다.  명령어가 하나씩 실행된다. 현재 실행되고 있는 명령어는 코드 부분에서 회색으로 highlighting 된다.&lt;br /&gt;
* Play버튼을 클릭하고 나서 로봇이 움직이고 있는 도중에 자신이 원하는 순간에 step into  버튼(play 버튼 옆에 있는)을 클릭하면 그 순간부터 명령어가 하나 하나씩 실행된다.&lt;br /&gt;
* step into 옆에 있는 버튼은 일시 중지 버튼&lt;br /&gt;
* 그 옆에 있는 빨간 버튼은 완전 종료 버튼&lt;br /&gt;
&lt;br /&gt;
== 벽 만들어 보자~! ==&lt;br /&gt;
* 버튼들 중에서 벽 처럼 생긴 버튼을 클릭한다. 그럼 아래 그림과 같은 화면이 나온다. 여기서 클릭! 클릭~! 해서 벽들을 만들 수 있다.&lt;br /&gt;
&lt;br /&gt;
http://rur-ple.sourceforge.net/images/buildwalls.png&lt;br /&gt;
=== 연습 ===&lt;br /&gt;
* 아래 그림과 같이 로봇이 신문배달 하게 함 코드를 작성해보자&lt;br /&gt;
http://rur-ple.sourceforge.net/images/newspaper_start.png&lt;br /&gt;
http://rur-ple.sourceforge.net/images/newspaper_end.png&lt;br /&gt;
* 아래와 같은 지도에서 1 모두를 수확하는 코드를 작성해 보자.&lt;br /&gt;
http://rur-ple.sourceforge.net/images/harvest1.png&lt;br /&gt;
&lt;br /&gt;
== 중복 피하기 ==&lt;br /&gt;
* 아래와 같이 def 를써서 함수를 정의할 수 있다.&lt;br /&gt;
http://rur-ple.sourceforge.net/images/turnright_txt.png&lt;br /&gt;
* repeat 명령어를 써서 여러번 수행해야 하는 함수(명령어 포함)을 한번에 방복 횟수만 지정해서 사용할 수 있다.&lt;br /&gt;
 def turn_right():&lt;br /&gt;
     repeat(turn_left, 3)&lt;br /&gt;
* 벽 만들기 연습에서 한 코드들을 함수화 해서 중복 제거를 한다.&lt;br /&gt;
&lt;br /&gt;
== if 문 사용 ==&lt;br /&gt;
* next_to_a_beeper() : beeper가 현재 로봇의 자리에 있으면 true, 없으면 false를 반환한다.&lt;br /&gt;
 if next_to_a_beeper():&lt;br /&gt;
     pick_beeper()&lt;br /&gt;
* 위의 if문과 함수 정의, repeat를 사용하여 아래 화면과 같은 상황을 처리한다.&lt;br /&gt;
http://rur-ple.sourceforge.net/images/move_pick_start.png&lt;br /&gt;
http://rur-ple.sourceforge.net/images/move_pick_end.png&lt;br /&gt;
&lt;br /&gt;
=== else 문 사용 ===&lt;br /&gt;
* front_is_clear() : 로봇앞에 벽이 없으면 true, 있으면 false&lt;br /&gt;
* left_is_clear() : 로봇의 왼쪽에 벽이 있는지 검사&lt;br /&gt;
* right_is_clear() : 로봇의 오른쪽에 벽이 있는지 검사&lt;br /&gt;
* else 문은 아래 코드처럼 쓴다.&lt;br /&gt;
 def move_or_turn():&lt;br /&gt;
     if front_is_clear():&lt;br /&gt;
         move()&lt;br /&gt;
     else:&lt;br /&gt;
         turn_left()&lt;br /&gt;
* 아그래 그림처럼 로봇이 방안을 한바퀴돌게 해보자.  방 크기에 따라서 반복 횟수를 다르게 해줘야 한다. 크기가 5라면 5*4=20 이런식으로..&lt;br /&gt;
http://rur-ple.sourceforge.net/images/around1.png&lt;br /&gt;
&lt;br /&gt;
== not ==&lt;br /&gt;
* not은 아래와 같은 식으로 사용한다.&lt;br /&gt;
 if not next_to_beeper():&lt;br /&gt;
     move()&lt;br /&gt;
 else:&lt;br /&gt;
     turn_off()	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 연습 ===&lt;br /&gt;
* 아래 그림처럼 만든다.&lt;br /&gt;
http://rur-ple.sourceforge.net/images/harvest4.png&lt;br /&gt;
http://rur-ple.sourceforge.net/images/harvest1.png&lt;br /&gt;
* 문제에서 아래와 같은 소스를 참고 하라고 한다. 저는 좀 다르게 했습니다. 우선 참고는 했고..&lt;br /&gt;
 # introducing vocabulary related to the problem&lt;br /&gt;
 next_to_a_carrot = next_to_a_beeper&lt;br /&gt;
 plant_carrot = put_beeper&lt;br /&gt;
 pick_carrot = pick_beeper&lt;br /&gt;
 &lt;br /&gt;
 def one_carrot_only():&lt;br /&gt;
     if not next_to_a_carrot():&lt;br /&gt;
         plant_carrot()      # replace missing seed&lt;br /&gt;
     else:&lt;br /&gt;
         pick_carrot()&lt;br /&gt;
         if not next_to_a_carrot(): # oops!&lt;br /&gt;
             plant_carrot()  # we had removed the only one&lt;br /&gt;
== while ==&lt;br /&gt;
* 아래와 같은 식으로 사용한다.&lt;br /&gt;
 next_to_a_carrot = next_to_a_beeper&lt;br /&gt;
 plant_carrot = put_beeper&lt;br /&gt;
 pick_carrot = pick_beeper&lt;br /&gt;
 &lt;br /&gt;
 def one_carrot_only():&lt;br /&gt;
     while next_to_a_carrot():&lt;br /&gt;
         pick_carrot()      # pick them all!&lt;br /&gt;
 				&lt;br /&gt;
     plant_carrot()         # replant only one&lt;br /&gt;
* harvest3.wld 파일을 연다.&lt;br /&gt;
* while문을 사용하여 중복된 씨앗의 개수가 2 이상인 임의의 개수일 경우에도 처리 가능하게 위 소스를 수정한다.&lt;br /&gt;
http://zeropage.org/~namsangboy/rurple.GIF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Amazing Part ==&lt;br /&gt;
* 정말 유익한 내용이다.  주어진 간단한 몇가지 상황을 해결하면 놀라운 기능이 되는것을 볼 수 있다.&lt;br /&gt;
* sorting 문제를 풀고나서 시간 남은 분은 해보시길. [http://rur-ple.sourceforge.net/en/amazing1.htm 러플 Amazing 설명]&lt;br /&gt;
&lt;br /&gt;
== Sorting ==&lt;br /&gt;
* sort0_1.wld 파일을 연다.&lt;br /&gt;
* 주어진 삐삐들을 그림처럼 오름차순으로 로봇이 정렬하게 만들면 된다.&lt;br /&gt;
* 아래는 간단하게 2개의 column의 경우 정렬한 모습이다.&lt;br /&gt;
http://rur-ple.sourceforge.net/images/sort1_start.png&lt;br /&gt;
http://rur-ple.sourceforge.net/images/sort1_end.png&lt;br /&gt;
* 다음은 sort0_2.wld 파일을 연다.&lt;br /&gt;
* 아래 그림과 같이 원래 정렬되어 있는 경우에도 제대로 작동되는지 테스트 해본다.&lt;br /&gt;
http://rur-ple.sourceforge.net/images/sort2.png&lt;br /&gt;
http://rur-ple.sourceforge.net/images/sort2.png&lt;br /&gt;
* sort1 파일을 연다.&lt;br /&gt;
* 아래 그림과 같이 좀더 복잡한 여러개의 column 에서도 작동해야 한다.&lt;br /&gt;
http://rur-ple.sourceforge.net/images/sort3_start.png&lt;br /&gt;
http://rur-ple.sourceforge.net/images/sort3_end.png&lt;br /&gt;
* sort2 는 추후 공개&lt;br /&gt;
= 경품 =&lt;br /&gt;
* sort1, sort2 맵을 가장 먼저 모두 오름차순으로 정렬하는 분에게 [[데블스캠프/2005/RUR-PLE/경품]]을 드립니다.&lt;br /&gt;
* 05 [[조현태]] 군이 가장 먼저 sorting을 해결하여 경품을 탔습니다. 이후 01 김정현 이 sort2 맵에 대해서 해결하였지만 sort1에 대해서는 부분적으로 해결하였습니다. &lt;br /&gt;
 [[데블스캠프2005/RUR_PLE/조현태]]&lt;br /&gt;
&lt;br /&gt;
= 참고 =&lt;br /&gt;
* [[RUR-PLE]]&lt;br /&gt;
* [http://zeropage.org/~namsangboy/RUR_PLE.ppt 피피티 자료]&lt;br /&gt;
* [http://zeropage.org/~namsangboy/world.zip 지도]&lt;br /&gt;
----&lt;br /&gt;
[[데블스캠프2005]]&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>imported&gt;Unknown</name></author>
	</entry>
</feed>