We are happy to announce that PEG accounts and problems have been migrated to DMOJ, and can now be accessed.
Some usernames on PEG could not be assigned on DMOJ, as they were already in use. A _wcipeg suffix was added to the PEG username in these cases. You can check this list to see if this applies to you.
PEG accounts may be merged into existing DMOJ accounts (in the case you had an account on both DMOJ and PEG, and would like to merge them into one). To initiate this process, visit your profile page while logged in to your PEG account, and follow the instructions.
All PEG submissions were regraded on DMOJ judge hardware to keep rankings consistent. You may view a spreadsheet of aggregate rejudging results here. Submissions to a number of problems (mainly IOI) have not yet been assigned to migrated accounts, but will become available in the coming days.
Feel free to let us know of any questions you may have in the comments, in Discord, or by email.
From August 7th to August 10th, we'll be hosting Wesley's Anger Contest 5! The difficulty of the problems will be similar to a typical Wesley's Anger Contest. In addition, Zeyu, Pookmeister, and aeternalis1 decided to make all the problems squirrel themed!
Anyone with a DMOJ account is welcome to participate, and anyone without one is welcome to register and participate.
Contestants may participate in any 3-hour window between August 7th, 09:00 EDT to August 10th, 23:59 EDT. Please see the contest page for more details.
DMOJ drew inspiration heavily from PEG in the beginning, and it's fair to say that DMOJ would not have begun had it not been for PEG — we're excited to carry on their legacy moving forward.
The migration FAQ can be read here. If you have any questions not covered there, feel free to let us know via the comments.
The ~700 unique PEG problems are being uploaded on an ongoing basis, and can be accessed by joining the temporary WCIPEG Migration organization. Any submissions made (and points earned!) during this time will carry forward to when the problems are merged into the main problemset, so we encourage everyone to try the problems out and let us know of issues that may come up. Once in the organization, the problems may be accessed here.
Problem statements for 459 of 729 problems unique to PEG have been ported.
400K of 600K PEG submissions have been regraded. Further regrading may be necessary while we adjust time limits to be consistent with DMOJ judges.
Once we've finished processing submissions, PEG user accounts will become available to log in to. At that time, problems will be moved to the main problemset on a rolling basis.
Dr. Daniel Zingaro "yeerk16" of the University of Toronto has recently been working on a book introducing contest programming concepts in a practical way. It's nearing completion, so we thought we'd let you know! I'll let Dr. Zingaro handle the introduction:
Programming is about using a computer to solve problems, and algorithms and data structures are the building blocks of computer programs. For each problem that a programmer wants to solve, they employ an algorithm: a sequence of steps for solving the problem. Many books teach algorithms independently of specific problems, but this book uses careful explanations, examples, and arguments, rather than formal mathematics and proofs which make it difficult for you to connect what you are learning to what you can do with that learning. Algorithmic Thinking: A Problem-Based Introduction teaches you to use the best algorithms and data structures for a given situation by walking you through solving problems pulled from international programming competitions, such as how to determine whether snowflakes are unique; how to win a game in the minimum number of moves; how to find the number of ways to get to someone's house; how to escape a cave in as few steps as possible; and so on.
You'll tackle challenging topics like recursion, dynamic programming, graphs, greedy algorithms, heaps, hash tables, segment trees, and other data structures for efficiently handling data. The book contains no pseudocode: all code is written in C and is thoroughly explained in the text (C is a de facto programming language for programming competitions). By the end of the book, you should understand the importance of carefully working through a problem, and why it pays to organize data using data structures.
Algorithmic Thinking: A Problem-Based Introduction will be out in print in October, but it's available as an Early Access ebook now. Chapters will become available as soon as they're copyedited; the first four chapters are available now (including a free first chapter), and the rest will follow in a few weeks.
The book uses problems from various online judges (including DMOJ!) as exercises, which sounds like a fun, hands-on way to pick up new tricks.
We're also excited to give away some copies in future DMOJ competitions, so watch out for that :)
From Monday, May 4th to Wednesday, May 6th, we'll be hosting the April* DMOJ Monthly Open Programming Contest!
Anyone with a DMOJ account is welcome to participate, and anyone without one is welcome to register and participate.
Contestants may participate in any 4-hour window between 09:00 EDT of May 4th and 23:59:00 EDT of May 6th. Please see the contest page for more details.
See you soon!
*We cannot guarantee the existence of April in this contest. We apologize in advance for any month related bamboozling.
From April 26th to April 28th, we'll be hosting Wesley's Anger Contest 4! With the CCO quickly approaching, this contest will be a great way to practice your problem solving skills. The difficulty of the problems will be similar to a typical Wesley's Anger Contest. In addition, Zeyu, Pookmeister, and aeternalis1 decided to make all the problems squirrel themed!
Anyone with a DMOJ account is welcome to participate, and anyone without one is welcome to register and participate.
Contestants may participate in any 4-hour window between April 26th, 09:00 EDT to April 28th, 23:59 EDT. Please see the contest page for more details.
From Friday, April 17th to Sunday, April 19th, we will be hosting the first ever Art Academy contest!
Anyone of any skill level is encouraged to compete; all that is required is a DMOJ account.
Contestants may participate in any 3-hour window between 0:00 EDT of April 17th and 23:59:00 EDT of April. 19th. Feel free to view the contest page for more details.
It's been a while since we've posted an update on what we've been working on,
so we felt it was about time for one.
New Baremetal Judges
The biggest news we have to share is already over a month old by now: DMOJ judges
now run on a dedicated, bare-metal machine!
Until now we've sourced our judges from cloud providers, but that has always
been a bit of hardware roulette: sometimes a judge VM would be provisioned on
Intel hardware, while other times our provider would give us shiny new AMD EPYC
cores. Typically, these machines were also overcommitted by our hosts, so
timing consistency between submissions was at the mercy of potentially noisy
neighbours.
No longer! We've gone and purchased real hardware to run judges on: a 6-core (12-thread) AMD
Ryzen 5 3600X @ 3.8 GHz, with 16 GB 3200 MHz CL16 dual-channel RAM. Frequency
scaling has been disabled for timing consistency. Each judge runs in a QEMU
instance allocated 2 GB RAM and 1 physical core (2 threads).
These judges are much (2-5×) faster than the old ones (and empirically,
much more consistent). As a result, problem time limits have been rescaled
based off a randomized sample of submissions — some problems may
currently have time limits that are either too low, or too high. If you think
you've run into such a problem, please let us know in
Discord.
New Runtime Versions
We maintain Docker images based off stable Debian (Buster) with runtimes as
part of the DMOJ/runtimes-docker
project; these are the runtimes used by judges on the DMOJ. Since the GCC in
Buster (version 8) was incorrectly identifying the Zen 2 judges as Bulldozer,
we've upgraded our images to Debian Sid in order to get GCC 9. Apart for better
support for our judges, you can read what's new here.
As a side-effect of upgrading to Sid, we now have much newer
versions of most runtimes.
Notably, Python 3 has been upgraded from 3.7 to 3.8, and Clang from 7 to 9. OCaml
was also upgraded from 4.05 to 4.10; we took this opportunity to rewrite the OCaml
backend to link Jane Street Core/Base/Stdio and Zarith libraries, for a nicer
functional programming experience :)
We hope you enjoyed the contest, and we look forward to seeing you in DMOPC '19 April! (Typically, DMOJ doesn't host an April DMOPC as DMPG is hosted at that time instead. However, given the circumstances at the moment, it's not possible for DMPG to run, so we are planning on hosting another DMOPC.)
From Friday, March 27th to Sunday, March 29th, we'll be hosting the March DMOJ Monthly Open Programming Contest!
This round will be rated
on join
, a change from previous contests.
Anyone with a DMOJ account is welcome to participate, and anyone without one is welcome to register and participate.
Contestants may participate in any 3-hour window between 09:00 EDT of Mar. 27th and 23:59:00 EDT of Mar. 29th. Please see the contest page for more details.
Update: The server has been taken down. If you wish to run your own instance, the plugin is available here.
DMOJ has always been at the forefront of Online Judge technology. Its early introduction of good design ushered in a whole new generation of well designed Modern Online Judges.
Today, DMOJ: Modern Online Judge is hoping to continue that innovation with our newest product that will revolutionize the Online Judge industry forevermore.
DMOJ-over-Minecraft is an innovative new system that opens participation on the platform to a whole new subset of users: Minecraft players.
A New System
Our new system allows you to join contests and submit to problems inside Minecraft. To do this, we created a Minecraft server and a custom plugin to facilitate joining and submitting.
Using the book and quill item in Minecraft, you can write sophisticated code with a simple and easy to use interface.
Steps
Our new system is easy to use. Simply join our server at mc.dmoj.ca (v1.15.2 client required) and follow the following steps:
Obtain your API token from your profile.
Use the /auth [token] command to authenticate your connection. You should see a message welcoming you if the authentication is successful.
Use the /book command to obtain a book to write your code in.
Use the /submit [problem code] [language] command to submit your code with a language of your choice.
Major Advantages
DMOJ-over-Minecraft is a huge improvement to our current system.
The HTTP protocol, of which DMOJ currently runs on was designed more than 30 years ago. In contrast, the Minecraft protocol was designed only a decade ago. Its design means that less data is required to be transferred compared to our current HTTP system.1
In addition to protocol modernization, due to the lack of a copy system in the Minecraft book interface, the issue of code copying has been solved. Copying books using the crafting method is also disabled.
This new system will also allow help expand the Online Judge market to demographics never before seen on any Online Judge.
With this new system, DMOJ is ushering in a whole new generation of Online Judges, driving more innovation in the space.
Try It!
If you want to try the new and innovative system out for yourself, join with a v1.15.2 client at
mc.dmoj.ca
Source Code
The source code has been released on GitHub with a MIT license.