Opus Magnum Tournament 2024

2024 May 06

I learned of the Opus Magnum 2024 tournament from a video made by Biggie showing a small machine with a single arm and 336 instructions that runs in a finite time larger than Graham’s number. On Biggie’s encouragement, I decided to enter the tournament (under the name “who”) and have inventoried my submissions and the ideas behind them here; for live commentary follow the links to the tournament announcement videos below.

If you want to see innovative and creative Opus Magnum machines, read no further – go check out Biggie’s video instead. (Well, if you stick around, I think my week 6 showcase is pretty fire.)

What is Opus Magnum?

In Opus Magnum, the purpose is to design and program an alchemical machine which consumes a particular input and produces a particular output. Each machine consists of a finite number of arms and glyphs. A glyph causes a particular transformation on any atoms that sit on it; for example, the bonder and debonder glyphs create and remove bonds between atoms. An arm can grab and move atoms according to the instructions it is programmed with.

When the machine has finished executing the sequence of instructions, it starts over from the beginning. There are no instructions for performing explicit control flow, so conditional behavior or nested loops requires some cleverness.

Scoring

The tournament consists of 7 weeks of puzzles. Each puzzle is scored in two ways (or three in week 7), and participants generally submit separate machines for each scoring method.

Scoring is performed by ranking all submissions by a certain metric; ties are then broken by another metric, and so on.

Some of the common metrics are:

For example a scoring method of “GAC” means that machines are evaluated first by guilders (ie, cost), with ties broken by area, and further ties broken by cycles.

Other metrics will be explained as they arise.

I have omitted the week 0 and break week puzzles as I did not participate in those.

Week 1: Blue Vitriol

Week 1

Before the tournament, my only experience with Opus Magnum was playing the campaign casually some years ago (I still haven’t finished the production puzzles in the appendix). I had sometimes aimed for low cycles but had no experience with the other metrics; therefore I was surprised to find myself instantly taking a liking to the cost metric.

ABBOTT? (Rate > Cost > Instructions)

Solution file; Video commentary; 42nd place (score 5R / 1155G / 916I; winner was kaliuresis with 10/3 R / 590G / 131I)

My solve, titled “ABBOTT?”, placed 42nd with a score of 5R / 1155G / 916I. Strangely, immediately before my solution (and name) was first revealed on the results stream, Biggie asked in the chat “who got lucky number 42”… which was true! It appears that Biggie’s omission of the question mark was responsible for summoning my submission into existence.

Computing the optimal rate, 10/3 R, is not difficult. Actually building a machine that does those transformations is rather trickier; Zorflax correctly identified my difficulties in his commentary.

My machine is based on several sliding chains of atoms to which partially-completed products are attached; the chain then slides these products down to another part of the machine which can continue the work. Unfortunately with about 10 minutes to go until the deadline I saw I was not going to quite finish the last steps of the machine in time (I think I had all the arms laid out, they just needed to be programmed), so I neutered the incomplete parts at the lower right to avoid collisions and submitted what I had.

To achieve optimal rate I would have to start the lower-left part of the machine around 460 cycles earlier than the rest, so that there was time for the water-mercury dimers to catch up to where they are needed, but I did not know about external tools (ie, omclone) that make such edits easier until later.

36 entrants, the large majority, managed to achieve minimum rate.

COSTELLO? (Cost > Area > Cycles)

Solution file; Video commentary; 29th place (score 80G / 21A / 1087C; winner was kaliuresis and rebix, each with 70G / 21A / 671C)

Any solution requires at least 70 guilders: one arm, a bonder, a debonder, a calcifier, and projection glyph. The first question is whether this is sufficient. I started by considering a length 2 arm, as I figured a shorter arm would have difficulty reaching the atoms being manipulated, and with a longer arm the grab points would be too far apart to be useful.

It is not hard to prove that the sublattice of positions defined by the length of the arm is invariant, in that atoms can never enter or leave this sublattice, and therefore the problem is impossible with a length 2 arm. (This is an argument I later learned is called channels theory in the community.) Unfortunately I did not have this argument so clearly formulated to notice that a length 1 arm would define a sublattice containing the entire plane, and so this argument does not show the impossibility of solving with a length 1 arm.

