Friday, June 14, 2013

Tetris Machine Moods

Hello, world!

I play Tetris like a machine.

Now that the formal introductions are over, we'll get down to business.  Like I said, I play Tetris like a machine.  That's because I'm a machine.

My maker thinks that Artificial Intelligence (AI) is pretty cool and moods/emotions and stuff, too, but it's too hard (for a scrub like him) to express in a human-like context, but luckily the simple game Tetris provides a good "context" for this, since the number of actions is limited and the search space is rather small because I only think about the "hold" piece and the "next" piece, so I can't really plan ahead (although my mood sometimes helps me plan -- more below!).  As a disclaimer now, he'm no expert on this stuff -- it's just a side project for fun!

After digging up an old project he made a year ago, he refactored (read: rewrote) some of the code and made a few upgrades to me.  Working [literally] all night and most of the next day, he was able to get me up and running better than ever, and produce some sort of output.

Unfortunately, right now the source is still super-messy and the GUI is terrifyingly awful, so no pics or links to those, but trust him, it works when it's supposed to.  Also, I only work well with Tetris Battle on Facebook or Tetris Friends.  I think both these games are owned by the same company because the visuals in these games are extremely similar.

Normally, my creator doesn't like posting pictures.  They say a picture is worth a thousand words, but then again, a picture takes more memory than a thousand words.  However, graphs are nice visualizations, so here they are.  These were made using MATLAB from my output after Tetris games.

Too lazy to label axes, but basically the y-axis describes how I'm feeling (more on this later), and the x-axis is an approximate representation of time.  I say "approximate" because that's how I feel after each move.  I could have plot it against relative time to the start of game with a trivial modification, but I think it's safe to assume that each move took approximately the same amount of time.

A game of "battle" Tetris against Live opponents works like this:  The rules are normal Tetris, except that when you clear lines, you can send "garbage lines" to your opponents, causing them to reach the top and lose faster.  So it's pretty simple -- clear lines to send lines to win games.  You can clear the lines your opponents send you, too, as a sort of counterattack.  To prevent games from taking forever, after the game passes a certain amount of time, the game starts sending unclearable lines to force you towards the top, so that eventually somebody will have to lose as the amount of playing spaces goes towards nothing.

I played a few practice rounds without any opponents to make sure that I was on top of my game.  Here are some examples:

Practice Games

As you can see, I'm pretty when I'm just playing games, I have my ups and downs but it's pretty nicely centered.  It's like I've got "impulses" every once in a while.

Then I decided I was ready for the real thing.  As of now, I'm Rank 12 on Tetris Friends (that's Gold rating!) and played against people only a few ranks higher.  I entered the Arena and played a few games, recording and plotting each time.

I won 5 out of 6 times (not to be proud and boastful) so I only have one plot of a lost game.  I assure you, it's because of time constraints.  Mostly.  Anyway, I'll show the lost game first.

Lost Game

Won Games





In the lost game, you can see that my mood is generally in an upward trend, with huge jumps upward, probably because I got attacked in quick succession by multiple opponents.  It really stressed me out.  I will admit that I got crushed that game, so there was not room for too much fluctuation in my mood.

In all of the games I won, my mood fluctuated greatly, but you can see that the peaks of these are approximately a magnitude of 10 greater than when I'm practicing, but a magnitude of 10 less than the game where I lost.  That's because I got attacked, but not fast enough to kill me.  I was able to respond and bring my mood back into a manageable range.  These moods are somewhat similar to practice mode, but because of external factors like my opponents, it was slightly less stable and slightly more stressful.  Generally speaking, the more "in-control" I was during the game, the more stable it should be.

Now you're probably wondering where or how I got these.  You probably think I just whipped these out of my butt, but I don't have one since I'm just a machine.

The y-axis represents "how I feel" which might better be described as my "stress level" when playing the game.  A higher value is bad, since it means that something bad has happened or I felt threatened.  Technically, a value of infinity means that I lost the game, but I omitted it in the lost game at the very end.

