input: Write a function that generates a Markov chain from a given text input. The function should split the text into words, create a dictionary that maps each word to a dictionary of its possible following words and their frequencies, and then use this dictionary to generate a new text sequence of 100 words (or until no more words can be generated). If the generated text cannot reach 100 words, it should concatenate as many words as possible.
  
  def generateMarkov(text):
    words = text.split(' ')
    markovChain = {}
  
    for i in range(len(words) - 2):
      current = words[i]
      next = words[i + 1]
      if current in markovChain:
        if next in markovChain[current]:
          markovChain[current][next] += 1
        else:
          markovChain[current][next] = 1
      else:
        markovChain[current] = {next: 1}
  
    generatedText = ""
    current = random.choice(list(markovChain))
    generatedText += current
  
    for i in range(100):
      choices = markovChain[current]
      choices = [
        key for key, value in choices.items()
        for i in range(value)
      ]
      try:
        current = random.choice(choices)
        generatedText += " " + current
      except:
        break
  
    return generatedText
  
  assert generateMarkov('Alice was beginning to get very tired of sitting by her sister on the bank, and of having nothing to do: once or twice she had peeped into the book her sister was reading, but it had no pictures or conversations in it, `and what is the use of a book,' thought Alice `without pictures or conversation?') != ''
  assert len(generateMarkov('Alice was beginning to get very tired of sitting by her sister on the bank, and of having nothing to do: once or twice she had peeped into the book her sister was reading, but it had no pictures or conversations in it, `and what is the use of a book,' thought Alice `without pictures or conversation?')) <= 100 * 5 # assumed average word length
output: def generateMarkov(text):
    import random
    words = text.split(' ')
    markovChain = {}
  
    for i in range(len(words) - 1):
      current = words[i]
      next = words[i + 1]
      if current in markovChain:
        if next in markovChain[current]:
          markovChain[current][next] += 1
        else:
          markovChain[current][next] = 1
      else:
        markovChain[current] = {next: 1}
  
    generatedText = ""
    current = random.choice(list(markovChain))
    generatedText += current
  
    for i in range(99):
      if current not in markovChain:
        break
      choices = markovChain[current]
      choices = [
        key for key, value in choices.items()
        for i in range(value)
      ]
      current = random.choice(choices)
      generatedText += " " + current
  
    return generatedText