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])