I know the issue of the hanging was an old one, but it is constantly hanging for me. The other issue it does is it stops playing saying i dont have enough points to play. I have 11,000np out. If it loses that much trying to play for 5000 points, it needs to be scrapped. Fortunately, it doesnt lose that many. It just means I have to stop it and restart it. As some other posters mentioned, the logic is pretty inefficient on it, too.
I dont know how to write any programs, but as was mentioned, it seems to look for an instant 21. if it doesnt find it, it plays it in the first column that can hold it. It seems to me that the program should essentially read the card in. lets assume it is a 4. it should then look for a 17 or a 7. if the 17 is out there, play it there to make it be a 21 and clear the column. If it is a 7, play it there to make 11. Since there are 16 cards in the deck that equal 10, 11 is a damn good number to have out there. you have a 16/52 chance at getting a 10. That means there is a 30% chance of catching a 10. Almost one in every 3 cards is 10. When you think about that, it works out quite well. If if takes you two cards to make the 11, that is roughly 2/3 of the deck being used to make 11s, and the other 1/3 being used to drop the 10 on it to make a 21. If there is no way it can make an 11 or a 21, it should simply find the column with the lowest point number. play the card there.
Having said all that, i have had to restart it 4 times in just the time it took to post this.