### Nickolas's blog

By Nickolas, 3 years ago,

## 1505A - Is it rated - 2

This problem described the task in quite a lot of detail. The main challenge was that it was interactive, so some effort was required to figure out the right sequence of reading from standard input, writing the answer and checking for end of file. Here is the code in Python:

while True:
try:
q = input()
except EOFError:
break
print("no", flush=True)


## 1505B - DMCA

As the problem statement strongly hinted, in this problem you had to calculate the digital root of the given number.

The digital root of a given number is the (single digit) value obtained by an iterative process of summing digits, on each iteration using the result from the previous iteration to compute a digit sum. The process continues until a single-digit number is reached.

## 1505C - Fibonacci Words

YES or NO answer implies that you need to figure out whether the given word is a Fibonacci word. Similarly to the Fibonacci-style integer sequences, a Fibonacci word is a word for which each letter equals the sum of two previous ones. Unlike the integer sequences, for this definition to make sense we have to convert each letter to a number between 0 and 25, and perform addition modulo 26.

## 1505D - Xenolith? Hippodrome?

Again, YES or NO answer implies that you need to figure out whether the given pair of numbers describes something called something like "hippodrome"... Or was it "xenolith" after all? Neither of these options makes a lot of sense, but you know how it is when you're trying to remember a fancy-sounding word and come up with all kinds of similar-looking ones? The word you're looking for here is "xenodrome" — a number which, when written in a certain base, has no duplicate digits. This explains a lot: the given numbers $N$ and $M$ are the candidate number and the base, respectively; the task is to write $N$ in base $M$ and check whether all digits are unique.

## 1505E - Cakewalk

As the flavor text hinted and examples 3 and 4 confirmed, the mouse doesn't use an optimal strategy, but rather follows a greedy algorithm: it always goes for the nearest berry square, where the distance between squares is defined by Manhattan distance (i.e., the number of steps to the right or down that the mouse needs to take to get between them). In case of a tie, it goes for the square in the top row.

## 1505F - Math

The images given encode a formula $2-x^2$ using Braille for math; the top image (the shorter one) gives Nemeth representation, and the bottom one — Universal English Braille.

## 1505G - Encoded message

The biggest hint for this problem is that it follows 1505F - Math. Once you spent some time staring at Braille symbols, recognizing the pattern of 5 numbers becomes easier: the first three numbers and the last two are the numbers of dots in the rows and columns of the Braille symbol for the encoded letter, respectively. Typing in those numbers in the solution required a fair amount of focus, but I did it at 2 am and got them right on the first try, so I figured out it's realistic :-)

## 1505H - L BREAK into program

The given program is a ZX Spectrum emulator memory snapshot.

Here are the possible steps to solve the problem:

1. Load the file into a ZX Spectrum emulator (there are many versions, even online ones).

2. Press BREAK (usually Shift+Space in the emulator).

3. Press LIST (k) to see the BASIC source code.

4. Notice that the actual program ("Admin zone") starts on line 1000.

5. Execute "RUN 1000" and get "Integer out of range" error.

6. Find a bug in the line 1150 and fix it by changing "-" to "+", then re-run.

Line 1140 has a hidden comment about the bug. To see the comment, the background needs to be changed to a color different from white, by executing "PAPER 4", for example. It's also possible to see the comment by looking at the snapshot file in a text editor.

Instead of fixing the BASIC program, it's also should be not too hard to understand the logic and re-implement it in a more conventional programming language.

## 1505I - Mysterious language again, seriously?

Unlike the past years, this time any code you submit in Secret 2021'' language will run successfully — or at least produce no recognizable error. The key hint at the solution can be found in the title: turns out Seriously is a programming language!

The next part of the challenge is figuring out how to print a message in this language — since most characters are valid commands, there's a lot of documentation to go through! There are multiple ways to print the right message (a lot of them undocumented). The reference solution used commands '1'-'9' to put corresponding numbers on the stack, '+' and '*' to perform addition and multiplication on the stack elements to get the necessary ASCII codes on the stack, 'c' to convert the integer ASCII code into the corresponding character, and '◙' to print the character on top of the stack.

