# Print Pattern – Codechef December Lunchtime 2018 Problem in Java

**Problem Statement**

We are provided with an integer N. We have to print the N*N pattern like consider the following 4×4 pattern:

```
1 2 4 7
3 5 8 11
6 9 12 14
10 13 15 16
```

### Algorithm to solve December lunchtime 2018 problem

- For the upper half matrix sum of indexes of rows and columns are less than the order of square matrix and for lower half its greater.
- For upper half matrix we store the values in an array starting from a column and decreasing column and increasing row value by 1 until they reach 0 and store the sum of indexes of rows and columns in hash set because for a diagonal sum of indexes of rows and columns are same for all elements and with storing it in a hash set we can check using set. contains a method that we do not use that value again.
- For lower half matrix we store the values in an array by increasing row and decreasing column value by 1 here we are considering the number of elements in a diagonal like diagonal just after main diagonal element consider order-1 elements, diagonal after that order-2 like that we go till the value reaches 1.
- Finally, we print the stored array which is our final output.

## What does Hash_Set.contains() do ?

Hash_Set.contains() check that if a particular value is there in a set or not. If the set holds that value it returns true otherwise false.

** Syntax :- Hash_Set.contains(value);**

### Java Code to print the required pattern

import java.util.Scanner; import java.util.HashSet; class Codespeedy { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int no,i,j,count=1,counter; no=scan.nextInt(); counter=no-1; HashSet<Integer> s = new HashSet<Integer>(); int a[][] = new int[no+1][no+1]; for(i=0;i<no;i++) { for(j=0;j<no;j++) { if(!s.contains(i+j)) { int m=i; int n=j; if(i+j<no) { while(n>-1) { a[m][n]=count++; m++; n--; } } if((i+j)>no || (i+j)==no) { long c=0; while(c!=counter) { a[m][n]=count++; m++; n--; c++; } counter--; } } s.add(i+j); } } for(i=0;i<no;i++) { for(j=0;j<no;j++) { System.out.print(a[i][j]+" "); } System.out.println(" "); } } }

**INPUT**

4

**OUTPUT**

1 2 4 7 3 5 8 11 6 9 12 14 10 13 15 16

You may also learn,

Nice explained and done in an easy way this problem .

Nicely explained