'U&L Developer˚ε♡з。'에 해당되는 글 233건
- 2011.06.28 [Python challenge Level11] - 5808 (odd-even)
- 2011.06.27 [VIM] 단축키 정리
- 2011.06.27 [gcc] 옵션 정리
- 2011.06.27 [Python challenge Level10] - bull (개미수열)
- 2011.06.23 [Python challenge Level9] - good (ImageDraw)
- 2011.06.23 [Python challenge Level8] - integrity (bz2)
- 2011.06.22 [Python challenge Level7] - oxygen (PIL로 pixel값 처리)
- 2011.06.22 [Python challenge Level6] - channel (zipfile)
[ Problem ] - http://huge:file@www.pythonchallenge.com/pc/return/5808.html
♧ 흐릿한 이미지가 보인다. (해당 타이틀을 보면 "odd-even" 홀수/짝수에 대한 힌트가 주어진다.)
♧ 해당 픽셀 값을 짝수로 읽어보면 다음과 같다. # encoding=utf8 import urllib, StringIO from PIL import Image, ImageDraw # ① 이미지 파일 오픈. url = 'http://huge:file@www.pythonchallenge.com/pc/return/cave.jpg' u_img = urllib.urlopen(url).read() im = Image.open(StringIO.StringIO(u_img)) # ② 짝수번째 픽셀을 저장할 빈 이미지 생성. even_im = Image.new('RGB', (im.size[0], im.size[1])) # ③ 해당 이미지의 짝수번째 픽셀값만 even_im에 변경하여 그리기. for x in range(im.size[0]): for y in range(im.size[1]): if (x+y)%2 == 0: even_im.putpixel((x, y), im.getpixel((x,y))) # ④ 해당 이미지를 반으로 출력. (320x240) even_im.resize((320,240)).show()
♧ 출력 화면을 보면 오른쪽 위에 흐릿하게 'evil'이란 단어가 보인다.
|
[ Solution ] - http://www.pythonchallenge.com/pcc/return/evil.html
(※ 문제에 대한 다양한 해결법은 링크 참조.)
'워게임(WarGame) > PythonChallenge' 카테고리의 다른 글
[Python challenge Level13] - disproportional (xmlrpclib) (0) | 2011.07.01 |
---|---|
[Python challenge Level12] – evil (dealing evil) (0) | 2011.06.29 |
[Python challenge Level10] - bull (개미수열) (0) | 2011.06.27 |
[Python challenge Level9] - good (ImageDraw) (0) | 2011.06.23 |
[Python challenge Level8] - integrity (bz2) (0) | 2011.06.23 |
[ 저장 및 종료 ]
[ex모드] |
[설명] |
:w |
저장 |
:w file.txt |
file.txt 파일로 저장 |
:w >> file.txt |
file.txt 파일에 덧붙여서 저장 |
:q |
vi 종료 |
:q! |
vi 강제 종료 |
ZZ |
저장 후 종료 |
:wq! |
강제 저장 후 종료 |
:e file.txt |
file.txt 파일을 불러옴 |
:e |
현재 파일을 불러옴 |
[ 입력모드 전환 ]
[명령모드] |
[설명] |
[명령모드] |
[설명] |
a |
커서 윈치 다음 칸부터 입력 |
A |
커서 행의 맨 마지막부터 입력 |
i |
커서의 위치에 입력 |
I |
커서 행의 맨 앞에서부터 입력 |
o |
커서의 다음 행에 입력 |
O |
커서의 이전 행에 입력 |
s |
커서 위치의 한 글자를 지우고 입력 |
S(cc) |
커서 위치의 한 행을 지우고 입력 |
[ 이동 ]
[명령] |
[설명] |
[명령] |
[설명] |
H |
왼쪽으로 이동(←) |
l |
오른쪽으로 이동(→) |
j |
아래 행으로 이동(↓) |
k |
위 행으로 이동(↑) |
w or W |
다음 단어의 첫 글자로 이동 |
b or B |
이전 단어의 첫 글자로 이동 |
e or E |
단어의 마지막 글자로 이동 |
<CR> |
다음 행의 첫 글자로 이동 |
^ |
그 행의 첫 글자로 이동 |
$ |
그 행의 마지막 글자로 이동 |
+ |
다음 행의 첫 글자로 이동 |
- |
위 행의 첫 글자로 이동 |
( |
이전 문장의 첫 글자로 이동 |
) |
다음 문장의 첫 글자로 이동 |
{ |
이전 문단으로 이동 |
} |
다음 문단으로 이동 |
H |
커서를 화면의 맨 위로 이동 |
z<CR> |
현재 행을 화면의 맨 위로 이동 |
M |
커서를 화면의 중앙으로 이동 |
z. |
현재 행을 화면의 중앙으로 이동 |
L |
커서를 화면 최하단으로 이동 |
z- |
현재 행을 화면의 최하단으로 이동 |
[n]H |
커서를 위에서 n행으로 이동 |
[n]L |
커서를 아래에서 n행으로 이동 |
<Ctrl>+u |
반 화면 위로 스크롤 |
<Ctrl>+d |
반 화면 아래로 스크롤 |
<Ctrl>+b |
한 화면 위로 스크롤 |
<Ctrl>+f |
한 화면 아래로 스크롤 |
gg, 1G |
문서의 맨 첫 행으로 이동 |
G |
문서의 맨 마지막 행으로 이동 |
[n]G |
n행으로 이동 |
:[n]<CR> |
n행으로 이동 |
[ 삭제 ]
[명령모드] |
[설명] |
x, dl |
커서 위치의 글자 삭제 |
X, dh |
커서 바로 앞의 글자 삭제 |
dw |
한 단어를 삭제 |
d0 |
커서 위치부터 행의 처음까지 삭제 |
D, d$ |
커서 위치부터 행의 끝까지 삭제 |
dd |
커서가 있는 행을 삭제 |
dj |
커서가 있는 행과 그 다음 행을 삭제 |
dk |
커서가 있는 행과 그 앞 행을 삭제 |
[ 복사 & 붙이기 ]
[명령모드] |
[설명] |
[명령모드] |
[설명] |
yy |
커서가 위치한 한 행 복사 |
p |
붙여넣기 |
[n]yy |
커서가 위치한 이후로 n행 복사 |
[n]p |
n번만큼 붙여넣기 반복 |
[ 블록 지정 관련 ]
[명령] |
[설명] |
[명령] |
[설명] |
v |
블록 지정 |
<Ctrl>+v |
비쥬얼 블록 지정 |
~ |
대소문자 전환 |
d |
삭제 |
y |
복사 |
c |
치환 |
> |
행 앞에 탭 삽입 |
< |
행 앞에 탭 제거 |
: |
선택된 영역에 대하여 ex명령 |
J |
행을 합침 |
U |
대문자로 만듦 |
u |
소문자로 만듦 |
[ 문자열 탐색 및 치환 ]
[ex모드] |
[설명] |
/[문자열] |
문자열을 탐색 |
:s/old/new |
현재 행의 처음 old를 new로 교체 |
:s/old/new/g |
현재 행의 모든 old를 new로 교체 |
:10,20s/old/new/g |
10행부터 20행까지 모든 old를 new로 교체 |
:-3,+4s/old/new/g |
현재 커서 위치에서 3행 위부터 4행 아래까지 old를 new로 교체 |
:%s/old/new/g |
문서 전체에서 old를 new로 교체 |
:%s/old/new/gc |
문서 전체에서 old를 new로 확인하며 교체 |
:g/pattern/s//new/g |
:%s/old/new/g와 동일 |
[ vim 정규 표현식 ]
[메타문자] |
[설명] |
[메타문자] |
[설명] |
^ |
행의 첫 문자([]안에서는 not의 의미) |
$ |
행의 끝 |
. |
아무 문자나 한 문자 의미 |
\| |
or의 의미 |
[ ] |
[]사이의 문자 중 하나 |
\{min,max\} |
min 이상 max 이하 반복됨 |
* |
앞의 내용이 0번 이상 반복됨 |
\+ |
앞의 내용이 1번 이상 반복됨 |
\< |
단어의 시작 |
\> |
단어의 끝 |
\n |
새 행 문자 |
\t |
탭 문자 |
[ vim 확장 정규 표현 문자열 ]
[이스케이프] |
[설명] |
\i (소문자 아이) |
변수 지정에 사용되는 문자들 [_0-9A-Za-z] |
\I (대문자 아이) |
\i와 같지만 숫자는 제외 |
\k |
keyword로 사용하는 문자 [_\.\-0-9A-Za-z] |
\K |
\k와 같지만 숫자는 제외 |
\f |
파일 이름으로 사용하는 문자 |
\F |
\f와 같지만 숫자는 제외 |
\p |
프린트 가능한 문자 |
\P |
\p와 같지만 숫자는 제외 |
\s |
whitespace character(공백과 탭) |
\S |
non-whitespace character |
\d |
숫자 [0-9] |
\D |
숫자가 아닌 문자 [^0-9] |
\x |
16진수 숫자 [0-9A-Fa-f] |
\X |
16진수 숫자가 아닌 문자 [^0-9A-Fa-f] |
\o |
8진수 숫자 [0-7] |
\O |
8진수 숫자가 아닌 문자 [^0-7] |
\w |
영문 단어에서 사용되는 문자 [0-9A-Za-z-] |
\W |
영문 단어에서 사용되지 않는 문자 [^0-9A-Za-z-] |
\h |
영문 단어의 시작에 사용되는 문자 [A-Za-z-] |
\H |
영문 단어의 시작에 사용되지 않는 문자 [^A-Za-z-] |
\a |
모든 알파벳 [A-Za-z] |
\A |
알파벳이 아닌 문자 [^A-Za-z] |
\l (소문자 엘) |
소문자 [a-z] |
\L |
소문자가 아닌 문자 [^a-z] |
\u |
대문자 [A-Z] |
\U |
대문자가 아닌 문자 [^A-Z] |
\e |
<ESC> |
\t |
<TAB> |
\r |
캐리지 리턴 (CR) |
\b |
백스페이스(BS) |
\n |
새 행(LF) |
[ POSIX 문자 클래스 ]
[문자 클래스] |
[내용] |
[:alnum:] |
알파벳과 숫자 [A-Za-z0-9] |
[:alpha:] |
알파벳 [A-Za-z] |
[:cntrl:] |
제어 문자 |
[:blank:] |
탭과 공백 문자 |
[:digit:] |
숫자 [0-9] |
[:graph:] |
제어 문자와 공백 문자를 제외한 문자 |
[:lower:] |
소문자 [a-z] |
[:upper:] |
대문자 [A-Z] |
[:print:] |
제어 문자를 제외한 문자. 즉 프린터 할 수 있는 문자 |
[:punct:] |
[:graph:] 문자 중 [:alnum:]을 제외한 문자. (ex: !, @, #, $, %, ^....) |
[:space:] |
화이트 스페이스 (ex: 공백, 탭, 캐리지 리턴, 새 행, 수직 탭, 폼 필드) |
[:xdigit:] |
16진수 |
[ 파일 버퍼 관련 명령 요약 ]
[ex모드] |
[설명] |
:buffers |
버퍼의 내용을 나열 |
:files or :ls |
버퍼의 내용을 나열 |
:b[n] |
n번 버퍼로 이동 |
:bd[N] |
n 버퍼를 삭제(n이 없으면 현재의 버퍼를 완전 삭제) |
:bw[n] |
n 버퍼를 완전 삭제(n이 없으면 현재의 버퍼를 완전 삭제) |
:bp[n] |
이전 버퍼로 이동. n을 붙이면 n번만큼 이전 버퍼로 이동 |
:bn[n] |
이후 버퍼로 이동. n을 붙이면 n번만큼 이후 버퍼로 이동 |
:sb[n] |
창을 수평 분할하여 n번 버퍼를 로드 |
:bf |
첫 번째 버퍼로 이동 |
:bl |
마지막 버퍼로 이동 |
:al |
현재 열려 있는 모든 버퍼를 수평 분할 창에 로드 |
[ 마킹 및 마킹한 위치로 이동 ]
[명령모드] |
[설명] |
[명령모드] |
[설명] |
ma |
a로 마킹, mb는 b로 마킹... |
|
|
`a |
a로 마킹된 위치로 돌아감 |
'a |
a로 마킹된 행의 처음으로 돌아감 |
' ' |
직전에 커서가 위치하던 행의 처음 |
` ` |
진전의 커서 위치로 이동 |
' " |
이전에 vim으로 현재 파일을 닫았을 때 커서가 있던 행의 처음으로 이동 |
` " |
이전에 vim으로 현재 파일을 닫았을 때 커서가 있던 위치로 이동 |
[ 다중 창 관련 명령 ]
-[ 창 생성 ]- |
||
[명령모드] |
[ex모드] |
[결과] |
<Ctrl>+w s |
:sp[plit] |
현재 파일을 두 개의 수평 창으로 나눔 |
<Ctrl>+w v |
:[n]vs[plit] |
새로운 수직 창 생성, n이 붙으면 n칸 크기의 창 분할 |
<Ctrl>+w n |
:new |
새로운 수평 창 생성 |
<Ctrl>+w ^ |
|
수평 창으로 나누고 이전 파일의 오픈 |
<Ctrl>+w f |
|
창을 수평으로 나누고 커서 위치의 파일을 오픈 |
<Ctrl>+w i |
|
커서 위치의 단어가 정의된 파일을 오픈 |
-[ 창 삭제 ]- |
||
<Ctrl>+w q |
:q[uit]! |
현재 커서의 창을 종료 |
<Ctrl>+w c |
:clo[se] |
현재 커서의 창을 닫음 |
<Ctrl>+w o |
:on[ly] |
현재 커서의 창만 남기고 모든 창 삭제 |
-[ 창 이동 ]- |
||
<Ctrl>+wh |
|
왼쪽 창으로 커서 이동 |
<Ctrl>+wj |
|
아래쪽 창으로 커서 이동 |
<Ctrl>+wk |
|
위쪽 창으로 커서 이동 |
<Ctrl>+wl |
|
오른쪽 창으로 커서 이동 |
<Ctrl>+ww |
|
창을 순차적으로 이동 |
<Ctrl>+wp |
|
가장 최근에 이동한 방향으로 이동 |
<Ctrl>+wt |
|
최상위 창으로 이동 |
<Ctrl>+wb |
|
최하위 창으로 이동 |
-[ 창 위치 바꾸기 ]- |
||
<Ctrl>+wr |
|
순차적으로 창의 위치를 순환 |
<Ctrl>+wx |
|
이전 창과 위치를 바꿈 |
-[ 창 크기 조정 ]- |
||
<Ctrl>+w = |
|
창의 크기를 모두 균등하게 함 |
<Ctrl>+w _ |
|
수평 분할에서 창의 크기를 최대화 |
<Ctrl>+w | |
|
수직 분할에서 창의 크기를 최대화 |
<Ctrl>+w [n]+ |
:res[ize] +n |
창의 크기를 n행만큼 증가 (Ctrl+w +는 1행만큼 증가) |
<Ctrl>+w [n]- |
:res[ize] -n |
창의 크기를 n행만큼 감소 (Ctrl+w -는 1행만큼 증가) |
<Ctrl>+w [n]> |
|
창의 크기를 오른쪽으로 n칸만큼 증가(수직 창에 한함) |
<Ctrl>+w [n]< |
|
창의 크기를 왼쪽으로 n칸만큼 증가(수직 창에 한함) |
[ ctags 관련 명령 ]
[ex모드] |
[설명] |
:ta [tag] or <Ctrl>+] |
[tag]가 정의된 위치를 나열하고 선택한 위치로 점프. 현재 위치는 stack에 push된다. |
:ts [tag] or :서 [tag] |
|
:po or <Ctrl>+t |
stack top에 저장된 위치를 pop하고 그 위치로 점프 |
:sts [tag] |
[tag]가 정의된 위치를 나열하고 선택한 위치로 창을 수평 분할하여 새로 생성된 창에 표시 |
:stj [tag] |
|
:tn |
tj나 ts로 점프했을 때 다음 tag로 점프 |
:tp |
tj나 ts로 점프했을 때 이전 tag로 점프 |
:tr |
tj나 ts로 점프했을 때 처음 tag로 점프 |
:tl |
tj나 ts로 점프했을 때 마지막 tag로 점프 |
:pts [tag] |
[tag]가 정의된 위치를 나열하고 선택한 위치로 창을 수평 분할하여 새로 생성된 창에 표시하지만 커서는 현재 위치에 유지 |
:ptj [tag] |
미리보기 윈도우에 tag가 정의된 형식을 보임 |
:ptn |
ptj나 pts로 점프했을 때 다음 tag로 점프 |
:ptp |
ptj나 pts로 점프했을 때 이전 tag로 점프 |
:ptr |
ptj나 pts로 점프했을 때 처음 tag로 점프 |
:ptl |
ptj나 pts로 점프했을 때 마지막 tag로 점프 |
[ cscope 관련 명령 ]
:cs find {질의 종류} {심볼} |
|
0 or s |
이 C symbol 찾기 |
1 or g |
이 정의 찾기 |
2 or d |
이 함수에 의해 불려지는 함수들 찾기 |
3 or c |
이 함수를 부르는 함수들 찾기 |
4 or t |
Find assignments to |
6 or e |
이 egrep 패턴 찾기 |
7 or f |
이 파일 찾기 |
8 or i |
이 파일을 포함하는 파일들 찾기 |
'Essential Tools > VIM - Vi IMproved' 카테고리의 다른 글
Vim 편집기로 스크립트 작성하기 (0) | 2011.09.23 |
---|---|
[VIM Plugin] T-Commant (0) | 2011.09.22 |
[VIM Plugin] snipMate (0) | 2011.09.22 |
[VIMRC] Personal Vim Initializations (개인 환경 설정) (0) | 2009.12.20 |
[ GCC 전역 옵션]
옵션 |
설명 |
-E |
전처리 과정 화면에 출력 |
-S |
어셈블리 파일 생성 |
-c |
오브젝트 파일 생성 |
-v |
컴파일 과정 화면에 출력 |
--save-tmps |
컴파일 시 생성되는 중간 파일 저장 |
-da |
컴파일 과정에서 생성되는 중간 코드 생성(RTL 파일 등 생성) |
[ 전처리기(cpp0) 옵션]
옵션 |
설명 |
-l[패스] |
헤더 파일을 탐색할 디렉토리 지정 (ex_: -l/opt/include) |
-include[헤더 파일 패스] |
해당 헤더 파일을 모든 소스 내 추가 (ex_: -include /root/my.h) |
-D[매크로] |
외부에서 #define 지정 (ex_: -DDEBUF) |
-D[매크로]=[매크로 값] |
외부에서 해당 매크로를 정의하고 값을 지정 (ex_: -DDEBUG=1) |
-U[매크로] |
외부에서 #endef 지정 (ex_ -UDEBUG) |
-M 또는 -MM |
make 기술 파일을 위한 소스 파일의 종속 항목 출력 |
-nostdinc |
표준 C 헤더 파일을 include하지 않음 |
-C |
전처리 과정에서 주석을 제거하지 않음 |
-Wp,[옵션 리스트] |
옵션 리스트를 전처리기에 바로 전달 |
[ C컴파일러(cc1) 옵션]
- C 언어 옵션 - | |
옵션 |
설명 |
-ansi |
ANSI C 문법으로 문법 검사 |
-std=[c 표준] |
지정한 C 표준으로 문법 검사 (표준:c89, c99, gnu89, gnu99 등) |
-traditional |
K&R C문법으로 문법 검사 |
-fno-asm |
asm, inline, typeof 키워드를 사용하지 않음(gnu89 문법 기준) |
- 경고 옵션 - | |
-Wall -W |
모든 경고 메시지 출력 |
-w |
모든 경고 메시지 제거 |
-Werror |
모든 경고를 오류로 취급하여 컴파일 중단 |
-pedantic |
C89 표준에서 요구하는 모든 경고 메시지를 표시 |
-pedantic-errors |
C89 표준에서 요구하는 모든 오류 메시지를 표시 |
-Wtraditional |
ANSI C와 K&R C 간에 서로 다른 결과를 가져올 수 있는 부분이 있다면 경고 |
- 최적화 옵션 - | |
-O0 |
아무런 최적화를 수행치 않음 |
-O1 또는 -O |
최적화 레벨 1 수행 |
-O2 |
최적화 레벨 2 수행 |
-O3 |
최적화 레벨 3 수행 |
-O4 |
사이즈 최적화 수행 |
- 디버깅 옵션 - | |
-g |
바이너리 파일에 디버깅 정보 삽입 |
-pg |
프로파일을 위한 코드 삽입 |
[ 어셈블리(as) 옵션]
옵션 |
설명 |
-Wa,[옵션 리스트] |
어셈블러에게 옵션 리스트를 바로 전달 |
-Wa,-al |
어셈블된 코드와 인스트럭션을 보임 |
-Wa,-as |
정의된 심볼을 보임 |
[ 링크(ld) 옵션]
옵션 |
설명 |
-L[패스] |
라이브러리 탐색 디렉토리 지정 (ex_: -L/opt/lib) |
-l[라이브러리 이름] |
해당 라이브러리를 링크 (ex_: -lm) |
-shared |
공유 라이브러리를 우선하여 링크 |
-static |
정적 라이브러리를 우선하여 링크 |
-nostdlib |
표준 C 라이브러리를 사용하지 않음 |
-Wl,[옵션 리스트] |
옵션 리스트를 링크에 바로 전달 |
'Essential Tools' 카테고리의 다른 글
맨페이지 간단한 색상 추가해서 보기 (0) | 2011.10.25 |
---|---|
한장으로 보는 정규 표현식(Regular Expression) cheat sheet (0) | 2011.09.10 |
DJGPP 설정 (1) | 2011.05.08 |
[Port scanner] Nmap Security Scanner (0) | 2010.09.04 |
[토탈커맨더] Total Commander 단축키 (0) | 2010.05.09 |
[ Problem ] - http://www.pythonchallenge.com/pc/return/bull.html
♧ 소스를 보면 황소에 링크(sequence.txt)가 걸려 있다. Sequence.txt 파일을 보면 'a = [1, 11, 21, 1211, 111221,' 라는 내용이 보인다. ♧ 이것은 '보고 말하기 수열(look and say sequence)'로 우리에겐 '개미수열'로 프랑스 소설가 베르나르 베르베르의 소설 [개미]로 많이 알려졌다.
♧ 위의 그림과 같이 앞에서 부터 중복되는 숫자의 개수와 그의 수를 차례로 보고 말하는 수열이다. (※ 자세한 내용은 다음 [참조 1] [참조 2] 페이지를 참고하자.) ♧ 즉, 위의 1로 시작하는 '개미수열'의 30번째 단계의 길이(len(a[30]) = ?)를 (※ 해당 솔루션 문서 참조) import re curr = '1' for each in range(30): match = re.findall("(\d)(\\1*)", curr) curr = ''.join([str(len(k+y))+k for k,y in match]) print len(curr)
|
[ Solution ] - http://www.pythonchallenge.com/pcc/return/5808.html
(※ 문제에 대한 다양한 해결법은 링크 참조.)
'워게임(WarGame) > PythonChallenge' 카테고리의 다른 글
[Python challenge Level12] – evil (dealing evil) (0) | 2011.06.29 |
---|---|
[Python challenge Level11] - 5808 (odd-even) (0) | 2011.06.28 |
[Python challenge Level9] - good (ImageDraw) (0) | 2011.06.23 |
[Python challenge Level8] - integrity (bz2) (0) | 2011.06.23 |
[Python challenge Level7] - oxygen (PIL로 pixel값 처리) (0) | 2011.06.22 |
[ Problem ] - http://www.pythonchallenge.com/pc/return/good.html
♧ 그림을 보면 검은 점들이 많이 보인다. ♧ 소스를 보면 title은 connect the dots로 알 수 있듯이 점들을 연결시키는 문제이다.
♧ 주석에 first와 second은 좌표에 점들을 의미하는데 이것은 PIL의 ImageDraw Module중 draw.line(xy, options)를 이용하여 각 좌표의 점들을 연결 시킨다.
♧ 그럼 좌표를 연결시켜 그려 보자. 처리 순서는 다음과 같다. from PIL import Image, ImageDraw # encoding=utf8 # ① 소스에 있는 first와 second를 붙여 넣기 한다. first = [146,399,163, ...[생략]...] second = [156,141,165, ...[생략]...] # ② 이미지 생성. img = Image.new('RGB', (640,480)) draw = ImageDraw.Draw(img) # ③ 첫번째 점들을 연결시키면 황소에 몸통 부분이 녹색 으로 보인다. draw.line(first, 'green', 2) # ④ 두번째 점들을 연결시키면 황소에 얼굴 부분이 붉은색 으로 보인다. draw.line(second, 'red', 2) # ⑤ 그림을 보여준다. img.show() (※ 해당 좌표는 길어서 생략, 소스에 있는 좌표를 붙여 넣기 하자.)
♧ 출력 화면
(※ 해당 그림에 뿔이 존재 하기에 젖소(cow)가 아니라 황소 (bull)를 나타낸다.) |
[ Solution ] - http://www.pythonchallenge.com/pcc/return/bull.html
(※ 문제에 대한 다양한 해결법은 링크 참조.)
'워게임(WarGame) > PythonChallenge' 카테고리의 다른 글
[Python challenge Level11] - 5808 (odd-even) (0) | 2011.06.28 |
---|---|
[Python challenge Level10] - bull (개미수열) (0) | 2011.06.27 |
[Python challenge Level8] - integrity (bz2) (0) | 2011.06.23 |
[Python challenge Level7] - oxygen (PIL로 pixel값 처리) (0) | 2011.06.22 |
[Python challenge Level6] - channel (zipfile) (0) | 2011.06.22 |
[ Problem ] - http://www.pythonchallenge.com/pc/def/integrity.html
♧ 벌(bee) 그림이 보인다. 마치 bz2 모듈을 연상 시킨다 (bee? busy. busy? busy too ? bz2?)
♧ 벌(bee) 그림을 클릭 하면 해당 인증 창이 뜨는 것을 볼수 있다.
(위의 주석에 있는 un/pw를 bz2 모듈을 이용해 풀어서 입력)
♧ bz2 모듈을 이용해서 풀어보자 (http://docs.python.org/library/bz2.html 참조) import bz2 un = "BZh91AY&SYA\xaf\x82\r\x00\x00\x01\x01\x80\x02"\ "\xc0\x02\x00 \x00!\x9ah3M\x07<]\xc9\x14\xe1BA\x06\xbe\x084" pw = "BZh91AY&SY\x94$|\x0e\x00\x00\x00\x81\x00\x03$ "\ "\x00!\x9ah3M\x13<]\xc9\x14\xe1BBP\x91\xf08" print bz2.BZ2Decompressor().decompress(un) print bz2.BZ2Decompressor().decompress(pw) (출력해 보면 username과 password 를 볼수 있다.)
|
[ Solution ] - http://www.pythonchallenge.com/pcc/return/good.html:huge:file
(※ 문제에 대한 다양한 해결법은 링크 참조.)
'워게임(WarGame) > PythonChallenge' 카테고리의 다른 글
[Python challenge Level10] - bull (개미수열) (0) | 2011.06.27 |
---|---|
[Python challenge Level9] - good (ImageDraw) (0) | 2011.06.23 |
[Python challenge Level7] - oxygen (PIL로 pixel값 처리) (0) | 2011.06.22 |
[Python challenge Level6] - channel (zipfile) (0) | 2011.06.22 |
[Python challenge Level5] - peak (pickle) (1) | 2011.06.22 |
[ Problem ] - http://www.pythonchallenge.com/pc/def/oxygen.html
♧ 가운데 회색 바가 수상해 보인다. 해당 격자를 7픽셀 단위로 RGB값을 뽑아서 ASCII문자로 변환 해야 하는데 파이썬에는 내장된 이미지 라이브러리가 없음으로 Python Imaging Library (PIL)를 사전에 설치 하자.
♧ 처리 순서는 아래와 같다.
import Image, urllib, StringIO, re # coding=utf8 # ① 이미지 파일 오픈. u_img = urllib.urlopen("http://www.pythonchallenge.com/pc/def/oxygen.png").read() img = Image.open(StringIO.StringIO(u_img)) # ② 이미지 길이와 회색바 위치 구함. middle = (img.size[1]/2) width = img.size[0] # ③ 7픽셀 단위로 RGB값 구함 pixels = [img.getpixel((x, middle)) for x in range(0, width, 7)] # ④ pixels값의 R,G,B가 동일한 값만을 뽑아낸다. ords = [r for r,g,b,a in pixels if r == g == b] # ⑤ 뽑아낸 RGB값은 ASCII값으로 문자로 변환 출력. result = ''.join(map(chr, ords)) print result # ⑥ 출력된 결과의 또다른 ASCII값을 찾아 int형 변환->chr변환->출력. print ''.join(map(chr, map(int, re.findall("\d+", result)))) [ 출력 결과 ]
(※ 사용한 PIL의 모듈은 레퍼런스 문서를 참조) |
[ Solution ] - http://www.pythonchallenge.com/pcc/def/integrity.html
(※ 문제에 대한 다양한 해결법은 링크 참조.)
'워게임(WarGame) > PythonChallenge' 카테고리의 다른 글
[Python challenge Level9] - good (ImageDraw) (0) | 2011.06.23 |
---|---|
[Python challenge Level8] - integrity (bz2) (0) | 2011.06.23 |
[Python challenge Level6] - channel (zipfile) (0) | 2011.06.22 |
[Python challenge Level5] - peak (pickle) (1) | 2011.06.22 |
[Python challenge Level4] – linkedlist (urllib) (0) | 2011.06.21 |
[ problem ] - http://www.pythonchallenge.com/pc/def/channel.html
♧ 청바지에 zipper 사진만 덩그러니 있다. 일단 소스를 보자.
맨 위에 "zip" 주석이 보인다.
♧ ("http://www.pythonchallenge.com/pc/def/channel.zip") 다운을 받고 "README.txt"를
궁금함을 뒤로 하고 'nothing'을 을 쫒아 가다 보면 "Collect the comments." 라는 문구가 보인다.
♧ 힌트를 종합해 보면 zip 안에 주석문을 모아야 한다. (※ zipfile 모듈을 이용)
♧ 다시 zipfile 모듈을 이용하여 주석을 모으면 "HOCKEY"라는 단어가 보인다.
URL을 고쳐 다시 쿼리를 보내면 "it's in the air. look at the letters." 문구가 보인다. 주석을 모은 메시지 출력문을 자세히 보면 "OXYGEY"라는 단어가 보인다. |
[ Solution ] - http://www.pythonchallenge.com/pcc/def/oxygen.html
(※ 문제에 대한 다양한 해결법은 링크 참조.)
'워게임(WarGame) > PythonChallenge' 카테고리의 다른 글
[Python challenge Level8] - integrity (bz2) (0) | 2011.06.23 |
---|---|
[Python challenge Level7] - oxygen (PIL로 pixel값 처리) (0) | 2011.06.22 |
[Python challenge Level5] - peak (pickle) (1) | 2011.06.22 |
[Python challenge Level4] – linkedlist (urllib) (0) | 2011.06.21 |
[Python challenge Level3] – equality (Regular Expression) (0) | 2011.06.21 |