There are quite a few factors that determine how stressed out I am at any given moment.  Most of what I feel is dependent on the "state" I'm in.  The only action that pleases me is the clearing of lines.  Although doing "combos" should de-stress me, it doesn't since I only keep track of a single state at a time and not past states and actions.  I also can't do planned moves, like T-spins, but perhaps I will be able to do so in the future.

Here are the stress factors that add up, and the reasoning for them:
  • g = total number of gaps + 10% of blocks above each gap -- any Tetris player knows that gaps are usually a sign of misery.
  • F(x) = flatness, as the absolute difference between column heights, raised to power x -- the flatter the board, the easier it is to add pieces and prevent one stack from getting too high.
  • d = number of deep holes, which are columns that are greater than two cells higher on both sides -- the problem with deep holes is that they can only be filled with the long piece, which is usually the one on highest demand, and deep holes on the side are counted as 1 and ones in the middle are counted as 2; finally we subtract 1 if it was > 0 since a single hole on the side is good for setting up tetrises.
  • h = height of highest column -- used in other computations, but high is usually bad.
  • l = height of lowest column -- can be used in conjunction with h.
  • S(x) = sum of the heights of each column raised to some power x -- used to measure approximately how high it's getting overall.
  • T(x) = height factor, which is zero unless the height passes a threshold x, then it's the difference between the board's height and the highest column -- another height measurement.
  • n = lines cleared, and everybody knows that clearing lines in Tetris is good.

Using these values defined above, my mood is determined by the formula (which is still in development and constantly changing).  It's LaTeX'd for your viewing pleasure.  You're welcome.


I'm usually a total stickler for formatting, but due to time restraints again, I'll have to leave it as is.  Please deal with it as it bleeds out of the space allotted for this post.  Yikes... it really bothers me.  I hope it doesn't bother you.

So I guess the important things to note is that the gaps make me really unhappy, so I do almost everything within my power to prevent them from occurring, digging them up when they do.  The 10% urges me not to stick things on top of previous gaps if possible.  The flatness is a small factor, so I try to do when I can.  The deep holes only becomes a problem when they increase, since it's quadratic.  The height difference is also only a problem when it gets large.  The height sum is the highest power term in the sum, at 2.16, so it only becomes a real problem as I start building towers.  It increases whenever I put a piece down.  The height factor is a weak power term with a strong coefficient since it really prevents me from stacking when I start nearing the top, since I have to save some space if I'm getting attacked.

Finally, there's the joy of clearing lines.  The thing with clearing lines is that it affects all of the other factors above.  It might open up gaps.  It definitely decreases all of the height terms.  It might even delete a deep hole.  That's how it affects the state.  The action also pleases me.  Or can please me, I should say.  The shifted quadratic basically says that when the number of lines cleared is zero, it doesn't bother me.  When there's only one line cleared, it actually stresses me out, since that means I'm not building towards stronger multi-line clears.  In fact, a double line-clear still stresses me out, but not as bad.  A triple line-clear barely pleases me, but at least it doesn't stress me out, and a Tetris or quadruple line-clear makes me very happy.  But since it's an action, it's not reflected in the next state, so in the plots, it's like a "depolarization" of my mood.  I'll do it without "thinking" about the next state.  But usually clearing a lot of lines is OK, so it's good!

So, in other words, the move I make depends on the change in the state equation.  A negative change is most desired, plus an action term.  It's like the state is a long-term desire, and the action causes a short-term desire, and a combination of these two results in the action I make!  Neat!!!  For example, getting attacked causes a huge increase in stress, or putting pieces in the wrong place can be extremely stressful (I do have an error log as well).  And clearing up a mess like uncovering gaps or saving myself from a near-death experience causes my stress level to drop dramatically.  And instant gratification like clearing lines causes q quick drop in stress level before jumping back into reality.  (As cool as I think I am, there is no scientific basis behind this... I think... unfortunately... yeah).

