티스토리 뷰
[퀴즈] 프로그래머를 위한 문제 #3
요즘 퀴즈를 풀다보니 재미가 들렸나, 필자가 문제를 하나 내보려고 한다. 어려울 수도, 그렇지 않을 수도 있는 문제이며, 효율적인 코드를 작성하는 것 보다 최대한 짧게 짜는 것이 목적이다.
문제의 유형과 정답의 유형은 지난 문제를 참고하면 된다.
미로 찾기 게임
문제는 미로 찾기 게임이다.
- 10 x 6 (가로, 세로) 크기에 * 문자가 채워진 직사각형
- 미로의 크기가 변해도 실행 가능해야 한다.
- 문자 S 는 입구 위치, 문자 E는 출구 위치이다.
- S 문자와 E 문자 사이에는 공백으로 연결된 길이 있고, 길은 여러 갈래일 수 있다.
- 길(공백)은 2x2(가로, 세로) 이상의 공간을 가질 수 없다.
- 미로 찾기를 시작하는 함수가 호출되기 이전의 초기화를 위한 코드는 코드 길이에서 제외된다.
- 코드 길이는 최대한 짧게 작성한다. (알고리즘 효율성은 측정 안함)
- 개발 언어는 무관, 언어별로 가장 짧게 작성한 코드가 우승(?)
미로 찾기 게임 예제 코드
// 아래의 변수의 초기화는 코드 길이에서 제외된다.
map = """
**********
** ** E
* * ****
* * * * *
* * * *
S **** *
**********"""
y = map.indexof("S") / maxX
x = map.indexof("S") % maxX
// 아래 코드 부터 코드 길이를 잰다. 개행 문제는 코드 길이에서 제외
void explore(x,y)
{
// ...생략...
}
정답
아래는 필자가 작성한 코드이다. 짧게 작성하는 방법은 여러 가지이므로 혹시 여러분들께서 C++ 또는 자바스크립트, C# 등으로 작성하신 코드는 댓글로 달아주세요.
Python( 파이썬 )
아래 주석의 begin code/end code 사이의 문자는 총 273 문자. 방향에 대한 가중치를 주면 훨씬 빠르게 길을 찾을 수 있지만, 여기에선 구현을 제외했다.
#123456789
m = """
**********
** ** E
* * ****
* * * * *
* * * *
S **** *
**********"""
X = m.index("\n", 1) - 1
Y = m.count("\n") - 1
m = m.replace("\n", "")
(y, x) = divmod(m.index("S"), X)
### 총 273 바이트 ###
########### begin code ############
def E(x,y,a):
n=m[x+(y*10)]
if n=="*"or x<0 or x>X or y<0 or y>Y:return None
# print "%d, %d" % (x, y)
if n=="E": print("END");quit()
while a!=2 and E(x+1,y,1)!=None:pass
while a!=1 and E(x-1,y,2)!=None:pass
while a!=8 and E(x,y+1,4)!=None:pass
while a!=4 and E(x,y-1,8)!=None:pass
E(x,y,0)
############# end code ##############
## 실행 결과 ##
0, 5
1, 5
1, 4
1, 3
1, 2
2, 2
3, 2
3, 3
3, 4
4, 4
5, 4
6, 4
6, 5
7, 5
8, 5
8, 4
8, 3
7, 3
5, 3
5, 2
5, 1
6, 1
7, 1
8, 1
9, 1
END
'C++' 카테고리의 다른 글
[Objective-C] 아름다움을 추구하는 오브젝티브-C 2/2 - 객체지향 (1) | 2013.09.12 |
---|---|
[Objective-C] 아름다움을 추구하는 오브젝티브-C 언어 1/ 2- 언어적 특성 (0) | 2013.09.11 |
[퀴즈] 프로그래머를 위한 문제 #2 - 스택 프레임(Stack Frame) (1) | 2013.07.05 |
[퀴즈] 프로그래머를 위한 문제 #1 - 1부터 8만까지 8의 개수 (9) | 2013.07.02 |
[Qt] Qt 5.0의 webkitwidgets 사용 (3) | 2013.03.11 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
- ***** MY SOCIAL *****
- [SOCIAL] 페이스북
- [SOCIAL] 팀 블로그 트위터
- .
- ***** MY OPEN SOURCE *****
- [GITHUB] POWERUMC
- .
- ***** MY PUBLISH *****
- [MSDN] e-Book 백서
- .
- ***** MY TOOLS *****
- [VSX] VSGesture for VS2005,200…
- [VSX] VSGesture for VS2010,201…
- [VSX] Comment Helper for VS200…
- [VSX] VSExplorer for VS2005,20…
- [VSX] VSCmd for VS2005,2008
- .
- ***** MY FAVORITES *****
- MSDN 포럼
- MSDN 라이브러리
- Mono Project
- STEN
- 일본 ATMARKIT
- C++ 빌더 포럼
- .
TAG
- LINQ
- 비주얼 스튜디오
- Team Foundation Server 2010
- Visual Studio 2008
- Team Foundation Server
- Silverlight
- ALM
- monodevelop
- 팀 파운데이션 서버
- ASP.NET
- TFS
- testing
- Visual Studio 11
- 엄준일
- c#
- Visual Studio 2010
- 비주얼 스튜디오 2010
- umc
- Windows 8
- TFS 2010
- MEF
- Managed Extensibility Framework
- POWERUMC
- 땡초
- github
- Visual Studio
- .NET
- test
- .NET Framework 4.0
- mono