# University of Tokyo Student Recruitment Poster Challenge 2013

It has been University of Tokyo’s tradition to hide challenge information on student recruitment posters since 2010. (see poster of past years) Those zeros and ones on the posters are not random numbers but meaningful binary information.

Let’s grab the poster of this year and see what we can do!

First and foremost, we must extract those binaries from the image. With OCR and a bit of collation, we have

which is a total of 2848 zero or ones.

Since 2848 is a multiple of 8, by instinct we may want to convert the binary string above to binary data, and this is what we get

Ah-ha! So there really is information hidden in those zeros and ones!

Umm… Looks like we’re going to play around with a 4x4x4 Rubik’s cube. It’s quite intuitive that “E”, “F”, “H”, “I”, and so forth are notations of rotating separate layers; the question then arises: What the heck is up-arrow notation?

Thanks to Wikipedia, the definition of up-arrow notation is easily accessible, so now we know 201^^3 means
$201 \uparrow\uparrow 3 = 201^{201^{201}}$
which is enormously large!!!

### Some pre-programming research

Luckily, according to group theory, we’re able to substantially reduce the number of operation yet having the effect of “repeating the operation 201^^3 times”. Here’s how….

Let
$(\text{operation THEUNIVERSITYOFTOKYO})^n \equiv M^n \equiv \text{identity (nothing moves)}$
In consequence of Rubik’s cube group order being finite, it’s guaranteed to find an positive integer $$n$$ (order of cyclic group with $$M$$ as its generator) satisfying
$M^n \equiv M^0 \equiv \text{identity}$
Thus,
$M^{201 \uparrow\uparrow 3} \equiv M^{(201 \uparrow\uparrow 3)\mod{n}}$
If $$n$$ is sufficiently small, then we’re happy. :p

### And here is programming comes into play

To find the actual value of $$n$$, we must first find a way to perform “rotation” in a program.

For a Rubik’s cube net with each block number labeled:

After rotation “E”, the net will become:

which is in fact an operation of “remapping blocks and numbers”. Once we realize that, the remaining part should be easy.

For future convenience, I personally write a simple Python module for challenge Rubik’s cube operations.

With above module, we are able to find $$n$$.

which will give us $$n = 1008$$.

For calculating $$(201 \uparrow\uparrow 3)\mod{1008}$$, I personally use PowerMod function in Mathematica, or we could also use Wolfram Alpha as a replacement. We have
$M^{201 \uparrow\uparrow 3} \equiv M^{153}$

Now we’re one final step from the solution! Extract ciphertext from the challenge and decipher by performing $$M^{153}$$.

BINGO!