알고리즘 문제를 풀고 풀이를 티스토리에 일정한 형식으로 올리고 있는데알고리즘 문제를 풀고 풀이를 티스토리에 일정한 형식으로 올리고 있는데 이게 상당히 귀찮은 일이다.
제목을 예로 들면 백준 문제인 경우 [BOJ/백준][Gold5] 13023 : ABCDE (C++)
코드포스 문제인 경우 [Codeforces][Round #702][Div.3] C : Sum of Cubes (C++)
위와 같은 형식으로 약간 다르게 포스팅 하고있고 문제번호, 문제이름, 등급 등이 매번 바뀌어야 하므로
오타가 발생하기 쉽다.
그래서 쉘 스크립트로 커밋 훅을 만들어서 커밋시 일반 커밋 명령어를 수행하지 않고 커밋 훅 스크립트를 수행하여
플랫폼, 문제번호, 문제이름, 난이도 등을 입력으로 주면 형식에 맞춰 저절로 커밋 메시지가 작성되고 커밋되는 기능을 만들어보았다.
[전체코드]
#!/bin/sh
BOJ='BOJ/백준'
CF='Codeforces'
echo -e "플랫폼 선택 (1)=boj, (2)=codeforces : \c"
read PLATFORM
if [ ${PLATFORM} -eq 1 ]; then
PLATFORM=${BOJ}
elif [ ${PLATFORM} -eq 2 ]; then
PLATFORM=${CF}
else
echo "1과 2중 선택해주세요"
exit 1
fi
if [ ${PLATFORM} == ${BOJ} ];then
echo -e "LEVEL : \c"
read LEVEL
echo -e "문제번호 : \c"
read NUM
echo -e "문제이름 : \c"
read NAME
echo -e "유형 : \c"
read TYPE
TITLE="[${PLATFORM}][${LEVEL}] ${NUM} : ${NAME} (C++)"
LINK="https://www.acmicpc.net/problem/${NUM}"
GITLINK="https://github.com/has2/Problem-Solving/blob/master/boj-solved.ac/${LEVEL}/${NUM}.cpp"
echo "PLATFORM:${PLATFORM}, LEVEL:${LEVEL}, NUM:${NUM}, NAME:${NAME}, TYPE:${TYPE}"
cp ../solving.cpp ../boj-solved.ac/${LEVEL}/${NUM}.cpp
else
echo -e "ROUND : \c"
read ROUND
echo -e "DIVISION : \c"
read DIV
LEVEL=Div.${DIV}
echo -e "문제 알파벳(A,B,C,D...) : \c"
read ALPHA
ALPHA=${ALPHA^}
echo -e "문제이름 : \c"
read NAME
echo -e "유형 : \c"
read TYPE
echo -e "링크 : \c"
read LINK
TITLE="[${PLATFORM}][Round #${ROUND}][Div.${DIV}] ${ALPHA} : ${NAME} (C++)"
DIRNAME=codeforces/Round${ROUND}-Div.${DIV}
GITLINK="https://github.com/has2/Problem-Solving/blob/master/${DIRNAME}/${ALPHA}.cpp"
echo "PLATFORM:${PLATFORM}, ROUND:${ROUND}, DIVISION:${DIV}, ALPHA:${ALPHA}, NAME:${NAME}, TYPE:${TYPE}"
if [ ! -d ../${DIRNAME} ]; then
echo "Directoy ../${DIRNAME} is not exist.. create DIR"
mkdir ../${DIRNAME}
fi
cp ../solving.cpp ../${DIRNAME}/${ALPHA}.cpp
fi
DATE=$(date +%Y%m%d)
echo ${TITLE}
echo ${LINK}
echo "\
[${DATE}] ${TYPE}
${TITLE}
${LINK}
[난이도] ${LEVEL}
[유형] ${TYPE}
[풀이]
${GITLINK} \
" > ../.gitmessage.txt
git add ../.
git commit
1. 플랫폼 선택창
[코드]
BOJ='BOJ/백준'
CF='Codeforces'
echo -e "플랫폼 선택 (1)=boj, (2)=codeforces : \c"
read PLATFORM
if [ ${PLATFORM} -eq 1 ]; then
PLATFORM=${BOJ}
elif [ ${PLATFORM} -eq 2 ]; then
PLATFORM=${CF}
else
echo "1과 2중 선택해주세요"
exit 1
fi
입력이 1이면 PLATFORM 변수에 BOJ, 2이면 CF 변수 할당. 이외의 입력인 경우 오류 메시지 출력 후 종료.
2. 레벨, 문제번호, 문제이름, 유형 입력
[코드]
if [ ${PLATFORM} == ${BOJ} ];then
echo -e "LEVEL : \c"
read LEVEL
echo -e "문제번호 : \c"
read NUM
echo -e "문제이름 : \c"
read NAME
echo -e "유형 : \c"
read TYPE
TITLE="[${PLATFORM}][${LEVEL}] ${NUM} : ${NAME} (C++)"
LINK="https://www.acmicpc.net/problem/${NUM}"
GITLINK="https://github.com/has2/Problem-Solving/blob/master/boj-solved.ac/${LEVEL}/${NUM}.cpp"
echo "PLATFORM:${PLATFORM}, LEVEL:${LEVEL}, NUM:${NUM}, NAME:${NAME}, TYPE:${TYPE}"
cp ../solving.cpp ../boj-solved.ac/${LEVEL}/${NUM}.cpp
else
입력을 이용해 제목,링크,Github 링크 등을 만들 수가 있다.
34번 라인은 풀이시 사용한 파일인 solving.cpp를 실제 문제가 위치해야할 경로에 복사해 주는 과정이다.
아래 else문 뒤에는 코드포스인 케이스의 입력,생성 구문들이 위치하고 있다.
이렇게 플랫폼별로 구분해서 구현해주어야 한다.
3. 날짜
DATE=$(date +%Y%m%d)
날짜는 위와 같이 생성할 수 있다.
4. 변수들을 이용해 포스팅 템플릿 만들기
echo "\
[${DATE}] ${TYPE}
${TITLE}
${LINK}
[난이도] ${LEVEL}
[유형] ${TYPE}
[풀이]
${GITLINK} \
" > ../.gitmessage.txt
git add ../.
git commit
역슬래시 사이의 형식으로 템플릿을 만들고 gitmessage.txt에 푸시하면
git commit시에 만들어진 템플릿이 아래와 같이 생성되며,
[풀이] 란에 풀이과정을 쓰면 된다.
티스토리에 포스팅시에 commit 메시지를 복사하여 제목 / 내용 으로 구분하여 붙여넣기만 하면
간편하게 포스팅을 완료할 수 있다.