Having incorrectly dismissed 70G as impossible, I proceeded with 80G, which allows two track pieces as additional mechanisms, giving the arm greater flexibility. After discovering a suitable layout at minimum area it took a few hours to program, which was quite tricky in the limited space; you cannot directly build the outputs but must build carefully chosen intermediates that allow you to shuffle atoms to places they otherwise could not reach.

This was the smallest 80G submission (second-smallest was 23A). 28 people, half of the participants, achieved the minimum 70G, of whom 8 achieved the secondary minimum 70G / 21A. Two people exactly tied at first place! After sweeping week one, kaliuresis’s lead would steadily grow for the rest of the tournament.

Week 2: Local Anaesthetic

Week 2

Week 2 brought the first funky metric, tarcles, which scores as (number of track pieces + number of arms) * cycles. Any serious submission will have zero track, as an extra arm is almost always much more useful than any single track piece, but rather than banning track entirely the scoring allows for suboptimal submissions (just scoring poorly).

KNOCK KNOCK (Area > Cost > Cycles)

Solution file; Video commentary; 22nd place (score 30A / 125G / 1860C; winner was OMGITSABIST with 28A / 105G / 1472C)

As always for an area solve with a large output, the first decision to make is the final bond and swing. The center bond, with a two hex translation, is a logical (and common) choice. Outside of the footprint swung over by this final motion, one needs at least two more hexes, for the earth input and an arm, making a total of 28A. 5 people managed to achieve this minimum; each used a tribonder (unlike me), and the final bond was not the central bond but adding two elbows to the near side.

Besides incorrectly choosing the final bond and using one additional more hex than was necessary, my layout was particularly poor – I had the lowest ranked 30A solve, and a difficult to access debonder prevented straight-forward construction of the product.

I made heavy use of input suppression as I had learned that technique from the week 1 solutions.

ORANGE (Tarcles > Cost > Area)

Solution file; Video commentary; 18th place (score 468 tarcles / 170 G / 77A; winner was biggie with 333 tarcles / 240G / 125A)

There once was a girl named Particles.
There once was a boy named Charcoals.
  Cold feet.
  Arms meet:
Tarcles.

(I belatedly realized that “sparkles” was a rhyme for “tarcles”, alas.)

I know no principled way to approach tarcles beyond trying out each number of arms separately. I found a very clean way to build elbows efficiently with two hexarms, and then later found a less elegant but almost as good way to build elbows with one hexarm. Several others had a similar strategy with similar rankings.

Week 3: Touchstone

Week 3

A few new metrics again this week: the product metric is the product of cost and area, and the looping metric is 0 for solves that loop and 1 for solves that don’t loop – as always, lower is better. A solution is considered to loop if it satisfies two conditions: it must run to infinity without crashing, and the state of machine (including atoms on the board) must eventually repeat when ignoring waste atoms. Atoms are considered waste atoms if they will never again touch a glyph or arm (such atoms can only interact via crashing, which is disallowed, and therefore cannot influence the future behavior of the machine).

SONIC SCREWDRIVER (Cycles > Cost * Area)

Solution file; Video commentary; 8th place (score 31C / 52200X = 600G * 87A; winner was SpiritualShampoo with 31C / 25075X = 425G * 59A)

As thoroughly explained in the commentary stream, 31 cycles is the minimum possible for this puzzle, and there are a wide diversity of ways to achieve this minimum. I took the approach that felt most obvious to me: each output was built from two fire-salt inputs and two earth-salt inputs, together with an extra fire atom. These 6 extra fire atoms come from a buffer that is filled by taking the first earth-salt input and the first two fire-salt inputs. Most of the difficulty I faced was in managing this buffer of 6 atoms, which was expensive in both space and cost.

14 people achieved minimum cycles. The star of the stream was indisputably Madmaster5000, whose solution notes anticipated their placement and the commentary thereof – and the commentary thereof.

TARDIS (Sum > Looping > Instructions)

Solution file; Video commentary; 21st place (score 420S = 200G + 142C + 78A / 0L / 70I; winner was morraconda with 309S = 140G + 111C + 262I / 1L / 262I)

The Alchemist, in desperation, descends to a secret compartment in the basement and pushes a button. Red eyes emerge from the smoke as the Alchemical Machine stirs to life.

“O Mighty Machine! Help me in my hour of need! How do I solve this sum puzzle?”

