TV - solution

task description

TV was based on a stream similar to (digitized) analog black&white TV broadcasts. It featured horizontal and vertical sync signals and delivered rows and frames. There was a generic row size noise that could be easily compensated using linear interpolation (adjusting lines to the nominal, or to the longest).

When streamed in form of UDP broadcast, packet boundaries were picked randomly. Lost packets caused truncated frames.

F. TV - Maze

This was a warm up problem for the more complicated TV stream task.

We prepared five big maze images and scrolled a 160x100 sized window over it. The scroll step was small (10-20 pixel) to make it easy to stitch the frames together and some minimal noise was added to each frame. We used a simple zigzag scroll motion and a spiral scrolling as well.

The maze images: F1.png, F2.png, F3.png, F4.png, F5.png.

G. TV - Count

Similar to the maze problem with a bit more difficult image processing.

Happy and sad faces:

Unfortunately due to last minute tweaks, the F and G inputs were broken: first frame was missing from the encoded stream, which made it impossible to solve the maze and the frames of the last G input got garbled and we did not notice these until very late into the contest.

We wanted the "face recognition" part to be easy, so it's faster to write a program for it than manual counting, but with all the noise and interpolation errors in the tv signal it was probably a bit harder than we wanted it to be.

H. TV - Stream

Barcodes

Barcode reading was chosen as a simple image processing task. The difficulty of reading plane barcodes was intended to fell into a "sweet spot" where a few planes would be identifiable by the naked eye, but most would be too small or would move too fast to reliably read without implementing a proper barcode reader.

It may have caused some confusion that the selected idealized barcode format encodes information only in the "white" bars, not in the "black" bars in between them. While this is a widespread solution in the real world, it's not at all universal - real barcode formats are extremely varied.

UFO and bossfight barcodes would have been extremely difficult to read without a program. As a source of additional difficulty, the row scan length error rate - which in normal operation was around 1% - was increased while an UFO was present, and very strongly increased in the bossfight. For the teams who implemented a proper row scaling step according to the task description, this probably didn't cause too many extra problems.

Hidden task: teletext

In the UDP stream sync singals were modulated with teletext data. As illustrated on the below plot, there is a valid range of sync signals (green, below a certain negative threshold down to -128). Normal sync signal is an almost horizontal, slowly dropping line between a fast falling and a fast rising edge. Teletext is one bit per sync signal in form of a spike in positive or negative direction. The spike clearly leaves the dark green "normal sync area".

Spikes encode a series of 1s and 0s, but it is also common to have no spike at all (separator, no teletext bit is encoded). The teletext stream transmitted 8 bit bytes (separators were always at 8 bit boundaries, but not at all such boundaries; only once in a while).

In normal operation, most broadcasted messages were randomly picked from a large fortune file (with all text being 7 bit ASCII). In between fortunes, two messages were regularly submitted: one with the current status (number of identified planes, number of live connections, etc), and one with a randomized secret key, and an instruction to send that key via TCP with the "teletext <key>" command. Doing this would have netted the team some points in the teletext subtask.

###
### IDENTIFIED FRIENDS = 0 
### IDENTIFIED ENEMIES = 0 
### MISTAKES . . . . . = 0 
### TOTAL PLANES SEEN  = 16 
### IFF DEFENSE FORCE  = 0 
###
*****************************************************
*                                                   *
* TO GET SOME EXTRA POINTS, SEND:                   *
*     teletext 4a537ba4d43dfe751c83b95e3439133f     *
*                                                   *
*****************************************************

During UFO attacks, a small GIF file was transmitted repeatedly.

During the bossfight, a barely readable UTF-8 "zalgoized" version of H.P. Lovecraft's "Call of Cthulhu" short story was sent.

In retrospect, we have underestimated the difficulty of finding such a hidden signal. The presence of the teletext data could have been advertised earlier during the contest, or in a more informative manner.