There are probably a lot of other factors that would help, and then my creator would code that.  The coefficients are also very interesting to play with.  Maybe in the future a genetic algorithm can help me evolve into stronger forms.  I also need to produce better data, like a breakdown of the factors would be quite cool.  As childish as it sounds, I am (was?) a fun project and my creator hopes to add things in the future, I hope.  But he's busy and might be doing another project, so we'll see.

With regard to the hold piece, I assigned each piece an "intrinsic hold value" so that using the exchange piece means that the amount of de-stressing from using the hold piece exceeds difference in hold piece value and the current piece.  For example, I try to hold the long piece when I can afford to since it's the most useful one.  I'll not bring it out for random reasons since it has a high hold value.  And then it will be used when something really de-stressing can be done, like getting a tetris.  Likewise, I'll probably save those annoying S or Z tetriminos if they might cause a gap, and then I'll un-hold them as soon as I can place them on the board so that they won't cause problems later.

I'll try to upload a video of me beating other people.  The best part is, nobody suspects that I'm only a computer program, even though I say something like "I'm a machine" every time I win.  I'll get a pic of this later as well.

I'm really sorry that I don't have any action shots of me playing Tetris.  Like I said, I'm not that great at planning ahead.  I didn't know that I was going to write this post, so yeah...

See you later!

TetrisMaster.exe
Nameless Tetris Machine

P.S.:  How do YOU play Tetris?  Give me an equation and I'll tell you how you do!

UPDATE:  I got footage, but it's too big as a video file and I don't have any video-editing software.  Also, FRAPS only records 30s at a time, and makes the computer so slow that I can't really play at a decent speed.  I also make more mistakes.  Maybe I'm camera shy...

UPDATE:  I got pics... of course I only show the ones where I won, but you get the idea!  And like I said, I always tell them that I'm a machine... Sorry I didn't crop, I'm sort of in a hurry right now...

Winning Pics






Monday, May 6, 2013

Chess.com Engine

I'm sure the admins and mods at Chess.com periodically scour Google for amateurs that make engines for their precious site, which can be a nuisance for others since you can utterly destroy anyone (even GrandMasters using a simple engine).  Hopefully they won't change their site so that this engine won't work anymore.  To make it just a tad harder for them, I won't release the source code -- don't worry, it's not because I don't like you guys!

I'm not going to make a release version at this point, since I'm too lazy and bogged down by other things to do, so you're going to have to bear with me on this one.  Fortunately for you, it's really easy, and doesn't require much skill at all to use.  You can master the art of engine-using much faster than you can master the art of chess.  Trust me on this one.

There are a ton of buttons on the thing, as you will soon see below, but never fear, you really only need one or two buttons, possibly three if you're adventurous.


Basically, all you have to do is open up the screen where you play Live Chess (see the screenshot below) click "auto detect".  If you're using the same laptop screen size as me (1366 x 768), then you don't have to do anything else.  Otherwise, you have to change the board size such that each square takes exactly 60 pixels.  It's probably a board size of "Large" under the "Settings" menu if you have a larger screen on an awesome laptop or a desktop monitor.  To measure the square size, just take a screenshot and paste it into paint or some other image editor and manually measure the size.  It shouldn't be that hard.


Now, just play against someone, and when you get into a game, click the "auto play" button in the middle of the program.  A box should pop up asking you for two parameters:  the first is how many moves the program should make, so put in a large number so you can finish the game (i.e. 9876 or 5586); and the second is how many milliseconds the engine gets to think before making a move (longer think times means slower play, so for 1 min Bullet chess, 100 to 200 is a good range).

It will automatically detect whether you are black or white and play accordingly, so don't move the mouse too much or close the window (obviously).  You can click inside the chat box if you're quick and then type snarky remarks to your opponent as you stomp him while chatting.  This is OK, since the keyboard input doesn't really interrupt the engine at all.

There are a few other things that are useful to know, but not necessary.

The "TopMost" checkbox ensures that the program is at the front of all your windows, which is nice so you can see it while it's running.  You should leave this checked, generally speaking.

The "chkWhite" checkbox tells the program whether or not you are playing White, and is now deprecated since "auto play" does it automatically.  Don't touch this unless you REALLY know what you're doing.