• +140

By Nickolas, 3 years ago,

The contest is over; I hope you enjoyed it! The editorial is available here.

The 9th April Fools Day Contest will take place on Thursday April 1st. This is a joke competition in which solving the problem is often easier than figuring out what the actual task is.

In this round you'll be given several weird problems and 2 hours to solve them. The contest will use ACM ICPC rules (no hacks, the standings are decided by the number of solved problems and penalty time earned on them), and it will be unrated. You can submit solutions in any language allowed by Codeforces, unless the problem says otherwise. To get an idea of what the contest will look like, you can check out the contests of the past years: 2012, 2013, 2014, 2016, 2017, 2018, 2019, 2020.

Good luck, and have fun!

• +781

By Nickolas, 3 years ago,

I sometimes get messages from Codeforces members asking about the next installment of the Q# Coding Contest series. I don't have any news to share on that topic, but here is a quantum computing Hackathon that might be of interest for people who enjoyed Q# Coding Contests.

Quantum Coalition Hack is a quantum computing Hackathon hosted jointly by Yale Undergraduate Quantum Computing and Stanford Quantum Computing Association. Only undergraduate and graduate students worldwide are eligible to participate in the Hackathon part of the event, but everyone is welcome to attend the pre-Hackathon bootcamp on April 5-9 featuring tutorials and networking sessions. During the Hackathon itself, held on April 10-11, sponsor companies will offer programming challenges that can be solved using their technologies.

You can read more about the challenge Microsoft Quantum team will offer, and more about the Hackathon and the pre-Hack bootcamp on the QCHack website.

• +35

By Nickolas, 4 years ago,

The contest is over; I hope you enjoyed it and learned something new in the process!

Here are the solution descriptions. You should also be able to see the solutions of the contest participants, and the discussions in the comments offer a lot of insight.

## A: "Distinguishing Unitaries" problems

### 1357A1 - Figure out direction of CNOT

Let's consider the effect of these gates on the 2-qubit basis states, similar to how we did in 1356A5 - Distinguish Z from -Z. We'll see that applying $\text{CNOT}_{12}$ and $\text{CNOT}_{21}$ to any of the basis states other than $|00\rangle$ yields different results.

• +55

By Nickolas, 4 years ago,

Microsoft's Quantum team and Codeforces are excited to invite you to Microsoft Q# Coding Contest — Summer 2020! The contest will run from June 19 to June 22.

As a reminder, last weekend we held a warmup round with easier tasks on the topics that have not been covered in the previous contests. You can find the problems from the warmup round for practice here, and the described solutions here. There is also a list of great learning and practice resources here.

Several useful reminders:

• The contest is unrated :-)
• Solutions are accepted only in Q#.
• The tasks are grouped by topic, and the tasks within one topic are ordered in approximate order of increasing difficulty. If you find a problem too hard, check the next problems in this topic and problems from different topics, they might turn out to be easier for you.
• Custom Invocation allows you to run Q# code on Codeforces servers; make sure your code has namespace Solution and an operation with a signature operation RunQsharp () : Bool defined in it.
• And the really important stuff: the top 50 ranked participants will receive a Microsoft Quantum T-shirt, and 25 random participants who solved at least one problem but didn't finish in the top 50 will also receive a Microsoft Quantum T-shirt! Here is a preview (we haven't printed the T-shirts yet, so the final look in print might differ slightly):
• +331

By Nickolas, 4 years ago,

The warmup round is over; I hope you enjoyed it and learned something new in the process!

Here are the explanations for the contest problems and pointers some extra resources that can help you learn more about the respective topics before the main contest. You should also be able to see the solutions of the contest participants and to solve the problems in practice mode.

## A: "Distinguishing Unitaries" problems

Here is the editorial for the problems: https://assets.codeforces.com/rounds/1356/A1-A5.pdf.

These problems are published in the Quantum Katas, so that you can see the testing harness used for the problems and use it for testing your solutions in the main contest.

## B: Reversible computing

