Please, try EDU on Codeforces! New educational section with videos, subtitles, texts, and problems. ×

ekzhang's blog

By ekzhang, history, 5 weeks ago, In English,

Hello all,

Like you, I enjoy solving Codeforces problems on the go. However, sometimes I am not working on my computer with all my environment and setup. There are many automated problem parsers and test runners to help make solving Codeforces problems painless, but they all require a complicated installation process.

About a year ago, I was introduced to CS Academy, which I thought had an amazing interface for solving problems. It shows the problems and your code side-by-side, and you can automatically run your program on the example test cases. Also, there is auto-saving in case you accidentally close your window. Why can't we have this for Codeforces?

I couldn't find anything on the web that was easy to set up and fun to use, so I made my own online workspace at wkspace.herokuapp.com.

Screenshot of wkspace

Here are some features:

  • No sign-up or installation required
  • Parses Codeforces problems and displays them side-by-side with code
  • One click to run your code on all example test cases (for non-interactive problems)
  • One click to submit your code to Codeforces (if logged in)
  • Auto-saving of code in the cloud
  • List workspaces you have recently edited
  • Share a read-only paste of your code by link
  • Support for new versions of the most common languages (C, C++, Python, Java, Ruby)
  • Configurable themes (Monokai, Dawn, Solarized)
  • Configurable keybindings (Vim, Emacs)

I have been using and developing this myself for the past year, and it is fairly stable now, so I would like to share it with you. Please let me know if you have any feedback on how to improve it!

Note: The code is open source and available at https://github.com/ekzhang/wkspace.

Thanks to Herman Došilović for making the Judge0 API, which is used in this project.

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

»
5 weeks ago, # |
Rev. 2   Vote: I like it +15 Vote: I do not like it

Very cool feature! But there seems to be a problem with the tasks that have drawings in them. For example on task 1344E, the train paths do not appear on your workplace.

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

    Thank you! You are right, the scraper for problem statement text is not perfect. Codeforces markup is complicated, so it is not very easy to parse. It is definitely on my wishlist to have a perfect parser. However, I think the current parser is a good balance between getting the details of the problem statement and being robust to changes in the Codeforces website.

»
5 weeks ago, # |
  Vote: I like it +20 Vote: I do not like it

It's really amazing.
I am just curious to know, which platform are you using for code execution in backend, is it paid or free? If i use it during a contest and many people are using it, will it be able to bear the load and won't take longer times to execute the code(like queues on CF)?

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

    Thank you! I am using the public Judge0 API as mentioned above, which has had 99.8% uptime in the last 30 days. From my experience, I do not believe you should see any issues with availability during Codeforces contests.

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

      Thank you for your response. I would like to mention that the load option isn't working for me(btw load means to upload a local file or something else there?).
      UPD : fixed, now it's working.

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

        Nice catch, that's exactly right. Should be fixed now if you refresh to clear your cache. :)

»
5 weeks ago, # |
Rev. 2   Vote: I like it +3 Vote: I do not like it

Your vim keybindings are not complete; the command :%s/foo//gn does not work as intended. Maybe that's too upstream...

By the way, most of the functionalities could probably be replicated by a project template at repl.it. Your project looks nicer, though.

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

    You're right about the vim keybindings. I am also skeptical that no other editor can simulate "real" vim perfectly. Even a big project like Ace, which I am using, doesn't get everything right. :)

    However, I respectfully disagree with your second point about repl.it. The goal of this project was to make a domain-specific environment to solve competitive programming problems on any machine with the minimum amount of friction. Repl.it is a great tool for running and sharing code (I use it myself), but it is definitively not a competitive programming tool. It does not parse problem statements or allow you to run your code on tests with standard time/memory constraints. It's also not fine-tuned for competitive programmers — for example, the only C++ compiler offered is Clang, instead of GCC, so you can't use builtin functions.

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

      Yes, you are probably right; I gave it 20 seconds of thinking, and you worked this for a year... But, there are always "HN Dropbox" comments, and someone else would've said something similar if I didn't.

      By the way, you are the SetWithFriends author? You should have set up a buymeacoffee earlier this year, I would have bought for sure...

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

        Thank you, I'm happily surprised that you've heard of Set with Friends. It's a small world :)

»
5 weeks ago, # |
Rev. 2   Vote: I like it +16 Vote: I do not like it

Nice thingy, but how can we be sure that our codes wont be shared during an ongoing contest?, i think you can use some sort of hashing for this(just an opinion, i'm neither experienced nor a programmer)

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

    Short answer: Your code isn't accessible to anyone unless they have the link. So as long as you do not share the link, it will be fine.

    In more detail: The IDs of each workspace in the URL are generated using Crypto.randomBytes(), which produces cryptographically strong pseudo-random data. Each ID is 6 bytes written as a string of length 8 in base-64 format, so it would take 2^48 guesses for an attacker to find your code.

    For comparison, YouTube video IDs (including unlisted videos) are 8-byte integers, which would take 2^64 guesses. This is appropriate because YouTube is several orders of magnitude larger than this application. :)

»
5 weeks ago, # |
Rev. 2   Vote: I like it +10 Vote: I do not like it

I think it would be perfect to make this an app. Yes I know there are other editors like CP Editor, but I really loved your interface! Simple and Sweet!

Edit: I didn't know it was the same interface as CS academy, I hadn't tried CS academy.

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

it would be better if you parse problem from url also

»
5 weeks ago, # |
  Vote: I like it +18 Vote: I do not like it

Hi I really appreciate this web app because I only have a Chromebook and repl.it is super annoying to submit problems. There seems to be a problem where every time you refresh the page all the settings revert to default. Also, How long will your code be saved if you suppose accidentally close it or something happens such that the web app would close?

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

    Your code is stored securely in a cloud database. At the moment, it will remain available indefinitely. Storage happens to be pretty cheap :)

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

    I use Chromebook and I have Atom installed on it and it works fine locally.

»
5 weeks ago, # |
  Vote: I like it +18 Vote: I do not like it

For some reason the special tasks don't have the fancy text on my screen (like when they define the bounds and stuff), so i got stuck on problem 1A because i kept on thinking the bounds were 109 instead of 10^9 LOL

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

    Sorry about that! Some older tasks (e.g., two-digit round numbers) aren't parsed very well. I think that Codeforces has changed their LaTeX markup system in the past, and this leads to some inconsistencies.

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

      Oh, okay, that's pretty cool to know. I'm really enjoying it btw it's super compact :D