sayuan's blog

By sayuan, 12 years ago, In English

https://github.com/sayuan/CodeforcesRunner

This is a simple tool which can run sample tests easier.

Currenty, it support only 4 languages: c++, c, java, python. However, it coule be expand very easily and the source code is really short. I haven't added other languages just because I don't have the enviroment for verify.

This tool is only verified on Linux now, but I think it could be run on other platforms too, although it maybe need a little modify.

Again. Please feel free to fork and any suggesions are welcome. :)

08/13 update

Now this tool can download the sample tests automatically:

$ cf.py -c 198 -p A

You can also download the whole contest:

$ cf.py -c 198

Please see the project page for more detail. Thanks.

  • Vote: I like it
  • +14
  • Vote: I do not like it

»
12 years ago, # |
  Vote: I like it +3 Vote: I do not like it

Very nice! I, too, use something similar, though Make-based. It's also nice to see that compiler flags are the same as on CF. You could add -m32 to C and C++ to force 32-bit compilation on 64-bit platforms (the CF system is 32-bit).

One concern might be that input and output are too slow to type repeatedly. Even if you prepare an empty file with these markers, it takes time to position the cursor for insertion. There's also a possibility that a test case will contain input or output. I'm not sure what would be a better alternative for separation (I just use empty lines, which are easy to type).

  • »
    »
    12 years ago, # ^ |
      Vote: I like it +3 Vote: I do not like it

    Thank you for your recommandatiom. I will add the option -m32 later.

    The input and output texts are part of sample tests in the problem, you can copy & paste it directly from the problem page, see here: http://mirror.codeforces.com/problemset/problem/198/A

    Sometimes, I will add test cases which generate by myself. In this case, I always copy & paste the existing test and modify it.

    Test cases contain input or output is a big trouble to this program. Hope this will not happen forever! Maybe we need another tool to download and parse the problem page? :p

    • »
      »
      »
      12 years ago, # ^ |
        Vote: I like it 0 Vote: I do not like it

      Haha, indeed, you can copy the whole tests section at once, and input/output will be in place! It didn't occur to me because I use the Russian interface.

      • »
        »
        »
        »
        12 years ago, # ^ |
          Vote: I like it 0 Vote: I do not like it

        I will fixed it later. Thank you!

      • »
        »
        »
        »
        12 years ago, # ^ |
          Vote: I like it 0 Vote: I do not like it

        Already pushed. Please tell me if it doesn't work. Thanks.

    • »
      »
      »
      12 years ago, # ^ |
      Rev. 2   Vote: I like it 0 Vote: I do not like it

      In the HTML source of the problem description page sample inputs and outputs are inside divs of classes <div class="input"> and <div class="output">. So possibly you could just parse this page and get the correct samples without trouble even if they contain words input and output.

      • »
        »
        »
        »
        12 years ago, # ^ |
        Rev. 2   Vote: I like it +3 Vote: I do not like it

        I am not sure the anonymous has the permission to read the problem during the contest. However, I will check it during the next contest. If so, I will try to implement it. Thank you.

        update on Aug 7 Ok, now I am sure anonymous has the permssion to read the problem during the contest.

»
12 years ago, # |
Rev. 2   Vote: I like it +4 Vote: I do not like it

As It's tool for CodeForces where checkers are friendly, I think it should allow additional whitespaces (e.g to print array as

for(int i = 0; i<n;++i){
    cout<<a[i]<<' ';
}

). I've add pull request.

  • »
    »
    12 years ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    Already merged. Thank you for your contribution.

    I think it is always better to have the same behavior with Codeforces judge. However, after searhing all articles abort rules, I still can't find the detail of how the judge doing.

    By the way, I currently plan to add preferences file to this tool. All compile and run options will move to that file, which is generated by this tool if it doesn't exist. I think the strict option should move to preferences file too. How to you think?

    • »
      »
      »
      12 years ago, # ^ |
      Rev. 2   Vote: I like it +3 Vote: I do not like it

      About how it works: A programm called checker runs and gets correct answer, participiants output and input. It returns PE or WA or AC. There are some std checkers for sequence of integer, seq of tokens, yes/no, doubles. You may see std checkers in testlib code.

      I think, it should be possible to change this setting from problm to problem. Btw, It's OK to add default setting, but I don't think it's useful.

      • »
        »
        »
        »
        12 years ago, # ^ |
          Vote: I like it 0 Vote: I do not like it

        Thank you. I will take a look to testlib.