Reversible computing is a branch of quantum computing that deals with expressing classical computations in a reversible manner (i.e., so that the computation has a unique input state for each output state, and inputs and outputs allow a 1:1 mapping). This enables us to perform classical computations (such as arithmetic) on quantum data.

• +68

By Nickolas, 4 years ago,

Microsoft's Quantum team is excited to announce the Q# Coding Contest – Summer 2020, the third in the series of Q# contests! In this contest you can put your quantum programming skills to the test, solving quantum computing tasks in Q#. The winners (as well as some lucky participants) will receive a Microsoft Quantum T-shirt!

Quantum computing is a radically different computing paradigm compared to classical computing. Indeed, it is so different that some tasks that are believed to be classically intractable (such as factoring integers or simulating physical systems) can be performed efficiently on a quantum computer. In December 2017 Microsoft introduced the Quantum Development Kit which includes the Q# programming language.

In summer of 2018 we hosted the first quantum programming contest, which included problems on introductory topics in quantum computing: superposition, measurement, quantum oracles and simple algorithms. In winter of 2019 we hosted the second quantum programming contest, which offered harder problems on those topics plus some tasks on implementing unitary transformations. This contest will introduce new types of tasks, as well as some twists on the previous ones.

The contest will run from June 19 to June 22. As usual, we will hold a warmup round the weekend before the contest, from June 12 to June 15, to give you an opportunity to get familiar with the contest environment and submission system before the main contest. Participation in the warmup round is optional.

Good luck! We hope you enjoy the contest!

The rules of the contest are:

• +512

By Nickolas, 4 years ago, translation,

This was the most well-attended April Fools Day Contest in the whole history of them: 10343 participants solved at least one problem! It was also fairly well-balanced: while each problem has been solved by at least 200 participants, only 17 of them solved all 8 problems.

## 1331A - Is it rated?

This was the consolation problem of the contest, and still a lot of participants asked me for hints on this problem — some even before the beginning of the round! If you're still not sure how to solve it, the contest announcement itself promised that the contest is not rated, so the answer is a resolute NO'' (case insensitive, quotes for clarity only) :-)

## 1331B - Limericks

Unusually for this type of contests, the second problem had an actual problem statement! The real task was hidden in it using Steganography 101 — the first letters of the lines spelled out "TWO FACTORS".

• +170

By Nickolas, 4 years ago, translation,

The contest is over; I hope you enjoyed it! The editorial is available here.

The 8th April Fools Day Contest will take place on Wednesday April 1st. This is a joke competition in which solving the problem is often easier than figuring out what the actual task is.

In this round you'll be given several weird problems and 2 hours to solve them. The contest will use ACM ICPC rules (no hacks, the standings are decided by the number of solved problems and penalty time earned on them), and it will be unrated. You can submit solutions in any language allowed by Codeforces, unless the problem says otherwise. To get an idea of what the contest will look like, you can check out the contests of the past years: 2012, 2013, 2014, 2016, 2017, 2018, 2019.

As usual, to enjoy competing in this round you'll need a sense of humor compatible with mine. Good luck, and have fun!

• +1014

By Nickolas, 5 years ago, translation,

This turned out to be the hardest April Fools Day Contest to date — the winner solved only 5 problems out of 7!

## 1145A - Thanos Sort

The easiest problem of the contest, with a statement and without any caveats — I just likes the idea of sorting the array by destroying elements you dislike :-)

• +38

By Nickolas, 5 years ago, translation,

The contest is over; I hope at least some of you enjoyed it :-) The editorial is published here.

The 7th April Fools Day Contest will take place on Monday April 1st. This is a joke competition in which solving the problem is often easier than figuring out what the actual task is.

In this round you'll be given several weird problems and 2 hours to solve them. The contest will use ACM ICPC rules (no hacks, the standings are decided by the number of solved problems and penalty time earned on them), and it will be unrated. You can submit solutions in any language allowed by Codeforces. To get an idea of what the contest will look like, you can check out the contests of the past years: 2012, 2013, 2014, 2016, 2017, 2018.

As usual, to enjoy competing in this round you'll need a sense of humor compatible with mine. Good luck, and have fun!

