/*
I. 534.
Horcsin Bálint
Budapest, Németh László Gimnázium, 12. o. t.

Fordítási, futtatási környezet:
Operációs rendszer: Ubuntu 20.04.2 LTS
Java verzió: OpenJDK 14.0.2
Fejlesztői környezet: MS Visual Studio Code
*/

//package i534;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;

public class sakk{
    private ArrayList<player> p = new ArrayList<player>();
    private void init(String filename) throws FileNotFoundException{
        Scanner sc = new Scanner(new FileInputStream("sakk.txt"));
        while(sc.hasNextLine()){
            String line = sc.nextLine();
            if(line.length() >=130){
                player current = new player(line);
                if(current.nationality.equals("HUN")){
                    p.add(current);
                }
            }
        }
        sc.close();
    }
    public sakk(String filename) throws FileNotFoundException{
        init(filename);
        System.out.println("1. feladat: az adatok beolvasása");
    }
    public void task2(){
        int ma = 0, fe = 0;
        for(int i=0;i<p.size();i++){
            if(p.get(i).isMale){
                ma++;
            } else {
                fe++;
            }
        }
        System.out.println("2. feladat:\n"+
        "A listában "+ma+" férfi és "+fe+" női sakkozónk szerepel");
    }
    public void task3(){
        int ma = -2000000000, fe = -2000000000;
        int mai = 0, fei = 0;
        for(int i=0;i<p.size();i++){
            if(p.get(i).isMale){
                if(ma < p.get(i).elo){
                    ma = p.get(i).elo;
                    mai = i;
                }
            } else {
                if(fe < p.get(i).elo){
                    fe = p.get(i).elo;
                    fei = i;
                }
            }
        }
        System.out.println("3. feladat:\n"+
        "A legmagasabb pontszámú férfi versenyzőnk "+p.get(mai).name+'\n'+
        "Pontszáma: "+p.get(mai).elo+'\n'+
        "Születési éve: "+p.get(mai).yearOfBirth+'\n'+
        "A legmagasabb pontszámú női versenyzőnk "+p.get(fei).name+'\n'+
        "Pontszáma: "+p.get(fei).elo+'\n'+
        "Születési éve: "+p.get(fei).yearOfBirth);
    }
    public void task4(){
        int db = 0;
        for(int i=0;i<p.size();i++){
            if(!p.get(i).isMale && p.get(i).yearOfBirth >= 1990 && p.get(i).elo >= 2000){
                ++db;
            }
        }
        System.out.println("4. feladat:\n"+
        db+" olyan női sakkozónk van, aki 1990-ben vagy az után született, és Élő-pontszáma legalább 2000");
    }
    public void task5(){
        int db = 0;
        for(int i=0;i<p.size();i++){
            if(p.get(i).name.split(", ")[0].equals("Polgar")){
                ++db;
            }
        }
        int[] m = new int[db];
        int ind = -1;
        for(int i=0;i<p.size();i++){
            if(p.get(i).name.split(", ")[0].equals("Polgar")){
                m[++ind] = i;
            }
        }
        for(int i=0;i<db;i++){
            for(int j=0;j<db-1;j++){
                if(p.get(m[j]).elo > p.get(m[j+1]).elo){
                    int tmp = m[j];
                    m[j] = m[j+1];
                    m[j+1] = tmp;
                }
            }
        }
        System.out.println("5. feladat: A Polgár család tagjai");
        int len = 0;
        for(int i=0;i<db;i++){
            len = Math.max(len, p.get(m[i]).name.split(", ")[1].length());
        }
        for(int i=0;i<db;i++){
            System.out.print(p.get(m[i]).name.split(", ")[1]);
            for(int j=0;j<len+5-p.get(m[i]).name.split(", ")[1].length();j++){
                System.out.print(' ');
            }
            System.out.println(p.get(m[i]).yearOfBirth + "   "+p.get(m[i]).elo);
        }
    }
    public void task6(){
        System.out.println("6. feladat: Akik elérték Polgár Judit mai pontszámát:");
        int curr = 0;
        for(int i=0;i<p.size();i++){
            if(p.get(i).name.equals("Polgar, Judit")){
                curr = p.get(i).elo;
            }
        }
        boolean volt = false;
        for(int i=0;i<p.size();i++){
            if(!p.get(i).name.equals("Polgar, Judit") && p.get(i).elo>=curr){
                if(volt){
                    System.out.print(", ");
                }
                System.out.print(p.get(i).name.replaceAll(",", ""));
                if(p.get(i).elo>=2735){
                    System.out.print("(*)");
                }
                volt = true;
            }
        }
        if(volt){
            System.out.println(".");
        }
    }
    public static void main(String[] args) throws FileNotFoundException{
        sakk s = new sakk("sakk.txt");
        s.task2();
        s.task3();
        s.task4();
        s.task5();
        s.task6();
    }
    class player{
        String name;
        String nationality;
        boolean isMale = false; //M: true F: false
        int elo = 0;
        int yearOfBirth;
        public player(String line){
            name = line.substring(15,76);
            while(name.charAt(name.length()-1) == ' '){
                name = name.substring(0,name.length()-1);
            }
            nationality = line.substring(76,79);
            if(nationality.equals("HUN")){
                if(line.charAt(80) == 'M') isMale = true;
                try{
                    elo = Integer.parseInt(line.substring(113,117));
                } catch(NumberFormatException nfe){
                    if(nationality.equals("HUN")){
                        System.err.println("Hiba a következő sor feldolgozásakor!");
                        System.err.println(line);
                    } else {

                    }
                }
                try{
                    yearOfBirth = Integer.parseInt(line.substring(126,130));
                } catch (NumberFormatException nfe){
                    if(nationality.equals("HUN")){
                        System.err.println("Hiba a következő sor feldolgozásakor!");
                        System.err.println(line);
                    } else {

                    }
                }
            }
        }
    }
}