-
Notifications
You must be signed in to change notification settings - Fork 1
dusek/gcj
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
If you want to reproduce my solution from Google Code Jam, follow these instructions (example follows; if you instead want to use this library to code your own solutions, head to the QUICK START section): 0. Definitions: <gcj-dir>: the root directory of the archive (the directory usually named "gcj"). <input-file-name>: name of file which contains the small or large (or whatever) input to solve <output-file-name>: name of file to which write solution I also expect these instructions will be followed on a UNIX system. I do not have the time to test on Windows, even though I tend to write multiplatform code. 1. Determine whether I used C++ or Python * look at problems/<year>/<round>/<problem>.<"py" or "cpp">. I use latin letters for the <problem> part. 2a. If I used Python (tested with 2.6.1): 2a1. Run <gcj-dir>/bin/solve.sh <year>.<round> <problem> <input-file-name> > <output-file-name> where the ">" sign between input and output file is shell's output redirection 2b. If I used C++ (tested on g++ 4.2.1): 2b1. compile the source code: g++ -I<gcj-dir>/include -o <problem> <gcj-dir>/<year>/<round>/<problem>.cpp 2b2. run the binary: ./<problem> <input-file-name> <output-file-name> EXAMPLE: ======== You want to evaluate problem "C. Welcome to Code Jame" from Round 1A in year 2009. So <year>=2009, <problem>=C Python: ------- cd <gcj-dir> ls problems/2009 # you find out that "Round 1A" is represented by directory "round1A" ls problems/2009/round1A # you find that only file there starting with "C" is "C.py" bin/solve.sh 2009.round1A C C-large.in.txt > C-large.out.txt C++: ---- cd <gcj-dir> ls problems/2009 # you find out that "Round 1A" is represented by directory "round1A" ls problems/2009/round1A # you find that only file there starting with "C" is "C.cpp" g++ -I./include -O2 -o C problems/2009/round1A/C.cpp ./C C-large.in.txt C-large.out.txt QUICK START: The demo files and demo input is in directory problems/demo. a. If you are using Python ========================== 1. write your solution in the appropriate subdirectory of "problems" directory - in that solution .py file, import gcj and inherit Solver from gcj.Solver; override _solve_one(self) method which parses one case and returns string with solution 2. run bin/solve.sh <path/to/solution/file> <solution file name without .py> <input file> NOTE: don't worry about the "Solving case <case_number>" messages, they are sent to stderr, if you redirect output to a file (that you will be submitting), the messages will still be shown to you and not written to the file EXAMPLE: a solver which outputs true/false based on whether input is even problems/2009/round0/C.py: import gcj class Solver(gcj.Solver): def _solve_one(self): i = self._getintline() return str(i % 2 == 0).lower() from anywhere run with: /path/to/bin/solve.sh 2009.round0 C C-large.in.txt > C-large.out.txt b. If you are using C++ ======================= 1. write your solution anywhere into a .cpp file. - implement Solver and Case interfaces, typically by implementing StandardSolver from <gcj/Solvers.hpp> and SingleLineCase from <gcj/Cases.hpp> - in your main, create your Solver class and return gcj::main(argc, argv, <the_solver_you_created> 2. compile - if you want parallel execution and have Intel's TBB installed g++ -Wall -O2 -DGCJ_PARALLELIZE -I<path/to/gcj/root>/include -o C C.cpp -ltbb - otherwise omit the "-DGCJ_PARALLELIZE" and "-ltbb": g++ -Wall -O2 -I<path/to/gcj/root>/include -o C C.cpp 3. run - ./C <input file> <output file> - or to send output to stdout, omit <output file>: ./C <input file> EXAMPLE: a solver which outputs true/false based on whether input is even 1. problems/demo/C.cpp: #include <ios> #include <gcj/Solvers.hpp> #include <gcj/Cases.hpp> #include <gcj/main.hpp> class Case : public gcj::SingleLineCase { int m_number; bool m_result; public: explicit Case(int number) : m_number(number) {} virtual void solve() { m_result = ((m_number % 2) == 0); } virtual void output_only_solution_line(std::ostream& output) { output << std::boolalpha << m_result; } }; class Solver : public gcj::StandardSolver { public: virtual bool parallelize() const { return true; } // or return false if you are not thread-safe virtual gcj::Case *parse_one_case(std::istream& input) { int number; input >> number; return new Case(number); } }; int main(int argc, char **argv) { Solver solver; return gcj::main(argc, argv, solver); } 2. then compile: g++ -Wall -O2 -DGCJ_PARALLELIZE -I$HOME/Documents/gcj/include -o C C.cpp -ltbb 3. then run: ./C C-large-in.txt C-large-out.txt
About
Python and C++ Framework for writing solutions to Google Code Jam problems
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published