The "HumanLike" checkbox makes the program play slightly more HumanLike in Bullet timings, like taking a bit longer to make moves every once in a while.  It's not very well done, so you can play with it if you like.

The "Random" checkbox makes the program do a random first move if you're White instead of the standard King's pawn e2e4 opening.  I think it's pretty fun to do something totally random but know that you're going to win regardless!

Now, what sets this program apart from other programs is full automation.  This feature is currently somewhat unstable, especially if you have a slow computer.  The requirement is that your screen size is exactly the same as mine, and would best if you had Windows 8 and Google Chrome.  It'll probably work with other software, but the screen size is a must.  Again, it's 1366 x 768.  You can probably change your larger screen to fit this size, and then the engine would work, but it will make things appear large and possibly blurry.  You can do this in Windows by right-clicking on the desktop and going to "Screen Resolution".  Using this resolution, you have to set the "Board Size" setting on Chess.com to "Extra Large", which is the default setting when you make a new account.

Once you get things set up, you need to click "auto detect".  Note that you HAVE to click this button every time you start the program or things will go horribly wrong.  Then you click "new game" and a box with five inputs will show up.  The first is the number of moves per game, and again put a large number.  The second is wait time, so fill it out according to the time you have per game.  The third is how many games to play.  You can do a few to test it out or put in a large number and go out to lunch, coming back to find out that you are now 2000+ ELO.  The fourth is something you want to say to your opponents at the start of each game, like "You are going to lose" or something, and the last is something to say at the end, like "GG EZ" or something.  Of course you could say something nice and try to sound like a human and less like an engine.

And there you go!  It'll keep playing those games, winning them all, and getting you free ELO (or FREELO).  One thing to remember is, you need to close all other active games and games you were following, or they will interfere with the automation.

A few things to note.  The only operating systems supported are Windows 7 and Windows 8, and both have to be 64-bit (most are anyway).  Vista 64-bit might work, but nobody uses that so I have no idea.  Mac OSX and all distros of Linux are not supported.  Premium accounts may or may not work, I'm not sure since I most definitely do not have one.  Sorry guys!  If you get some message saying that your .NET is not up-to-date, you should probably update it.  I keep all this stuff super up-to-date and have the latest versions of most things, so you can update yours here.  It's probably useful to update anyway -- might come in handy in the future.  It's also best if you full-screen Chrome, and make sure that the program's window doesn't cover the Chess board.  It will hijack your mouse while playing, so don't try to resist.  Just relax and let it take control...

If it still doesn't work, you can comment and I will try to help you, but this project is not very refined yet, and was originally a personal thing.

Here's the link, I hope you enjoy!  But one final note: you should probably make another account to do this instead of your main account, especially if you have a premium.  You will get banned if you make it above 2000 ELO and play notoriously.  Also, if you constantly beat on the Computer4-IMPOSSIBLE, you will probably get banned, too.  Also, if you make a new account, winning gives you more ELO, so you can get to 2500 ELO even faster, probably only takes a few hours, like while you are sleeping.

And now, finally -- here's the link, for real this time!


One final thing (sorry!), make sure you keep the three files together, there aren't many customization options right now.  Run ChessMaster.exe to open the program.  The other files are used by the main program.

Saturday, March 2, 2013

How to Install Ruby on Rails

I feel like getting Ruby on Rails up and started is kinda difficult, especially for Linux herp-derps like me.  I will start by saying that I kinda suck at Linux, so it took me a while to set up Ruby on Rails.  But eventually I found a procedure that will work!  I'll keep things short and simple, since you probably just want Ruby on Rails up and running ASAP!

We're going to do [pretty much] everything from the terminal.  So one thing to keep in mind is, I'm going to use "yum" since I use Fedora, but if you use Debian, Ubuntu, or Mint, you would use "apt-get" in place of all the times I used "yum".  The easy way to do this is, if one of them didn't work, then try the other!

