Menu
Topics Index
...
`

Weekend Hack - 01 Jun 2013 - Results

Thanks to Pramod Jain, Pramod Kumar Reddy Jella, Soumya Tata, Srihari Adelli, Kaushik Yasaswy and Prem Sai for spending so much time, coming up with original and innovative answers and for submitting them. Thanks to many others who have tried to get the solution.
We have reviewed the solutions as per the criteria mentioned at Weekend Hack and included the comments below. Given the experience of the participants, they were really innovative and clean. Few minor comments found are included below in the order of the submission. These comments are not intended to point out the mistakes in the solutions but to learn from them.

The winner of the Weekend Hack 01 Jun 2013 - 1 is Pramod Jain. He will get a recharge or gift voucher worth Rs. 150.

To print the runs per over chart using ball numbers as shown below

Write a program to print the runs per over chart using ball numbers as shown below. The runs per ball in every over is given.

Input (int[]) Printed Output
{{0, 1, 3, 1, 0, 2}, {4, 4, 0, 6, 1, 2}, {0, 5, 6, 4, 3, 2}, {1, 3, 4, 6, 1, 2}, {4, 6, 4, 4, 6, 2}, {4, 2, 6, 1, 3, 2}}         6
        6
        5
        5
        5
        5
    6   5
    6   5
    5   4 6
  6 5 6 4 6
  6 5 6 4 5
  5 4 5 4 5
  4 4 4 3 5
  4 4 4 3 4
  4 4 4 3 3
  4 3 4 3 3
  4 3 4 2 3
  4 3 4 2 3
  2 3 3 2 3
6 2 3 3 2 3
6 2 3 3 2 2
4 2 2 3 2 2
3 1 2 2 1 1
3 1 2 2 1 1
3 1 2 2 1 1
2 1 2 1 1 1
- - - - - -
1 2 3 4 5 6
{{0, 1, 3, 1, 0, 2}, {0, 2, 0, 1, 3, 0}, {3, 0, 0, 4, 2, 0}}     5
    5
6   4
6 5 4
4 5 4
3 5 4
3 4 1
3 2 1
2 2 1
- - -
1 2 3
{{4, 0, 2, 1, 6, 6}, {3, 4, 2, 2, 6, 6}, {0, 1, 4, 2, 2, 2}, {6, 4, 2, 1, 6, 2}, {0, 1, 2, 4, 6, 2}, {4, 4, 3, 2, 1, 0}, {3, 1, 4, 6, 2, 1}, {1, 4, 6, 2, 3, 1}, {6, 1, 2, 3, 4, 1}}   6
  6
  6   6
  6   6
6 6   5
6 6   5
6 5   5     6 6 6
6 5   5     5 5 5
6 5   5 6   5 5 5
6 5   5 6 5 4 5 5
5 5   4 5 4 4 4 5
5 5   3 5 4 4 4 4
5 4 6 3 5 3 4 3 4
5 4 6 2 5 3 4 3 4
5 3 5 2 5 3 4 3 3
5 3 5 2 5 2 3 3 3
4 2 4 2 4 2 3 3 2
3 2 4 1 4 2 3 3 1
3 2 3 1 4 2 3 2 1
1 2 3 1 4 1 2 2 1
1 1 3 1 3 1 1 2 1
1 1 3 1 3 1 1 2 1
1 1 2 1 2 1 1 1 1
- - - - - - - - -
1 2 3 4 5 6 7 8 9
{{1, 0, 2, 4, 6, 2}, {2, 3, 4, 1, 2, 1}, {6, 2, 4, 1, 2, 4}, {6, 1, 3, 2, 1, 4}}     6
    6
    6 6
    6 6
6   5 6
6   5 6
5 6 4 5
5 5 3 4
5 5 3 4
5 4 3 3
5 3 3 3
5 3 2 3
4 3 2 2
4 3 1 1
4 2 1 1
4 2 1 1
3 2 1 1
3 1 1 1
1 1 1 1
- - - -
1 2 3 4
 

Solution 1 - Submitted on Sat Jun 1 12:06:43 2013

class PrintRunsPerOverChartAdvanced {

    public static void main(String s[]) {
        int[][] input = {{0, 1, 3, 1, 0, 2}, {4, 4, 0, 6, 1, 2}, {0, 5, 6, 4, 3, 2}, {1, 3, 4, 6, 1, 2}, {4, 6, 4, 4, 6, 2}, {4, 2, 6, 1, 3, 2}};
        printChart(input);
    }

    public static void printChart(int[][] allOvers) {
        //returns maximum runs scored in a over from the given list
        int maxRunsScored = maxRunsPerOver(allOvers);
        //Create a new array with appropriate dimensions
        //Number of Rows= maximum runs per over in the list
        //Number of columns = number of overs bowled
        int[][] result = new int[maxRunsScored][allOvers.length];
        int column;
        for (int overIterator = 0; overIterator < allOvers.length; overIterator++) {
            column = 0;
            for (int ballIterator = 0; ballIterator < 6; ballIterator++) {
                //Loop to insert ball number in result array
                //Ball number will be inserted as many times as runs scored on that ball 
                for (int runIterator = 0; runIterator < allOvers[overIterator][ballIterator]; runIterator++) {
                    result[column][overIterator] = ballIterator + 1;
                    column++;
                }
            }
        }
        //Loop to print the runs per over chart using ball numbers
        for (int rowIterator = maxRunsScored - 1; rowIterator >= 0; rowIterator--) {
            for (int colIterator = 0; colIterator < allOvers.length; colIterator++) {
                if (result[rowIterator][colIterator] != 0)
                    System.out.print(result[rowIterator][colIterator] + " ");
                else
                    System.out.print("  ");
            }
            System.out.println();
        }
        //Loop to add separator '-' in chart
        for (int[] allOver : allOvers) {
            System.out.print("- ");
        }
        System.out.println();
        //Loop to add Over number in charts
        for (int overIterator = 1; overIterator <= allOvers.length; overIterator++) {
            System.out.print(overIterator + " ");
        }
    }

    //Function to return maximum runs scored per over from the list
    public static int maxRunsPerOver(int[][] allOvers) {
        int totalRuns, maximumRuns = 0;
        for (int[] allOver : allOvers) {
            totalRuns = 0;
            for (int j = 0; j < 6; j++) {
                totalRuns += allOver[j];
            }
            if (totalRuns > maximumRuns) {
                maximumRuns = totalRuns;
            }
        }
        return maximumRuns;
    }
}

Review Comments

Overall Rating (out of 10): 7

Solution 2 - Submitted on Sat Jun 1 13:54:04 2013

class PrintRunsPerOverChartAdvanced {

    public static void main(String s[]) {
        int[][] input = {{0, 1, 3, 1, 0, 2}, {4, 4, 0, 6, 1, 2}, {0, 5, 6, 4, 3, 2}, {1, 3, 4, 6, 1, 2}, {4, 6, 4, 4, 6, 2}, {4, 2, 6, 1, 3, 2}};
        printChart(input);
    }

    public static void printChart(int[][] allOvers) {
        int max = 0;
        int o = allOvers.length;
        int length[][] = new int[o][1];
        int count[][] = new int[o][6];
        for (int i = 0; i < o; i++) {
            for (int j = 0; j < 6; j++) {
                count[i][j] = allOvers[i][j];
            }
        }
        for (int i = 0; i < o; i++) {
            int sum = 0;
            for (int j = 0; j < 6; j++) {
                sum = sum + allOvers[i][j];
            }
            length[i][0] = sum;
            if (sum > max)
                max = sum;
        }
        int k;
        for (int j = 0; j < max; j++) {
            System.out.println(" ");
            for (int i = 0; i < o; i++) {
                k = 5;
                if ((max - length[i][0]) > 0) {
                    System.out.print(" " + " ");
                    length[i][0] = length[i][0] + 1;
                } else {
                    while (count[i][k] == 0) {
                        k--;
                    }
                    if (count[i][k] != 0) {
                        System.out.print((k + 1) + " ");
                        count[i][k] = count[i][k] - 1;
                    }
                }
            }
        }
        System.out.println("");
        for (int i = 1; i <= o; i++) {
            System.out.print("-" + " ");
        }
        System.out.println("");
        for (int i = 1; i <= o; i++) {
            System.out.print(i + " ");
        }
    }
}

Review Comments

Overall Rating (out of 10): 5

Solution 3 - Submitted on Sat Jun 1 14:31:45 2013

class PrintRunsPerOverChartAdvanced {

    public static void main(String s[]) {
        int[][] input = {{0, 1, 3, 1, 0, 2}, {4, 4, 0, 6, 1, 2}, {0, 5, 6, 4, 3, 2}, {1, 3, 4, 6, 1, 2}, {4, 6, 4, 4, 6, 2}, {4, 2, 6, 1, 3, 2}};
        printChart(input);
    }

    public static void printChart(int[][] allOvers) {
        int sum = 0;
        int temp = 0;
        for (int[] allOver : allOvers) {
            for (int j = 0; j < 6; j++) {
                temp = temp + allOver[j];
            }
            if (temp > sum)
                sum = temp;
            temp = 0;
        }
        int output[][] = new int[sum][allOvers.length];
        for (int i = 0; i < allOvers.length; i++)// i indicates the over number
        {
            int ball = 1;//ball indicates the ball number in a particular over.
            for (int j = sum - 1; j >= 0; j--) {
                if (ball > 6) //if ball > 6 control goes to nxt over.
                    break;
                int runs = allOvers[i][ball - 1];//to get the number of runs got for a particular ball in a particular over
                while (runs > 0) {
                    output[j][i] = ball;
                    j--;
                    runs--;
                }
                j++;
                ball++;
            }
        }
        for (int i = 0; i < sum; i++) {
            for (int j = 0; j < allOvers.length; j++) {
                if (output[i][j] == 0) {
                    System.out.print("  ");
                    continue;
                }
                System.out.print(output[i][j] + " ");
            }
            System.out.println();
        }
        for (int[] allOver : allOvers) {
            System.out.print("- ");
        }
        System.out.println();
        for (int i = 1; i <= allOvers.length; i++) {
            System.out.print(i + " ");
        }
    }
}

Review Comments

Overall Rating (out of 10): 5

Solution 4 - Submitted on Sat Jun 1 16:20:48 2013

class PrintRunsPerOverChartAdvanced {

    public static void main(String s[]) {
        int[][] input = {{0, 1, 3, 1, 0, 2}, {4, 4, 0, 6, 1, 2}, {0, 5, 6, 4, 3, 2}, {1, 3, 4, 6, 1, 2}, {4, 6, 4, 4, 6, 2}, {4, 2, 6, 1, 3, 2}};
        printChart(input);
    }

    public static void printChart(int[][] allOvers) {
        int maxRunsInOver = 0, RunsInOver = 0;
        for (int[] allOver : allOvers) {
            RunsInOver = totalRunsInOver(allOver);
            if (maxRunsInOver < RunsInOver)
                maxRunsInOver = RunsInOver;
        }
        int array[][] = new int[maxRunsInOver][allOvers.length];
        for (int i = 0; i < allOvers.length; i++)
            creatingTheChart(array, allOvers[i], maxRunsInOver, i);
        for (int[] element : array) {
            for (int element2 : element) {
                if (element2 != 0)
                    System.out.print(element2 + " ");
                else
                    System.out.print(" " + "" + " ");
            }
            System.out.println();
        }
        for (int[] allOver : allOvers)
            System.out.print('-' + "" + " ");
        System.out.println();
        for (int i = 1; i <= allOvers.length; i++)
            System.out.print(i + " ");
        System.out.println();
    }

    // method to find the total runs in a over
    public static int totalRunsInOver(int over[]) {
        int sum = 0;
        for (int element : over)
            sum += element;
        return sum;
    }

    public static void creatingTheChart(int[][] array, int Over[], int maxRunsInOver, int index) {
        int count = 0;
        for (int i = 0; i < Over.length; i++) {
            count = 0;
            while (Over[i] > 0 && count < Over[i]) {
                array[--maxRunsInOver][index] = i + 1;
                count++;
            }
        }
    }
}

Review Comments

Overall Rating (out of 10): 6

Solution 5 - Submitted on Sat Jun 1 19:36:02 2013

class PrintRunsPerOverChartAdvanced {

    public static void main(String s[]) {
        int[][] input = {{0, 1, 3, 1, 0, 2}, {4, 4, 0, 6, 1, 2}, {0, 5, 6, 4, 3, 2}, {1, 3, 4, 6, 1, 2}, {4, 6, 4, 4, 6, 2}, {4, 2, 6, 1, 3, 2}};
        printChart(input);
    }

    public static void printChart(int[][] allOvers) {
        int noc = allOvers.length; //Number of columns in 'output' array
        int nor = nor(allOvers, noc); //Number of rows in 'output' array
        char[][] output = new char[nor][noc]; //Output array
        for (int i = 0; i < nor; i++)
            for (int j = 0; j < noc; j++)
                output[i][j] = ' ';
        for (int j = 0; j < noc; j++) {
            int i = nor - 1; //Start with the last row    
            for (int x = 0; x < allOvers[j][0]; x++) //Printing the 1s
            {
                output[i][j] = '1';
                i--;
            }
            for (int x = 0; x < allOvers[j][1]; x++) //Printing the 2s
            {
                output[i][j] = '2';
                i--;
            }
            for (int x = 0; x < allOvers[j][2]; x++) //Printing the 3s
            {
                output[i][j] = '3';
                i--;
            }
            for (int x = 0; x < allOvers[j][3]; x++) //Printing the 4s
            {
                output[i][j] = '4';
                i--;
            }
            for (int x = 0; x < allOvers[j][4]; x++) //Printing the 5s
            {
                output[i][j] = '5';
                i--;
            }
            for (int x = 0; x < allOvers[j][5]; x++) //Printing the 6s
            {
                output[i][j] = '6';
                i--;
            }
            if (i > 0) //Printing the blank spaces
            {
                output[i][j] = ' ';
                i--;
            }
        }
        //Displaying the 'output' array
        for (int i = 0; i < nor; i++) {
            for (int j = 0; j < noc; j++)
                System.out.print(output[i][j] + " ");
            System.out.println();
        }
        //Displaying the last two additional lines
        for (int i = 0; i < noc; i++)
            System.out.print("- ");
        System.out.println();
        for (int i = 1; i <= noc; i++)
            System.out.print(i + " ");
    }

    //Returns the number of rows in the 'output' array which is the maximum of the totals of each over
    public static int nor(int[][] input, int x) {
        int i, j, sum = 0, max = 0;
        for (i = 0; i < x; i++) {
            for (j = 0; j < 6; j++)
                sum += input[i][j];
            if (sum > max)
                max = sum;
            sum = 0;
        }
        return max;
    }
}

Review Comments

Overall Rating (out of 10): 5

Solution 6 - Submitted on Mon Jun 3 00:40:48 2013

class PrintRunsPerOverChartAdvanced {

    public static void main(String s[]) {
        int[][] input = {{0, 1, 3, 1, 0, 2}, {4, 4, 0, 6, 1, 2}, {0, 5, 6, 4, 3, 2}, {1, 3, 4, 6, 1, 2}, {4, 6, 4, 4, 6, 2}, {4, 2, 6, 1, 3, 2}};
        printChart(input);
    }

    public static void printChart(int[][] allOvers) {
        int sh = 0, s = 0;
        int overs = allOvers.length;
        for (int i = 0; i < overs; i++) {
            s = 0;
            for (int j = 0; j < 6; j++) {
                s += (j + 1) * allOvers[i][j];
            }
            if (s > sh)
                sh = s;
        }
        int[][] B = new int[sh][overs];
        for (int i = 0; i < sh; i++) {
            for (int j = 0; j < overs; j++) {
                B[i][j] = 0;
            }
        }
        for (int i = 0; i < overs; i++) {
            int q = sh - 1;
            for (int j = 0; j < 6; j++) {
                int n = allOvers[i][j];
                for (int r = 0; r < n; r++) {
                    B[q][i] = j + 1;
                    q--;
                }
            }
        }
        for (int i = 0; i < sh; i++) {
            //System.out.println("");
            for (int j = 0; j < overs; j++) {
                if (B[i][j] == 0)
                    System.out.print("  ");
                else
                    System.out.print(B[i][j] + " ");
            }
            System.out.println("");
        }
        for (int i = 0; i < overs; i++) {
            System.out.print("- ");
        }
        System.out.println("");
        for (int i = 0; i < overs; i++) {
            System.out.print((i + 1) + " ");
        }
    }
}

Review Comments

Overall Rating (out of 10): 5

s+=(j+1) * allOvers[i][j];
could be
s+= allOvers[i][j];

© meritcampus 2019

All Rights Reserved.

Open In App