(they did not expect it)
the way that i compressed it was for each row i counted where the change from black to white was going left to right for each individual frame, and noted that down, rather than each individual pixel value at each frame. note that this is different than counting when the pixel value changes color between frames. this helped me compress the bad apple into a 881 kb java file
i then used the cv2 and PIL python libraries to read every 1/8 second of a video and convert it to java code. battlecode uses java, so i had to shove all of the data into a java file by using arrays. however, java has a restriction where you can't have a function longer than 65536 bytes (in java bytecode?), and you can't have more than 65536 fields in a class. this restriction also applies to my attempted 3d array (x, y are what you expect, z is the frame number). that meant that i had to initialize a 3d array of some number of frames, and then populate that 3d array using a function during runtime (before the while statement in the run method). the setup function took ~1550000 bytecode to run (62 turns), which is crazy, but 62 is less than 2000, which is ideal.
then, each bot was assigned a row. there are 36 rows, so the excess 14 bots have no purpose. i checked the "show all dot indicators" option in the config to show the indicator dots. they are supposed to be used for debugging, but who cares about debugging anyways? like, just get it right the first time amiright?
unfortunately, this video is not at 1:1 speed (it is slowed down in editing). i intended for it to play at 8 turns per second, but it was reporting like 6 or 7, so i just ran it in 16 tps and then slowed it down in editing for this video. so technically, it is possible to play this in realtime if you have a fast enough computer