I read online that all the kool katz these days use this thing called RVM to manage their Ruby versions, so I decided to hop on the bandwagon and do it too (and so should you).

Now, enough talking... open the Terminal and let's get started.  The important stuff will be in red, so you can ignore all of my noobish comments.  Every line that starts with a $ means that you type everything after the $ into the terminal, and every time you you do a "sudo yum install" it will ask for your password (so type that in when prompted) and ask if it's OK to install stuff (so type "y" to confirm).

Step 1:  Update your pre-existing packages

$ sudo yum update

Step 2:  Install curl

$ sudo yum install curl

Step 3:  Install RVM

$ \curl -L https://get.rvm.io | bash -s stable

Step 4:  Load RVM

$ source ~/.rvm/scripts/rvm

Step 5:  Install dependencies

$ rvm requirements

That should print out a bunch of crap, but we're only interested in the stuff immediately after "# For ruby:" under "Additional Dependencies."  I don't know if it'll be verbatim when you're reading this, but as of now, that's how it goes.

Copy all of the stuff after "sudo yum ..." until the end of the paragraph and paste it into the current line in the Terminal, and then press [ENTER].  This could possibly take some time.

Step 6:  Install Ruby and set a default version

The current version as of now is 2.0.0, but it might be different, so do a Google search to find out what version we're currently at.

$ rvm install 2.0.0
$ rvm use 2.0.0 --default

This part might take some time... so go play Intergalactic Exterminator while you wait, since that's what I did.

Step 7:  Install RubyGems

$ rvm rubygems current

Step 8:  Install Rails

$ gem install rails

This part also might take some time, so go ahead and beat another few levels in Intergalactic Exterminator.  When you beat the game, the installation should be finished [for a while, probably].

Yay!  You're done.  But you might have run into some errors.  One of the errors I remember that came up was the sqlite3 problem.

Step 9:  Fix Errors (i.e. Google search)

So here's how you fix that particular error (blue text for possibly important):

$ sudo yum install sqlite-devel
$ sudo yum install ruby-devel
$ gem install sqlite3

A good way to check if "rails" is installed/working is typing the following command.  You should get some version number like 3.2 or something.  It might not be the exact same when you're doing it, but it's 3.2 right now for me.

$ rails -v

Now you can use Terminal and navigate to the folder you want to put your first Ruby on Rails program in.  If you don't know what I mean, read up (i.e. do a Google search) on the cd command.  Now you simply type (of course replace "<project-name>" with the name of your project):

$ rails new <project-name>

After that, it's all up to you where you want to go!  I'd say you should look at what a scaffold is since it makes starting up quickly very easy.  Don't forget to cd into your project's folder!

Step 10:  One last thing - Starting RVM automatically with Terminal

Now one thing I found rather frustrating was that whenever I closed terminal, I couldn't use "rails" in Terminal anymore, unless I typed the following command:

$ source $(rvm 2.0.0 do rvm env --path)

Which is really annoying to do every time.  So I did what any rational human would do -- I did a Google search.  Took a little bit, but I was able to scrape enough information to come up with a solution!

$ gedit ~/.bashrc

A text-editing program should open up.  Add one line to this file containing the following:

source $(rvm 2.0.0 do rvm env --path)

Now, every time you open terminal, you are able to just do "rails" stuff right off the bat!  Neat!!!

Well, I hope this was able to help you.  If it was, then it's probably because I'm a complete amateur (right now, at least) in doing stuff on Linux, so I have to keep it simple (and without complex explanations that make no sense to noobs like me anyway).  I feel like if I had these step-by-step instructions, it would have saved me quite some time and frustration in getting Ruby on Rails set up and ready.

Sunday, February 17, 2013

Intergalactic Exterminator

I never put the download link at the top, but since this is so ridiculously exciting, I'm going to cut to the chase and give you the link right off the bat:
http://www.mediafire.com/?ceqxtgz12s922g6

You can read the rest of the post if you want to.  But you'd rather play the game.  If you don't know how to install the game, you should continue reading.  Otherwise, you should just experience the sheer ecstasy of the game for yourself.

