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