 I've got four party invites to deliver to four friends and I've worked out the best way of delivering them. I calculated how long it would take to visit Alison, Bob, then Carol, then David, or Bob, then Alison, then Carol or David or Alison, then Bob, then Carol or Bob, then Alison and David, then Carol or Alison, then Carol, then Bob, then David, you get the idea. With four friends, there are 24 orders I would have to try. I considered inviting my fifth friend, but that would mean there was 120 different combinations I'd have to try, so she didn't get invited. I actually have 35 friends, but to invite them all I'd have to try 10,000 million million million million million million million different combinations. In fact, if a dinosaur had started this calculation using the fastest computer available, it would still only be a fraction of a percent complete today. Also, by the time the sun dies out, it would still only be one percent complete. The trouble is that there's many important problems in computer science that are difficult and nobody's found out a good way of programming, such as cutting shapes out of material, loading freight onto tracks in the optimal way, working out timetables, even solving luxury doku puzzles. It's also a good thing that these problems exist. Here's an example. Most internet security is based on security keys, which are a product of two large prime numbers, which will take billions of years to figure out the factors of. If you don't believe me, try this. The number I'm displaying on the screen is a product of two prime numbers. If you can work out what the two factors of this number are, send us a message and we will send you a free t-shirt. Computer scientists don't even know if there are better ways of finding the optimal solution. In the meantime, the focus is just on calculating good enough solutions. Or you could just invite poor friends to your party.