Luma's blog

By Luma, history, 13 months ago, In English,

Hello Codeforces!

I made the user script to append the form to submit on Codeforces problem pages.

Sorry, this supports only modern browsers like Chrome and Firefox.

greasyfork link : https://greasyfork.org/en/scripts/371117-cf-fast-submit

Install

Install UserScript runner like Tampermonk and Greasymonkey to your browser.

(Sorry, I couldn't make it work well with Greasymonkey.)

Then, open install link and click install.

Usage

You can use it as you can see it on the submit page's form.

Specification

  • Support contest, gym and problemset problem pages.
  • Problem selection will be auto-selected and disabled. Problem ID is calculated from URL.
  • This tool gets form from the submit page using Ajax.
  • This tool never connect the other site.
  • If we open the submit page right away after the contest starts, we can't select the problem ID (because there's no option somehow).
    But don't worry. This script automatically retry if there's no option.
  • If 30 minutes left and you submit, this script automatically re-generate the form because sometimes the token expires.
    This script will drop neither your code nor file selection.

Comment

I implemented it as not disturbing users.

If you found some technical issues, rights issues or something anxious, please let me know that.

I welcome any feedback! (You know vs.? Please share in comments!)

Disclaimer of warranty

Use of this tool is at your sole risk. In no event will I be reliable to any party for any damages of any type.

Screenshots

Links


Great. So cool.

This tool is here thanks to Codeforces.

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

»
13 months ago, # |
Rev. 3   Vote: I like it +8 Vote: I do not like it

thx for great work

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

I am getting this error:

Ignoring @match pattern http*://codeforces.com/contest/*/problem/* because: Error: @match: Invalid protocol (http*:) specified.

Is it only for http?

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

    Thanks. I fixed! Please update and check it out.

    EDIT: hmmm.... I checked using Chrome with tampermonkey, but nothing wrong with old version. Please let me know your environment. And is it fixed?

    • »
      »
      »
      13 months ago, # ^ |
        Vote: I like it +8 Vote: I do not like it

      Now I could download the script but it does not work. I'm using Firefox Quantum.

      • »
        »
        »
        »
        13 months ago, # ^ |
          Vote: I like it 0 Vote: I do not like it

        Sorry, I couldn't make a support.
        I confirmed that it works well with Tampermonkey and Firefox.

        sorry for inconvenience.

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

    Sorry for my slow debugging.

    I tried it on Firefox with Greasymonkey and confirmed that it doesn't work.

    I'm checking the way to fix it...

»
13 months ago, # |
  Vote: I like it +8 Vote: I do not like it

Now I could download the script but it does not work either. I'm using Chrome73

  • »
    »
    13 months ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    Thanks for feedback! I use the same version with Windows.
    It's strange...
    What problem page did you open?
    How doesn't it work? (Could you see the form or not?)

    Could you tell me what dev tool says? (CTRL + SHIFT + I, open Console tab)

    Thank you.

»
13 months ago, # |
  Vote: I like it 0 Vote: I do not like it

Auto comment: topic has been updated by Luma (previous revision, new revision, compare).

»
13 months ago, # |
  Vote: I like it +13 Vote: I do not like it

Nippon language wakaranai

»
13 months ago, # |
  Vote: I like it 0 Vote: I do not like it

Auto comment: topic has been updated by Luma (previous revision, new revision, compare).

»
13 months ago, # |
Rev. 3   Vote: I like it +8 Vote: I do not like it