• +446

By Nickolas, 5 years ago,

Here is the editorial for the round. The comments for this post also have lots of great explanations of alternative solutions, make sure to check them out!

I hope you've enjoyed the contest!

• +77

By Nickolas, 5 years ago,

Microsoft's Quantum Team and Codeforces are excited to invite you to Microsoft Q# Coding Contest — Winter 2019!

The contest will run from March 1 to March 4 and will offer increasingly challenging tasks on superposition, measurement, quantum oracles and unitary transformations.

As a reminder, last weekend we held a warmup round with easier tasks on quantum oracles and unitary transformations; the tasks are available for practice here, and the solutions are explained here. You can brush up on the topics of superposition and measurement in the first Q# contest and its warmup round.

Several useful reminders:

• The contest is unrated :-)
• Solutions are accepted only in Q#.
• Participants are ranked according to the number of correctly solved tasks, with the last correct submission time as a tiebreaker.
• The tasks are grouped by topic, and the tasks within one topic are ordered in approximate order of increasing difficulty. If you find a problem too hard, don't forget to check the next problems in this topic and problems from different topics, they might turn out to be easier.
• Submission verdicts work as follows:
Wrong Answer means that the solution fails any problem-specific checks (such as leaving the qubits in a state other than expected, using measurements in a task which prohibits them or returning incorrect classical value in measurement tasks) or prints anything to the standard output (using Message or DumpMachine functions);
Runtime Error means that the solution throws a more general exception (for example, caused by releasing allocated qubits in non-zero state or trying to access array elements outside of array bounds);
Memory Limit Exceeded means that the solution together with the checker allocated more qubits than it is allowed (the limit is ~15 qubits for problems related to quantum oracles with memory limit 1024MB, and ~25 qubits for other types of problems);
Time Limit Exceeded works the same way as in classical competitions (your program is too slow), but I have to mention it for the sake of completeness :-)
• Custom Invocation allows you to run Q# code on Codeforces servers; make sure your code has namespace Solution and an operation with a signature operation RunQsharp () : Bool defined in it.
• And finally, the really important stuff: the top 50 ranked participants will receive a Microsoft Quantum T-shirt! Here is a preview:
• +144

By Nickolas, 5 years ago,

Microsoft’s Quantum team is excited to announce the Q# Coding Contest – Winter 2019! In this contest you can put your quantum programming skills to the test, solving quantum computing tasks in Q#. Winners will receive a Microsoft Quantum T-shirt!

Quantum computing is a radically different computing paradigm compared to classical computing. Indeed, it is so different that some tasks that are believed to be classically intractable (such as factoring integers or simulating physical systems) can be performed efficiently on a quantum computer. In 2017 Microsoft introduced the Quantum Development Kit which includes the Q# programming language. Q# can be used with Visual Studio, Visual Studio Code or the command line, on Windows, macOS, and Linux.

In summer of 2018 we hosted the first quantum programming contest, which included problems on introductory topics in quantum computing: superposition, measurement, quantum oracles and simple algorithms. This contest will offer harder problems on some of these topics as well as introduce some new topics.

The contest will run from March 1 to March 4.

• +220

By Nickolas, 5 years ago,

Marathon Match 106 StainedGlass started on January 4th and will run for 10 days, including two weekends. You can find it in the list of active contests. I am the writer :-)

• +18

By Nickolas, 6 years ago,

Marathon Match 103 ProductInventory started on October 19th and will run for 9 days, including two weekends. You can find it in the list of active contests.

• +11

By Nickolas, 6 years ago,

Marathon Match 102 TrucksAndCouriers started on September 13th and will run for a week. You can find it in the list of active contests.

• +15

By Nickolas, 6 years ago, translation,

The last round of TCO18, Marathon Round 4 CakeSharing started on August 1st and will run for a week. You can find it in the list of active contests.

I am the writer :-)

Upd. Due to the technical issues the round is extended by 24 hours, till August 9th.

• +22

By Nickolas, 6 years ago, translation,

