# How to draw Pyramid Shapes using Kotlin

Consider the following figure

O
OO
OOO
OOOO
This will be drawn using nested loops so let us make a chart

i        No of Os

1            1
2            2
3            3
4            4

This means we run a loop from 1 to 4 and run a nested loop from 1 to i inside the first loop

fun main(args : Array<String>)
{
var n:Int =4
var row:Int
for( row in 1..n)
{
var col:Int
for(col in 1..row)
print("O")
println()
}
}

Consider this figure now

O
OO
OOO
OOOO
This figure will require printing spaces on the left side before the Os. Let us make a chart again

Row        Space        Os
1                3                1
2                2                2
3                1                3
4                0                4

This will require an outer loop from 1 to 4 which will have 2 inner loops, one for the space and the other for Os
Space will be n-row, while Os will be row

fun main(args : Array<String>)
{
var n:Int =4
var row:Int
for( row in 1..n)
{
var space:Int
for(space in 1..n-row)
print(" ")
var col:Int
for(col in 1..row)
print("O")
println()

}
}

To vertically reverse a shape simply reverse the row loop.

fun main(args : Array<String>)

{

var n:Int =4

var row:Int

for( row in n downTo 1)

{

var space:Int

for(space in 1..n-row)

print(" ")

var col:Int

for(col in 1..row)

print("O")

println()

}

}

Next shape

O
OOO
OOOOO

Row        Space        Os
1                3                1
2                2                3
3                1                5

The number of Os is an odd number series. This can be generated by running a loop from 1 to 2*row -1

fun main(args : Array<String>)
{
var n:Int =3
var row:Int
for( row in 1..n)
{
var space:Int
for(space in 1..n-row)
print(" ")
var col:Int
for(col in 1..2*row-1)
print("O")
println()
}
}

Next figure,
1
1 2
1 2 3
1 2 3 4
First of all let us get the figure right
Row        Col
1                1
1                2
1                3
1                4
The shape can be drawn by the following program

fun main(args : Array<String>)
{
var n:Int =4
var row:Int
for( row in 1..n)
{
var space:Int
var col:Int
for(col in 1..row)
print("O")
println()

}
}

Now print the col value instead of O

fun main(args : Array<String>)
{
var n:Int =4
var row:Int
for( row in 1..n)
{
var space:Int
var col:Int
for(col in 1..row)
print(col)
println()

}
}

How about printing the following figure.
A
AB
ABC
ABCD

Its the same figure as before with the added conversion to Characters.

fun main(args : Array<String>)
{
var n:Int =4
var row:Int
for( row in 1..n)
{
var space:Int
var col:Int
for(col in 1..row) {
var ch:Char
ch=('A'.toInt() + col-1).toChar()
print(ch)
}
println()

}
}

1
1 2 1
1 2 3 2 1
1 2 3 4 3 2 1

This figure has the exact shape of the pyramid drawn above and is based on the odd number sequence.
Here is the code for that
fun main(args : Array<String>)
{
var n:Int =3
var row:Int
for( row in 1..n)
{
var space:Int
for(space in 1..n-row)
print(" ")
var col:Int
for(col in 1..2*row-1)
print("O")
println()
}
}

Now, we will break up the 2*row-1 into row + row-1

fun main(args : Array<String>)
{
var n:Int =3
var row:Int
for( row in 1..n)
{
var space:Int
for(space in 1..n-row)
print(" ")
var col:Int
for(col in 1..row)
print("O")
for(col in 1..row-1)
print("O")
println()
}
}

The output will be the same. Now print col instead of "O" in the loops.
fun main(args : Array<String>)
{
var n:Int =4
var row:Int
for( row in 1..n)
{
var space:Int
for(space in 1..n-row)
print(" ")
var col:Int
for(col in 1..row)
print(col)
for(col in 1..row-1)
print(col)
println()
}
}

Reverse the second loop now and we are done.

fun main(args : Array<String>)
{
var n:Int =4
var row:Int
for( row in 1..n)
{
var space:Int
for(space in 1..n-row)
print(" ")
var col:Int
for(col in 1..row)
print(col)
for(col in row-1 downTo 1)
print(col)
println()
}
}

