Wiki Game solver
Simple script to win the Wiki Game
The Wiki Game is an online game where you attempt to navigate through Wikipedia from a start page to a goal page using as few other pages as possible.
Not long after I was shown the it, I realised that I really wasn't very good at it. After about 15 minutes of coming in last place all the time, I started to wonder how it worked, and how I could beat it.
As it turns out, it really isn't very hard! It does require injecting some JS into the page, but it's not that much.
- Start a new game, don't press start!
- Open your browser's developer console. This will vary from browser.
- Paste the compact version of the code (
wiki-game-solver.min.js), and execute it (press enter)
- Congratulations, you just won!
How it works
The game isn't open source, so I couldn't see how the back end worked, but after playing a few games and checking what happened on the page, I worked out what it was doing.
The game was won when the iframe was at the final page location, or at least a clone of it on their servers with some extra querystring information.
With this, I started to write something that would change the location of the iframe to the goal. Fortunately for me, the goal URL was on the page. So all it took was a little switcheroo to win!
The source for this was written in pure JS, and relies heavily on the fact that the wiki game uses jQuery so I can plug into components and events really easily. The code can be found in the GitHub gist below. Both the standard and compact versions are available.
1$("#start").click(); 2var goal = $("#endpagelink0 > a").attr('href').replace("http://en.wikipedia.org/", ""); 3var goalArray = $("#wiki").attr("src").split("?"); 4goalArray = "?" + goalArray; 5goalArray = goal; 6$("#wiki").attr("src", goalArray.join().replace(",", ""));
1$("#start").click();var goal=$("#endpagelink0 > a").attr("href").replace("http://en.wikipedia.org/",""),goalArray=$("#wiki").attr("src").split("?");goalArray="?"+goalArray,goalArray=goal,$("#wiki").attr("src",goalArray.join().replace(",",""));
As I experienced whilst developing this, the people that play Wiki Game don't tend to like people cheating. There were a lot of people getting very annoyed whilst I was developing and testing. So please use this at your own risk! At the moment I don't think there is any kind of banning system, but be warned!