Yesterday(4.13),When I took part in edu Contest,it couldn't work that jumped into submit page.But it can work out of Contest.

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

    Thanks for a comment.

    Hmmm, the old version (v1.1) was working well... Sorry, but I didn't test new version on the running contest. I'll try to test it on some contest.

    EDIT: I tested on virtual contest, but it works well.

    Sorry, but I couldn't test until the real contest is running.

    • »
      »
      »
      13 months ago, # ^ |
      Rev. 3   Vote: I like it 0 Vote: I do not like it

      Maybe Its my computer's matter.

      • »
        »
        »
        »
        13 months ago, # ^ |
          Vote: I like it 0 Vote: I do not like it

        Some participants report similar issues.

        And now, I recall that I must write additional code to support ECR. (Seeing git log, wow, there's answer.)

        I'm fixing...

      • »
        »
        »
        »
        13 months ago, # ^ |
          Vote: I like it 0 Vote: I do not like it

        Fixing has been done.

        If you use v1.1, please update.

    • »
      »
      »
      13 months ago, # ^ |
        Vote: I like it 0 Vote: I do not like it

      When I made (thanx to CountZero) tool like this the problem during real contest was longer load of codeforces pages — I had to increase some delays between transitions between pages, inserting of code and submit and so on. But even with these delays submit is much faster then manually

»
13 months ago, # |
  Vote: I like it +5 Vote: I do not like it

Really Impressive

»
13 months ago, # |
  Vote: I like it +8 Vote: I do not like it

It's a good one!!

»
13 months ago, # |
  Vote: I like it +12 Vote: I do not like it

Sorry, there was the bug that in ECR this script doesn't generate complete form.

Now, I fixed for the ECR.

AND IF THERE'S UNEXPECTED THROWN ERROR, THIS TOOL WILL REMOVE THE INCOMPLETE FORM FOR RELIABILITY.

Thank you for your feedback! Enjoy coding!

»
13 months ago, # |
  Vote: I like it +8 Vote: I do not like it

Not working when questions are of like C1, C2!
here

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

    Oh... This is too bad. Thanks.

    I must do fix soon.

    • »
      »
      »
      13 months ago, # ^ |
        Vote: I like it +8 Vote: I do not like it

      Thanks for making such an awesome tool ♥
      Must have cf tool after cf-predictor

»
13 months ago, # |
Rev. 2   Vote: I like it +6 Vote: I do not like it

Version 2.4 Update Notice

Very sorry for the unexpected behavior in the problem like "C1", "C2".

I apologize that this tool may have annoyed some participants.

That was fixed.

You may have seen the many generated forms.

Deleting the form on error was not complete.

This is also fixed.

Maybe, some saw the form generates many forms right away after the contest.

Above behavior caused this. And this was also fixed.

Thank you for using this tool and commenting.

EDIT : Sorry, I screwed up. I updated on the contest running. I'll keep in mind not to annoy participants.

»
7 months ago, # |
  Vote: I like it +3 Vote: I do not like it

Found a bug! I had submitted a code in java 11. But when I am going to a problem fast submit is not working. But after switching back to java 1.8 from submit page, fast submit works. I guess java 11 is new and some mapping are missing or something. There are errors in console from fast submit also!

  • »
    »
    7 months ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    To update it by hand: add an entry to extensionMap (java 11 is number 60)

    To make the code work regardless of extensionMap: Getting the mapping programmatically from the submit form is possible, but requires parsing JavaScript. Without it, it's still possible to use regex: (assumes the array is represented in the source code in a JSON-compatible format)

    const raw = await $.ajax(submitURL /* ... see original code */)
    const x=raw.substr(raw.match('(?<=extensionMap =)').index);
    let extensionMap
    try{
        extensionMap = JSON.parse(x)
    }catch(e){ 
        extensionMap = JSON.parse(x.substr(0,e.toString().match(/position (\d+)/)[1]))
    }
    
»
2 months ago, # |
  Vote: I like it +2 Vote: I do not like it

Hi Luma! This tool has stopped working for me recently! Is there any fix/solution? Thanks!

  • »
    »
    6 weeks ago, # ^ |
    Rev. 2   Vote: I like it +13 Vote: I do not like it

    You can edit the script yourself, in extensionMap, add 61: 'program.cpp' (61 is the id of C++64, which was recently added)

    By the way, huge thanks to the author, it's a very convenient tool!

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

      Thank you so much, hugopm! It works for me now!

      Agreed, great tool by Luma, many thanks, I have been using it for a very long time!

»
6 weeks ago, # |
  Vote: I like it 0 Vote: I do not like it

When I try to install using the link, a file named cf-append-form.user.js opens on firefox and on chrome the same file is downloaded. What is the fix for this ?

  • »
    »
    6 weeks ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    Have you installed tampermonkey ? Did you tried another scripts and how did you got?

    BTW, according above comments, this tool is not working now.

    Thank you for all your patience. I will try to fix the problem and improve this.

    Give me a little more moment to fix this tool.

    • »
      »
      »
      6 weeks ago, # ^ |
        Vote: I like it 0 Vote: I do not like it

      Hi. After installing tampermonkey, I could install it. It works :), atleast in practice mode, can't say about contest. Great tool. Thanks :) .

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

Now I released new version 2.6

I just updated for new added languages. (I haven't tried these languages yet... )

Sorry for being too late to update. It's ok if you are using the other owner's ( or your own ) version.

I'm planning to change to store the language information in local ( called localStorage ) and automatically merge them.

And more, I changed the parameters used judging when to retry to generate the form. It may have been a little heavy... ( 300ms interval try and up to 400 times ) Now I updated it to 1000ms interval and up to 10 times.

If you don't like that, please edit the parameters ( you can find them soon ) by yourself ( at your own risk, of course )

Thanks. Enjoy competing ! I'm going to participate next Kotlin contest (maybe).