Interview Questions

The Intelligent Smoker

A person smokes cigarettes and leaves the lower portion (around 1/5) of it unburnt. He then combines the 5 residues of those cigarettes to create a new one for smoking.

If the person had initially 93 cigarettes, how many cigarettes did he actually smoked?

He will smoke 116 cigarettes.

Programming Puzzle: Search Engine

The urban legend goes that if you go to the Google homepage and search for "Google", the universe will implode. We have a secret to share... It is true! Please don't try it, or tell anyone. All right, maybe not. We are just kidding. The same is not true for a universe far far away. In that universe, if you search on any search engine for that search engine's name, the universe does implode! To combat this, people came up with an interesting solution. All queries are pooled together. They are passed to a central system that decides which query goes to which search engine.

Programming Puzzle: Train Timetable

A train line has two stations on it, A and B. Trains can take trips from A to B or from B to A multiple times during a day. When a train arrives at B from A (or arrives at A from B), it needs a certain amount of time before it is ready to take the return journey - this is the turnaround time. For example, if a train arrives at
12:00 and the turnaround time is 0 minutes, it can leave immediately, at 12:00.

How to reverse the order of the words in a sentence?

For example for a given string: "This is just a test", convert it to "test a just is This".

std::string reverse_words(const std::string &strInput)
{
    using namespace std;
    string result;
    string::const_reverse_iterator iterWordStart, iterWordEnd;
    bool bBufferMode = true;
    iterWordStart = iterWordEnd = strInput.rbegin();
    for(; iterWordStart != strInput.rend(); ++iterWordStart) {
        if(!(isalpha(*iterWordStart) && bBufferMode)) {
            reverse_copy(iterWordEnd, iterWordStart, inserter(result, result.end()));