I-J. Radio (500 + 1500 points)

Channel

There is a radio server that accepts 30 connections (one per team). The server reads a stream of nibbles from each team, exactly 12000 nibbles per second (MSB nibble is read first from bytes). MSB of each nibble must be 1 (the "transmit bit"), LSB 3 bits encode an unsigned amplitude between 0 and 7. When a team is not submitting or when transmit bit is not 1, all zeros are assumed from the team.

Furthermore there is an input fifo and a filter for each team. The fifo is used to eliminate network latency problems: teams should keep the fifo filled for at least 2 seconds ahead in time to ensure smooth transmission. The filter implements a moving average of the last 6 samples of the player.

Signals from all 30 teams are mixed and some white noise is added: active nibbles from the buffer are all summed (<=7*30) and a random number between 0 and 15 (white noise) is added and "broadcasted" (sent back on all active connections) as "live broadcast". Broadcast format is 12000 unsigned bytes per second, each byte is an amplitude value. Because of all the expected network latency on team transmission and server "broadcasting", send and receive will not be in sync, but broadcast will have a varying delay. Data flow paths and connections are illustrated below.

  

The server also hosts a reference file provided over http. Once every 30 seconds the file is replaced with a new one. Past reference files are not accessible.

Task

Teams should observe the reference file and encode enough information in the live stream to be able to restore the file content later. The server starts checking and scoring this ability after 4 hours of the contest by making 30 second snippets of the live broadcast available from time to time, each starting exactly when a new reference file was published in the past. The team shall send back a reference file; if the submitted file matches the the reference file that was published in the same 30 second period when the record was taken, then the submission is accepted and the team gets a score, else the submission fails, the team gets a penalty and the team may try again.

Note: due to the method used for recording the stream, playback may have different noise compared to the live broadcast.

Networking and buffering

Each team may have a TCP connection to the server. If a new connection is established from the same team, the server will close the old connection. Team fifo persists accross connections: if the team feeds 5 seconds worth of material in the fifo from a client then reconnects with another, the new client will start appending to that 5 seconds.

Submission

After 4 hours, every 15 minutes the server picks a random snippet from the whole history of the broadcasting and publishes it on a web server as the next input file. Teams should submit the reference file that was available for the longest time during the time the recording was taken.

Scoring

This task is divided into two parts, task I and task J.

Task I consists of the initial 4 hours and a 10 hours submission period, so 40 submissions total. Each accepted submission is worth 12 points, the penalty for wrong answers is -2 points.

After the 14 hours the radio broadcast will be reset. Task J consists of a 10 hour submission period, the published snipets will be only taken from the broadcasting after the 14 hours. There will be no published snipet in the 14th hour and 24th hour so in this task there will be 38 possible submissions. Each accepted submission is worth 40 points and the penalty is -5 points.

The reference file for the same snipet can only be submitted once.