TCO18 Argentina Lightning Marathon Round KnightsAndPawns started on July 27th and will run for three days. You can find it in the list of active contests. I am the writer :-)

This round is part of regional event at Buenos Aires, Argentina, so it has not only TCO points for Marathon track but also prizes for top 3 online participants and top 3 participants who will be present at the regional event.

• +59

By Nickolas, 6 years ago,

Microsoft's Quantum Team and Codeforces are excited to invite you to Microsoft Q# Coding Contest — Summer 2018!

The contest will run from July 6 — 9 and will consist of increasingly challenging tasks on introductory topics in quantum computing: superposition, measurement, oracles and simple algorithms. The top 50 ranked participants will receive a Microsoft Quantum T-shirt!

As a reminder, last weekend we help a warmup round with easier tasks which covered the same topics. The results were quite impressive: 167 participants solved all tasks! You can see the tasks here, and the solutions with explanations here.

Several useful reminders:

• The contest is unrated.
• Solutions are accepted in Q# only.
• Participants are ranked according to the number of correctly solved tasks, with penalty time as a tiebreaker.
• The tasks are grouped by topic, and the tasks within one topic are ordered in approximate order of increasing difficulty. If you find a problem too hard, don't forget to check the next problems in this topic and problems from different topics, they might turn out to be easier.
• Unlike the warmup round, you're not allowed to discuss the tasks during the contest.
• By popular demand, we have added Custom Invocation to allow you to run Q# code on Codeforces servers. Here is the signature of the code you should use to run it (note that the namespace and operation name have to match this code exactly):
namespace Solution {
open Microsoft.Quantum.Primitive;
open Microsoft.Quantum.Canon;

// ------------- Operation which is called from C# -------------------
operation RunQsharp () : Bool
{
body
{
Message("Hi");
return true;
}
}
}

• For tasks which require you to create a certain quantum state or to implement a unitary transformation, any kind of error gives verdict "Wrong Answer". For tasks which have classical return, I tried to differentiate verdicts "Wrong Answer" (your return value was incorrect) and "Runtime Error" (array index out of bounds, qubits released are not in zero state, oracle called too many times etc.).
• NO PURCHASE NECESSARY. Must be 16 years of age or older. Game ends 7/9/18. For details, see Official Rules.

You can find the discussion of the warmup round and pointers to Q#/quantum computing materials here.

For first time Codeforces users:

1. Create user account here.
2. Register for the contest here.
3. Once the contest starts on July 6, access the problems here.

Good luck! We hope you enjoy the contest!

Update. The contest is over. Editorials are published.

• +97

By Nickolas, 6 years ago, translation,

TCO18 Marathon Round 3 InvestmentAdvice started on July 11th and will run for a week. You can find it in the list of active contests.

• +18

By Nickolas, 6 years ago,

(text courtesy of my colleague Chris Granade)

A quantum oracle O is a "black box" operation that is used as input to another algorithm. Often, such operations are defined using a classical function f: {0, 1}n → {0, 1}m which takes n-bit binary input and produces an m-bit binary output. To do so, consider a particular binary input x = (x0, x1, ..., xn - 1). We can label qubit states as .

We may first attempt to define O so that , but this has a couple problems. First, f may have a different size of input and output (n ≠ m), such that applying O would change the number of qubits in the register. Second, even if n = m, the function may not be invertible: if f(x) = f(y) for some x ≠ y, then but . This means we won't be able to construct the adjoint operation , and oracles have to have an adjoint defined for them.

We can deal with both of these problems by introducing a second register of m qubits to hold our answer. Then we will define the effect of the oracle on all computational basis states: for all and , \begin{align*} O(|x \rangle \otimes |y \rangle) = |x \rangle \otimes |y \oplus f(x) \rangle. \end{align*} Now by construction, thus we have resolved both of the earlier problems.

Importantly, defining an oracle this way for each computational basis state also defines how O acts for any other state. This follows immediately from the fact that O, like all quantum operations, is linear in the state that it acts on. Consider the Hadamard operation, for instance, which is defined by and . If we wish to know how H acts on , we can use that H is linear:

