Open In App
Related Articles

# Python Program to print a number diamond of any given size N in Rangoli Style

Given an integer N, the task is to print a number diamond of size N in rangoli style where N means till Nth number from number â€˜1â€™.

Examples:

```Input :
2
Output :
--2--
2-1-2
--2--

Input :
3
Output :
----3----
--3-2-3--
3-2-1-2-3
--3-2-3--
----3----

Input :
4
Output :
------4------
----4-3-4----
--4-3-2-3-4--
4-3-2-1-2-3-4
--4-3-2-3-4--
----4-3-4----
------4------
```

Approach:
First of all print from the first row till middle row, and then print from the row after middle row till the last row. The total number of positions in each row will be `4(N-1) + 1`. Number of rows will be `2(N-1) + 1`. Time complexity is `O(N^2)`.

Below is the implementation.

 `def` `print_diamond(size):``     ` `    ``# print the first triangle``    ``# (the upper half)``    ``for` `i ``in` `range` `(size):``         ` `        ``# print from first row till``        ``# middle row``        ``rownum ``=` `i ``+` `1``        ``num_alphabet ``=` `2` `*` `rownum ``-` `1``        ``space_in_between_alphabets ``=` `num_alphabet ``-` `1``         ` `        ``total_spots ``=` `(``2` `*` `size ``-` `1``) ``*` `2` `-` `1``        ``total_space ``=` `total_spots ``-` `num_alphabet``         ` `        ``space_leading_trailing ``=` `total_space ``-` `space_in_between_alphabets``        ``lead_space ``=` `int``(space_leading_trailing ``/` `2``)``        ``trail_space ``=` `int``(space_leading_trailing ``/` `2``)``         ` `        ``# print the leading spaces``        ``for` `j ``in` `range``(lead_space):``            ``print``(``'-'``, end ``=``'')``         ` `        ``# determine the middle character``        ``mid_char ``=` `(``1` `+` `size ``-` `1``) ``-` `int``(num_alphabet ``/` `2``)``         ` `        ``# start with the last character ``        ``k ``=` `1` `+` `size ``-` `1``        ``is_alphabet_printed ``=` `False``        ``mid_char_reached ``=` `False``         ` `        ``# print the numbers alternated by '-'``        ``for` `j ``in` `range``(num_alphabet ``+` `space_in_between_alphabets):``             ` `            ``if` `not` `is_alphabet_printed:``                ``print``(``str``(k), end ``=``'')``                ``is_alphabet_printed ``=` `True``                 ` `                ``if` `k ``=``=` `mid_char:``                    ``mid_char_reached ``=` `True``                 ` `                ``if` `mid_char_reached ``=``=` `True``:``                    ``k ``+``=` `1``                 ` `                ``else``:``                    ``k ``-``=` `1``             ` `            ``else``:``                ``print``(``'-'``, end ``=``'')``                ``is_alphabet_printed ``=` `False``         ` `        ``# print the trailing spaces``        ``for` `j ``in` `range``(trail_space):``            ``print``(``'-'``, end ``=``'')``         ` `        ``# go to the next line``        ``print``('')``     ` `    ``# print the rows after middle row ``    ``# till last row (the second triangle ``    ``# which is inverted, i.e., the lower half)``    ``for` `i ``in` `range``(size ``+` `1``, ``2` `*` `size):``         ` `        ``rownum ``=` `i``        ``num_alphabet ``=` `2` `*` `(``2` `*` `size ``-` `rownum) ``-` `1``        ``space_in_between_alphabets ``=` `num_alphabet ``-` `1``         ` `        ``total_spots ``=` `(``2` `*` `size ``-` `1``) ``*` `2` `-` `1``        ``total_space ``=` `total_spots ``-` `num_alphabet``         ` `        ``space_leading_trailing ``=` `total_space ``-` `space_in_between_alphabets``        ``lead_space ``=` `int``(space_leading_trailing ``/` `2``)``        ``trail_space ``=` `int``(space_leading_trailing ``/` `2``)``         ` `        ``# print the leading spaces``        ``for` `j ``in` `range``(lead_space):``            ``print``(``'-'``, end ``=``'')``         ` `        ``mid_char ``=` `(``1` `+` `size ``-` `1``) ``-` `int``(num_alphabet ``/` `2``)``         ` `        ``# start with the last char``        ``k ``=` `1` `+` `size ``-` `1``        ``is_alphabet_printed ``=` `False``        ``mid_char_reached ``=` `False``         ` `        ``# print the numbers alternated by '-'``        ``for` `j ``in` `range``(num_alphabet ``+` `space_in_between_alphabets):``             ` `            ``if` `not` `is_alphabet_printed:``                ``print``(``str``(k), end ``=``'')``                ``is_alphabet_printed ``=` `True``                 ` `                ``if` `k ``=``=` `mid_char:``                    ``mid_char_reached ``=` `True``                 ` `                ``if` `mid_char_reached ``=``=` `True``:``                    ``k ``+``=` `1``                 ` `                ``else``:``                    ``k ``-``=` `1``             ` `            ``else``:``                ``print``(``'-'``, end ``=``'')``                ``is_alphabet_printed ``=` `False``         ` `        ``# print the trailing spaces``        ``for` `j ``in` `range``(trail_space):``            ``print``(``'-'``, end ``=``'')``         ` `        ``# go to the next line``        ``print``('')`` ` `# Driver Code``if` `__name__ ``=``=` `'__main__'``:``     ` `    ``n ``=` `5``    ``print_diamond(n)`

Output:

```--------5--------
------5-4-5------
----5-4-3-4-5----
--5-4-3-2-3-4-5--
5-4-3-2-1-2-3-4-5
--5-4-3-2-3-4-5--
----5-4-3-4-5----
------5-4-5------
--------5--------
```