Menu
Topics Index
...
`

Weekend Hack - 28 Sep 2013 - Results

Thanks to Nishan K Sharma, Amar Kumar and Bhavana Ch 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 28 Sep 2013 - 1 is Nishan K Sharma. He will get a recharge or gift voucher worth Rs. 125. Since the other solutions were also equally good, they will get a bonus recharge of Rs. 75 each.

Print the banner as per the requirements

Given a string, write a program to arrange the string according to the alignments like HL(Horizontal Left), HR(Horizontal Right), VT(Vertical Top), VB(Vertical Bottom). For more information look at the requirements.

Input (String, String) Printed Output
'Sun rises in the east', HL O---O---O---O---O---O
| S | U | N |   |   |
O---O---O---O---O---O
| R | I | S | E | S |
O---O---O---O---O---O
| I | N |   |   |   |
O---O---O---O---O---O
| T | H | E |   |   |
O---O---O---O---O---O
| E | A | S | T |   |
O---O---O---O---O---O
'Sun rises in the east', HR O---O---O---O---O---O
|   |   | S | U | N |
O---O---O---O---O---O
| R | I | S | E | S |
O---O---O---O---O---O
|   |   |   | I | N |
O---O---O---O---O---O
|   |   | T | H | E |
O---O---O---O---O---O
|   | E | A | S | T |
O---O---O---O---O---O
'Sun rises in the east', VT O---O---O---O---O---O
| S | R | I | T | E |
O---O---O---O---O---O
| U | I | N | H | A |
O---O---O---O---O---O
| N | S |   | E | S |
O---O---O---O---O---O
|   | E |   |   | T |
O---O---O---O---O---O
|   | S |   |   |   |
O---O---O---O---O---O
'Sun rises in the east', VB O---O---O---O---O---O
|   | R |   |   |   |
O---O---O---O---O---O
|   | I |   |   | E |
O---O---O---O---O---O
| S | S |   | T | A |
O---O---O---O---O---O
| U | E | I | H | S |
O---O---O---O---O---O
| N | S | N | E | T |
O---O---O---O---O---O
'Pawan is great', VB O---O---O---O
| P |   | G |
O---O---O---O
| A |   | R |
O---O---O---O
| W |   | E |
O---O---O---O
| A | I | A |
O---O---O---O
| N | S | T |
O---O---O---O
'Pawan is great', HR O---O---O---O---O---O
| P | A | W | A | N |
O---O---O---O---O---O
|   |   |   | I | S |
O---O---O---O---O---O
| G | R | E | A | T |
O---O---O---O---O---O

Solution 1 - Submitted on Sat Sep 28 14:00:37 2013



class PrintBanner {

    public static void main(String s[]) {
        printBanner("Sun rises in the east", "HR");
    }

    public static void printBanner(String banner, String align) {
        banner = banner.toUpperCase();
        String split[] = banner.split("\\s");
        int max = split[0].length();
        for (int i = 1; i < split.length; i++)
            if (split[i].length() > max)
                max = split[i].length();
        makeBanner(split, max, align);
    }

    // makes the banner according to the alignment given
    public static void makeBanner(String split[], int max, String align) {
        if (align.equals("HL")) {
            char output[][] = new char[split.length][max];
            output = fillArray(output);
            for (int i = 0; i < split.length; i++)
                for (int j = 0; j < split[i].length(); j++)
                    output[i][j] = split[i].charAt(j);
            printOutput(output);
        } else if (align.equals("HR")) {
            char output[][] = new char[split.length][max];
            output = fillArray(output);
            for (int i = 0; i < split.length; i++) {
                int p = 0;
                for (int j = max - split[i].length(); j < max; j++) {
                    output[i][j] = split[i].charAt(p);
                    p++;
                }
            }
            printOutput(output);
        } else if (align.equals("VT")) {
            char output[][] = new char[max][split.length];
            output = fillArray(output);
            for (int i = 0; i < split.length; i++)
                for (int j = 0; j < split[i].length(); j++)
                    output[j][i] = split[i].charAt(j);
            printOutput(output);
        } else if (align.equals("VB")) {
            char output[][] = new char[max][split.length];
            output = fillArray(output);
            for (int i = 0; i < split.length; i++) {
                int p = 0;
                for (int j = max - split[i].length(); j < max; j++) {
                    output[j][i] = split[i].charAt(p);
                    p++;
                }
            }
            printOutput(output);
        }
    }

    // fills all the array elements with space character
    public static char[][] fillArray(char output[][]) {
        for (int i = 0; i < output.length; i++)
            for (int j = 0; j < output[i].length; j++)
                output[i][j] = ' ';
        return output;
    }

    // prints the required banner
    public static void printOutput(char output[][]) {
        for (int a = 0; a < output[0].length; a++)
            System.out.print("O---");
        System.out.println("O");
        for (char[] element : output) {
            for (int j = 0; j < element.length; j++)
                System.out.print("| " + element[j] + " ");
            System.out.println("|");
            for (int b = 0; b < element.length; b++)
                System.out.print("O---");
            System.out.println("O");
        }
    }
}

Comments :

Solution 2 - Submitted on Sat Sep 28 17:20:47 2013

class PrintBanner {

    public static void main(String s[]) {
        printBanner("Sun rises in the east", "HR");
    }

    public static void printBanner(String banner, String align) {
        banner = banner.toUpperCase();
        /*
         * Using two additional methods getBanner() and print(), for getting a
         * empty formatted banner and priting the Banner respectively
         */
        String splitBanner[] = banner.split(" ");
        int row = splitBanner.length;
        int col = splitBanner[0].length();
        for (int i = 1; i < row; i++) {
            if (col < splitBanner[i].length()) {
                col = splitBanner[i].length();
            } else
                col = col;
        }
        // Row and col for the creation of matrix where "row" is no of words in
        // line and "col" is max wordlength in the line
        char first, second;
        first = align.charAt(0);
        second = align.charAt(1);
        if (first == 'H' && second == 'L') {
            char output[][] = getBanner(row, col);
            // getBanner for creating a empty Banner matrix with format
            int l = 0;
            for (int i = 0; i < output.length; i++) {
                if (i % 2 != 0) {
                    for (int j = 2, k = 0; k < splitBanner[l].length(); j += 4, k++) {
                        output[i][j] = splitBanner[l].charAt(k);
                        // In this the values are inserting
                    }
                    l++;
                }
            }
            print(output);
            // printing the Banner, Same applies to remaining three.
        } else if (first == 'H' && second == 'R') {
            char output[][] = getBanner(row, col);
            int l = 0;
            for (int i = 0; i < output.length; i++) {
                if (i % 2 != 0) {
                    for (int j = output[0].length - 3, k = splitBanner[l].length() - 1; k >= 0; j -= 4, k--) {
                        output[i][j] = splitBanner[l].charAt(k);
                    }
                    l++;
                }
            }
            print(output);
        } else if (first == 'V' && second == 'T') {
            char output[][] = getBanner(col, row);
            int l = 0;
            for (int j = 2; j < output[0].length; j += 4) {
                for (int i = 1, k = 0; k < splitBanner[l].length(); i += 2, k++) {
                    if (i % 2 != 0)
                        output[i][j] = splitBanner[l].charAt(k);
                }
                l++;
            }
            print(output);
        } else if (first == 'V' && second == 'B') {
            char output[][] = getBanner(col, row);
            int l = 0;
            for (int j = 2; j < output[0].length; j += 4) {
                for (int i = output.length - 2, k = splitBanner[l].length() - 1; k >= 0; i -= 2, k--) {
                    if (i % 2 != 0)
                        output[i][j] = splitBanner[l].charAt(k);
                }
                l++;
            }
            print(output);
        }
    }

    public static char[][] getBanner(int row, int col) {
        char output[][] = new char[2 * row + 1][4 * col + 1];
        for (int i = 0; i < 2 * row + 1; i++) {
            for (int j = 0; j < 4 * col + 1; j++) {
                output[i][j] = ' ';
            }
        }
        for (int i = 0; i < 2 * row + 1; i++) {
            for (int j = 0; j < 4 * col + 1; j++) {
                if (i % 2 == 0) {
                    if (j % 4 == 0) {
                        output[i][j] = 'O';
                    } else
                        output[i][j] = '-';
                } else {
                    if (j % 4 == 0)
                        output[i][j] = '|';
                }
            }
        }
        return output;
    }

    public static void print(char output[][]) {
        for (char[] element : output) {
            for (int j = 0; j < output[0].length; j++) {
                System.out.print(element[j]);
            }
            System.out.println();
        }
    }
}

Comments :

Solution 3 - Submitted on Sun Sep 29 12:50:05 2013

class PrintBanner {

    public static void main(String s[]) {
        printBanner("Sun rises in the east", "HR");
    }

    public static void printBanner(String banner, String align) {
        // Splitting the gives string banner into a string array
        banner = banner.toUpperCase();
        String arr[] = banner.split("\\ ");
        String newarr[] = new String[50];
        String str;
        int i, l;
        int max = 0;
        int words;
        int maxi = 0;
        String choice = align;
        //Words contains the length of the array
        words = arr.length;
        for (String element : arr) {
            if (element.length() > max) {
                max = element.length();
            }
        }
        if (choice.equals("VT") || choice.equals("VB")) {
            //In case of vertical TOP setting spaces at the END of each word so that all the words are of equal length
            if (choice.equals("VT")) {
                for (int lp = 0; lp < words; lp++) {
                    for (int p = arr[lp].length(); p < max; p++) {
                        arr[lp] = arr[lp] + " ";
                    }
                }
            }
            //In case of vertical BOTTOM setting spaces at the BEGIN of each word so that all the words are of equal length
            if (choice.equals("VB")) {
                String Str = "";
                int m = 0;
                for (int pl = 0; pl < words; pl++) {
                    for (int p = arr[pl].length(); p < max; p++) {
                        Str = Str + " ";
                    }
                    arr[m] = Str + arr[m];
                    m++;
                    Str = "";
                }
            }
            int y = 0;
            String strng = "";
            l = 0;
            // CODE to display each word in a vertical form and copying the new word into newarr[] array.
            for (int cnt = 0; cnt < max; cnt++) {
                for (int m = 0; m < words; m++) {
                    char ch = arr[m].charAt(l);
                    strng = strng + ch;
                }
                newarr[y] = strng;
                //System.out.println(newarr[y]);
                y++;
                l++;
                strng = "";
            }
            /*for(int gh=0;gh            {
                System.out.println(newarr[gh]+ "   "+newarr[gh].length());
            }
            */
            words = y;
            //System.out.println(words);
            for (int ipu = 0; ipu < y; ipu++) {
                if (newarr[ipu].length() >= maxi) {
                    maxi = newarr[ipu].length();
                }
            }
            Function(newarr, maxi, words, choice);
        } else {
            Function(arr, max, words, choice);
        }
    }

    public static void Function(String arr[], int max, int words, String choice) {
        int z = 0;
        // CODE FOR PURPOSE OF DISPLAY
        for (int ii = 1; ii < (words * 2) + 2; ii++) {
            // First line should start with pattern..This continues till the last word is printed.Then we end with the pattern
            if (ii % 2 == 1) {
                function1(max);
            }
            // To display the string according to the CHOICE
            if (ii % 2 == 0) {
                function2(arr[z], choice, max);
                z++;
            }
        }
    }

    // CODE TO FIND THE LENGTH OF THE MAXIMUM WORD IN THE ARRAY
    /*public static int Max_Calci(String arrx[])
    {
        int max=0;
        
        for(int ip=0;ip        {
            if(arrx[ip].length()> max)
            {
                max=arrx[ip].length();
            }
            
        }
        return max;
     
        
        
    }
    */
    // CODE TO PRINT PATTERN
    public static void function1(int max) {
        for (int p = 0; p < max; p++) {
            System.out.print("O---");
        }
        System.out.print("O");
        System.out.println();
    }

    // CODE TO VALIDATE A PARTICULAR CHOICE AND PERFORM A FUNCTION ACCORDINGLY
    public static void function2(String wrd, String wr, int max) {
        if (wr.equals("HR") || wr.equals("VB")) {
            ch2(wrd, max);
            ch1(wrd);
        }
        if (wr.equals("HL") || wr.equals("VT")) {
            ch1(wrd);
            ch2(wrd, max);
        }
        System.out.print("|");
        System.out.println();
    }

    // CODE TO PRINT THE CHARACTERS
    public static void ch1(String wrd) {
        for (int p = 0; p < wrd.length(); p++) {
            System.out.print("| " + wrd.charAt(p) + " ");
        }
    }

    //CODE TO PRINT THE SPACES I.E. TO FILL THE GAPS APPEARRING
    public static void ch2(String wrd, int max) {
        for (int c = wrd.length(); c < max; c++) {
            System.out.print("|   ");
        }
    }
}

Comments :

© meritcampus 2019

All Rights Reserved.

Open In App