'2011/06/27'에 해당되는 글 3건
- 2011.06.27 [VIM] 단축키 정리
- 2011.06.27 [gcc] 옵션 정리
- 2011.06.27 [Python challenge Level10] - bull (개미수열)
[ 저장 및 종료 ]
[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 |