What if we require alphabets?

A
ABA
ABCBA
ABCDCBA

fun main(args : Array<String>)
{
var n:Int =4
var row:Int
for( row in 1..n)
{
var space:Int
for(space in 1..n-row)
print(" ")
var col:Int
var ch:Char
for(col in 1..row) {
ch = ('A'.toInt() + col - 1).toChar()
print(ch)
}
for(col in row-1 downTo 1) {
ch = ('A'.toInt() + col - 1).toChar()
print(ch)
}
println()
}
}

Let us try this shape now.
A
ABA
ABCBA
ABA
A

We can break down this figure into 2 parts
A
ABA
ABCBA

and
ABA
A

Reversing a figure is done via reversing the top loop. So, let us do a bit of copy paste and create 2 loops first.
fun main(args : Array<String>)
{
var n:Int =4
var row:Int
//First loop begins
for( row in 1..n)
{
var space:Int
for(space in 1..n-row)
print(" ")
var col:Int
var ch:Char
for(col in 1..row) {
ch = ('A'.toInt() + col - 1).toChar()
print(ch)
}
for(col in row-1 downTo 1) {
ch = ('A'.toInt() + col - 1).toChar()
print(ch)
}
println()
}
//First loop ends

//Second loop begins
for( row in 1..n)
{
var space:Int
for(space in 1..n-row)
print(" ")
var col:Int
var ch:Char
for(col in 1..row) {
ch = ('A'.toInt() + col - 1).toChar()
print(ch)
}
for(col in row-1 downTo 1) {
ch = ('A'.toInt() + col - 1).toChar()
print(ch)
}
println()
}
//Second loop ends

}

Reverse the second loop now.

fun main(args : Array<String>)
{
var n:Int =4
var row:Int
//First loop begins
for( row in 1..n)
{
var space:Int
for(space in 1..n-row)
print(" ")
var col:Int
var ch:Char
for(col in 1..row) {
ch = ('A'.toInt() + col - 1).toChar()
print(ch)
}
for(col in row-1 downTo 1) {
ch = ('A'.toInt() + col - 1).toChar()
print(ch)
}
println()
}
//First loop ends

//Second loop begins
for( row in n downTo 1)
{
var space:Int
for(space in 1..n-row)
print(" ")
var col:Int
var ch:Char
for(col in 1..row) {
ch = ('A'.toInt() + col - 1).toChar()
print(ch)
}
for(col in row-1 downTo 1) {
ch = ('A'.toInt() + col - 1).toChar()
print(ch)
}
println()
}
//Second loop ends

}

The middle line is being repeated twice. Run the first loop upto n-1 or let the second one begin from n-1.

fun main(args : Array<String>)
{
var n:Int =4
var row:Int
//First loop begins
for( row in 1..n)
{
var space:Int
for(space in 1..n-row)
print(" ")
var col:Int
var ch:Char
for(col in 1..row) {
ch = ('A'.toInt() + col - 1).toChar()
print(ch)
}
for(col in row-1 downTo 1) {
ch = ('A'.toInt() + col - 1).toChar()
print(ch)
}
println()
}
//First loop ends

//Second loop begins
for( row in n-1 downTo 1)
{
var space:Int
for(space in 1..n-row)
print(" ")
var col:Int
var ch:Char
for(col in 1..row) {
ch = ('A'.toInt() + col - 1).toChar()
print(ch)
}
for(col in row-1 downTo 1) {
ch = ('A'.toInt() + col - 1).toChar()
print(ch)
}
println()
}
//Second loop ends

}

How to draw an outline figure?

OOOOO
O        O
O        O
O        O
OOOOO

First activity should be to draw a complete shape
OOOOO
OOOOO
OOOOO
OOOOO
OOOOO
fun main(args : Array<String>)
{
var n:Int =4
var row:Int

for( row in 1..n)
{

for(col in 1..n) {
print("O")
}

println()
}

}

For further questions or training on Kotlin you can contact us on.