알고리즘 문제를 풀고 풀이를 티스토리에 일정한 형식으로 올리고 있는데알고리즘 문제를 풀고 풀이를 티스토리에 일정한 형식으로 올리고 있는데 이게 상당히 귀찮은 일이다. 

제목을 예로 들면 백준 문제인 경우 [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 메시지를 복사하여 제목 / 내용 으로 구분하여 붙여넣기만 하면

간편하게 포스팅을 완료할 수 있다.

+ Recent posts