第25回 全国高等専門学校プログラミングコンテスト(一関大会)の競技部門で実際に使用されたソースコード.
6位
9位
マルチプラットフォームアプリケーションなので,いずれのOSでも実行可能です.
実行は以下の環境をサポートしています.
多くの外部ライブラリを利用していますが,以下のライブラリをコンパイラがinclude/link可能になっていれば問題ありません.
なお,環境構築について詳しくは,環境構築を一から行う方法について言及してあります.
Hash:2051bc380ae3fcf7fc3b9ace8700b25a79981a52
./clammbon/
と./bin/release/procon
)の動作には影響無し WindowsのVCなら,何も考えずにF5で実行できます.
引数の設定はVCのデバッガ引数あたりを使っても問題ないです.引数については,Linuxと共通です.
パスの設定は必要ですが,実は環境変数を,目を瞑って環境変数について(Windowsのみ)のように設定すると……
Linuxなら,
$ make -j9
$ ./bin/release/procon -s 127.0.0.1 -p 01
によって,127.0.0.1の80番に開いているサーバに,/problem/prob01.ppm
の請求をできます.
引数-a
をつけると,一番最初に原画像を推測できたアルゴリズムが自動的にOneShotします.
その他の詳しい引数については,引数無しでprocon
を実行すると表示されますので,ご確認ください.
パス | 説明 |
---|---|
./README.md | 本READMEファイル |
./makefile | 統合makefile |
./makefile.in | 各makefileの共通設定 |
./mongoose.patch | mongoose-cppに対する追加パッチ |
./procon2014.sln | Visual Studio 2013 ソリューションファイル |
./bin/ | 実行ファイル出力先 |
./bin/release/ | リリースビルド出力先 |
./bin/debug/ | デバッグビルド出力先 |
./clammbon/ | 共通基盤,solverの実装本体をまとめたライブラリ |
./eval_position/ | 問題画像から原画像を推測するアルゴリズムの検証コード |
./eval_movement/ | 並び替え(パズドラ)アルゴリズムの検証コード |
./eval_server/ | 公式サーバじゃない自作問題サーバ |
./lib/ | clammbonライブラリのビルド先(.aや.lib) |
./prob_maker/ | 問題作成プログラム |
./resolver/ | 所謂solverで,clammbonの各処理を分散させたりする本体 |
./test/ | テスタ.通信テストぐらいか |
/clammbon,/eval_*,/resolverディレクトリの中には./src,./includeディレクトリがあり, それぞれ.cppファイル,.h{,pp}ファイルが入る.
Windowsで環境変数を利用したincludeパス/libraryパスの設定に対応しました. Visual Studioの「VC++ ディレクトリ」は事情があるとき以外は弄らないこと.
環境変数の設定の一例として次のように設定すれば動くはず.
LIBRARIES_DLL : C:\opencv\build\x64\vc12\bin
LIBRARIES_INCLUDE : C:\boost\include\boost-1_56;C:\cpp-netlib;C:\fltk-1.3.2;C:\opencv\build\include;C:\openssl-1.0.1h\include
LIBRARIES_LIB : C:\boost\lib;C:\fltk-1.3.2\lib;C:\openssl-1.0.1h\lib\VC\static
LIBRARIES_LIB_X64_DEBUG : C:\cpp-netlib\libs\network\src\Debug;C:\opencv\build\x64\vc12\lib
LIBRARIES_LIB_X64_RELEASE : C:\cpp-netlib\libs\network\src\Release;C:\opencv\build\x64\vc12\lib
LIBRARIES_LIB_X86_DEBUG : C:\cpp-netlib\libs\network\src\Debug;C:\opencv\build\x86\vc12\lib
LIBRARIES_LIB_X86_RELEASE : C:\cpp-netlib\libs\network\src\Release;C:\opencv\build\x86\vc12\lib
PATH
: 末尾に;%LIBRARIES_DLL%
を追加
Windowsならば,C:\直下の位置に配置して以下に示すようにビルドすれば, Visual Studioの「VC++ディレクトリパス」を変更しなくても使えるはず.
Linuxなら,ビルドしてGCCにパスを通すか,パッケージマネージャで入れればそのまま使える.
例えば,Archだとpacman -S boost boost-libs
とでも叩いておけば,勝手にパス通る.
後に環境変数で,環境の違いでも吸収できるようにする予定.
Windowsならば https://sites.google.com/site/boostjp/howtobuild が参考になるかと思う.
とりあえず,以下にWindowsでのビルド方法やらを書いておく.
公式HPからダウンロードして解凍.
サイト探すの面倒なら, http://sourceforge.net/projects/boost/files/boost/ から最新バージョン選んで,
好きな圧縮形式を選べばいいと思う.
Visual Studio系統の準備が済んでいることを前提に説明をする.
> cd C:\boost\boost_1_*_*
> .\bootstrap.bat
> .\b2 install --prefix=C:\boost address-model=64
これで,C:\boost\libにライブラリファイル,C:\boost\include\boost_1_*_*にインクルードファイルができる. これをVisual Studioの「VC++ディレクトリパス」に追加すればOK.
Linuxならパッケージマネージャに大体用意されてるので,それを使ったほうが説明が楽だし割愛. svnとか使いたいなら,Windowsと大差無い方法でビルドできる..batが.shになるぐらい.
fltk-1.3.2-source.tar.gz
をDLしてきてREADMEを読めばなんとかなるけれど,一応書いておく.
Visual Studioでのコンパイル方法を説明する.Visual Studioは2010用ソリューションを変換して利用する.
/FS
を追加し,OKを押して閉じる.ここまで終われば,C:\fltk-1.3.2がインクルードディレクトリ,C:\fltk-1.3.2\libがライブラリディレクトリとなる.
pacman -S fltk
でも大丈夫だと思う.makeでビルドする場合の手法は次の通り.
$ autoconf
$ make
$ sudo make install
これで,/usr/localなbinとlibとincludeに導入される.
これはWindowsでもLinuxでもビルドする必要がある.どちらもCMake必須.Boost.Buildを用いる方法は今回は使わない.
ちょっとわかりにくいけれど,今回はバージョンとしてリリースされているものを用いる. 公式サイト( http://cpp-netlib.org/ )より,「0.11.0(zip)」をダウンロード.tar.gzは多分壊れてる.
解凍したら,WindowsならC:\cpp-netlib,Linuxなら好きな位置に置く.(Linuxは/usr/localにinstallすることになる)
Visual Studioでのコンパイル方法を説明する.
CMakeのソフトウェア自体は http://www.cmake.org/ から落としてインストールしておく.
ステップ4でエラーになる場合は,環境変数BOOST_ROOTにC:\boost\boost_1_55_0を指定したり,環境変数OPENSSL_ROOT_DIRにC:\openssl-1.0.1hを指定したりすると良い.
cpp-netlibのディレクトリ内へ移動して,
$ cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++
$ make
$ make install
か
$ cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++
$ make
$ make install
の好きな方を実行.
詳しくは,./eval_server/README.md
を参照.
なお,本Repositoryのルートにあるパッチを当ててください.