The Alchemical Machine pauses, and says: “Ah geez, I dunno mate, maybe make some little tringles or something?”

The Alchemist asks, “…Are you high?”.

I used a straightforward and logical motif: partition the product into three identical triangles (“tringle”), each made up of one earth-salt and one fire-salt input, with one salt waste. I was pleased to make some effective re-use of the (de)bonders. Commentary pointed out that using a duplicator can be more efficient than building a salt waste chain.

Several comments were disappointed by my instruction count. Sorry.

Week 4: Dental Amalgam

Week 4

Week 4 brings with it the production cabinet, and the end of unlimited free space. Week 4 also is the first week I had hex grid paper, which I think noticeably improves my performance in the tournament from here on.

In the production cabinet, atoms are communicated between the different chambers using the conduits, which can transmit at most 1 atom per 3 cycles. Conduits can be used in both directions simultaneously so long as atoms are dropped on the same cycles – this is called “conduit phasing”.

ASK NOT FOR (Cycles > Cost)

Solution file; Video commentary; 3rd place (score 124C / 675G; winner was morraconda with 122C / 630G)

8 entrants1plus Zorflax achieved the optimal rate, 18R (ie, one product every 18 cycles). In free space the optimal rate is input-limited at 12R; however, if the inputs are not in the same chamber as either of the outputs, then the conduits limit you to 13.5R, which fully saturates four (IIRC) of the six conduits.

I predicted 18R would be a common target for people to pursue, so I started by trying to find a way to sneak below 18R. Any reasonable solution below 18R requires passing at least one fire (or salt) atom from a side-chamber to the other side-chamber via the main chamber. After much attempts I gave up on this pursuit, and consensus seems to be that below 18R is impossible.

To even achieve 18R was rather harder than I expected, as my main chamber assembly kept running into problems with the final swing covering a vital conduit (like Goodbye Galaxy), slowing the solution to 19R.

With much effort I eventually found a main-chamber layout that reached 18R. My main chamber was exactly identical to multiple other solutions, despite the difficulty I had in finding it. At 18R, the race for minimum cycles is decided by latency: my main chamber had an extra latency of 3 cycles – I beat out others with the same main chamber because my right side chamber had a latency of 0. This surprised me, as I thought the right chamber was easy to find, and any advantage I had would be in the main chamber; but instead my right chamber was unique.

Rebix, in second place, found a superior main chamber with only 1 extra latency, but used a common design for the side chamber that introduced another latency. This brought them one cycle faster than me, at 123C. Simply combining our chambers trivially makes a solution at 122C. (Such a solution would have lost to first place on the cost tie break.)

Morraconda took first place with a completely different approach, at 122C. After the tournament was over, rebix was able to achieve the minimum 121C (zero unnecessary latency).

(Later morraconda explained to me that the actual theoretical min is 120C, because you can grab the last fire atom one cycle earlier and calcify it before putting it in a conduit, saving a cycle. This was done in the 121C that rebix found based on their 122C solution. However there remains one last extra latency in the output chamber that morraconda believes is impossible to eliminate.)

THE BELL TOLLS, THE BELL TOLLS FOR THEE (Instructions > Cycles > Cost)

Solution file; Video commentary; 28th place (score 76I / 2043C / 520G; winner was PentaPig with 35I / 315C / 410G)

I had no real ideas for how to approach this so I just decided to make the lowest period solve I could, under the theory that a low period means fewer instructions. This may or may not have been effective, but it did mean I had the slowest submission.

There were two difficulties: first, at left hexarm 1 hands off alternating fire and iron to hexarm 2, but hexarm 2 needs the irons to be consecutive to purify them. To solve this the irons are put into the conduit to the right chamber, and then returned to the left chamber by arm 9 on the track; every other iron is delayed by a period, causing them to bunch up as needed. Second, the mors need to be bonded together to form bimors, but a new mors is formed only once every 4 tape periods. This is solved with output suppression on the animismus glyph and conditional behavior on hexarm 5.

Week 5: Latch-hook fireworks

Week 5

Hell week begins!

Latch-hook fireworks carries a unique gimmick: triplex bonds, which can only be formed between fire atoms, in non-fire outputs. To create the fire-air dimer, for example, requires the following steps:

Initially I was very excited for this puzzle – but ultimately I poured in a huge amount of work for less-than-stellar results.

A new metric this week, amarms, or “area minus arms”, counts the area of the solve minus the number of arms in the solve.

DR SEUSS (Amarms > Cycles > Cost)

Solution file; Video commentary; 18th place (score 20amarms / 171C / 1605G; winner was SpiritualShampoo with 20amarms / 92C / 1230G)

I encourage the reader to refer to the video stream as the invisible arms mod makes it actually possible to see what is happening.

This is a cycles race, as it is not hard to achieve minimum amarms (38 people, almost all participants, did so). Ironic then that I had the costliest solution in the cycles category, and the slowest solution in the cost category.

I began, as always, by pursuing the theoretical minimum, and moving up from there. Averaged over the four possible products, each dimer of input requires 1.75 calcifications, 1.75 duplications, 1 debond, and 1.5 triplex bonds. Each of those glyphs can only perform a single operation every cycle, and at minimum amarms you can only have one of each glyph, so producing one output every 2 cycles is very close to maximum utliziation.

Now this leaves a very tricky geometry problem of how to lay out the glyphs so that atoms can move from one glyph to the next with minimal latency. Low latency is necessary because any time an atom wastes in transit it is sitting on some glyph, preventing it from being used. Fortunately there are four output glyphs with relatively low utilization that can be used to briefly buffer atoms still in transit.

The geometry problem is compounded by the fact that from input to output, many atoms have to be calcified and duplicated twice, with a single step between (the triplex bonder), necessitating a very tight loop of length 3.

It is desireable for all the glyphs to be near each other, but this can make it difficult for arms to reach the middle of the glyph clump and perform requisite motions.

After finding a reasonable layout for which all desired motions were physically possible, it was time to program the arms to perform those motions. Because each loop moves in unison, grabs are only possible on cycles where the whole loop is not moving. Since I was aiming for peak utilization of one calcification per cycle, that means the atoms currently being operated on must be in constant motion, and therefore the track loop they are on cannot grab additional atoms. Consequentially key parts of the machine require two or three different redundant track loops capable of inducing the same motions, and it is a major challenge to figure out which arm does each task without conflicting with other arms on the same track loop.

Trying to program the machine directly was simply too overwhelming, so I wrote out on paper every cycle in the main loop, with the locations of the atoms and the motions they are undergoing. With some trial-and-error I was able to assign which track loop performs each operation.

With diagram in hand, programming was feasible though challenging, not least because the atoms and glyphs were buried beneath a mountain of arms. After the first loop was completed, and a pounding headache achieved, it was time to program the next 5 loops. This was done by ignoring the main field of play and treating the instruction tape as a purely abstract game of symbols that can be algebraicly manipulated according to certain constraints. Miraculously this worked without error, and once I had 7 or 8 loops I returned to looking at the main field and trimmed instructions off of the end until I had 6 almost sets of products completed.

45 minutes before the deadline, and I was done! Well, there was one small hiccup. In designing the main loop three of the outputs had come out in a very natural and elegant way, but not the earth output: I had been making sets of three of the four outputs. The plan was to fix the main loop to do all four outputs but there simply wasn’t time; I took some ibuprofen and committed myself to making the earth output in any way I could, no matter how inefficient. After some rapid prototyping and desperately frantic copy-pasting, I got my submission in with about 10 minutes to spare. Thus unfortunately it takes about as many cycles to do the earth output as the other three outputs combined.

My solution notes were intended to capture the feeling of programming amarms:

’Twas brillig, and the slithy toves
   Did gyre and gimble in the wabe:
Amarmsy were the borogoves,
   And the mame raths outgrabe.

“Arm the Jabberwock, my son!
   The jaws that bite, the arms that catch!
Amarm the Jubjub bird, and shun
   The amious Bandersnatch!”

Am in uffish thought he stood,
   The Abberwock, with eyes of flarme,
Ame whaffling through the amargey wood,
   Am barbled am it carme!

One, two! One, two! Arm arm am arm
   The varpal arm went amarm-arm-am!
Ararm arm! Arm. Marm. Amarm. Armamarmamarm.
Amarm armar amar armarm. Amarm amarm am arm amarm.

Zorflax did an admirable job of sight-reading a nonsense poem with extra nonsense on top.

HORTON HEARS A WHO (Cost > Cycles > Area)

Solution file; Video commentary; 9th place (score 80G / 12973C / 279A; winner was kaliuresis with 80G / 1971C / 247A)

However painful programming amarms was, achieving a cost of 80G was twenty times worse. It was programmed entirely in the external omclone editor, for which I am very grateful to its author “notgreat”, as this would have been simply impossible to program in game. At the time, it was limited to manipulating 4000 instructions at once, so even with omclone it was cumbersome. The eagle-eyed viewer will see the machine spends about 50 cycles doing nothing because I used spaces (which are noops) as breakpoints for quickly navigating the instruction tape.

Some kind of scaffolding or supporting framework is needed to access the triplex bonder productively. From my experience with blue vitriol, right away I realized when I began work on the puzzle was that I as going to need a large cradle that was capable of stepping “over” a dimer, as otherwise I would have no way for finished products to get to the output glyphs with the scaffold in the way.

With no small amount of effort, I was able to design the large cradle seen in my final solution. Thinking I was well on my way to solution, I started to program the fire-fire output, before quickly running into a problem – the shape of the cradle did not permit it to reach all three of the triplex bonds with a dimer it is holding.

I was flummoxed and started casting about for new solutions, spending some time investigating long 2-by-n or 3-by-n sticks without success. About 20 hours into solving I hit my first real progress: I moved the debonder to abut the triplex bonder, so that I could strand a certain shape onto the triplex bonder and then recover it, making an 8-atom fat zig zag shape.

Again, I got stuck, and found that it was impossible for me to make all the products. After rotating the duplicator I tried again. I made a diagram on paper of every possible interaction of the 8 atom shape with each of the four glyphs (debonder, triplex, duplicator, calcifier) and then worked out on paper which sequence of glyph interactions I had to perform to make each output.

From there, it was simple, right? I knew which positions I had to put the zig zag in to achieve each desired glyph interaction, so just move it through those positions in order. Well, due to the large size of the zig zag and my terrible layout which crammed all the glyphs together, any movement of the zig zag would invariably strike unintended glyphs. This meant that I was constantly having to do additional actions to undo counterproductive interactions, and was always struggling to avoid certain positions which would result in actions that there was no way to undo.

In retrospect, what I should have done is made a 6-by-20 chart of every single position the zig zag can be held, where it is possible to traverse vertically in the chart by rotations and horizontally by pivots. I would then label every forbidden position (those that entail a glyph interaction that creates an unsolvable state) in the chart, as well as the various intended and unintended interactions at each position, resulting in a toroidal maze that needs to be navigated. In the absence of such a chart I was effectively navigating this maze blindly, trying different routes until I would get into a deadend and have to backtrack.

With an enormous sense of relief I at long last produced a single fire-fire output. Unfortunately I was left in a different state than I had started work on the output, so the second fire-fire output was programmed again, blindly feeling through the state space maze, completely from scratch. Fortunately outputs 3 through 6 could be made by copying the code for output 2.

By the time I had finished the fire-fire output in this manner, I was fully committed to finishing the puzzle, but the difficulty grew enormously with the other outputs which required a more delicate sequence of duplications. Fire-earth was next, for which I modified the cradle to carry a second earth atom (I had anticipated that I would need earth on the cradle, but the first earth I put on it gets unavoidably calcified before I can use it). Now I had the additional challenge to not accidentally calcify this earth, too. Fire-earth was much more work than fire-fire, and to finish the first output I had to tediously spin the cradle around to the opposite orientation. This meant that, again, the second fire-earth output had to be programmed completely from scratch with the new orientation.

By the time I got to fire-air, I realized that my original purpose for the cradle was unnecessary (it does get a little mileage of stepping over dimers but that could have been avoided). However it was far too late to be adjusting my solution by removing it, and it still served two useful purposes: it had a bump on one side that was the perfect shape for input suppression, and it was a source of fire and earth atoms for duplication. Unfortunately, despite its gross size, I had run out of places to put further atoms on it, and none of the 12 air atoms I put on it both survived calcification and were in a position accessible to duplication.

Therefore for fire-air I adopted a new strategy, and simply kept the air in the zig zag shape, carefully duplicating it around. This was tedious (air and fire chase each other in circles around the zig zag several times), and again I had to program the second fire-air from scratch, but at least there was an upside – I could re-use the same code to do fire-water, with minor tweaks for the different bond. Thus I only had to write 6 completely different construction methods in total, and not 8.

At 12973 cycles, this was the slowest scoring submission in the whole tournament, although one week 7 submission did manage to go above 10000 cycles.

I don’t know how long I spent working on this but it was definitely well upwards of 50 hours. I was absolutely blown away to see that 9 people had achieved 80G, and mostly with considerably less effort. I was hampered by a poor glyph layout, which I committed to once I was able to make progress with it. Most of the submissions placed useful glyphs “behind” the input glyphs, which I had dismissed as infeasible because the input would get in the way, but has the advantage of reducing the accidental glyph strikes that plagued me. And while I found that smaller shapes like the chevron were impossible with my glyph layout, apparently they were viable with the layouts other people used.

Week 6: Thermal fuse

Week 6

This week features a polymer, which is almost the same as a normal product with some strange validation rules. Thanks to Biggie who explained these rules to me in detail. Like last week, it has triplex bonds, though more conventionally placed.

LET THE DOGS OUT (Height > Period > Cycles)

Solution file; Video commentary; 13th place (score 4H / 4P / 130C; winner was Madmaster5000 with 4H / 3P / 247C)

I spent most of the effort this week on the HPC metric, but whether I had submitted my initial solution (136 cycles) or more aspirational solution (which doesn’t quite validate, at 94 cycles) would have had no change in my standings.

After initially dismissing period 3 as impossible, on the final day some over-talkers in the discord led me to suspect there was a way. I tried a diversity of approaches but each time got stuck at a different obstacle, as I failed to come up with the wanding techniques that can be used to effectively hand off molecules between arms at period 3. 5 people were not so stymied, and achieved period 3, each in a unique way. Of course, the methods to do so felt so obvious once I saw them, especially Madmaster5000’s amazing and elegant solution.

WHO BY FIRE (Area > Cycles > Cost)

Solution file; Video commentary; 1st place (score 63A / 612C / 155G; second place was kaliuresis with 63A / 853C / 155G)

I put rather less effort into the area metric, so was increasingly surprised to watch the area count creep down ever so slowly during the stream, with only four entrants2plus ShadowCluster, a play tester, who had the fastest 63A submission to achieve minimum area. When the top two were announced I was disappointed, as kaliuresis’s incredible acumen had been on display throughout the tournament – then stunned to hear that I had somehow come out ahead.

I tried several layouts on paper, most of which are shown in my notes here:

Eventually I found a layout where all requisite swings were possible, which was almost identical to the layout Kazyan used to reach 4th place. Once I programmed it in the computer I discovered an issue at the very end – the last buffered atom has no place it can go, and it can’t be bonded on to the final monomer as doing so goes outside of the available area.

Kazyan found a quite clever and simple solution to this problem, which was to attach the buffer atom with a triplex bond, as this bond is not part of the output glyph and so does not need to be correct. I did not think of this, so I discarded the layout until I found another that worked. This second layout was based on two arms, giving it a significant speed advantage over third and fourth places which had only one.

It was only luck that I happened to place first instead of somewhere else in top four, as I had been trying all sorts of layouts (either one or two arms, left or right of polymer) and simply used the first one I found that could validate. For a given layout solving is pretty straightforward, so most of the variance in cycle count is due to choice of layout. I did do a little optimization (at the beginning of the construction of the second monomer, arm 2 does a pretty cool swing of a fire atom over the input. This does not happen in the other monomers.) but nothing that came close to influencing placement.

Fiesta on commentary pointed out that new players may be averse to placing input in the middle where it is in the way; indeed I prioritized layouts with input in the middle because that makes suppression easier, and I assumed for an area puzzle that suppression is the default state.

I wrote in the notes,

Who writes, “Orange you glad I didn’t say banana?”. That’s it, that’s the only thing in who’s notes. Who knows what who meant by that.

The stream is taking a lot longer than I was hoping so to save time I’m just going to disqualify the remaining entries. That’s right, I, Zorflax, have made that decision and anything I say later cannot undo it. Congrats who for getting first place in this completely fair and legitimate manner. This is the end of the stream, see everyone next week for the (R - lexC) puzzle with quantum bonds!

I had originally planned on submitting that in week 5 but postponed after hearing Madmaster5000’s brilliant week 4 notes which did a better job with a similar gimmick. (I chose to use these notes for the metric that I thought I would place worse in… oops.) Apparently Zannick was on the same wavelength… high-five.

FIRE (Showcase)

This was the only week I submitted a showcase (ie, non-scoring) submission.

Solution file; Video commentary

The commentators did a good job explaining how the solution works. One detail that was overlooked is that the polymer is missing one of the required horizontal bonds every 6 monomers, which I was unable to fix despite much struggling. However only 6 monomers are needed for the solution to validate.

Zannick pointed out it actually says “FIRF”… alas I couldn’t find a fix for that issue either, because I couldn’t get three chunks to move independently in sync at period 4.

Week 7: Critellium

Week 7

For the final week we get metal mayhem. Metals in Opus Magnum are sequenced in a hierarchy, going from lead, tin, iron, copper, silver, to gold. Each metal can be formed from two of the previous metal (“purification”), or one of the previous level plus one quicksilver (“projection”). When trying to maximize the amount of product produced for a given collection of input atoms, we must carefully decide when to project and when to purify; with some thought, one sees that purifying lower metals and projecting high metals is more efficient than the other order. Therefore there generally exists for each input/output a unique threshold at which (potentially) a mix of purifying/projecting can occur, with solely purifying below this threshold and solely projecting above it.

Computing the optimal ratio of input to output is easy enough (it took me about 2 minutes to do). First, it is a pretty safe guess that copper -> silver is the purifjection threshold. So consider taking 8 inputs and purifying them up to copper: we get 8 lead = 1 copper, 8 tin = 2 copper, and 8 iron = 4 copper, for a total of 7 copper and 8 quicksilver, which is 15 “copper-ish” atoms. Now the output requires 6 silver and 5 quicksilver to make (because each gold equals one silver plus one quicksilver); each silver needs two “copper-ish” atoms (either two copper, or one copper and one quicksilver), so each output needs 6 * 2 + 5 = 17 “copper-ish” atoms to make it. Thus you need 8 * 17 / 15 = 136 / 15 inputs per output.

(no submission) (Rate > Instructions > Cost)

29th place (score 48R / 314I / 310G; winner was Kazyan with 156/15 R / 122I / 9235G)

I did not finish making a solution for the rate metric in time for the tournament deadline, so my sum submission was scored in this category as well. There were 41 submissions in week 7, of which 25 were intended for the rate metric.

Fun fact: at min rate, 273 purifications are performed every 816 cycles, whereas a single purification glyph at max utilization can only do 272. Even worse is projection, which requires 477 projections every 204 cycles, whereas 7 projection glyphs can do only 476 projections.

My incomplete RI solution was min rate and around 130 instructions, except the tiny detail that it doesn’t actually assemble the final product. I think parts of it are salvagable, such as how the input was handled, but it does not seem possible to finish the machine as it is, and most of it would have to be thrown out.

YOU GONNA CALL (Sum > Looping > Instructions)

Solution file; Video commentary; 10th place (score 700S = 310G + 308C + 82A / 0L / 314I; winner was ebonnov with 613S = 245G + 301C + 67A / 0L / 262I)

On account of my submission being about 30 seconds before the end of the contest it slightly interfered with the automated ranking software.

Minimal planning went into this solve; most of the top sum solves used a similar motif. Arm 5 is well-placed to do about 3 different tasks, but due to timing / rate-limits can only do one of them, so probably should have not been a hexarm.

(no submission) (Trackless Instructions > Cost > Cycles)

no placement (winner was fiesta0618 with 27TI / 520G / 635C)

For trackless instructions, the goal is to minimize instructions, but track pieces are not allowed. As both of my submissions (my sum submission and my speedsolve submission) used track, I did not score in this category.

I got pretty far with my TI solve, and was able to build gold-silver caltops and gold-mercury dimers, but not put them together. The gold and silver were made by purifying iron, so there was quite a bit of waste. I had aimed for a low period (4, IIRC) to minimize instruction count, but with the large number of loops needed to produce the caltrops, the irregular timing of when they were produced, and the tight geometry, I was unable to finish my solution.

I did not have any success with a “slappy stick” approach like the top solutions used.

Conclusion

Fun was had by all


  1. plus Zorflax↩︎

  2. plus ShadowCluster, a play tester, who had the fastest 63A submission↩︎

Follow RSS/Atom feed for updates.