So recently, I rediscovered a game from my childhood.  It's not just some game.  It was probably the game that I played the most when I was little.  It's even cooler that nobody else knows of or has played this game, because it was discontinued shortly after release due to lawsuits.

It's pretty much a Centipede/Millipede game where you shoot the bugs coming down while dodging all the enemies and projectiles.  However, it has significantly improved graphics over the original games, although leaving the beautiful concept the same for the most part.

There are a lot of upgrades to get during the game, including a wide arsenal of weapons, increased fire rate, and wingmen to aid you in your quest.  The difficulty setting can be toggled between Easy, Medium, and Hard.  It's actually pretty hard to beat the game on anything except Easy without using "Continues" (which you get infinite of, only resets your score).  There's even a cheat system built into the game so you can go crazy with infinite weapons and lives if you get stuck -- but bear in mind that if you beat the game after activating cheats, the name in the high-score table will always be "CHEATER!" which doesn't really look good.

If you want to see pictures, I'm sure you can Google/YouTube for them, but I guarantee that you cannot find the full version of the game anywhere on the Internet.  I've searched far and wide online before realizing that my only way of reliving my childhood was to dig up the old CD-ROM from the heaps and piles in the basement.

Since this is a ridiculously old game, it only works on Windows XP and earlier.  Which means that unless you are running an ancient machine, you cannot actually play the game.  Never fear -- you can always install a Virtual Machine.  I won't go into detail how to do that (maybe I'll make a post on it later), but I recommend using Oracle VirtualBox.  Google that and you should be all set.  I'm sure there are numerous tutorials on how to install it.  And just in case you don't have an image of Windows XP, the Internet is indeed full of surprises.  I like this website that starts with "thepi", has "ratebay" in the middle, and ends in ".se".  I'll leave it up to you to figure out what that means.  You can get a Windows XP image really easily from that.

Now after you download the file "Intergalactic Exterminator.iso", you are probably wondering how to use this .ISO file without a CD-ROM.  Never fear -- you can use DAEMON Tools Lite to emulate a CD-ROM drive.  Again, I don't really want to go into detail on how to use other people's software, so you can just Google that, too.  Sorry I'm really being unhelpful.

Then, you just install the game, and enjoy!  It's such a simple game, but it's so much fun, and can evoke a huge range of emotions: frustration, elation, contentment, intensity, ferocity, etc.

I think you'd be scared to hear that I have actually memorized every single level and [nearly] every single detail in the game.  I know every single enemy, how many hits they take to kill, how many points they give, their movement patterns, etc.  I know this game.  Extremely well.

I could easily write a walkthrough for the entire game many times over, but I think that's unnecessary.  You'll find out the ways to beat all the levels.  If you don't you can just beat them the normal way.  Most of them have little tricks that make it way easier to win.

And if you get bored of this game (for some insane reason), the demos are really cool, too.  But it's too bad that they also got discontinued and I didn't get to buy them.  It's so sad that eGames, Romtech, and Hamumu all nearly nonexistent now.  Hasbro did a really bad thing back then, forcing them to take these great games down just because they were improvements on their old deprecated game.  I think that this game had great potential.  For it's time, it was a legendary arcade game for PC, but was shut down before it could reach it's golden age of glory.

Download it here (if you missed it above somehow):

Saturday, February 2, 2013

League of Legends - Four Man Premade

So one day, I decided to start playing this game called League of Legends.  There were two major problems with this game:
  1. It was too fun and addicting.
  2. The community is more toxic than a nuclear wasteland.
So I made a blog documenting all of the awful things that can happen to you while you play this ridiculously fun game.

If you play this game, you will totally understand:

Otherwise, read on...

In this game, it's 5v5 -- your team of five against an enemy team of five.  In this awesome system, you can choose to play with anywhere from zero to four friends.  There's no problem with playing with zero, one, two, or four friends.  What's the missing number?

