OSX에 VSCode를 사용하여 Atcoder 환경 구축

바쁜 사람들을위한 요약


  • VSCode의 키보드 단축키로 문제의 DL, 빌드, 검증을 합니다 (제출은 수동으로 하고 싶은 유파이므로 이번은 하지 않습니다)

  • htps : // 기주 b. 코 m / kmyk / 온 네네 쥬 d 게와 ls 사용
  • ".cpp 컴파일 ~ 위의 도구를 사용하여 문제의 DL ~ 실행"을 Shell로 자동화
  • VSCode의 태스크에 작성한 Shell를 지정
  • 키보드 단축키 설정


  • 폴더 구성



    아래 최종 폴더 구성입니다. 참고로
    pwd
    /Users/xxx/Atcoder
    
    tree -L 1                                                                                                          
    .
    ├── AlgorithmTemplate  アルゴリズムのテンプレートをここに配置
    ├── Atcoder.code-workspace VSCodeの設定ファイル
    ├── Contest        コンテストフォルダをこの中に作成する
    ├── README.md
    ├── TeplateFolder     
    ├── cpp_dl_test.sh       task.jsonsに登録するshell
    ├── cpp_onecase_only.sh  task.jsonsに登録するshell
    └── cpp_testonly.sh      task.jsonsに登録するshell
    
    

    소개



    다양한 도구 설치



    VSCode 설치



    htps : // 여기.ゔぃすあ lsつぢお。 코m/
    위 페이지에서 "Download for Mac"로 설치. 세세한 설정은 더 이상 기억하지 않지만 특별히 의식하지 않은 기억입니다.

    GCC 설치



    OSX에 디폴트로 들어 있는 C++ 컴파일러는 Clang계(/usr/bin/g++)입니다만, 이것이 의외로 사용하기 어렵기 때문에 GCC로 합니다.
    설치는 아래의 기사를 참고로 했습니다.
    htps : // 코 m / 엔 gTks / ms / 펑 2 7b4d264 7 052c6

    거친 작업은 다음
    - Homebrew로 GCC 설치
    - 심볼릭 링크 교체
    - #include 사용 가능

    online-judge-tools 설치



    Atcoder의 콘테스트 사이트로부터 샘플 문제를 취득해, 각각을 테스트한다고 하는 꿈 같은 툴이 이하 리포지토리로 공개되고 있었던 것에 고맙게 사용하게 하기로 했습니다.
    설치 방법은 「How to install」에 기재가 있으므로 할애

    kmyk/online-judge-tools:
    htps : // 기주 b. 코 m / kmyk / 온 네네 쥬 d 게와 ls

    무려 일본어 참조도 있습니다. 환경을 만드는 데 도움이되었습니다.
    Introduction to online-judge-tools (Korean) — online-judge-tools documentation
    htps : // 온네네주 d게와 ls. Red d. cs. 이오/엔/마s테 r/인 t로즈 c치온. 그럼. HTML

    환경 구축



    위의 환경을 구축한 시점에서 다음 작업은 명령 한 번으로 가능합니다.
  • 만든 .cpp 파일 컴파일 g++ -g -o $実行ファイル名 $コンパイル対象.cpp
  • Atcoder에서 콘테스트 샘플 문제 DL oj dl $コンテストの問題ページURL(ex: https://atcoder.jp/contests/abcxxx/tasks/abcxxx_y)
  • 실행 파일을 지정하여 DL 된 샘플 문제를 확인합니다.

    그러나 솔직히 코딩하는 동안 불필요한 Shell 명령을 치는 것은 귀찮다고 생각했기 때문에 VSCode의 키보드 단축키에 등록하기로 결정했습니다.

    컴파일 - 테스트까지 수행하는 Shell 만들기



    다음과 같은 Shell 스크립트를 만들었습니다. 이것이라고 매번 oj t -c $実行ファイルのパス 커멘드를 부르므로, 별도 컴파일과 검증만을 실시하는 shell도 작성해 둡니다.

    cpp_dl_test.sh
    
    #!/bin/sh
    file=$1
    # 引数を受け取りファイル名を抽出
    fname=$(basename $file)
    objfile=`echo $fname | sed 's/\.[^\.]*$//'`
    # ディレクトリに移動
    cd $(dirname $file)
    
    echo "テストケースURLを記載"
    read str 
    
    g++ -g -o $objfile $file
    
    rm -r ./test
    oj dl $str
    
    oj t --jobs 3 -c "./"$objfile 
    

    게다가, oj dl 커멘드로 대응하고 있지 않는, 실행 파일에 대해서 1 케이스만 테스트하는 shell을 작성합니다.

    cpp_onecase_only.sh
    
    #!/bin/sh
    file=$1
    # 引数を受け取りファイル名を抽出
    fname=$(basename $file)
    objfile=`echo $fname | sed 's/\.[^\.]*$//'`
    # ディレクトリに移動
    cd $(dirname $file)
    
    g++ -g -o x $file
    
    echo "in:"
    cat ./test/sample-1.in
    echo ""
    echo "out:"
    cat ./test/sample-1.in | ./x
    

    VSCode 태스크에 작성한 Shell 지정



    다음은 아래와 같이 tasks.json에 작성한 shell을 기재하는 것으로, VSCode의 태스크로부터 shell 스크립트를 호출할 수 있게 됩니다.

    tasks.json
    
    {
        "version": "2.0.0",
        "tasks": [
            {
                "showOutput": "always",
                "label": "atcr test",
                "type": "shell",
                "args": ["${file}"],
                "command": "/Users/xxx/Atcoder/cpp_testonly.sh",
                "problemMatcher":[]
            },
            {
                "showOutput": "always",
                "label": "atcr dl test",
                "type": "shell",
                "args": ["${file}"],
                "command": "/Users/xxx/Atcoder/cpp_dl_test.sh",
                "problemMatcher":[]
            },
            {
                "showOutput": "always",
                "label": "atcr only one",
                "type": "shell",
                "args": ["${file}"],
                "command": "/Users/xxx/Atcoder/cpp_onecase_only.sh",
                "problemMatcher":[]
            }
        ]
    }
    

    VSCode 바로 가기에 작업 등록



    VSCode의 아래의 화면에서 키보드 단축키를 설정할 수 있으므로, 여기서 태스크의 실행을 단축키에 등록해 두면 편하다.



    마지막으로



    이것으로 코딩에 집중할 수 있게 되므로, 콘테스트뿐만 아니라 정진도 추구합니다.
  • 좋은 웹페이지 즐겨찾기