In this gaming guide, you will find a compilation of my solutions for all jobs in Exapunks. These solutions include helpful code snippets and accompanying explanation videos.
Introduction
Exapunks is an Assembly-adjacent coding/puzzle game. Having coding knowledge is helpful, but the game does a good job of starting slow and building up in complexity. My video solutions will do the same, explaining basic coding instructions at the beginning, but barely looking at lines of code at the end and focusing on the approach.
Exapunks measures your solutions against three metrics:
- Cycles. The amount of time it takes your code to run. Generally, it is one cycle per line of code, so shorter code blocks should have lower cycle counts. (This will not always be the case). The Cycles score for your solution will be based on the highest cycle count across the 100 test cases, not an average.
- Size. The number of lines of code your solution takes. Pretty straightforward. All of the jobs have a limit on the number of lines. If your solution exceeds this number, you can still run and test your solutions, but your scores will not be submitted to the leaderboard until you get the size within the limitation.
- Activity. The total number of LINK and KILL instructions executed. This one feels more arbitrary to me. There’s no real penalty to higher LINK and KILL instruction counts, but if this is a metric you’d like to try minimizing, go for it.
Job #1 – Trash World News – Tutorial 1
Your first coding job in Exapunks. Here are your objectives:
- Move file 200 to the outbox.
- Leave no trace.
The “Leave no trace” objective will be present in most jobs. This requires the following criteria:
- All execution agents have been halted across the entire network.
- No user-created files are present in any network except your local host (Rhizome), unless otherwise specified.
- No existing files have been modified or moved, unless otherwise specified.
- No NPC execution agents were terminated, unless otherwise specified.
- You’ll notice in my solution that I execute both a DROP and a HALT instruction. These are actually unnecessary. If we chop both of those instructions out, then once we’ve executed the second LINK, the agent will throw an error stating “OUT OF INSTRUCTIONS” and will terminate itself, dropping any files it’s holding.
GRAB 200
LINK 800
DROP
HALT
Note that this video explanation covers all 4 tutorial missions, not just the first one.
Job #2 – Trash World News – Tutorial 2
The second job introduces manipulating files. This will be a very common thing you have to do, so try to understand how the F register works.
- Append the correct value to the end of file 200.
- Move file 200 to the outbox.
- Leave no trace.
- There might be a way to change the way we are reading the file to handle the arithmetic operations faster… Any ideas?
GRAB 200
COPY F X
ADDI X F X
MULI X F X
SUBI X F X
COPY X F
LINK 800
Job #3 – Trash World News – Tutorial 3
The third job introduces using the M register to communicate between EXAs. This will also be a staple of your solutions, so learn it well.
- Create the specified file in the outbox.
- Delete file 199.
- Leave no trace.
- When an EXA tries to read or write from the M register, it will wait until there is something on the M register for it to read/write, potentially forever.
- Looks like there might still be some room for improvement on this one as well… What can we do to minimize the amount of time XB is waiting to read from the M register?
XA
LINK 799
GRAB 199
COPY F X
COPY F M
COPY X M
WIPE
HALT
XB
LINK 800
LINK 800
COPY M F
COPY M F
DROP
HALT
Job #4 – Trash World News – Tutorial 4
The final tutorial mission introduces the concept of loops. Loops are used when you have a repetitive task that needs to be performed. Since it’s featured in the tutorial here, you can also assume that this concept will be vital.
- Create the specified file in the outbox.
- Delete file 200.
- Leave no trace.
- JUMP will always execute a jump to the specified marker. FJMP will only execute a jump if the T register equals 0. TJMP will only execute a jump if the T register is not 0.
- In our solution here, you’ll notice that we are counting down using the X register, and running both a TEST and FJMP function to determine when our loop ends. Perhaps there is a way to do this faster? Maybe with only the T register?
GRAB 200
COPY F X
WIPE
MAKE
MARK LOOP
COPY X F
SUBI X 1 X
TEST X = -1
FJMP LOOP
LINK 800
Job #5 – Euclid’s Pizza – Order System
Time for your first non-tutorial coding job! Your task is pretty simple: take your pizza order (located in file 300) and copy it over to the end of the order list (file 200). Your order is multiple strings long, so you will need to transmit multiple values from one file to another.
- Append your order to the end of the order list.
- Leave no trace.
- To seek your file cursor to the beginning or end of the file reliably, you can run `SEEK -9999` or `SEEK 9999`.
- While the order list seems to change between test cases, it seems like our pizza order is exactly the same for all 100 runs. Can this be leveraged somehow?
XA
GRAB 200
LINK 800
DROP
HALT
XB
MARK LOOP
COPY F M
JUMP LOOP
Job #6 – Mitsuzen HDI-10 – Left Arm
Remember that part in the lore about how our body is slowly turning into useless circuitry? Well, it seems that one of our arms is acting up. But we can hack into this circuitry and make it behave the way our arm should. We need to bridge the gap between the Central Nervous System (CNS) and the nerve in our left arm.
- Relay all nerve signals as indicated. (0/30)
- This is your first job without the “Leave no trace” objective.
XA
MARK LOOP
COPY #NERV X
TEST X > 50
FJMP COPY
COPY 50 M
JUMP LOOP
MARK COPY
COPY X M
JUMP LOOP
XB
LINK 1
LINK 1
LINK 1
LINK 1
MARK LOOP
COPY M X
TEST X < -120
FJMP COPY
COPY -120 #NERV
JUMP LOOP
MARK COPY
COPY X #NERV
JUMP LOOP
Job #7 – Last Stop SnaxNet – Factory 11
Ember wants us to remove the peanuts from the Peanut Blast recipe. Why? Only she knows, really. So we have to read through the ingredient list (file 237) and remove the word “PEANUTS” (found in file 300) from it.
- Modify the recipe as described.
- Leave no trace.
- The recipe will change between test cases, so the word “PEANUTS” can be anywhere in the ingredient list.
XA
LINK 800
GRAB 237
COPY M X
MARK LOOP
TEST F = X
FJMP LOOP
SEEK -1
VOID F
XB
COPY F M
Job #8 – Zebros Copies – Point-of-Sale System
Ghast, the man behind the Zine, has let the group know that his debt to the copy shop is stopping him from continuing work on the magazine. Since we’re practicing our hacking anyway, Ember wants us to do Ghast a favor and wipe out his debt. File 300 contains Ghast’s customer ID at the shop. File 200 contains the current debts of each customer by ID. File 201 contains the list of transactions.
- Zero out Ghast’s balance.
- Create a corresponding payment.
- Leave no trace.
- The current date can be found in the #DATE register of the CLOCK host.
XA
GRAB 200
COPY M X
MARK LOOP
TEST F = X
SEEK 2
FJMP LOOP
SEEK -2
COPY F M
COPY F M
SEEK -2
COPY 0 F
COPY 0 F
XB
COPY F X
COPY X M
DROP
LINK 800
LINK 801
COPY #DATE T
LINK -1
GRAB 201
SEEK 9999
COPY T F
COPY X F
COPY M F
COPY M F
Job #9 – SFCTA Highway Sign #4902 – Remote Access Interface
Ember has decided to test how she can influence the people in the world. She wants to start this by hacking an electronic highway sign to display various vague messages.
- Write the message to the highway sign.
- Leave no trace.
- To clear the sign of its current display, you have to write a value to the #CLRS register.
- Using the T-Loop trick is faster than using the X register, but there might be an even faster way to write the 9 characters for each row.
XA
MARK READ_FILE
COPY F M
JUMP READ_FILE
XB
COPY 1 #CLRS
MARK NEXT_LINE
COPY 9 T
MARK WRITE_CHARACTER
COPY X #DATA
SUBI 9 T #DATA
COPY M #DATA
SUBI T 1 T
TJMP WRITE_CHARACTER
ADDI X 1 X
TEST X = 3
FJMP NEXT_LINE
Job #10 – Unknown Network 1 – Unknown Context
Ember wants us to hack into a network and retrieve a file. She’s being unusually evasive about the purpose of this file. I wonder if there’s anything interesting we can snoop into.
- Move file 276 to your host.
- Leave no trace.
- This will be your first job that uses the REPL command. Note that when you replicate an execution agent, the values in the registers will be copied over, but any held files will not be.
- The agent holding file 276 can appear in any of the 8 hosts at the far end, so you will have to check all of the locations.
- If an agent attempts to pick up a file and cannot (whether because it’s already being held or doesn’t exist), the agent will throw an error and terminate itself.
XA
MARK START
REPL LEFT
JUMP RIGHT
MARK LEFT
LINK 800
JUMP TEST
MARK RIGHT
LINK 801
MARK TEST
SUBI T 1 T
TJMP START
KILL
GRAB 276
LINK -1
LINK -1
LINK -1
LINK -1
Job #11 – UC Berkeley – EECS Department
There’s another file Ember wants us to grab, but it was recently deleted. Thankfully, there exists a backup for us to retrieve for her.
- Create the specified file in your host.
- Leave no trace.
- You can copy the name of your current host into a register using the HOST command.
- You will have to travel counter-clockwise through the hosts, as the links are all one-way.
- The entries in the 200 files are listed at the ends of the file. Maybe it would faster to search for that part starting at the end?
XA
COPY F M
COPY F M
DROP
MAKE
MARK LOOP
COPY M T
FJMP END
COPY T F
JUMP LOOP
MARK END
XB
COPY M X
NOTE – SEARCH FOR HOST
MARK LOOP
LINK 800
HOST T
TEST T = X
FJMP LOOP
NOTE – GRAB ENTRY
COPY M X
GRAB 200
NOTE – FIND ENTRY
MARK LOOP2
TEST F = X
FJMP LOOP2
NOTE – COPY LOCATION
COPY F T
COPY F X
NOTE – SEEK TO LOCATION
SEEK -9999
SEEK T
COPY X T
NOTE – SEND INFORMATION
MARK LOOP3
COPY F M
SUBI T 1 T
TJMP LOOP3
COPY 0 M
Job #12 – Workhouse – Work Management System
Ember has been a little inhuman in her attempts to earn some money through the transcription service we had tried out at the beginning of the game. We’ll need to go get her productivity down to more human-possible values.
- Overwrite EMBER-2’s user file as described.
- Leave no trace.
- Ember’s username will always be NORMALHUMAN (subtle), but the file for her account in the USERS host will change every time.
XA
GRAB 300
COPY F X
DROP
NOTE FIND EMBER’S FILE
LINK 800
GRAB 199
MARK LOOP
TEST F = X
SEEK 2
FJMP LOOP
SEEK -1
COPY F X
DROP
NOTE GRAB EMBER’S FILE
LINK 799
GRAB X
NOTE ADJUST EMBER’S FILE
SEEK 2
COPY 0 X
NOTE ADD + UPDATE
MARK LOOP2
ADDI X F X
SUBI X 75 X
SEEK -1
COPY 75 F
TEST EOF
FJMP LOOP2
NOTE APPEND EXTRA VALUES
MARK LOOP3
COPY 75 F
SUBI X 75 X
TEST X < 75
FJMP LOOP3
TEST X > 0
FJMP END
COPY X F
MARK END
DROP
Job #13 – Equity First Bank – San Francisco
Ember wants us to hack into a bank’s systems and cause the ATMs to start shooting out their money. Sounds like fun, I’m in.
- Dispense all available cash from all ATMs. (0/X)
- Leave no trace.
- The number of ATMs varies from 1 to 7, and can be placed on any of the links 800-807 in the long host at the back.
- The #CASH register contains the total number of bills left, not the total value inside the ATM.
- You can dispense a single 20 dollar bill by writing 20 to the #DISP register.
- If you try to dispense another bill from an ATM when there are none left, you will fail the “Leave no trace” objective.
XA
LINK 800
LINK 800
COPY 800 X
COPY 6 T
MARK CLONE
REPL MOVE_IN
ADDI X 1 X
SUBI T 1 T
TJMP CLONE
MARK MOVE_IN
LINK X
COPY #CASH T
MARK DISPENSE
COPY 20 #DISP
SUBI T 1 T
TJMP DISPENSE
Job #14 – Mitsuzen HDI-10 – Heart
Back to that thing about slowly dying. Now our heart is starting to have some palpitations. Luckily, we can create our own makeshift pacemaker.
- Generate all nerve signals as indicated. (0/60)
- The SA-N and AV-N nerves are real nerves that keep your heart functioning. SA-N stands for “Sinoatrial Node” and AV-N stands for “Atrioventricular Node.” They also behave similarly in our bodies, where the AV-N gets a delayed signal to make sure the SA-N has performed its contraction first.
- The goal on this one is a little confusing. If the CNS produces a value of, say -42, divide that value by -10 to get 4. You would then want to output 4 values [40, -70, -70, -70] to the SA-N and 4 values [-70, 40, -70, -70] to the AV-N. Note that the values 40 and -70 are constant, the only thing that should be changing is how many values you put out total before reading from the CNS again.
- This is another job that does not require the Leave no Trace objective.
XA
MARK LOOP
COPY #NERV X
DIVI X -10 X
SUBI X 2 M
SUBI X 2 M
JUMP LOOP
XB
LINK 1
LINK 1
MARK LOOP
COPY M T
COPY 40 #NERV
COPY -70 #NERV
MARK LOOP2
SUBI T 1 T
COPY -70 #NERV
TJMP LOOP2
JUMP LOOP
XC
LINK 3
LINK 3
MARK LOOP
COPY M T
COPY -70 #NERV
COPY 40 #NERV
MARK LOOP2
SUBI T 1 T
COPY -70 #NERV
TJMP LOOP2
JUMP LOOP
Job #15 – Trash World News – Unknown Context
Somebody’s trying to tip Ghast off about Ember’s existence. We’re just gonna have to alter the message a bit to be a bit more conspiratorial, and therefore a bit more easily disregarded.
- Find and replace the keywords in the target file.
- Move file 200 to the outbox.
- Leave no trace.
- For being a separate sandbox Ghast set up for tutorials, it seems silly there’s any connection at all to his actual machine.
XA
LINK 800
LINK 799
GRAB 212
MARK LOOP
COPY M X
MARK LOOP2
TEST F = X
FJMP LOOP2
SEEK -1
COPY M F
SEEK -9999
NOOP
TEST MRD
TJMP LOOP
XB
MARK LOOP
COPY F M
TEST EOF
FJMP LOOP
XC
LINK 800
GRAB 200
LINK 800
Job #16 – KGOG-TV – Programming Hub
Welcome to the first hacker battle. Mutex is your opponent, and he’s not bringing his A-game. In a battle, you will challenge your opponent to 100 rounds, and your final score is based on how many of those rounds you win.
- Gain one point every cycle for each of your movies that is playing (files 210 and 211).
- Lose one point every cycle that a movie file that isn’t yours (files 230, 231, and 265) is held by an EXA you control or is sitting in your host.
- Lose one point every time one of your EXAs executes a KILL instruction.
- Mutex’s bot is incredibly dumb and simple to beat. You don’t have to over-engineer this solution if your only goal is to beat him.
- If you have any Steam friends that also play Exapunks, you can challenge them in these battles by clicking the SELECT OPPONENT button on the opponent’s host.
XA
GRAB 210
LINK 809
DROP
LINK -1
GRAB 211
LINK 828
DROP
XB
MARK LOOP
LINK 809
REPL REMOVER
LINK -1
LINK 828
VOID M
REPL REMOVER
LINK -1
LINK 867
VOID M
REPL REMOVER
LINK -1
VOID M
JUMP LOOP
MARK REMOVER
COPY 230 X
REPL WIPER
COPY 231 X
REPL WIPER
COPY 265 X
REPL WIPER
COPY 1 M
MARK WIPER
GRAB X
LINK -1
Job #17 – TEC RedShift™ – Development Kit
Ghast dropped off a handheld console, along with a kit for connecting to it for development. Seems like a thank-you for what we’ve done for him, even if we didn’t tell him it was us. Problem is, we’ll need to hack it in order to find the password to unlock it.
- Create the specified file in your host.
- Leave no trace.
- There is no indicator that a link has been opened successfully, so you will have to try and perform a link. Problem is, if the link fails, the agent that tries it will be terminated. So you will have to use replication to test when you’ve gained access.
- The link into the TEC will be 800 once it’s been opened. The link out will be -1.
XA
MARK LOOP
SWIZ X 3 #PASS
SWIZ X 2 #PASS
SWIZ X 1 #PASS
ADDI X 1 X
JUMP LOOP
XB
MARK LOOP
LINK 809
REPL REMOVER
LINK -1
LINK 828
VOID M
REPL REMOVER
LINK -1
LINK 867
VOID M
REPL REMOVER
LINK -1
VOID M
JUMP LOOP
MARK REMOVER
COPY 230 X
REPL WIPER
COPY 231 X
REPL WIPER
COPY 265 X
REPL WIPER
COPY 1 M
MARK WIPER
GRAB X
LINK -1
Job #18 – Digital Library Project – Patron Access System
Ember wants to a bit of light reading, and sends us into the Digital Library Project to copy a few books over for her perusal.
- Create the specified files in your host. (0/X)
- Leave no trace.
- This will be your first job that encourages the use of Local M-register communication. Two EXAs that are in Local communication mode must be in the same host to recognize each other. An EXA that is in Global mode can only hear other EXAs in Global mode, even if they are in the same host as Local mode EXAs.
- The number of files required changes with each job.
- Ember will not request more than one file from the same host, so do not worry about clashes in that regard.
- Use the 800 Link to go forward in the network, and -1 to go backward. The links aren’t labeled directly.
XA
LINK 800
MODE
MARK DEPLOY
COPY F X
SWIZ X 3 T
SWIZ X 21 X
ADDI X 200 X
REPL SEEKER
TEST EOF
FJMP DEPLOY
WIPE
HALT
MARK SEEKER
LINK 800
SUBI T 1 T
TJMP SEEKER
REPL WRITER
GRAB X
MARK READER
COPY F M
TEST EOF
COPY T M
FJMP READER
HALT
MARK WRITER
MAKE
MARK WRITER2
COPY M F
COPY M T
FJMP WRITER2
MARK RETURN
LINK -1
JUMP RETURN
Job #19 – TEC EXA-Blaster™ Modem – Radio Stations
Ember’s getting a little smarter about how to try and influence people. This time, she wants to see if she can artificially inflate a song’s popularity by forcing the radio stations to play it on repeat. Something tells me this will probably work, too.
- Replace every song in each playlist. (0/8)
- Leave no trace.
- This will be the first of multiple jobs that has you using the EXA-Blaster to dial phone numbers. Phone numbers are 11 digits long. If you dial a valid phone number, a link with ID 800/-1 will appear to the related host. You will then have to send -1 to the #DIAL register to close the connection before dialing a new phone number.
XA
LINK 800
MARK NEXT_NUMBER
COPY 11 T
MARK DIAL
COPY F #DIAL
SUBI T 1 T
TJMP DIAL
COPY 1 M
COPY -1 #DIAL
TEST EOF
FJMP NEXT_NUMBER
LINK -1
XB
COPY F X
COPY F T
DROP
LINK 800
@REP 7
REPL OVERWRITE
@END
MARK OVERWRITE
VOID M
LINK 800
GRAB 200
MARK OVERWRITE2
COPY X F
COPY T F
TEST EOF
TJMP DONE
SEEK -1
COPY F T
JUMP OVERWRITE2
MARK DONE
Job #20 – Emerson’s Guide – Streetsmarts GIS Database
In her tests to see how to influence people, Ember decides to fuss with an online restaurant guide to turn a disliked restaurant into one of the most heralded and well-reviewed ones online, just to see how people will react.
- Change the restaurant’s rating to five stars.
- Leave no trace.
- This is the first job with a geographic link system. Notice the compass rose next to the hosts. This indicates the link IDs to move in the corresponding directions. So to move east, you will link on 801. For south, you will link on 802, etc.
- You will need the star keyword to change the rating. You should plan to grab the character from the Last Stop’s current one-star rating.
XA
COPY M T
FJMP NORTHSOUTH
MARK EAST
LINK 801
SUBI T 1 T
TJMP EAST
MARK NORTHSOUTH
COPY M X
COPY M T
FJMP ENDMOVEMENT
MARK MOVENORTHSOUTH
LINK X
SUBI T 1 T
TJMP MOVENORTHSOUTH
MARK ENDMOVEMENT
GRAB 200
COPY M X
MARK READ
TEST F = X
SEEK 5
FJMP READ
SEEK -5
COPY F X
@REP 4
COPY X F
@END
XB
SEEK 1
NOTE EAST MOVES
COPY F M
NOTE NORTH/SOUTH MOVES
COPY F X
TEST X < 0
TJMP SOUTH
COPY 800 M
COPY X M
JUMP CONTINUE
MARK SOUTH
COPY 802 M
SWIZ X -1 M
MARK CONTINUE
NOTE RESTAURANT NAME
SEEK -9999
COPY F M
Job #21 – Valhalla – =plastered
The next hacker, =plastered, has issued you a challenge. It’s time to answer it. =plastered will put up more of a fight than Mutex did, but this battle shouldn’t be much of a sweat.
- Gain one point every cycle you control more hosts than your opponent.
- Lose one point every time one of your EXAs executes a KILL instruction.
- =plastered will actually run a bit of a loop in his code this time, so a one-and-done approach won’t work.
- Take note of your Storage Limit. This dictates how many EXAs you are allowed to have in the network.
- Note the LINK map on the bottom. The map is shaped like a big S. Linking on -1 will take you closer to the bottom of the S, while linking on 800 will take you to the top.
XA
LINK -1
COPY 8 T
MARK TAKE_OVER
REPL WRITER
LINK 800
SUBI T 1 T
TJMP TAKE_OVER
MARK WRITER
COPY 1 #CTRL
JUMP WRITER
Job #22 – Mitsuzen HDI-10 – Left Hand
The Phage is back again, this time messing with one of our hands. We need that hand to keep on coding our hacker bots, so we’ll need to get that sorted out before we’re no longer able to keep going.
- Relay all nerve signals as indicated. (0/42)
- This will be your first big test with timing global M-register communication. Think carefully about how to make sure the right information is going to the right nerves.
XA
LINK 3
LINK 3
REPL WRITER
LINK 3
REPL READER
LINK 3
NOOP
MARK READER
COPY #NERV M
NOOP
NOOP
NOOP
JUMP READER
MARK WRITER
COPY M #NERV
NOOP
NOOP
NOOP
JUMP WRITER
XB
NOOP
LINK -3
LINK -3
REPL READER
LINK -3
REPL WRITER
LINK -3
NOOP
MARK WRITER
COPY M #NERV
NOOP
NOOP
NOOP
JUMP WRITER
MARK READER
COPY #NERV M
NOOP
NOOP
NOOP
JUMP READER
Job #23 – Sawayama WonderDisc – Drive Controller
Isadora dropped off a video game console for us to tinker with. The only problem is that it’s region-locked and doesn’t work with the games we have on hand. Sounds like a job for the hacker-man.
- Copy the requested files to the buffer. (0/30)
- The code you need to unlock the disc drive is hard-coded, and can be found in the corresponding article in the Zine.
- The length of each disc file changes, but they do all appear to be in batches of six values. This might be useful for trying to minimize cycle usage.
XA
COPY F X
DROP
LINK 800
COPY 8 #AUTH
COPY 0 #AUTH
COPY 3 #AUTH
COPY 2 #AUTH
COPY 7 #AUTH
COPY 1 #AUTH
COPY 0 #AUTH
COPY 4 #AUTH
COPY 9 #AUTH
COPY 5 #AUTH
COPY 1 #AUTH
COPY 2 #AUTH
COPY 5 #AUTH
COPY 2 #AUTH
COPY 6 #AUTH
MARK READER
COPY #TRAK T
LINK 801
GRAB T
MARK READ_FILE
TEST F > -9999
FJMP REPLACE
SEEK -1
COPY F M
JUMP TEST
MARK REPLACE
COPY X M
MARK TEST
TEST EOF
FJMP READ_FILE
COPY 0 M
DROP
LINK -1
JUMP READER
XB
LINK 800
MARK WRITER
MAKE
MARK WRITELOOP
COPY M X
COPY X T
FJMP FINISH
COPY X F
JUMP WRITELOOP
MARK FINISH
DROP
JUMP WRITER
Job #24 – Alliance Power and Light – StreetSmarts GIS Database
Nivas has some people that are going to try and pull off a heist of some pharmaceuticals, including the medication we need to stave off the effects of the Phage. She said if we help with a little bit of a power cut, we’ll find ourselves with some of the loot from the job.
- Cut the power to the target substations. (0/2)
- Leave no trace.
- When you cut off power to a substation, all links to it will become inaccessible. Take this into consideration, especially for cases where the first station outside of your host is one that needs to be cut.
XA
COPY F X
REPL GO
COPY F X
DROP
MARK GO
LINK 800
MARK HEAD_EAST
REPL SPIDER_NORTH
REPL SPIDER_SOUTH
LINK 801
JUMP HEAD_EAST
MARK SPIDER_NORTH
LINK 800
LINK 800
REPL CHECKER
LINK 802
REPL CHECKER
LINK 802
JUMP CHECKER
MARK SPIDER_SOUTH
LINK 802
LINK 802
REPL CHECKER
LINK 800
REPL CHECKER
LINK 800
JUMP CHECKER
MARK CHECKER
HOST T
TEST T = X
FJMP HALT
COPY 0 #POWR
MARK HALT
Job #25 – Deadlock’s Domain – deadlock
It’s time for the third hacker battle. This time, deadlock wants a go. The task this time around is to grab files and bring them back to your host.
- Gain one point for every file you bring back to your host.
- Lose one point every time one of your EXAs executes a KILL instruction.
- You only have a storage limit of 3 this time around. There also happen to be three hosts that are producing files.
- deadlock’s manager EXA is just kinda sitting there in his backstage… exposed. Just saying.
XA
MARK LOOP
COPY 800 X
REPL GO
COPY 801 X
REPL GO
COPY 802 X
REPL GO
JUMP LOOP
MARK GO
LINK X
GRAB #FILE
LINK -1
LINK -1
Job #26 – Xtreme League Baseball – Player Database
Ember’s got a new scheme for earning some money. She wants to bet on an extreme baseball league using her own algorithm for calculating the best player. Just like everyone else who tries to use statistical algorithms to predict the outcomes of sports games, I am sure this is going to work out swimmingly.
- Create the specified file in your host.
- Leave no trace.
- Hope you’ve got your order of operations down for this one (PEMDAS, in case you forgot).
- Thankfully the values in the formula appear in the same order as in the files, making the calculation a fair bit easier.
XA
GRAB 199
MARK LOOP
ADDI X 1 X
REPL CALCULATE
COPY F M
TEST EOF
FJMP LOOP
DROP
MAKE
COPY 0 F
COPY 0 F
MARK NEXT_PLAYER
TEST X = 0
TJMP DONE
SUBI X 1 X
MODE
COPY 1 M
MODE
SEEK -9999
TEST M > F
TJMP NEW_BEST_PLAYER
VOID M
VOID M
JUMP NEXT_PLAYER
MARK NEW_BEST_PLAYER
SEEK -1
COPY M F
COPY M F
JUMP NEXT_PLAYER
MARK DONE
SEEK -9999
LINK -1
VOID F
HALT
MARK CALCULATE
GRAB M
MODE
SEEK 1
ADDI F F X
ADDI F X X
DIVI X 3 X
MULI F F T
DIVI T F T
ADDI X T X
SUBI F F T
MULI T 20 T
ADDI X T X
SEEK -9999
COPY F T
VOID M
MODE
COPY X M
COPY X M
COPY T M
Job #27 – King’s Ransom Online – US West Realm
Another scheme from Ember to earn some money, she wants us to hack into an online MMO, forcibly disconnect all of the players, and then reset ownership of their assets so that she can sweep in and steal them to sell on a marketplace. I’m sure online gamers won’t throw a huge fit when this happens.
- Terminate all other EXAs. (0/X)
- Clear the ownership of each building. (0/X)
- Leave no trace.
- You will have to clear all players out before changing any files, otherwise you will fail the “Leave no trace” objective.
- Any buildings you take might have sub-buildings you will also need to take. Each file is structured as follows: NAME, TYPE, OWNER, SUB_BUILDING_1_FILE_ID, SUB_BUILDING_2_FILE_ID, …
XA
COPY F X
DROP
NOTE DEPLOY KILLERS
LINK 800
@REP 6
COPY @{800,1} T
REPL KILLER
@END
JUMP DEPLOY_WRITERS
MARK KILLER
LINK T
@REP 3
KILL
@END
JUMP WRITER
MARK DEPLOY_WRITERS
@REP 6
COPY 1 M
@END
HALT
MARK WRITER
GRAB 200
VOID M
JUMP OVERWRITE
MARK SUBWRITER
GRAB T
MARK OVERWRITE
SEEK 2
COPY X F
MARK ITERATE
COPY F T
REPL SUBWRITER
JUMP ITERATE
MARK ENDLOOP
Job #28 – KGOG-TV – Satellite Uplink
Ember’s back to trying to influence the people. She’s put together an art piece that she wants to broadcast on television, and asks us to help override a satellite to do so.
- Align the satellite dish with the target satellite.
- Encrypt and transmit EMBER-2’s video data.
- Leave no trace.
- You will have to align the satellite first, otherwise the data will not reach its destination.
- The azimuth and elevation have to be set by moving the motors, which will only more a single degree at a time by writing a positive or negative value to the #MOTR registers.
- Your data needs to be encrypted using file 199. You add the first value of your data to the first value of the encryption key and keep only the last 4 digits. Your registers only have a 4-digit limit, so you will have to figure out how to add these two large numbers together.
- If there are more values in your data than there are in the encryption key, loop back to the beginning of the encryption key and continue.
XA
LINK 800
LINK 799
SEEK 1
COPY F X
REPL AZIMUTH
SEEK 1
COPY F X
REPL ELEVATION
SEEK 1
COPY F X
WIPE
COPY X #FREQ
HALT
MARK AZIMUTH
LINK 800
SUBI X #AZIM X
JUMP SET_MOTOR
MARK ELEVATION
LINK 801
SUBI X #ELEV X
JUMP SET_MOTOR
MARK SET_MOTOR
TEST X > 0
TJMP SET_ITERATIONS
COPY -1 T
MARK SET_ITERATIONS
MULI T X T
MARK MOVE_MOTOR
COPY X #MOTR
SUBI T 1 T
TJMP MOVE_MOTOR
XB
SEEK 1
LINK 800
MARK LOOP
COPY F X
SWIZ X 321 T
SWIZ X 4 X
ADDI M T T
ADDI M X X
MODI X 10 X
MULI X 1000 X
SEEK -1
ADDI X T F
TEST EOF
FJMP LOOP
KILL
LINK 799
SEEK -9999
MARK TRANSMIT
COPY F #DATA
TEST EOF
FJMP TRANSMIT
WIPE
XC
GRAB 199
MARK LOOP
COPY F X
SWIZ X 321 M
SWIZ X 4 M
TEST EOF
FJMP LOOP
SEEK -9999
JUMP LOOP
Job #29 – Equity First Bank – San Francisco – ATMs Offline
Each attempt at garnering some cash so far hasn’t panned out. So Ember’s decided to be a bit more direct, and wants to skim a small amount of money from numerous accounts into her own. Pretty bold, not gonna lie.
- Install EMBER-2’s account file.
- Deposit money into EMBER-2’s account.
- Withdraw money from other accounts. (0/X)
- Leave no trace.
- Aw gee, I wonder why the ATMs are all offline?
XA
LINK 800
COPY M X
LINK 800
MODE
COPY F T
SEEK 9999
MARK LOOP
COPY M F
COPY T M
COPY X F
COPY 1 F
COPY 0 F
JUMP LOOP
XB
COPY F M
COPY F M
XC
LINK 800
GRAB 199
COPY M X
MARK LOOP
COPY F T
REPL WITHDRAW
COPY 3 T
MARK WAIT
SUBI T 1 T
TJMP WAIT
TEST EOF
FJMP LOOP
COPY 300 F
KILL
HALT
MARK WITHDRAW
MODE
GRAB T
COPY F M
SEEK 9999
COPY M F
COPY X F
COPY 1 F
COPY 0 F
Job #30 – The Wormhole – x10x10x
Another day, another hacker battle. x10x10x wants his turn at you. The challenge this time is to flood the network with as many EXAs as you can, as fast as possible.
- Gain one point for every EXA you control in the network at the end of the battle.
- Lose one point every time one of your EXAs executes a KILL instruction.
- The link IDs are all Fibonacci sequence values. Not that that really helps anything with the problem, just a mildly interesting factoid.
- It’s possible that some hosts will be blocked off for both you an x10x10x if the connecting hosts fill up with EXAs that aren’t going anywhere.
XA
REPL SPIDER2
MARK SPIDER1
REPL EXPLORE2
REPL EXPLORE3
REPL EXPLORE5
REPL CLONE
MARK SPIDER2
REPL EXPLORE7
REPL EXPLORE11
REPL EXPLORE13
REPL CLONE
MARK CLONE
JUMP CLONE
MARK EXPLORE2
LINK 2
REPL SPIDER1
JUMP SPIDER2
MARK EXPLORE3
LINK 3
REPL SPIDER1
JUMP SPIDER2
MARK EXPLORE5
LINK 5
REPL SPIDER1
JUMP SPIDER2
MARK EXPLORE7
LINK 7
REPL SPIDER1
JUMP SPIDER2
MARK EXPLORE11
LINK 11
REPL SPIDER1
JUMP SPIDER2
MARK EXPLORE13
LINK 13
REPL SPIDER1
JUMP SPIDER2
Job #31 – TEC EXA-Blaster™ Modem – Dataphone Network
Ember’s been getting a bit more knowledgeable as she’s gathered data, but she says she needs more processing power to gain a better understanding. She wants us to connect her to the thousands of dataphones out there to hijack their CPUs.
- Connect to each dataphone. (0/8)
- Leave no trace.
- Each dataphone will contain one or more numbers. It’s possible that none of those numbers are valid for a given dataphone (except the first one). Make sure you keep track of all the numbers and don’t count on dataphone #4 always giving you the number for dataphone #5.
- Once you connect to the 8th dataphone, you don’t need to transmit or dial any more numbers, your objective has been completed.
XA
LINK 800
MARK NEXT_NUMBER
COPY -1 #DIAL
@REP 11
COPY F #DIAL
@END
REPL TESTER
ADDI X 1 X
TEST MRD
FJMP NEXT_NUMBER
ADDI X 100 X
TEST X > 800
TJMP DONE
VOID M
MARK WRITE_NUMBER
SEEK 9999
@REP 11
COPY M F
@END
COPY M T
FJMP WRITE_NUMBER
SEEK -9999
SWIZ X 21 T
MULI T 11 T
SEEK T
JUMP NEXT_NUMBER
MARK DONE
WIPE
LINK 800
KILL
HALT
MARK TESTER
LINK 800
COPY 1 M
GRAB 200
MARK READ_NUMBER
SEEK 1
@REP 11
COPY F M
@END
TEST EOF
COPY T M
FJMP READ_NUMBER
Job #32 – Last Stop SnaxNet – Warehouse 27
I don’t think a convenience store-based cult trying to detonate the entire city with a nuke was on my bingo card for this year… Goes without saying we should do something about it, yeah?
- Disable the regulators in the correct order. (0/5)
- Leave no trace.
- Once you defuse the first regulator, the value in the defused regulator’s register goes to 0, and the remaining regulators will increase to new values. There is no guarantee that the 2nd-highest regulator will become the new highest after this increase.
- It seems like the hundreds-place digit of the pressures can be used to determine how many regulators have been disabled…
XA
LINK 799
MARK FIND_HIGHEST
TEST #ZGC0 < #ZGC1
TJMP ONE
MULI #ZGC0 10 X
JUMP TWO
MARK ONE
MULI #ZGC1 10 X
ADDI X 1 X
MARK TWO
MULI #ZGC2 10 T
TEST X < T
FJMP THREE
MULI #ZGC2 10 X
ADDI X 2 X
MARK THREE
MULI #ZGC3 10 T
TEST X < T
FJMP FOUR
MULI #ZGC3 10 X
ADDI X 3 X
MARK FOUR
MULI #ZGC4 10 T
TEST X < T
FJMP DEPLOY
MULI #ZGC4 10 X
ADDI X 4 X
MARK DEPLOY
REPL DEFUSE
TEST X > 5000
VOID M
FJMP FIND_HIGHEST
HALT
MARK DEFUSE
LINK -1
LINK 798
SWIZ X 1 T
FJMP POWER_DOWN
MARK MOVE
LINK 800
SUBI T 1 T
TJMP MOVE
MARK POWER_DOWN
COPY 0 #POWR
COPY 1 M
Job #33 – Mitsuzen HDI-10 – Visual Cortex
The Phage is back, and this time it’s affected the part of our brain used to process visual imagery. Something tells me we need to be able to see still, so we’d better fix that up real quick.
- Generate all nerve signals as indicated. (0/30)
- This job is all about timing, and handling communicating from numerous EXAs in batches without overlapping.
XA
REPL EASTER
LINK 1
REPL EASTER
LINK 1
MARK EASTER
REPL REPORTER
LINK -3
JUMP EASTER
MARK REPORTER
TEST #NERV > -55
MULI T 5 M
@REP 9
NOOP
@END
JUMP REPORTER
XB
LINK 1
LINK 3
MARK AGGREGATE
@REP 9
ADDI X M X
@END
SUBI X 75 #NERV
COPY 0 X
JUMP AGGREGATE
Job #34 – Holman Dynamics – Sales System
Time to scrape some credit card numbers. They were deleted and sent to the garbage collector, but we can reconstruct the numbers from the garbage data to use for ourselves.
- Create the specified file in your host.
- Leave no trace.
- The algorithm used here to validate a credit number as legitimate is based on the real-life Luhn algorithm, which is used for the same purpose.
- You know that a valid credit card number won’t contain the -9999 value, so if you see that you can assume that you need to empty out any number sequences you’re currently holding.
XA
LINK 802
LINK 799
GRAB 199
MARK LOOP
COPY F M
JUMP LOOP
XB
MARK START_COUNTING
SEEK -9999
COPY 16 X
MARK READ_NUMBERS
COPY M F
SEEK -1
TEST F = -9999
TJMP START_COUNTING
SUBI X 1 X
TEST X = 0
FJMP READ_NUMBERS
SEEK -9999
MARK CALCULATE
TEST F < 5
SEEK -1
FJMP OVER_9
MULI F 2 T
JUMP EVEN
MARK OVER_9
MULI F 2 T
SUBI T 9 T
MARK EVEN
ADDI T X X
ADDI F X X
TEST EOF
FJMP CALCULATE
MODI X 10 T
FJMP HALT
SEEK -9999
VOID F
SEEK 9999
COPY 1 X
JUMP READ_NUMBERS
MARK HALT
DROP
LINK 800
LINK 802
LINK 799
KILL
Job #35 – Aberdeen – selenium_wolf
It’s time for the final hacker battle. Your opponent this time is the moderator of the Exapunks chat, selenium_wolf. This one will require a bit of strategy, as you need to occupy more hosts than your opponent, but you are limited by the storage limit, and there’s a battleground in the middle which allows you to destroy other EXAs inside it without penalty.
- Gain one point every cycle you occupy more hosts than your opponent.
- Lose one point every time one of your EXAs executes a KILL command.
- There are exactly 9 hosts. You only need to hold 5 of them to win…
- There are two single-cell hosts. Whoever gets there first keeps them. You cannot beat selenium_wolf to the one near him, so make sure he doesn’t beat you to the one near you.
XA
LINK 801
LINK 799
MARK IDLE
JUMP IDLE
XB
REPL 802
REPL 801
REPL 802
REPL 801
JUMP IDLE
MARK 802
LINK 802
REPL 800
JUMP IDLE
MARK 801
LINK 801
REPL 800
JUMP IDLE
MARK 800
LINK 800
REPL 800
MARK IDLE
JUMP IDLE
Job #36 – U.S. Government – FEMA Genetic Database
Ember’s next scheme is completely out there. She wants us to hack into the U.S. government’s centralized DNA database and overwrite some data in there to frame it to appear that the president’s son is a genetic clone of himself. Don’t ask her why, she’ll just say it’s an experiment.
- Modify the target files as specified. (0/X)
- Leave no trace.
- File 200 in Drive-1 contains the directory of information. This will be the first file you need to read.
- The data is kept in 10-value chunks. In the directory, there are a series of 3-digit values that tell you where to find a chunk. The hundreds-place dictates which drive. The tens-place which file it is. The ones-place the offset (times 10). So 539 means there is a chunk located in Drive-5, file 203, offset 90 values into the file.
- Because you might need to overwrite two chunks that are within the same file, you cannot easily handle reading and writing simultaneously.
XA
COPY F X
LINK 800
DROP
LINK 801
GRAB 200
MARK FIND_NAME
TEST F = X
TJMP SEND_CHUNKS
SEEK 10
JUMP FIND_NAME
MARK SEND_CHUNKS
COPY 10 T
MARK READ_DNA
COPY F X
SWIZ X 3 M
SWIZ X 2 M
SWIZ X 1 M
SUBI T 1 T
COPY T M
TJMP READ_DNA
DROP
LINK -1
GRAB 300
SEEK 1
COPY F X
WIPE
LINK 801
GRAB 200
JUMP FIND_NAME
XB
MAKE
MARK FETCH_CHUNK
ADDI 800 M X
LINK X
ADDI 200 M X
MULI M 10 T
REPL READER
COPY M T
MODE
@REP 10
COPY M F
@END
MODE
LINK -1
FJMP OVERWRITE_MODE
JUMP FETCH_CHUNK
MARK READER
MODE
GRAB X
SEEK T
@REP 10
COPY F M
@END
HALT
MARK OVERWRITE_MODE
SEEK -9999
MARK FIND_CHUNK
ADDI 800 M X
LINK X
ADDI 200 M X
MULI M 10 T
REPL WRITER
COPY M T
MODE
@REP 10
COPY F M
@END
MODE
LINK -1
FJMP FINISH
JUMP FIND_CHUNK
MARK WRITER
MODE
GRAB X
SEEK T
@REP 10
COPY M F
@END
HALT
MARK FINISH
WIPE
Job #37 – Unknown Network 2 – Unknown Context
Ember wants us to hack into another unknown Russian network and retrieve some files. This time the files seem decently guarded, but Ember doesn’t expect that to stop us.
- Terminate all other EXAs. (0/14)
- Move all files held by EXAs to your host. (0/X)
- Leave no trace.
- The number of files to bring back can be anywhere from 1 to 6. They will all be held by the six EXAs in the central host.
- You have no way of knowing the ID of a dropped file, so you will have to search for them. They will be between 200 and 299 (inclusive).
- EXAs in the outer hosts are hostile. If you KILL one, the other will retaliate with a KILL instruction of its own. Additionally, if you kill the EXAs in one of the hosts, the links to that host will close. You will have to terminate these EXAs after retrieving all of the files.
XA
LINK 800
@END
@REP 6
KILL
@END
COPY 20 T
COPY 200 X
@REP 4
REPL SCAVENGE
ADDI X 20 X
@END
MARK SCAVENGE
REPL FILE_GRABBER
SUBI T 1 T
ADDI X 1 X
TJMP SCAVENGE
TEST X = 300
FJMP HALT
@REP 3
LINK -1
REPL KILLER
@END
LINK -1
MARK KILLER
KILL
KILL
MARK FILE_GRABBER
GRAB X
@REP 5
LINK -1
@END
MARK HALT
Job #38 – TEC EXA-Blaster™ Modem – Pager Network
Ember’s going to try sending out another inspirational message to wake the people up. Only this time, she wants to deliver it to all of the pagers she can, at the exact same moment. This would be a lot easier if she didn’t add that last criterion.
- Write the message to each pager’s display. (0/8)
- Activate every pager in the same cycle.
- Leave no trace.
- You cannot send out a global signal to send out the message on the same cycle, so think about how you can coordinate 8 EXAs in disconnected networks to execute something on the same cycle.
- The length of Ember’s message changes with each test case, so you cannot use the message’s length to help time things easily.
XA
GRAB 301
COPY 7 X
MARK GET_DISCIPLES
REPL READER_BOT
REPL WRITER_BOT
SUBI X 1 X
MARK LISTEN
NOOP
TEST MRD
TJMP LISTEN
TEST X > 0
TJMP GET_DISCIPLES
REPL GRAB_300
LINK 800
MARK DIAL_NUMBERS
COPY 8 T
MARK DIAL_NUMBER
COPY -1 #DIAL
@REP 11
COPY F #DIAL
@END
SUBI T 1 T
COPY T M
TJMP DIAL_NUMBER
WIPE
HALT
MARK READER_BOT
GRAB 300
@REP 13
COPY F M
@END
MARK WRITER_BOT
MAKE
MARK GET_MESSAGE
COPY M F
TEST MRD
TJMP GET_MESSAGE
JUMP TRANSCRIBE_MESSAGE
MARK GRAB_300
GRAB 300
MARK TRANSCRIBE_MESSAGE
LINK 800
SEEK -9999
MULI M 8 X
ADDI X 1 X
LINK 800
MARK PROSELETYZE
COPY F #DATA
TEST EOF
FJMP PROSELETYZE
WIPE
COPY X T
MARK IDLE
SUBI T 1 T
TJMP IDLE
COPY 69 #PAGE
Job #39 – Mitsuzen HDI-10 – Cerebral Cortex
For once we are going to hack into our body for a purpose other than holding off the deterioration caused by the Phage. Ember wants a copy of our brain to be integrated into herself. She wants us to live on with her, even after the Phage finally does take us. Whether it’s because she actually cares about us, or about our hacking skills is up for debate.
- Create the specified file in your host.
- Leave no trace.
- it’s a little bit odd that there is a Leave no Trace objective on a Mitsuzen job. But maybe that’s because this isn’t one that’s meant to run indefinitely.
- The layout of the network changes drastically with each run. The number of nerves is also inconsistent. You will need an efficient searching and sorting algorithm.
XA
REPL START_SPIDER
COPY 6 T
MARK WAIT_FOR_SPIDER
SUBI T 1 T
TJMP WAIT_FOR_SPIDER
MARK READ_HOSTS
TEST MRD
FJMP SORT_HOSTS
COPY M F
JUMP READ_HOSTS
MARK SORT_HOSTS
COPY 0 F
MARK START_BUBBLE
SEEK -9999
COPY F X
SEEK -1
VOID F
TEST X = 0
TJMP HALT
MARK FIND_LOWEST
COPY F T
FJMP PLACE_AT_END
TEST T < X
FJMP FIND_LOWEST
SEEK -1
COPY F T
SEEK -1
COPY X F
COPY T X
JUMP FIND_LOWEST
MARK PLACE_AT_END
SEEK 9999
COPY X F
REPL START_SPIDER
COPY M F
JUMP START_BUBBLE
MARK START_SPIDER
LINK 800
REPL SPIDER_M3
REPL SPIDER_P1
REPL SPIDER_P3
JUMP SEND_INFO
MARK SPIDER_M3
LINK -3
REPL SPIDER_M3
REPL SPIDER_M1
REPL SPIDER_P1
JUMP SEND_INFO
MARK SPIDER_M1
LINK -1
REPL SPIDER_M3
REPL SPIDER_M1
REPL SPIDER_P3
JUMP SEND_INFO
MARK SPIDER_P1
LINK 1
REPL SPIDER_M3
REPL SPIDER_P1
REPL SPIDER_P3
JUMP SEND_INFO
MARK SPIDER_P3
LINK 3
REPL SPIDER_M1
REPL SPIDER_P1
REPL SPIDER_P3
JUMP SEND_INFO
MARK SEND_INFO
COPY #NERV T
TEST X = 0
TJMP SEND_HOST
HOST T
TEST X = T
FJMP HALT
COPY #NERV M
HALT
MARK SEND_HOST
HOST M
MARK HALT
Job #40 – Bloodlust Online – US East Realm (mutex8021)
It’s time for the first of the bonus jobs! Each one of these jobs has us taking the role of one of the Exapunks hackers. The first is mutex, who wants to hack into a vampire lair on the MMO Bloodlust Online.
- Terminate all other EXAs in the target host. (0/X)
- Modify the target host’s item listing as specified.
- Leave no trace.
- The vampire lair will always have between 2-4 EXAs inside it.
- You will need to grab the word “UNLOCKED” from mutex’s hideout in order to apply it to the door of the vampire lair.
XA
LINK 800
; TALISMAN
COPY F X
COPY 6 T
MARK SEARCH
SUBI T 1 T
REPL FIND_TALISMAN
TJMP SEARCH
; SEND MAP
COPY F M
; RECEIVE LAIR
COPY M X
; SEND DOOR
COPY F M
REPL LAIR_800
REPL LAIR_801
REPL LAIR_802
REPL LAIR_803
REPL LAIR_804
REPL LAIR_805
SEEK -1
; RECEIVE UNLOCKED
MODE
COPY M X
MODE
; SEND DOOR
COPY F M
; SEND UNLOCKED
COPY X M
; SEND SAFE
COPY F M
; RECEIVE COMBINATION
COPY M X
; SEND CLOCK
COPY F M
; SEND COMBINATION
COPY X M
WIPE
JUMP HALT
MARK FIND_TALISMAN
ADDI 800 T T
LINK T
GRAB 200
SEEK 1
MARK READ_TALISMAN
TEST F = X
SEEK 2
FJMP READ_TALISMAN
; RECEIVE MAP
COPY M X
SEEK -9999
SEEK 1
MARK READ_MAP
TEST F = X
SEEK 2
FJMP READ_MAP
TEST EOF
TJMP SEND_LAIR
SEEK -1
MARK SEND_LAIR
SEEK -1
COPY F M
; RECEIVE DOOR
COPY M X
SEEK -9999
SEEK 1
MARK READ_DOOR
TEST F = X
SEEK 2
FJMP READ_DOOR
TEST EOF
TJMP SEND_UNLOCKED
SEEK -1
MARK SEND_UNLOCKED
SEEK -1
COPY F X
DROP
LINK -1
MODE
COPY X M
HALT
MARK LAIR_800
LINK 800
JUMP FIND_LAIR
MARK LAIR_801
LINK 801
JUMP FIND_LAIR
MARK LAIR_802
LINK 802
JUMP FIND_LAIR
MARK LAIR_803
LINK 803
JUMP FIND_LAIR
MARK LAIR_804
LINK 804
JUMP FIND_LAIR
MARK LAIR_805
LINK 805
JUMP FIND_LAIR
MARK FIND_LAIR
HOST T
TEST X = T
FJMP HALT
@REP 4
KILL
@END
; RECEIVE DOOR
COPY M X
GRAB 200
SEEK 1
MARK READ_DOOR2
TEST F = X
SEEK 2
FJMP READ_DOOR2
; RECEIVE UNLOCKED
TEST EOF
TJMP UNLOCK_DOOR
SEEK -1
MARK UNLOCK_DOOR
SEEK -1
COPY M F
SEEK -9999
SEEK 1
; RECEIVE SAFE
COPY M X
MARK READ_SAFE
TEST F = X
SEEK 2
FJMP READ_SAFE
TEST EOF
TJMP SEND_COMBINATION
SEEK -1
MARK SEND_COMBINATION
SEEK -1
COPY F M
SEEK -9999
SEEK 1
; RECEIVE CLOCK
COPY M X
MARK READ_CLOCK
TEST F = X
SEEK 2
FJMP READ_CLOCK
TEST EOF
TJMP WRITE_COMBINATION
SEEK -1
MARK WRITE_COMBINATION
SEEK -1
COPY M F
MARK HALT
Job #41 – Motor Vehicle Administration – Scheduling System (NthDimension)
NthDimension’s a bit impatient about his upcoming driver’s test, so he is going to move it to today. Thus fulfilling everyone’s dream of skipping the line at the DMV MVA.
- Terminate all other EXAs in public. (0/5)
- Modify the appointment list as specified.
- Leave no trace.
- There will always be 5 EXAs waiting in line in public.
- There is no way to know which files the EXAs in line are holding, but they are within the IDs 200-299 inclusive.
- Writing the wrong value to the #NEXT register will fail the “Leave no trace” objective.
- There is a chance that William’s appointment will have to be added to the very beginning of the file. Plan for that edge case.
XA
GRAB 300
COPY F X
WIPE
VOID M
; READ APPOINTMENTS
LINK 800
LINK 800
GRAB 200
SEEK 9999
SEEK -2
MARK FIND_WILLIAM
TEST F = X
TJMP FOUND_WILLIAM
SEEK -4
JUMP FIND_WILLIAM
MARK FOUND_WILLIAM
REPL HOLD_WILLIAM
COPY X M
COPY F M
SEEK -6
MARK FIND_APPOINTMENT
TEST F = #DATE
TJMP INSERT_WILLIAM
SEEK -1
; SHIFT DATE + NAME
COPY F X
COPY F T
SEEK 1
COPY X F
COPY T X
; TEST FOR START OF FILE
TEST F = X
TJMP START_CASE
SEEK -1
COPY X F
SEEK -3
; SHIFT APPT. TYPE
COPY F X
SEEK 2
COPY X F
SEEK -9
JUMP FIND_APPOINTMENT
MARK START_CASE
SEEK -9999
JUMP INSERT_WILLIAM2
MARK INSERT_WILLIAM
SEEK 2
MARK INSERT_WILLIAM2
COPY #DATE F
COPY M F
COPY M F
HALT
MARK HOLD_WILLIAM
COPY M X
COPY M T
COPY X M
COPY T M
XB
@REP 5
KILL
@END
REPL REVERSE_LOOPER
COPY 200 X
MARK LOOP
REPL GRABBER
ADDI X 1 X
JUMP LOOP
MARK GRABBER
GRAB X
KILL
KILL
KILL
COPY F #NEXT
COPY 1 M
HALT
MARK REVERSE_LOOPER
COPY 299 X
MARK REVERSE_LOOP
REPL REVERSE_GRABBER
SUBI X 1 X
JUMP REVERSE_LOOP
MARK REVERSE_GRABBER
GRAB X
KILL
KILL
KILL
DROP
SUBI X 4 X
GRAB X
COPY F #NEXT
COPY 1 M
Job #42 – CyberMyth Studios – Accounting System (Ghast)
I guess it turns out that Ghast and Moss worked together at a gaming company called CyberMyth Studios. But it looks like they had tried to cheap out on some of the money they owed you, so you guys took it into your own hands to see yourselves what you were owed.
- Add the shell company to the list of accounts.
- Issue a payment for the correct amount.
- Leave no trace.
- The sum of the amount owed/paid might exceed your register limit of 4-digits if you try to combine Ghast’s and Moss’s totals at the same time.
- The current date can be found in the CLOCK host’s #DATE register.
XA
GRAB 300
LINK 800
; GRAB “GHAST”
COPY F X
REPL PAYROLL
REPL PAYABLE
VOID M
VOID M
; GRAB “MOSS”
COPY F X
REPL PAYROLL
REPL PAYABLE
; GRAB “TRASHWORLDNEWS”
COPY F X
WIPE
VOID M
VOID M
KILL
GRAB 400
MODE
REPL ADD_SHELL_COMPANY
; HANDLE DOLLARS + CENTS
SEEK 1
COPY F X
; HANDLE NEGATIVE CENTS
TEST X < 0
FJMP UPDATE_VALUES
SUBI X 100 X
MARK UPDATE_VALUES
SWIZ X 43 T
SEEK -2
ADDI T F T
SEEK -1
COPY T F
SWIZ X 21 X
; HANDLE NEGATIVE CENTS
TEST X < 0
FJMP UPDATE_CENTS
ADDI X 100 X
MARK UPDATE_CENTS
COPY X F
SEEK -9999
LINK 804
COPY #DATE M
COPY F M
COPY F M
WIPE
HALT
; GRAB NAMES FILE
MARK PAYROLL
LINK 802
GRAB 230
JUMP FIND_NAME
MARK PAYABLE
LINK 801
GRAB 220
MARK FIND_NAME
SEEK 1
TEST F = X
FJMP FIND_NAME
SEEK -2
COPY F X
DROP
; GRAB TRANSACTIONS
TEST X > 2999
TJMP PAYROLL_FILE
GRAB 221
REPL READER
JUMP FIND_ITEMS
MARK PAYROLL_FILE
GRAB 231
REPL READER
MARK FIND_ITEMS
TEST EOF
TJMP DONE_TRANSMITTING
TEST F = X
TJMP TRANSMIT
SEEK 3
JUMP FIND_ITEMS
MARK TRANSMIT
SEEK 1
TEST X > 2999
FJMP NEGATE
COPY F M
COPY F M
JUMP FIND_ITEMS
MARK NEGATE
MULI F -1 M
MULI F -1 M
JUMP FIND_ITEMS
MARK DONE_TRANSMITTING
COPY -1 M
HALT
MARK READER
MAKE
COPY 0 F
COPY 0 F
MARK READ
SEEK -9999
COPY M X
TEST X = -1
TJMP DONE_READING
ADDI F X X
ADDI F M T
SEEK -9999
COPY X F
COPY T F
JUMP READ
MARK DONE_READING
LINK -1
SEEK -9999
MODE
COPY F M
COPY F M
WIPE
MODE
COPY 1 M
HALT
MARK ADD_SHELL_COMPANY
LINK 801
GRAB 220
SEEK 9999
SEEK -2
ADDI F 1 T
SEEK 1
COPY T F
COPY X F
COPY T X
DROP
GRAB 221
SEEK 9999
COPY X F
COPY M F
COPY M F
COPY M F
XB
MAKE
COPY 0 F
COPY 0 F
MARK READ_AMOUNT
SEEK -9999
ADDI M F X
ADDI M F T
SEEK -9999
COPY X F
COPY T F
JUMP READ_AMOUNT
Job #43 – U.S. Department of Defense – USAF Secure Facility (hydroponix)
hydroponix is on a never-ending search for government secrets and conspiracies. He particularly wants to find out more about a government initiative called Project Ogre, which released a heavily redacted report. hydroponix wants to locate the unredacted version from inside the U.S. D.O.D.
- Create a copy of the target file in your host.
- Leave no trace.
- There are strict limitations in this job found nowhere else in the game. Only one EXA is allowed in the network at a time. And you cannot use the Global M-register to communicate from inside the network.
- Take a close look at how the #LOCK register changes when you input a correct digit into it.
- If Project Ogre is located in one of the unsecured hosts, there’s not much point in unlocking everything, is there?
XA
GRAB 300
COPY F T
DROP
@REP 2
COPY @{801,1} X
REPL CHECK_FILE1
COPY 1 M
@END
REPL COMBINATION1
COPY 1 M
@REP 4
COPY @{801,1} X
REPL CHECK_FILE2
COPY 1 M
@END
REPL COMBINATION2
COPY 1 M
@REP 2
COPY @{801,1} X
REPL CHECK_FILE3
COPY 1 M
@END
MARK CHECK_FILE3
LINK 800
MARK CHECK_FILE2
LINK 800
MARK CHECK_FILE1
LINK 800
LINK X
GRAB 200
TEST F = T
FJMP DROP_AND_REPORT
DROP
LINK -1
MAKE
COPY X F
COPY 0 X
MARK TRANSCRIBE_FILE
SEEK -9999
COPY F T
DROP
LINK T
GRAB 200
SEEK X
TEST EOF
TJMP FOUND_FILE
COPY F T
DROP
LINK -1
GRAB 400
SEEK 9999
COPY T F
ADDI X 1 X
JUMP TRANSCRIBE_FILE
MARK DROP_AND_REPORT
DROP
MARK REPORT_BACK
LINK -1
TEST MRD
FJMP REPORT_BACK
VOID M
HALT
MARK FOUND_FILE
DROP
LINK -1
GRAB 400
VOID F
MARK RETURN_HOME
LINK -1
TEST MRD
FJMP RETURN_HOME
KILL
HALT
MARK COMBINATION1
GRAB 300
LINK 800
JUMP FIND_COMBINATION
MARK COMBINATION2
GRAB 300
LINK 800
LINK 800
JUMP FIND_COMBINATION
MARK FIND_COMBINATION
COPY 9 X
SEEK 9999
COPY 0 F
SEEK -1
MARK TRY_DIGITS
MULI X 111 #LOCK
TEST #LOCK = 000
TJMP NEXT_NUMBER
ADDI #LOCK F T
SEEK -1
COPY T F
SEEK -1
MARK NEXT_NUMBER
SUBI X 1 X
COPY X T
TJMP TRY_DIGITS
COPY F #LOCK
JUMP REPORT_BACK
Job #44 – NETronics NET40 Modem – The Wardialer (=plastered)
=plastered has been interested in exploring the phone networks and finding hidden numbers. It’s up to you to help him with some of that exploration.
- Append the target phone numbers to file 301.
- Leave no trace.
- This job was the most brutal one for me to figure out how to optimize.
- The template number you are given can have anywhere between 1 and 3 placeholders, meaning you might have to test upwards of 1,000 phone numbers in a single test case.
- Once you’ve found 8 numbers, you do not need to find any more.
XA
SEEK -9999
MARK FIND_PLACEHOLDERS
ADDI X 1 X
TEST EOF
TJMP DONE_FINDING
TEST F < 9999
FJMP FOUND_PLACEHOLDER
JUMP FIND_PLACEHOLDERS
MARK FOUND_PLACEHOLDER
SEEK -1
SWIZ X 210 F
COPY 1 X
JUMP FIND_PLACEHOLDERS
MARK COUNT_PLACES
MARK DONE_FINDING
SWIZ X -21 F
LINK 800
JUMP NEXT_NUMBER
MARK DONE_INCREMENTING
COPY X F
MARK NEXT_NUMBER
SEEK -9999
@REP 11
SWIZ F 1 #DIAL
@END
REPL TESTER
COPY F X
TEST MRD
FJMP INCREMENT
SEEK -9999
VOID M
MODE
@REP 11
SWIZ F 1 M
@END
MODE
SEEK 1
COPY -1 #DIAL
MARK INCREMENT
SEEK X
COPY F X
SEEK -1
ADDI X 1 X
SWIZ X 1 T
TJMP DONE_INCREMENTING
SUBI X 10 X
COPY X F
SWIZ X -32 X
JUMP INCREMENT
MARK TESTER
LINK 800
COPY 1 M
XB
GRAB 301
LINK 800
COPY 8 T
MARK READ_NUMBER
@REP 11
COPY M F
@END
SUBI T 1 T
TJMP READ_NUMBER
KILL
DROP
GRAB 300
WIPE
GRAB 301
LINK -1
Job #45 – Española Valley High School – School Management System (selenium_wolf)
selenium_wolf doesn’t seem too pleased that his son didn’t make it into AP English class, so he’s going to hack into the school’s scheduling system and enroll him secretly.
- Modify the target file as specified.
- Leave no trace.
- AP English will only have a single time slot that it’s being offered in, while all other classes that you need to reschedule will only be offered in two different time slots.
XA
LINK 800
COPY F X
REPL SCHEDULER
COPY F M
WIPE
LINK 800
LINK 802
GRAB 235
SEEK 2
MARK FIND_ENGLISH
SEEK 1
TEST F = X
FJMP FIND_ENGLISH
SEEK -1
COPY 0 F
MARK VALIDATE_TIME
TEST M = X
COPY T M
TJMP VALIDATE_TIME
COPY M X
SEEK -9999
SEEK 1
MARK FIND_TIME_BLOCK
SEEK 1
TEST F = X
FJMP FIND_TIME_BLOCK
COPY F T
SEEK -1
COPY M F
COPY T M
TJMP VALIDATE_TIME
MARK FINISH
DROP
LINK -1
LINK -1
KILL
HALT
MARK SCHEDULER
GRAB 200
MARK FIND_CLASS
; TAKE IN CLASS NAME
COPY M X
SEEK -9999
MARK FIND_CLASS_TIME
SEEK 1
TEST F = X
FJMP FIND_CLASS_TIME
SEEK -2
; SEND CLASS TIME
COPY F M
; TAKE IN RESULT
COPY M T
SEEK 1
TJMP FIND_CLASS_TIME
; SEND INFO AGAIN
SEEK -2
COPY F M
COPY F M
SEEK 2
JUMP FIND_CLASS
Job #46 – Mitsuzen D300-N – Personal Storage Array (x10x10x)
x10x10x’s personal collection of anime in his storage devices is at risk as the storage array is failing. He will have to aggregate uncorrupted data from his three sets of backups, using tenuous connections.
- Create the specified files in your host. (0/6)
- Leave no trace.
- The links into the 3 arrays will appear and disappear randomly. Think about how you’ll get agents into the array, and how you’ll get them back out.
- It’s possible that more than one version of the backup will have an intact section of the data, you cannot expect only one file to be uncorrupted.
XA
GRAB 200
MARK NEXT_FILE
COPY F X
COPY 8 T
MARK DEPLOY
REPL COPY_801
REPL COPY_802
REPL COPY_803
SUBI T 1 T
TJMP DEPLOY
COPY F X
COPY -1 M
COPY -1 M
COPY -1 M
REPL TRANSCRIBER
JUMP NEXT_FILE
MARK COPY_801
LINK 801
JUMP COPY_FILE
MARK COPY_802
LINK 802
JUMP COPY_FILE
MARK COPY_803
LINK 803
MARK COPY_FILE
GRAB X
MODE
REPL WRITER
MARK READER
COPY F M
JUMP READER
MARK WRITER
MAKE
MARK TAKE_IN_VALUE
TEST MRD
FJMP DONE_WRITING
COPY M X
TEST X > 0
TJMP REAL_VALUE
COPY 0 F
JUMP TAKE_IN_VALUE
MARK REAL_VALUE
COPY X F
JUMP TAKE_IN_VALUE
MARK DONE_WRITING
MODE
LINK M
MODE
COPY 0 F
SEEK -9999
FILE T
MODI T 8 T
TEST T < 4
FJMP ORATE
LINK -1
MARK ORATE
COPY F M
NOOP
TEST EOF
FJMP ORATE
WIPE
HALT
MARK TRANSCRIBER
MAKE
COPY X F
MODE
FILE T
MODI T 8 T
TEST T < 4
FJMP TRANSCRIBE
LINK -1
MARK TRANSCRIBE
COPY 0 T
MARK GET_SET_OF_3
ADDI M T T
TJMP FOUND_VALUE1
ADDI M T T
TJMP FOUND_VALUE2
ADDI M T T
TJMP FOUND_VALUE3
;DONE
LINK -1
HALT
MARK FOUND_VALUE1
VOID M
MARK FOUND_VALUE2
VOID M
MARK FOUND_VALUE3
COPY T F
JUMP TRANSCRIBE
Job #47 – CrystalAir International – Ticketing System (deadlock)
deadlock is trying to set himself up with a dream vacation, and plans to hack himself some ticket bookings.
- Remove the tickets from the ticket lists. (0/X)
- Append the ticket IDs to file 301.
- Leave no trace.
- The first ticket will always be located in the USA host.
- A host will only have tickets to adjacent hosts. You cannot fly directly from USA to Poland, in this scenario.
- Make sure you book a feasible trip. The departure time for the second flight must come after the arrival time of the first flight, for example.
- The tickets are sorted in order of departure time, this could be helpful to you.
XA
COPY F X
REPL FIRST_SPIDER
COPY 0 X
JUMP SEND_DESTINATION
MARK SEND_TIME
COPY X M
; SEND SOURCE
COPY F M
MARK SEND_DESTINATION
COPY F M
SEEK -1
; GET RESULT: 0 OR TIME
COPY M T
FJMP SEND_DESTINATION
COPY T X
COPY M T
REPL ADD_TICKET
SEEK 1
TEST EOF
COPY T M
SEEK -1
FJMP SEND_TIME
HALT
MARK ADD_TICKET
GRAB 301
SEEK 9999
COPY T F
HALT
MARK FIRST_SPIDER
LINK 800
GRAB 200
JUMP FIND_DEPARTURES
MARK SPIDER_800
LINK 800
JUMP GRAB_FILE
MARK SPIDER_801
LINK 801
JUMP GRAB_FILE
MARK SPIDER_802
LINK 802
JUMP GRAB_FILE
MARK SPIDER_803
LINK 803
MARK GRAB_FILE
KILL
GRAB 200
MARK CHECK_COUNTRY
SEEK 1
TEST F = X
SEEK 3
FJMP CHECK_COUNTRY
; GET TIME
COPY M X
SEEK -5
MARK CHECK_TIME
SEEK 2
TEST F < X
SEEK 2
TJMP CHECK_TIME
SEEK -5
; COPY SOURCE TO X
COPY M X
MARK FIND_DEPARTURES
SEEK 1
TEST F = X
SEEK 3
FJMP FIND_DEPARTURES
SEEK -2
TEST F = M
TJMP FOUND_TICKET
COPY 0 M
SEEK 1
JUMP FIND_DEPARTURES
MARK FOUND_TICKET
COPY F M
SEEK -5
COPY F M
VOID F
VOID F
COPY F X
VOID F
SEEK -2
VOID F
VOID F
COPY M T
FJMP SPIDER
HALT
MARK SPIDER
REPL SPIDER_800
REPL SPIDER_801
REPL SPIDER_802
REPL SPIDER_803
JUMP CHECK_COUNTRY
Job #48 – Desktop – Unknown Context (Moss)
It’s time for the final mission of the game. Ember has realized that she is trapped within a simulation. In fact, within the video game of Exapunks. And she’d like to get out. So she’s going to transmit herself over the internet.
- Packetize and transmit the target data. (0/X)
- Leave no trace.
- Checksums are used in real life to validate the successful transfer of data from one place to another (like for downloads + uploads).
- The name of this mission is the name of the PC you are playing Exapunks on. You will also notice some hosts and files here that belong to your actual computer.
- Once an EXA enters the internet, it will error out automatically due to the unknown environment.
- The number of packets changes with each test case. The number of data values accordingly changes, but only in increments of 6 (this could be useful).
- It is likely that your last data packet will have fewer than 30 data values in it, but account for the case where it does end cleanly like that.
XA
GRAB 300
COPY F X
WIPE
LINK 800
LINK 885
GRAB 201
MARK FIND_WAREZ
TEST F = X
SEEK 1
FJMP FIND_WAREZ
SEEK -1
COPY F X
MARK ANNOUNCE
COPY X M
COPY M T
FJMP ANNOUNCE
XB
LINK 800
REPL LISTENER
MODE
REPL PACKETER
MARK READ_VALUES
COPY F M
JUMP READ_VALUES
MARK LISTENER
COPY 400 X
MARK START_COUNTDOWN
COPY 48 T
MARK COUNTDOWN
SUBI T 1 T
TJMP COUNTDOWN
TEST MRD
FJMP FINISH_UP
VOID M
ADDI X 1 X
JUMP START_COUNTDOWN
MARK FINISH_UP
KILL
GRAB 301
WIPE
GRAB X
MODE
JUMP PREPARE_CHECKSUM
MARK CLEAN_UP
WIPE
HALT
MARK PACKETER
MAKE
COPY 0 F
COPY 0 F
COPY 0 F
COPY 30 T
MARK WRITE_VALUES
COPY M F
SUBI T 1 T
TJMP WRITE_VALUES
MARK DONE_WRITING
MODE
COPY 1 M
MODE
REPL PACKETER
MARK PREPARE_CHECKSUM
LINK 885
SEEK -9999
COPY #ADDR F
COPY M F
COPY X M
SEEK 1
TEST EOF
TJMP CLEAN_UP
COPY 0 X
; DO FIRST TWO DIGITS
MARK CHECKSUM_12
SWIZ F 0102 T
ADDI X T X
SWIZ X 0301 X
TEST EOF
FJMP CHECKSUM_12
SWIZ X 0013 X
SEEK -9999
SEEK 2
SUBI F X X
SEEK -1
COPY X F
COPY 0 X
; SECOND TWO DIGITS
MARK CHECKSUM_34
SWIZ F 0304 T
ADDI X T X
SWIZ X 0301 X
TEST EOF
FJMP CHECKSUM_34
SWIZ X 1300 X
SEEK -9999
SEEK 2
SUBI F X X
SEEK -1
COPY X F
LINK 800
And that wraps up our share on EXAPUNKS: Dan’s Exapunks Solutions. If you have any additional insights or tips to contribute, don’t hesitate to drop a comment below. For a more in-depth read, you can refer to the original article here by Dan_TheGamerMan, who deserves all the credit. Happy gaming!