## The challenge

he count-and-say sequence is the sequence of integers with the first five terms as following:

```1.     1
2.     11
3.     21
4.     1211
5.     111221```

`1` is read off as `"one 1"` or `11`.
`11` is read off as `"two 1s"` or `21`.
`21` is read off as `"one 2`, then `one 1"` or `1211`.

Given an integer n where 1 ≤ n ≤ 30, generate the nth term of the count-and-say sequence. You can do so recursively, in other words from the previous member read off the digits, counting the number of digits in groups of the same digit.

Note: Each term of the sequence of integers will be represented as a string.

Example 1:

```Input: 1
Output: "1"
Explanation: This is the base case.```

Example 2:

```Input: 4
Output: "1211"
Explanation: For n = 3 the term was "21" in which we have two groups "2" and "1", "2" can be read as "12" which means frequency = 1 and value = 2, the same way "1" is read as "11", so the answer is the concatenation of "12" and "11" which is "1211".```

## The solution with Python

 `````` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 `````` ``````def countAndSay(self, n: int) -> str: # helper function def countAndSayHelper(s): # return value result = [] # loop counter i = 0 # loop while less than while i < len(s): c = 1 # increment counters while i+1 < len(s) and s[i] == s[i+1]: i += 1 c += 1 # add string to the return list result.append(str(c)+s[i]) # increment i += 1 # return a string from the created list return ''.join(result) # set default return string value s = "1" # loop through input size for i in range(n-1): # use helper function s = countAndSayHelper(s) # return answer return s ``````