Loading...
kneav avatar kneav 7 Точки

06. Winning Ticket Text Processing - More Exercise

import com.sun.source.tree.IfTree;

import java.sql.SQLOutput;
import java.util.Scanner;

public class WinningTicket {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        String[] tickets = scanner.nextLine().split(", ");
        String[] winnerSymbol = {"@", "#", "$", "^"};
        for (int i = 0; i < tickets.length; i++) {
            if (tickets[i].length() < 20) {
                System.out.println("invalid ticket");
                continue;
            }

            String symbol = getSmbol(winnerSymbol, tickets[i]);
            if (symbol.equals("notFound")) {
                printNoMatch(tickets[i]);
                continue;
            }
            int length = getCount(symbol, tickets[i]);
            if (length < 6) {
                printNoMatch(tickets[i]);
                continue;
            }
            String jackpot = checkJacpot(length);
            //  String ticket = "\"" + tickets[i] + "\"";
            // System.out.print("ticket \"" + tickets[i]);
            // System.out.println("\" - " + length + symbol + jackpot);
            //  System.out.println(String.format("ticket \"%s\" - %d%s%s", tickets[i], length, symbol, jackpot));
            System.out.println("ticket \"" + tickets[i] + "\" - " + length + symbol + jackpot);
        }
    }

    private static void printNoMatch(String ticket) {
        System.out.println(String.format("ticket \"%s\" - no match", ticket));
    }

    private static String checkJacpot(int length) {
        if (length >= 10) {
            return " Jackpot!";
        }
        return "";
    }

    private static int getCount(String symbol, String ticket) {
        int half = ticket.length() / 2;
        if (ticket.length() % 2 == 1) {
            half = ticket.length() / 2 - 1;
        }
        String leftHalf = removeNonWinSymb(ticket.substring(0, half), symbol);
        String rightHalf = removeNonWinSymb(ticket.substring(half), symbol);
        return leftHalf.length() < rightHalf.length() ? leftHalf.length() : rightHalf.length();

    }

    private static String removeNonWinSymb(String halfTicket, String symbol) {
        StringBuilder combination = new StringBuilder();
        for (int i = 0; i < halfTicket.length(); i++) {
            String check = "" + ((char) (halfTicket.charAt(i)));
            if (symbol.equals(check)) {
                combination.append(symbol);
            }
        }
        return combination.toString();
    }

    private static String getSmbol(String[] winnerSymbol, String ticket) {
        for (String s : winnerSymbol) {
            if (ticket.contains(s)) {
                return s;
            }
        }
        return "notFound";
    }
}

 

link : https://judge.softuni.bg/Contests/Practice/Index/1674#5

 

Здравейте, Може ли малко помощ. 50/100 но дъдж на IJ го нямам тоя проблем на единия нулев ми вкарва празни пространства покрай " \" "   и не знам как да го реша това: 

ticket "$$$$$$$$$$$$$$$$$$$$   " - 10$ Jackpot!
invalid ticket
ticket "    th@@@@@@eemo@@@@@@ey" - 6@

Тагове:
0
Java Fundamentals
kneav avatar kneav 7 Точки

Ето и пренаписано решение 100/100. 

Не можах да преценя дали да редактирам първия пост, но искам да Изкажа Балгодарности на колегите във фейсбук груапата!!!

Грешките бяха в:

1. празните пространства при четене

2. тикета е точно 20 символа;

3. взимах първия срещант символ, без збачение, дали той е печелившя ред- т.е. в тикета могат да участват няколко печеливши символа, но е този с ред над 5 еднакви, поредни символа.

import java.util.Scanner;

public class WinningTicket {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        String[] tickets = scanner.nextLine().replaceAll("\\s+", "").split(",");
        String[] winnerSymbol = {"@", "#", "$", "^"};

        for (String ticket : tickets) {
            if (ticket.length() != 20) {
                System.out.println("invalid ticket");
                continue;
            }

            String leftSide = getSymbol(winnerSymbol, ticket);
            String rightSide = getSequenceSide(leftSide.charAt(0), ticket, 10, 20);

            if (leftSide.equals("notFound") || rightSide.equals("notFound")) {
                printNoMatch(ticket);
                continue;
            }

            int length = Math.min(leftSide.length(), rightSide.length());


            String jackpot = checkJacpot(length);

            System.out.println(String.format("ticket \"%s\" - %d%s%s", ticket, length, leftSide.substring(0, 1), jackpot));

        }
    }

    private static void printNoMatch(String ticket) {
        System.out.println(String.format("ticket \"%s\" - no match", ticket));
    }

    private static String checkJacpot(int length) {
        if (length >= 10) {
            return " Jackpot!";
        }
        return "";
    }


    private static String getSymbol(String[] winnerSymbol, String ticket) {
        String returnString = "notFound";
        for (String s : winnerSymbol) {
            if (ticket.contains(s)) {
                returnString = getSequenceSide(s.charAt(0), ticket, 0, 10);
            }
            if (returnString.contains(s) && returnString.length() >= 6) {
                break;
            }
        }
        return returnString;
    }

    private static String getSequenceSide(char charAt, String ticket, int start, int end) {
        String returnString = "notFound";
        StringBuilder rightSide = new StringBuilder();

        for (int i = start; i < end; i++) {
            if (charAt == ticket.charAt(i)) {
                String add = "" + (char) (ticket.charAt(i));
                rightSide.append(add);
            } else {
                if (rightSide.length() < 6) {
                    rightSide.delete(0, rightSide.length());
                }
            }
        }
        if (rightSide.length() >= 6) {
            returnString = rightSide.toString();
        }
        return returnString;
    }
}
0
20/08/2020 22:21:08
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.