Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.text.DecimalFormat;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.Scanner;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- import java.util.stream.Collectors;
- import java.util.Comparator;
- enum Operator{VIP,ONE,TMOBILE} ;
- abstract class Contact
- {
- private String date;
- Contact(String date)
- {
- super();
- this.date = date;
- }
- public boolean isNewerThan(Contact c)
- {
- long This= this.getDay() + this.getMounth()*30 + this.getYear()*365;
- long C = c.getDay() + c.getMounth()*30 + c.getYear()*365;
- if(This<C)
- {
- return false;
- }
- return true;
- }
- public abstract String getType();
- public abstract String getEmail();
- public abstract String getPhone();
- public int getYear()
- {
- return Integer.parseInt(date.split("-")[0]);
- }
- public int getMounth()
- {
- return Integer.parseInt(date.split("-")[1]);
- }
- public int getDay()
- {
- return Integer.parseInt(date.split("-")[2]);
- }
- }
- class EmailContact extends Contact
- {
- private String email;
- EmailContact(String date, String email)
- {
- super(date);
- this.email = email;
- }
- public String getEmail()
- {
- return this.email;
- }
- public String getType()
- {
- return "Email";
- }
- @Override
- public String getPhone() {
- // TODO Auto-generated method stub
- return null;
- }
- }
- class PhoneContact extends Contact
- {
- //private Operator op;
- private String phone;
- PhoneContact(String date, String phone)
- {
- super(date);
- this.phone = phone;
- }
- public String getPhone()
- {
- return this.phone;
- }
- public Operator getOperator()
- {
- if(phone.split("/|-")[0].equals("070") ||
- phone.split("/|-")[0].equals("071")
- || phone.split("/|-")[0].equals("072"))
- return Operator.TMOBILE;
- else if(phone.split("/|-")[0].equals("075")
- ||phone.split("/|-")[0].equals("076"))
- return Operator.ONE;
- else
- return Operator.VIP;
- }
- @Override
- public String getType() {
- // TODO Auto-generated method stub
- return "Phone";
- }
- @Override
- public String getEmail() {
- // TODO Auto-generated method stub
- return null;
- }
- }
- class Student
- {
- private String firstName, lastName, city;
- private int age;
- private long index;
- private ArrayList<Contact> co=new ArrayList<Contact>();
- Student(String firstName, String lastName, String city, int age, long index)
- {
- this.age = age;
- this.city = city;
- this.firstName = firstName;
- this.index = index;
- this.lastName = lastName;
- }
- void addEmailContact(String date, String email)
- {
- EmailContact c = new EmailContact(date,email);
- co.add(c);
- }
- void addPhoneContact(String date, String phone)
- {
- PhoneContact p = new PhoneContact(date,phone);
- co.add(p);
- }
- Contact[] getEmailContacts()
- {
- ArrayList<Contact> pom = new ArrayList<Contact>();
- //System.out.println(pom.length);
- for(int i=0; i<co.size(); i++)
- {
- if(co.get(i).getType()=="Email")
- {
- pom.add(co.get(i));
- }
- }
- Contact[] p = new EmailContact[pom.size()] ;
- return pom.toArray(p);
- }
- Contact[] getPhoneContacts()
- {
- ArrayList<Contact> pom = new ArrayList<Contact>();
- //System.out.println(pom.length);
- for(int i=0; i<co.size(); i++)
- {
- if(co.get(i).getType()=="Phone")
- {
- pom.add(co.get(i));
- }
- }
- Contact[] p = new PhoneContact[pom.size()] ;
- return pom.toArray(p);
- }
- String getCity()
- {
- return this.city;
- }
- String getFullName()
- {
- StringBuilder sb = new StringBuilder();
- sb.append(this.firstName);
- sb.append(" ");
- sb.append(this.lastName);
- return sb.toString();
- }
- long getIndex()
- {
- return this.index;
- }
- Contact getLatestContact()
- {
- ArrayList<Contact> c;
- c = (ArrayList<Contact>) co.stream().sorted(Comparator.comparing(Contact::getYear)
- .thenComparing(Contact::getMounth)
- .thenComparing(Contact::getDay))
- .collect(Collectors.toList());
- return c.get(co.size()-1);
- }
- public String toString()
- {
- StringBuilder sb = new StringBuilder();
- sb.append(String.format("{\"ime\":\"%s\", \"prezime\":\"%s\", \"vozrast\":%d, \"grad\":"
- + "\"%s\", \"indeks\":%d, \"telefonskiKontakti\":[",firstName,lastName
- , age, city, index));
- int tempP = 0;
- for(int i=0; i<co.size(); i++)
- {
- if(co.get(i).getType()=="Phone")
- {
- //PhoneContact pc = new Contact(co.get(i).);
- sb.append(String.format("\"%s\", ", co.get(i).getPhone()));
- tempP++;
- }
- }
- if(tempP!=0)
- sb.delete(sb.toString().length()-2, sb.toString().length());
- sb.append("], \"emailKontakti\":[");
- Contact[] temp2 = new EmailContact[co.size()];
- temp2 = this.getPhoneContacts();
- int tempE = 0;
- for(int i=0; i<co.size(); i++)
- {
- if(co.get(i).getType()=="Email")
- {
- tempE++;
- sb.append(String.format("\"%s\", ", co.get(i).getEmail()));
- }
- }
- sb.delete(sb.toString().length()-2, sb.toString().length());
- if(tempE==0)
- {
- sb.append(":[");
- }
- sb.append("]}");
- return sb.toString();
- }
- public int getNumContacts()
- {
- return co.size();
- }
- }
- class Faculty
- {
- private String name;
- private Student[] students;
- Faculty(String name, Student [] students)
- {
- this.name = name;
- this.students = students;
- }
- int countStudentsFromCity(String cityName)
- {
- int temp = 0;
- for(int i=0; i<students.length; i++)
- {
- if(students[i].getCity().compareTo(cityName)==0)
- {
- temp++;
- }
- }
- return temp;
- }
- Student getStudent(long index) throws Exception
- {
- Student s = null;
- for(int i=0; i<students.length; i++)
- {
- if(students[i].getIndex()==index)
- {
- return students[i];
- }
- }
- return s;
- }
- double getAverageNumberOfContacts()
- {
- double pom = 0;
- for(int i=0; i<students.length; i++)
- {
- pom+=students[i].getNumContacts();
- }
- return pom/(double)students.length;
- }
- Student getStudentWithMostContacts()
- {
- int max = students[0].getNumContacts(), temp=0;
- long maxind = students[0].getIndex();
- for(int i=1; i<students.length; i++)
- {
- if(students[i].getNumContacts() == max)
- {
- if(maxind<students[i].getIndex())
- {
- maxind = students[i].getIndex();
- temp = i;
- }
- }
- else if(students[i].getNumContacts()>max)
- {
- max = students[i].getNumContacts();
- temp = i;
- }
- }
- return students[temp];
- }
- public String toString()
- {
- StringBuilder sb = new StringBuilder();
- sb.append(String.format("{\"fakultet\":\"%s\", \"studenti\":[",this.name));
- for(int i=0; i<students.length-1; i++)
- {
- sb.append(students[i].toString());
- sb.append(", ");
- }
- sb.append(students[students.length-1].toString() );
- sb.append("]}");
- return sb.toString();
- }
- }
- public class ContactsTester {
- public static void main(String[] args) throws Exception {
- Scanner scanner = new Scanner(System.in);
- int tests = scanner.nextInt();
- Faculty faculty = null;
- int rvalue = 0;
- long rindex = -1;
- DecimalFormat df = new DecimalFormat("0.00");
- for (int t = 0; t < tests; t++) {
- rvalue++;
- String operation = scanner.next();
- switch (operation) {
- case "CREATE_FACULTY": {
- String name = scanner.nextLine().trim();
- int N = scanner.nextInt();
- Student[] students = new Student[N];
- for (int i = 0; i < N; i++) {
- rvalue++;
- String firstName = scanner.next();
- String lastName = scanner.next();
- String city = scanner.next();
- int age = scanner.nextInt();
- long index = scanner.nextLong();
- if ((rindex == -1) || (rvalue % 13 == 0))
- rindex = index;
- Student student = new Student(firstName, lastName, city,
- age, index);
- students[i] = student;
- }
- faculty = new Faculty(name, students);
- break;
- }
- case "ADD_EMAIL_CONTACT": {
- long index = scanner.nextInt();
- String date = scanner.next();
- String email = scanner.next();
- rvalue++;
- if ((rindex == -1) || (rvalue % 3 == 0))
- rindex = index;
- faculty.getStudent(index).addEmailContact(date, email);
- break;
- }
- case "ADD_PHONE_CONTACT": {
- long index = scanner.nextInt();
- String date = scanner.next();
- String phone = scanner.next();
- rvalue++;
- if ((rindex == -1) || (rvalue % 3 == 0))
- rindex = index;
- faculty.getStudent(index).addPhoneContact(date, phone);
- break;
- }
- case "CHECK_SIMPLE": {
- System.out.println("Average number of contacts: "
- + df.format(faculty.getAverageNumberOfContacts()));
- rvalue++;
- String city = faculty.getStudent(rindex).getCity();
- System.out.println("Number of students from " + city + ": "
- + faculty.countStudentsFromCity(city));
- break;
- }
- case "CHECK_DATES": {
- rvalue++;
- System.out.print("Latest contact: ");
- Contact latestContact = faculty.getStudent(rindex)
- .getLatestContact();
- if (latestContact.getType().equals("Email"))
- System.out.println(((EmailContact) latestContact)
- .getEmail());
- if (latestContact.getType().equals("Phone"))
- System.out.println(((PhoneContact) latestContact)
- .getPhone()
- + " ("
- + ((PhoneContact) latestContact).getOperator()
- .toString() + ")");
- if (faculty.getStudent(rindex).getEmailContacts().length > 0&&faculty.getStudent(rindex).getPhoneContacts().length > 0) {
- System.out.print("Number of email and phone contacts: ");
- System.out
- .println(faculty.getStudent(rindex)
- .getEmailContacts().length
- + " "
- + faculty.getStudent(rindex)
- .getPhoneContacts().length);
- System.out.print("Comparing dates: ");
- int posEmail = rvalue
- % faculty.getStudent(rindex).getEmailContacts().length;
- int posPhone = rvalue
- % faculty.getStudent(rindex).getPhoneContacts().length;
- System.out.println(faculty.getStudent(rindex)
- .getEmailContacts()[posEmail].isNewerThan(faculty
- .getStudent(rindex).getPhoneContacts()[posPhone]));
- }
- break;
- }
- case "PRINT_FACULTY_METHODS": {
- System.out.println("Faculty: " + faculty.toString());
- System.out.println("Student with most contacts: "
- + faculty.getStudentWithMostContacts().toString());
- break;
- }
- }
- }
- scanner.close();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement