Mark Sachs (ksleet) wrote,
Mark Sachs
ksleet

  • Mood:
  • Music:

One week ago I couldn't even spell nuclear physicist and now I are one!

One of the neat things that SpaceChem does is track your efficiency -- how many instructions you used to solve a puzzle and how many cycles it took to complete -- and then show you a bar graph that compares it against how many symbols and cycles other players took, letting you know the average time taken as well as the outliers in both directions. Often this graph is dispiriting, as I've managed to put together some hideously slow production lines on the more difficult stages. But nonetheless it's a fun challenge to try to build research reactors that are as fast and efficient as possible, finding weird techniques to squeeze out every last cycle.

Here's a few of the tricks I've come up with when optimizing the simplest reactors:

  • You don't have to drop an atom to bond it. If the atom happens to be over the bonder when the instruction happens, it will be bonded. If a waldo is carrying the atom when it bonds, it will scoop up the entire new molecule it was bonded into without missing a beat. You can even bond two atoms that are being held by two different waldos that are in motion. As long as one of the waldos lets go before they move apart, you'll be fine.

  • You can also have one waldo drop an atom and the other one pick it up in the same frame. Time it right and the atom will never stop moving as it is transferred.

  • A completely linear loop can be created for very simple waldo programs by placing directional arrows that reflect the waldo straight back on its path. Anything which you want to only happen once during each loop has to be placed at the ends of the line; everything else will get executed twice, once coming and once going. Linear loops are obviously also faster than full-sized loops, since each corner is an extra tile the waldo must travel around.

  • Since you never have to wait for input In research assignments, you can get away without using sync nodes if you time the waldos perfectly. When running in perfect sync, one waldo can execute an instruction the other needs at that moment through the loop, such as requesting input or bonding.

  • Time taken for a waldo to go around a loop back to its starting position after it's done doing work (dropping off an item in the output area, for example) is wasted time. You can have the waldos hand off atoms to each other halfway across the reactor, substantially reducing that wasted time.

    All this is very nice and I've managed to create some very small and fast solutions to research problems. But, those tiny little bars at the far left of the chart, to the left of my best times and symbol counts, still taunt me. Someone completed "Double Bonds" using only seven symbols, better than my nine. Someone has a trick that let them do "A Complete History of SpaceChem" in less than 70 cycles, compared to my 107! It's driving me crazy. I must figure it out.
  • Tags: games
    Subscribe
    • Post a new comment

      Error

      default userpic

      Your reply will be screened

      Your IP address will be recorded 

    • 4 comments
    • If the task can reasonably be accomplished by a single waldo, then use both of them to do the same thing out of phase and double the output rate.
    • If you can use one rotation instead of another square's movement to move a molecule into the output zone, do so; rotation takes 1 cycle but going out and back takes 2.
    • You can place bonders on the input or output areas and make/break bonds before picking up or after dropping them. For example, if you have methane and need to split off a hydrogen as in “Settling into the Routine”, drop it so it spans the two output areas, break the bonds, and then perform output on each side.
    • Bond instructions can be executed by either waldo and trigger all bonders. You can have one waldo be carrying a molecule and doing something else while the other waldo triggers a bonder the first is passing over.
    • A waldo program that looks like a double loop is usually not efficient.
    • When chaining reactors, consider whether the overall efficiency can be improved by changing where or in what orientation one reactor places its output for another to have to pick up.


    I am carefully not buying SpaceChem, so as to get my homework done instead. (Too bad SpaceChem isn't a game-i-fi-cation of some sort of useful design work...)
    As to 7 symbols on Double Bonds, I think it must be something like this, because that has 7 symbols and if it were any fewer it wouldn't have the necessary functions (2 direction symbols, 1 input, 1 output, 1 grab at input, 1 drop at output, 1 add bond). This pattern creates a double bond, but I can't figure out a place to put the output symbol such that it doesn't output monatomic oxygen.
    That's clever, I like how it uses the Bond+ to avoid having to actually move one of the atoms into position. I do recall experimenting with something like that, but I ran into the same problem you did, of how to make the output only happen after the final product is assembled. You could have the other waldo do it, but then you're back to nine symbols again.

    I've been doing the "drop the molecule so it spans both output volumes then debond it" thing -- that's very handy for dividing up atoms and sending them to different reactors, especially on the more complex stages. Having both waldos do the same thing, just out of phase, is one trick I hadn't tried. I'll bet that's how the most extreme times on those simple reactors were accomplished.

    I wish you could save multiple solutions for a reactor in this game. It is a bit annoying that I can't have both my "fewest symbols" and "best time" around, since they're rarely the same solution. It would also be nice if the stat screen tracked your record bests instead of just the current results.
    Indeed. For that matter, it would be nice to see a report of how your solution compares to your previous solution.

    I suspect that they may have omitted any import/export of solutions to discourage people copying other people's solutions into their own game and distorting the histograms. But saving multiple solutions wouldn't have that problem.