aboutsummaryrefslogtreecommitdiff
path: root/projects.html
diff options
context:
space:
mode:
Diffstat (limited to 'projects.html')
-rw-r--r--projects.html167
1 files changed, 103 insertions, 64 deletions
diff --git a/projects.html b/projects.html
index 099b347..a719b35 100644
--- a/projects.html
+++ b/projects.html
@@ -1,44 +1,62 @@
<html lang="en">
<head>
<title>Personal Projects</title>
- <link rel="stylesheet" href="style.css">
+ <link rel="stylesheet" href="style.css" />
<style>
- code {
- color: #505050;
- font-size: 10px;
- border: 1px solid grey;
- border-radius: 3px;
- padding: 1.75px;
- }
+ code {
+ color: #505050;
+ font-size: 10px;
+ border: 1px solid grey;
+ border-radius: 3px;
+ padding: 1.75px;
+ }
- pre {
- background: #f4f4f4;
- color: #505050;
- padding: 20px 0px 0px 20px;
- overflow: auto;
- }
+ pre {
+ background: #f4f4f4;
+ color: #505050;
+ padding: 20px 0px 0px 20px;
+ overflow: auto;
+ }
</style>
</head>
<body>
- <a style="text-decoration: none;" href="index.html"><--</a>
+ <a style="text-decoration: none" href="index.html"><--</a>
<h2>Personal Projects</h2>
<h3>Synacor Challenge</h3>
- After participating in <a href="https://adventofcode.com" target="_blank">Advent of Code</a>
- for a few years now, I have grown a fan of Eric Wastl's puzzles. This
- is a multi-part challenge that involves implementing a virtual machine
- to interpret and run the supplied binary file. You are also given a
- document outlining the <a href="https://raw.githubusercontent.com/waffle87/synacor_challenge/master/arch-spec" target="_blank">architecture specification</a>
- of the machine that can run the binary file. Once completed and the self-tests
- are passed, you're taken on text-based adventure as the program runs, that is very similar
- to AoC stories. The goal is to find 8 codes while completing various puzzles in
- the program. Before the original <a href="https://challenge.synacor.com" target="_blank">site</a>
- was taken down (pretty sure Eric doesn't work at Synacor anymore), you could validate the
- codes found on the site, but since it is no longer up, The codes can be manually verified.
- Thanks to <a href="https://github.com/Aneurysm9/vm_challenge" target="_blank">Aneurysm9/vm_challenge</a>
- for providing a binary file and matching checksums for the codes. I wrote a <a href="https://github.com/waffle87/synacor_challenge/blob/master/tools/validate.py" target="_blank">small script</a>
- to validate them from a text file. I chose to implement my solution in C with a simple stack
- data structure, as that seems most fitting for the task at hand. My implementation and related tools can
- be found <a href="https://github.com/waffle87/synacor_challenge" target="_blank">here</a>
+ After participating in
+ <a href="https://adventofcode.com" target="_blank">Advent of Code</a> for a
+ few years now, I have grown a fan of Eric Wastl's puzzles. This is a
+ multi-part challenge that involves implementing a virtual machine to
+ interpret and run the supplied binary file. You are also given a document
+ outlining the
+ <a
+ href="https://raw.githubusercontent.com/waffle87/synacor_challenge/master/arch-spec"
+ target="_blank"
+ >architecture specification</a
+ >
+ of the machine that can run the binary file. Once completed and the
+ self-tests are passed, you're taken on text-based adventure as the program
+ runs, that is very similar to AoC stories. The goal is to find 8 codes while
+ completing various puzzles in the program. Before the original
+ <a href="https://challenge.synacor.com" target="_blank">site</a> was taken
+ down (pretty sure Eric doesn't work at Synacor anymore), you could validate
+ the codes found on the site, but since it is no longer up, The codes can be
+ manually verified. Thanks to
+ <a href="https://github.com/Aneurysm9/vm_challenge" target="_blank"
+ >Aneurysm9/vm_challenge</a
+ >
+ for providing a binary file and matching checksums for the codes. I wrote a
+ <a
+ href="https://github.com/waffle87/synacor_challenge/blob/master/tools/validate.py"
+ target="_blank"
+ >small script</a
+ >
+ to validate them from a text file. I chose to implement my solution in C
+ with a simple stack data structure, as that seems most fitting for the task
+ at hand. My implementation and related tools can be found
+ <a href="https://github.com/waffle87/synacor_challenge" target="_blank"
+ >here</a
+ >
for those interested. The rest of what's here is likely to be spoilers...
<h4>Code 1</h4>
This one is found in plain text in the <code>arch-spec</code> file.
@@ -49,13 +67,15 @@
</pre>
<h4>Code 2</h4>
After implementing a basic interpreter that supports the first subset of
- opcodes (<code>out</code>, <code>noop</code>, and <code>halt</code>), this one is found in the output.
+ opcodes (<code>out</code>, <code>noop</code>, and <code>halt</code>), this
+ one is found in the output.
<pre>
Welcome to the Synacor OSCON 2012 Challenge!
Please record your progress by putting codes like
this one into the challenge website: &ltCODE&gt
</pre>
- Just for fun, this one can also be spotted early on in the hexdump of the binary file:
+ Just for fun, this one can also be spotted early on in the hexdump of the
+ binary file:
<pre>
00000210 13 00 20 00 13 00 49 00 13 00 6d 00 13 00 6f 00 |.. ...I...m...o.|
00000220 13 00 46 00 13 00 7a 00 13 00 74 00 13 00 57 00 |..F...z...t...W.|
@@ -64,8 +84,8 @@ this one into the challenge website: &ltCODE&gt
</pre>
<h4>Code 3</h4>
To retrieve this code, the interpreter must be fully implemented and must
- pass the initial self-tests. If those conditions are met, the third code
- is printed.
+ pass the initial self-tests. If those conditions are met, the third code is
+ printed.
<pre>
Executing self-test...
@@ -73,9 +93,9 @@ self-test complete, all tests pass
The self-test completion code is: &ltCODE&gt
</pre>
<h4>Code 4</h4>
- Now, the adventure aspect of the challenge begins. Pay attention to the things
- of interest, and <code>take</code>/<code>use</code> them as needed, like the
- tablet here.
+ Now, the adventure aspect of the challenge begins. Pay attention to the
+ things of interest, and <code>take</code>/<code>use</code> them as needed,
+ like the tablet here.
<pre>
What do you do?
take tablet
@@ -90,9 +110,9 @@ kind of code?
</pre>
<h4>Code 5</h4>
This puzzle appears to be a maze after several entries of south, north,
- west, etc. I decided to map my steps with pen and paper. After not too
- long, I arrive at the next code, but not without getting lost and
- eaten by grues numerous times.
+ west, etc. I decided to map my steps with pen and paper. After not too long,
+ I arrive at the next code, but not without getting lost and eaten by grues
+ numerous times.
<pre>
What do you do?
east
@@ -102,9 +122,9 @@ Chiseled on the wall of one of the passageways, you see:
&ltCODE&gt
</pre>
<h4>Code 6</h4>
- The next puzzle is a maths problem. There will be some coins each with
- a numeric value that you can inspect to see. The coins must be arranged
- in a specific order to satisfy the equation on the wall.
+ The next puzzle is a maths problem. There will be some coins each with a
+ numeric value that you can inspect to see. The coins must be arranged in a
+ specific order to satisfy the equation on the wall.
<pre>
There is a strange monument in the center of the hall with circular slots and unusual symbols. It reads:
@@ -117,10 +137,16 @@ _ + _ * _^2 + _^3 - _ = 399
<li>Concave coin: 7</li>
<li>Corroded coin: 3</li>
</ul>
- This is easy enough to be by hand, but why not make another <a href="https://github.com/waffle87/synacor_challenge/blob/master/tools/coin.py" target="_blank">script</a>
+ This is easy enough to be by hand, but why not make another
+ <a
+ href="https://github.com/waffle87/synacor_challenge/blob/master/tools/coin.py"
+ target="_blank"
+ >script</a
+ >
to do it. Looks like <code>9 + 2*5^2 + 7^3 - 3 = 399</code>
- will do it, so arrange the coins in order blue, red, shiny, concave, corroded.
- After completing this, a previously locked door opens and our next code is revealed.
+ will do it, so arrange the coins in order blue, red, shiny, concave,
+ corroded. After completing this, a previously locked door opens and our next
+ code is revealed.
<pre>
What do you do?
use teleporter
@@ -130,16 +156,24 @@ You activate the teleporter! As you spiral through time and space, you think yo
&ltCODE&gt
</pre>
<h4>Code 7</h4>
- This is by far the most clever puzzle in this challenge. There's a
- strange book that contains some information about using the teleporter.
- Some provision to log instructions and register values is crucial
- for this puzzle. It appears we must set the 8th register to a certain
- value. We can set the register to a non-zero value to progress in the
- program, but it will not provide the correct code, thus we need to find
- the correct value. The underlying algorithm is a variation of the <a href="https://en.wikipedia.org/wiki/Ackermann_function" target="_blank">Ackermann function</a>.
- The modified function can be found in the <a href="https://github.com/waffle87/synacor_challenge/blob/master/tools/ackermann.c" target="_blank">program</a>
- used to find the register value. Python proved to be a bit too slow to compute this.
- Once set to the correct value (25734 in my case), the seventh code is shown.
+ This is by far the most clever puzzle in this challenge. There's a strange
+ book that contains some information about using the teleporter. Some
+ provision to log instructions and register values is crucial for this
+ puzzle. It appears we must set the 8th register to a certain value. We can
+ set the register to a non-zero value to progress in the program, but it will
+ not provide the correct code, thus we need to find the correct value. The
+ underlying algorithm is a variation of the
+ <a href="https://en.wikipedia.org/wiki/Ackermann_function" target="_blank"
+ >Ackermann function</a
+ >. The modified function can be found in the
+ <a
+ href="https://github.com/waffle87/synacor_challenge/blob/master/tools/ackermann.c"
+ target="_blank"
+ >program</a
+ >
+ used to find the register value. Python proved to be a bit too slow to
+ compute this. Once set to the correct value (25734 in my case), the seventh
+ code is shown.
<pre>
You wake up on a sandy beach with a slight headache. The last thing you remember is activating that teleporter... but now you can't find it anywhere in your pack. Someone seems to have drawn a message in the sand here:
@@ -148,13 +182,18 @@ You wake up on a sandy beach with a slight headache. The last thing you remembe
It begins to rain. The message washes away. You take a deep breath and feel firmly grounded in reality as the effects of the teleportation wear off.
</pre>
<h4>Code 8</h4>
- This looks to be some sort of arrangement of tiles, each with a
- number of arithmetic operation. By moving from one tile to another,
- you are constructing an expression that must evaluate to the number
- on the door: 30. This is a BFS application to construct the shortest
- path to the door. I made another <a href="https://github.com/waffle87/synacor_challenge/blob/master/tools/orb_maze.py" target="_blank">script</a>
- to achieve this. After inputting the appropriate cardinal directions,
- we see the final code in a mirror. Of course, it is entered in reverse.
+ This looks to be some sort of arrangement of tiles, each with a number of
+ arithmetic operation. By moving from one tile to another, you are
+ constructing an expression that must evaluate to the number on the door: 30.
+ This is a BFS application to construct the shortest path to the door. I made
+ another
+ <a
+ href="https://github.com/waffle87/synacor_challenge/blob/master/tools/orb_maze.py"
+ target="_blank"
+ >script</a
+ >
+ to achieve this. After inputting the appropriate cardinal directions, we see
+ the final code in a mirror. Of course, it is entered in reverse.
<pre>
You gaze into the mirror, and you see yourself gazing back.
But wait!