\begin{align*} H |+ \rangle = \frac{1}{\sqrt{2}} H(|0 \rangle + |1 \rangle) = \frac{1}{\sqrt{2}} (H |0 \rangle + H |1 \rangle) = \frac{1}{\sqrt{2}} (|+ \rangle + |- \rangle) = |0 \rangle \end{align*}

In the case of defining our oracle O, we can similarly use that any state on n + m qubits can be written as

Thus, the effect of the oracle O on this state is

• +121

By Nickolas, 6 years ago,

Microsoft's Quantum Team has good news for quantum enthusiasts and coders looking for new challenges. We are excited to announce Microsoft Q# Coding Contest — Summer 2018! By entering the contest, you can hone your quantum coding skills by tackling problems of varying difficulty and implementing solutions in the quantum programming language Q#. Winners will receive a Microsoft Quantum T-shirt!

Quantum computing is a radically different computing paradigm compared to classical computing. Indeed, it is so different that some tasks that are believed to be classically intractable (such as factoring integers, computing discrete logarithms on elliptic curves, or simulating physical systems) can be performed efficiently on a quantum computer. Microsoft recently introduced the Quantum Development Kit which includes Q# — a new programming language to express quantum programs in a way that makes it easier for classical coders to enter the space. Q# integrates into Visual Studio or Visual Studio Code development environments, and is available as a command line tool. Visual Studio Code allows development under Windows, macOS, and Linux.

The contest will run from July 6 — 9 and will consist of increasingly challenging tasks on introductory topics in quantum computing: superposition, measurement, oracles and simple algorithms.

The rules of the contest are:

• The contest will have 12 15 tasks of various complexity levels.
• To solve each task, you will write Q# code to implement the described transformation on the given set of qubits or to analyze the state of a set of qubits. Solutions are accepted in Q# only.
• The solution is correct if it passes all tests from a predefined test set. You will know whether the solution is correct soon after submitting it.
• Participants are ranked according to the number of correctly solved tasks.
• Ties are resolved based on lowest total penalty time for all tasks, which is computed as follows. For each solved task, a penalty is set to the submission time of that task (the time since the start of the contest). An extra penalty of 20 minutes is added for each failed submission on solved tasks (i.e., if you never solve the task, you will not be penalized for trying that task).
• The top 50 ranked participants will receive a Microsoft Quantum T-shirt.
• NO PURCHASE NECESSARY. Must be 16 years of age or older. Game ends 7/9/18. For details, see Official Rules.

From June 29 to July 2, we will offer a warmup round with simpler tasks on the topics covered in the main contest. Participation in the warmup round is entirely optional. The warmup round gives you an opportunity to get familiar with the contest environment and submission system beforehand, as well as refresh or learn the basics of quantum computing and Q# programming language. During the warmup round everybody is encouraged to discuss the tasks and the solutions. 24 hours after the start of the warmup round we will publish explanations and solutions to the easiest three problems. Once the warmup round is over, we will publish the editorials on the contest page explaining both the quantum computing logic behind the solution and the Q# implementation.

To start, please refer to Q# installation instructions and language reference.

Quantum computing and Q# materials:

For first time Codeforces users:

1. Create user account here.
2. Register for the warmup round here.
3. Register for the contest here.
4. Once the warmup round starts on June 29, access the problems and see additional contest materials here.
5. Once the contest starts on July 6, access the problems here.

Good luck! We hope you enjoy the contest!

Update. Explanations for problems A, D and G of the warmup round are published.

Update. The warmup round is over. Explanations for all problems are published.

• +413

By Nickolas, 6 years ago, translation,

Marathon Match 101 "Fifa World Cup Special" WorldCupLineup started on June 27th and will run for a week. You can find it in the list of active contests.

• +33

By Nickolas, 6 years ago, translation,

TCO18 Marathon Round 2 CrystalLighting started on June 6th and will run for a week. You can find it in the list of active contests. I am the writer :-)

Upd.2. Due to the issues with the contest not showing up in some listings of active contests, the round is extended by 24 hours, till June 14th.

• +47