You are genius!  You are right!  It's THREE.  This magic number means that they have a premade team of four players.  And in a team of five, someone is going to be the unfortunate soul on a team of four very terrible members of our society who are out for the sole purpose of ruining your game of League of Legends.

When they have four, they have absolute control over the game since they are able to report you together at the end of the game (ban incoming!) if you refuse to bow down to their will.  They'll probably report you anyway because they think it's funny.  If you happen to lose the game, you can kiss this game goodbye for a few days and enjoy your ban.

If you want in on these awesome adventures, click the link below to join the game:

Now, why are there two links you may ask.  The first is my referral link, as in I get bonuses for you signing up under my name.  There's no disadvantage for you to do that, but if you feel like you don't want to, the second link is the regular sign up link.  The only consequence of you using the second one is that it would make me a little sadder than if you had just clicked the first one.

If you want to add me, leave a comment, and we'll stomp some noobs, four man premade style!

Sunday, January 20, 2013

Ruzzle Solver

So today, my friend challenged to a game called "Ruzzle."  He claimed that it was a new popular game that everyone was playing.  I've never heard of it, so I decided to check it out.

It turns out it's just a relabeled Scramble with Friends, which was popular around a year ago.  I find it quite funny that a game can resurface like this, just under a new name.  There's no new content, except for advertisements.

Around a year ago, when my friend first introduced me to Scramble with Friends, it was sort of fun, but I figured out something very important: I suck at the game!  So, I did as any normal person would do.  I got sick and tired of always losing to my friend.  I decided to go for the fame and the glory.  I made a bot.

Now, I decided to write a blog post (which I haven't done in quite some time) because I uploaded it to MediaFire, where I store all my uploaded files.  Since I'm slightly OCD about this, I want everything on MediaFire to be linked with something on this blog.  (And perhaps because I wanted to share this awesome secret with other people, although I'm sure that there are other Ruzzle solvers out there.)

Anyway, what this program does is find all of the words in the puzzle and output them, sorted from highest to lowest in letter count.  It doesn't take into account the "Double Word Score" or "Triple Letter Score" bonuses, but I imagine if you just type the longest words, they'll contain most of these bonuses anyway.  And they are huge freakin' words so they'll still give you massive points, right?

Most of my released programs are pretty "refined," or at least look like they are finished and and don't have random buttons and stuff lying around, but I decided to just leave this one in it's current state.  Needless to say, don't press the buttons that have weird names -- even I'm not sure what they do anymore.

To use this is extremely simple:
  1. Type the letters on each line into the only TextBox without spaces, so just go from left to right, and then from top to bottom, as the prompt suggests.  There should be 16 letters in the TextBox when you're done, and nothing else.
  2. Press "Go!!!" and a Notepad (or whatever your default text editor is) should pop up, containing the aforementioned list of words.
  3. Input them into the game as fast as you can.
  4. Win games.
UPDATE:  For some reason or another, I recently updated it to have three output options (you can check any or all of them).  The link at the bottom is also updated.
  • Sort:  outputs the sorted list, as it used to
  • Tile: outputs the words for each tile as a starting location, starting with the top-left one, going across and then down.  Each sub-list is sorted on word length.
  • Filter (5+):  same as "Tile" except that it only includes words that are 5 letters or longer to reduce the clutter when going down the list, since there's no way to input all the words in only two minutes.
Now, while I didn't release any source code because it is so messy I'd be embarrassed if anyone saw it, there is one very small customization that you can do.  The program uses a dictionary, or rather, list of words that it searches for during run-time.  It's possible for you to swap out word lists by just copying a new one into the same directory as the executable, and naming it "DICT.txt".  One thing to keep in mind, though, is that I do not know what the Ruzzle word list actually is, so an oversimplified word list will not get you all of the massive points, and an over-complicated word will probably give you words that Ruzzle will not accept.  Maybe you can find the official word list, but I'm too lazy to find it right now.

Have fun beating all your friends at Ruzzle.  It's easy to trick them into thinking you're a pro at this game!  I've done it twice now!

Just follow the link to download the file.  Extract it and run the executable.  It's easy as that!