Welcome to Michael Gottlieb's personal website!
I wrote up a demonstration of a new algorithm to compute the probabilities of spaces in a minesweeper position; you can find it here. It is exponentially faster than a backtracking position-counting algorithm for most positions.
The details are complicated, so I haven't written up a full explanation yet. However, there is some info over at the reddit post, as well as instructions on how to use it.
Started working at Bloomberg! (To be clear, all opinions and ideas on this site, now and going forward, are mine personally, unless stated otherwise.)
I implemented a logic game called Disconnect Four, where you try to fill in a board with pieces of one of two colors so there are no four-in-a-rows of the same color. It can quickly generate its own puzzles with various sizes and three difficulties.
I also added some video links to the MultiBLD UWR page. Please let me know if I missed anything.
I've put up a Minesweeper Board Museum, which catalogs dozens of interesting, unique, or historically important Minesweeper boards. I welcome interesting contributions, and there is a program linked there which will let you play with and optimized boards by yourself.
A few months ago I computed the longest possible Sokoban puzzles in small rectangular rooms with no internal walls. The results of that computation are shown here along with some pictures of the most difficult puzzles for each size board. Larger boards take more than exponentially more time to compute, so going much beyond these results would take a lot of computing time.
I started work at Addepar!
With some more coding and a lot of trial and error, and with the help of AdituV over at TASVideos, I was able to make pretty good solutions for all of the puzzles in Denki Blocks, including the 3-of-a-kind and bonus shape bonuses, and the Club levels. Using that, we could make TASes (tool-assisted speedruns) of the entire game, and they have been published on the TASvideos page: any% (completing the game as fast as possible) in 29:47 and 100% (completing all the puzzles and getting all the stars) in 1:24:07.
2015.08.31I translated a two-century-old French medical journal article about people who eat very large amounts, and specifically a man named Tarare. It can be found here. I'm not a native French speaker but I tried to figure out as much as I could, and provided links to the references when I could figure them out. It's a pretty interesting article to read through.
I made a Rubik's Clock simulator, called qClock. Compared to my old Clock simulator, the biggest changes are that the size and controls can be customized; it also various rotations and has a few color schemes. As with qCube and qMinx, it is designed primarily for speed - to be a simulator that unofficial world records could be broken with. Speedsolving.com discussion is here.
Lately I've been working on sprucing up the Denki Blocks page. With the help of a program I wrote, I was able to find optimal solutions for some of the game's levels, and good suboptimal solutions for many of the rest. I have pages for the Game Boy Advance and Game Boy Color versions, with an image showing each level's layout.
I wrote a program to optimally solve the Rubik's Clock, and my friend Ben Whitmore made a simple GUI to accompany it. See the speedsolving thread for a download link, plus details and discussion.
Interestingly, publishing this program led to Jakob Kogler and Tom Rokicki working on this puzzle too. They released similar optimal solvers (mine uses less memory, but is slower, although still fast enough for normal use), and ended up proving God's Number for the Rubik's Clock (12 moves) as well as eventually determining the entire move count distribution for the puzzle. Very cool stuff!
Released ksolve+ version 1.0, a program for finding useful move sequences in permutation puzzles. It is based on Kare Krig's ksolve, but with many improvements and new features. See the speedsolving thread for details!
Just like with qCube, I've updated qMinx, bringing all the versions together with new features and better code. You can try it out here. One of the big changes is the ability to play with Pentultimates with any number of layers (such as the Royal Pentultimate) - but good luck, they're very difficult puzzles. Have fun! Comment over at the speedsolving thread.
Following the updated version of qCube, I have been working on a simulator for arbitrary bandaged cubes - something I have wanted to make for a while. Try it here! The controls are like qCube; many puzzles will feel more natural with the "optimized turning style" option turned on. There are a lot of puzzles here, and I tried to make sure that they all display properly and are scrambled well. You can discuss it at the speedsolving thread.
There's a new version of qCube here. You can select any combination of puzzle (normal cube, Dazzler, etc.), event (single, marathon, 2x2-NxN relay), and color scheme from the available options. It also keeps statistics for your best time and best average of 5/12/100. There are also a good number of smaller optimizations and fixes throughout. This is a replacement for all of the individual qCube sims. Feel free to talk about it in the speedsolving thread.
I did a big update to qqTimer, which can be found at mzrg.com/qqtimer and qqtimer.net. The biggest change was probably the addition of some code for cookies, so even if you quit the browser your times will still be saved. All the details are in this speedsolving thread. Happy cubing!
I haven't updated the main page in a while, but I've done plenty of new stuff:
- Today I finished a 4500-word guide/walkthrough for a flash game called Zening, which is notable for having one of the least-awarded badges on Kongregate. There wasn't a full walkthrough anywhere, so I thought it would be useful to write one up. You can find my guide here.
- I created a Stepmania Recolorizer, which has two big parts. First, it draws out a Stepmania file for you, using graphics from the popular Orbular noteskin. The notes are drawn in linear time, no matter how many stops or BPM changes the file includes. Second, it allows you to change the color of a note by clicking on it, and it will then generate a new chart containing the same notes and timing as the old chart, but with the new colors. As you can see from the source code this was a pretty tricky project and it took a lot of work and thought to get working.
- I wrote a program to compute the probabilities of empty, full, and solvable rows on Nonosweeper. This should help figure out whether it's reasonable to wait for one of these things to happen on a given board. It only calculates things in terms of rows, but you can swap the height and width to get probabilities for columns. You can find the program here.
- I figured out the scoring system behind ThirdStyle, and was the first to publicly post it on their forum. I also made a program to calculate and compare scores.
- Inspired by the intensely bad Super Shuffle mod in Stepmania, I created my own version with the ability to preserve the patterns in the file while still randomizing the note placement. This should be very useful to stepfile artists, since you can now just copy a section of the file and then randomize it.
- I wrote a little program to take a set of level ranks from FFR and generate a table showing the progress on each difficulty, from 1 to 13. Each one shows the number of AAAs, SDG FCs, other FCs, and non-FCs, as well as the total number of files.
- zolaric requested a random 8-key pattern generator, so I made one.
- I expanded the Rubik's Cube Orders Table by adding in all factors of existing numbers. For instance, if R U2 has to be done 30 times, (R U2)2 has to be done 30/2 = 15 times. The sequences we get are usually not optimal, but I was able to fill in a lot of numbers I didn't have any sequence for.
Also, I got into the Rensselaer Polytechnic Institute (RPI) as a transfer student, and I'll be going there. Good things are ahead.
I've been working on updating qqTimer, but due to a somewhat unexpected scheduling snag I don't want to make a big public release yet. For now, you can try it out here if you're interested.
There are also two smaller updates. First, I made a new cube simulator variant where you can only see the stickers that are on the correct side. You can press ~ to switch between 'easy' mode (visible squares are properly colored) and 'hard' mode (visible squares are white). Some trial and error is involved, but it's an interesting challenge to try to do it quickly. Second, I made a program to train mouse control for Minesweeper, which I find useful as a warmup. The idea is simply to click all of the safe squares as quickly as possible, without clicking any other squares.
I made a new version of qCube which changes its color scheme every move (so, the cube's position isn't different, but which color goes where has changed). I've been able to get a 5x5 time of 1:11 on it, so it's certainly playable.
I also wrote a simulator for the Rubik's Race, although mine is single-player (the original is a two-player contest, but the players don't interact except for winning). Instead of being faster than the other player, your goal is to finish as fast as possible. If you want more information about this puzzle, there's a lot of detail at the Unofficial Rubik's Race Page.
Happy April Fools! I changed the main page's background to be pink, and made all the navigation links go to a random My Little Pony episode. I also modified qqTimer (the one on my site and the one on qqtimer.net) to run 20% faster, to make people get slower times. I think a few people enjoyed it.
For a few days I've been working on my table of Rubik's Cube Orders. For a long time this table had been sitting there with only a few entries, which had all been found by hand using guesswork. I decided to revamp it, and I started by making an order calculator to let me use modern notation that I hadn't included in the old Visual Basic version. Once that was done, I could write a program to look through all sequences of a given length to fill in big parts of the table with truly optimal sequences. After doing the 3x3x3 and 4x4x4 columns, I realized that the 5x5x5 column would be at least as large as the 4x4x4 column and take even more time to calculate, so I removed it. There is now a 2x2x2 column in its place.