How to Find the Row of the Odd Triangle in Python


The challenge

Given a triangle of consecutive odd numbers:

             1
          3     5
       7     9    11
   13    15    17    19
21    23    25    27    29
...

find the triangle’s row knowing its index (the rows are 1-indexed), e.g.:

odd_row(1)  ==  [1]
odd_row(2)  ==  [3, 5]
odd_row(3)  ==  [7, 9, 11]

Note: your code should be optimized to handle big inputs.

The solution in Python code

Option 1:

def odd_row(n):
    m = (n - 1) * n + 1
    return [*range(m, m + n * 2, 2)]

Option 2:

def odd_row(n):
    return [x for x in range(n**2-n+1, (n+1)**2-n,2)]

Option 3:

odd_row = lambda n:list(range(n*(n-1)+1,n*(n+1),2))

Test cases to validate our solution

test.assert_equals(odd_row(1), [1])
test.assert_equals(odd_row(2), [3, 5])

test.assert_equals(odd_row(13), [157, 159, 161, 163, 165, 167, 169, 171,
    173, 175, 177, 179, 181])

test.assert_equals(odd_row(19), [343, 345, 347, 349, 351, 353, 355, 357,
    359, 361, 363, 365, 367, 369, 371, 373, 375, 377, 379])

test.assert_equals(odd_row(41), [1641, 1643, 1645, 1647, 1649, 1651, 1653,
    1655, 1657, 1659, 1661, 1663, 1665, 1667, 1669, 1671, 1673, 1675, 1677,
    1679, 1681, 1683, 1685, 1687, 1689, 1691, 1693, 1695, 1697, 1699, 1701,
    1703, 1705, 1707, 1709, 1711, 1713, 1715, 1717, 1719, 1721])