»
12 years ago, # |
  Vote: I like it +4 Vote: I do not like it

Maybe this tool should always print all testcases because some problems may support different outputs. In this case you may see WA on test 1 and be not able to see results of other tests

  • »
    »
    12 years ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    This tool is already print all testcases. However, when the answer incorrect, this message will print: "press enter to continue or to leave." and this process continue when you press enter.

»
12 years ago, # |
Rev. 2   Vote: I like it 0 Vote: I do not like it

Wouldn't it make more sense to put the output information for each test case after the "== Case #X:" heading? For example:

=== Case #1: AC (85 ms) ===

output: 2

=== Case #2: WA (83 ms) ===

output: 2

answer: 3

=== Case #3: RE (95 ms) ===

output: Exception in thread "main" java.lang.Exception at A.(A.java:12) at A.main(A.java:18)

answer: 0

Just a suggestion :)

  • »
    »
    12 years ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    Display the result at the top has a major disadvantage, you can't see the output immediately. This may increase the debug difficulty, since you only see the output after the process exit.

    However, add another marker before each case is ok. Any idea?

»
12 years ago, # |
  Vote: I like it 0 Vote: I do not like it

I think if you can create a plugin for the IDE (ex: codeblock, eclipse, ...), it will be more convenient, faster and easier to use ;-)

  • »
    »
    12 years ago, # ^ |
      Vote: I like it +6 Vote: I do not like it

    It is so hard to create plugins for each IDE. However, most of the modern editor has customized hotkeys, so you can just press a key to execute this script.

    For instance, I use VIM as my editor and added this line in my $VIMRC: nmap <F8> :!cf.py "%:t"<CR>.

»
12 years ago, # |
  Vote: I like it 0 Vote: I do not like it

Which version of python do you use? (2.7 or 3.3)

  • »
    »
    12 years ago, # ^ |
    Rev. 2   Vote: I like it 0 Vote: I do not like it

    Currently, I am using Python 2.7, and I hava no idea what going to happen if you run this tool under Python 3.x.

    I will try to use syntaxes and libraries which both valid in Python 2.6 ~ 3.x, but I can't guarantee it. If I have to decide to only support some versions of Python, Python 2.7 is preferred.

»
12 years ago, # |
  Vote: I like it 0 Vote: I do not like it

Your logo:







»
12 years ago, # |
  Vote: I like it 0 Vote: I do not like it

(For the new version): The link can be more simple (Such as 198A instead of http://mirror.codeforces.com/problemset/problem/198/A) :-)

  • »
    »
    12 years ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    Thank you. Actually, I forgot to update the usage of the newest version in this post. Now you can just specifiy the contest_id (and problem_id) to download the sample tests. Please see the post on the top.

»
12 years ago, # |
Rev. 3   Vote: I like it 0 Vote: I do not like it

I downloaded the newest version and try to check my solution. I got this error

http://ideone.com/bRPIB

Help me, please!

  • »
    »
    12 years ago, # ^ |
      Vote: I like it +6 Vote: I do not like it

    Since the gcc(& g++) has the option -m32, you need some 32-bits libraries.

    Using apt to install g++-multilib might solve your problem. (also install gcc-multilib for gcc).

    Another solution is remove the option -m32 if you don't need 32-bits compilation. Please modify compile_cmd in the [.cpp] section in the cf.conf file.

»
12 years ago, # |
  Vote: I like it +7 Vote: I do not like it

Nice plugin. Please update the link (distinct github username): https://github.com/sayuan/CodeforcesRunner

  • »
    »
    12 years ago, # ^ |
      Vote: I like it +1 Vote: I do not like it

    I forgot to update this link after I change the user name. Now it is fixed. Thank you for your remind.