The concept of passing the Turing Test is easy. In practice, well, it’s a bit more difficult. As a mind exercise try thinking of one thing you would ask to determine if you were talking to a computer or a person. Now try and think of a way that you would do the programming for it.
For instance, you may ask “What is an egg?” Well, that’s relatively easy. Just have a definition for egg handy. But should it be hard-coded, or should it be something searchable then parse it into a more “human” type of response? You’ll find that one question leads to other thoughts. Like, “What are chickens famous for?” Well, laying eggs. How would you work that one? Or, “What’s got a shell on the outside and a yolk on the inside?” Think of a question then think how you would expect a computer imitating a human should answer and you’ll see it get more and more complicated.
Of course, you have to expect the unexpected. This is where outside information is necessary. To cope with things that you may not have thought of at the time but are so common that any human should be able to answer it. If someone were to ask you what rain was you should be able to answer it. But while you’re working on your code, tossing down Twinkies and Jolt, you just may forget to add that in there.
Learning systems are great, and necessary, but you can’t rely on them. If someone asks your program what rain is and it doesn’t know it can ask the person what it is. But what if they lie? Then it’s a dead tip-off to the next person who asks the same question. It can ask for another explanation and that person may tell the truth. How does your program figure out who the filthy liar is?