Advertisement
lameski

Kontakti au mau

Aug 18th, 2017
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.26 KB | None | 0 0
  1. import java.text.DecimalFormat;
  2. import java.util.ArrayList;
  3. import java.util.Arrays;
  4. import java.util.Scanner;
  5. import java.util.regex.Matcher;
  6. import java.util.regex.Pattern;
  7. import java.util.stream.Collectors;
  8. import java.util.Comparator;
  9.  
  10.  
  11. enum Operator{VIP,ONE,TMOBILE} ;
  12.  
  13. abstract class Contact
  14. {
  15. private String date;
  16.  
  17. Contact(String date)
  18. {
  19. super();
  20. this.date = date;
  21. }
  22.  
  23. public boolean isNewerThan(Contact c)
  24. {
  25. long This= this.getDay() + this.getMounth()*30 + this.getYear()*365;
  26. long C = c.getDay() + c.getMounth()*30 + c.getYear()*365;
  27. if(This<C)
  28. {
  29. return false;
  30. }
  31. return true;
  32. }
  33. public abstract String getType();
  34. public abstract String getEmail();
  35. public abstract String getPhone();
  36. public int getYear()
  37. {
  38. return Integer.parseInt(date.split("-")[0]);
  39. }
  40. public int getMounth()
  41. {
  42. return Integer.parseInt(date.split("-")[1]);
  43. }
  44. public int getDay()
  45. {
  46. return Integer.parseInt(date.split("-")[2]);
  47. }
  48. }
  49. class EmailContact extends Contact
  50. {
  51. private String email;
  52. EmailContact(String date, String email)
  53. {
  54. super(date);
  55. this.email = email;
  56. }
  57. public String getEmail()
  58. {
  59. return this.email;
  60. }
  61. public String getType()
  62. {
  63. return "Email";
  64. }
  65. @Override
  66. public String getPhone() {
  67. // TODO Auto-generated method stub
  68. return null;
  69. }
  70. }
  71. class PhoneContact extends Contact
  72. {
  73. //private Operator op;
  74. private String phone;
  75. PhoneContact(String date, String phone)
  76. {
  77. super(date);
  78. this.phone = phone;
  79.  
  80. }
  81. public String getPhone()
  82. {
  83. return this.phone;
  84. }
  85. public Operator getOperator()
  86. {
  87. if(phone.split("/|-")[0].equals("070") ||
  88. phone.split("/|-")[0].equals("071")
  89. || phone.split("/|-")[0].equals("072"))
  90. return Operator.TMOBILE;
  91. else if(phone.split("/|-")[0].equals("075")
  92. ||phone.split("/|-")[0].equals("076"))
  93. return Operator.ONE;
  94. else
  95. return Operator.VIP;
  96. }
  97. @Override
  98. public String getType() {
  99. // TODO Auto-generated method stub
  100. return "Phone";
  101. }
  102. @Override
  103. public String getEmail() {
  104. // TODO Auto-generated method stub
  105. return null;
  106. }
  107. }
  108. class Student
  109. {
  110. private String firstName, lastName, city;
  111. private int age;
  112. private long index;
  113. private ArrayList<Contact> co=new ArrayList<Contact>();
  114.  
  115. Student(String firstName, String lastName, String city, int age, long index)
  116. {
  117. this.age = age;
  118. this.city = city;
  119. this.firstName = firstName;
  120. this.index = index;
  121. this.lastName = lastName;
  122. }
  123. void addEmailContact(String date, String email)
  124. {
  125. EmailContact c = new EmailContact(date,email);
  126. co.add(c);
  127. }
  128. void addPhoneContact(String date, String phone)
  129. {
  130. PhoneContact p = new PhoneContact(date,phone);
  131. co.add(p);
  132. }
  133. Contact[] getEmailContacts()
  134. {
  135. ArrayList<Contact> pom = new ArrayList<Contact>();
  136. //System.out.println(pom.length);
  137. for(int i=0; i<co.size(); i++)
  138. {
  139. if(co.get(i).getType()=="Email")
  140. {
  141. pom.add(co.get(i));
  142. }
  143.  
  144. }
  145. Contact[] p = new EmailContact[pom.size()] ;
  146. return pom.toArray(p);
  147.  
  148. }
  149. Contact[] getPhoneContacts()
  150. {
  151. ArrayList<Contact> pom = new ArrayList<Contact>();
  152. //System.out.println(pom.length);
  153. for(int i=0; i<co.size(); i++)
  154. {
  155. if(co.get(i).getType()=="Phone")
  156. {
  157. pom.add(co.get(i));
  158. }
  159.  
  160. }
  161. Contact[] p = new PhoneContact[pom.size()] ;
  162. return pom.toArray(p);
  163. }
  164. String getCity()
  165. {
  166. return this.city;
  167. }
  168. String getFullName()
  169. {
  170. StringBuilder sb = new StringBuilder();
  171. sb.append(this.firstName);
  172. sb.append(" ");
  173. sb.append(this.lastName);
  174. return sb.toString();
  175. }
  176. long getIndex()
  177. {
  178. return this.index;
  179. }
  180. Contact getLatestContact()
  181. {
  182. ArrayList<Contact> c;
  183. c = (ArrayList<Contact>) co.stream().sorted(Comparator.comparing(Contact::getYear)
  184. .thenComparing(Contact::getMounth)
  185. .thenComparing(Contact::getDay))
  186. .collect(Collectors.toList());
  187.  
  188. return c.get(co.size()-1);
  189. }
  190. public String toString()
  191. {
  192. StringBuilder sb = new StringBuilder();
  193. sb.append(String.format("{\"ime\":\"%s\", \"prezime\":\"%s\", \"vozrast\":%d, \"grad\":"
  194. + "\"%s\", \"indeks\":%d, \"telefonskiKontakti\":[",firstName,lastName
  195. , age, city, index));
  196. int tempP = 0;
  197. for(int i=0; i<co.size(); i++)
  198. {
  199. if(co.get(i).getType()=="Phone")
  200. {
  201. //PhoneContact pc = new Contact(co.get(i).);
  202. sb.append(String.format("\"%s\", ", co.get(i).getPhone()));
  203. tempP++;
  204. }
  205. }
  206. if(tempP!=0)
  207. sb.delete(sb.toString().length()-2, sb.toString().length());
  208.  
  209. sb.append("], \"emailKontakti\":[");
  210. Contact[] temp2 = new EmailContact[co.size()];
  211. temp2 = this.getPhoneContacts();
  212. int tempE = 0;
  213. for(int i=0; i<co.size(); i++)
  214. {
  215. if(co.get(i).getType()=="Email")
  216. {
  217. tempE++;
  218. sb.append(String.format("\"%s\", ", co.get(i).getEmail()));
  219. }
  220. }
  221. sb.delete(sb.toString().length()-2, sb.toString().length());
  222. if(tempE==0)
  223. {
  224. sb.append(":[");
  225. }
  226. sb.append("]}");
  227.  
  228. return sb.toString();
  229.  
  230. }
  231. public int getNumContacts()
  232. {
  233. return co.size();
  234. }
  235. }
  236.  
  237. class Faculty
  238. {
  239. private String name;
  240. private Student[] students;
  241. Faculty(String name, Student [] students)
  242. {
  243. this.name = name;
  244. this.students = students;
  245. }
  246. int countStudentsFromCity(String cityName)
  247. {
  248. int temp = 0;
  249. for(int i=0; i<students.length; i++)
  250. {
  251. if(students[i].getCity().compareTo(cityName)==0)
  252. {
  253. temp++;
  254. }
  255. }
  256. return temp;
  257. }
  258. Student getStudent(long index) throws Exception
  259. {
  260. Student s = null;
  261. for(int i=0; i<students.length; i++)
  262. {
  263. if(students[i].getIndex()==index)
  264. {
  265. return students[i];
  266.  
  267. }
  268. }
  269.  
  270. return s;
  271.  
  272. }
  273. double getAverageNumberOfContacts()
  274. {
  275. double pom = 0;
  276. for(int i=0; i<students.length; i++)
  277. {
  278. pom+=students[i].getNumContacts();
  279. }
  280. return pom/(double)students.length;
  281. }
  282. Student getStudentWithMostContacts()
  283. {
  284. int max = students[0].getNumContacts(), temp=0;
  285. long maxind = students[0].getIndex();
  286. for(int i=1; i<students.length; i++)
  287. {
  288. if(students[i].getNumContacts() == max)
  289. {
  290. if(maxind<students[i].getIndex())
  291. {
  292. maxind = students[i].getIndex();
  293. temp = i;
  294. }
  295. }
  296. else if(students[i].getNumContacts()>max)
  297. {
  298. max = students[i].getNumContacts();
  299. temp = i;
  300. }
  301. }
  302. return students[temp];
  303. }
  304. public String toString()
  305. {
  306. StringBuilder sb = new StringBuilder();
  307. sb.append(String.format("{\"fakultet\":\"%s\", \"studenti\":[",this.name));
  308. for(int i=0; i<students.length-1; i++)
  309. {
  310. sb.append(students[i].toString());
  311. sb.append(", ");
  312. }
  313. sb.append(students[students.length-1].toString() );
  314. sb.append("]}");
  315. return sb.toString();
  316. }
  317. }
  318. public class ContactsTester {
  319.  
  320. public static void main(String[] args) throws Exception {
  321. Scanner scanner = new Scanner(System.in);
  322.  
  323. int tests = scanner.nextInt();
  324. Faculty faculty = null;
  325.  
  326. int rvalue = 0;
  327. long rindex = -1;
  328.  
  329. DecimalFormat df = new DecimalFormat("0.00");
  330.  
  331. for (int t = 0; t < tests; t++) {
  332.  
  333. rvalue++;
  334. String operation = scanner.next();
  335.  
  336. switch (operation) {
  337. case "CREATE_FACULTY": {
  338. String name = scanner.nextLine().trim();
  339. int N = scanner.nextInt();
  340.  
  341. Student[] students = new Student[N];
  342.  
  343. for (int i = 0; i < N; i++) {
  344. rvalue++;
  345.  
  346. String firstName = scanner.next();
  347. String lastName = scanner.next();
  348. String city = scanner.next();
  349. int age = scanner.nextInt();
  350. long index = scanner.nextLong();
  351.  
  352. if ((rindex == -1) || (rvalue % 13 == 0))
  353. rindex = index;
  354.  
  355. Student student = new Student(firstName, lastName, city,
  356. age, index);
  357. students[i] = student;
  358. }
  359.  
  360. faculty = new Faculty(name, students);
  361. break;
  362. }
  363.  
  364. case "ADD_EMAIL_CONTACT": {
  365. long index = scanner.nextInt();
  366. String date = scanner.next();
  367. String email = scanner.next();
  368.  
  369. rvalue++;
  370.  
  371. if ((rindex == -1) || (rvalue % 3 == 0))
  372. rindex = index;
  373.  
  374. faculty.getStudent(index).addEmailContact(date, email);
  375. break;
  376. }
  377.  
  378. case "ADD_PHONE_CONTACT": {
  379. long index = scanner.nextInt();
  380. String date = scanner.next();
  381. String phone = scanner.next();
  382.  
  383. rvalue++;
  384.  
  385. if ((rindex == -1) || (rvalue % 3 == 0))
  386. rindex = index;
  387.  
  388. faculty.getStudent(index).addPhoneContact(date, phone);
  389. break;
  390. }
  391.  
  392. case "CHECK_SIMPLE": {
  393. System.out.println("Average number of contacts: "
  394. + df.format(faculty.getAverageNumberOfContacts()));
  395.  
  396. rvalue++;
  397.  
  398. String city = faculty.getStudent(rindex).getCity();
  399. System.out.println("Number of students from " + city + ": "
  400. + faculty.countStudentsFromCity(city));
  401.  
  402. break;
  403. }
  404.  
  405. case "CHECK_DATES": {
  406.  
  407. rvalue++;
  408.  
  409. System.out.print("Latest contact: ");
  410. Contact latestContact = faculty.getStudent(rindex)
  411. .getLatestContact();
  412. if (latestContact.getType().equals("Email"))
  413. System.out.println(((EmailContact) latestContact)
  414. .getEmail());
  415. if (latestContact.getType().equals("Phone"))
  416. System.out.println(((PhoneContact) latestContact)
  417. .getPhone()
  418. + " ("
  419. + ((PhoneContact) latestContact).getOperator()
  420. .toString() + ")");
  421.  
  422. if (faculty.getStudent(rindex).getEmailContacts().length > 0&&faculty.getStudent(rindex).getPhoneContacts().length > 0) {
  423. System.out.print("Number of email and phone contacts: ");
  424. System.out
  425. .println(faculty.getStudent(rindex)
  426. .getEmailContacts().length
  427. + " "
  428. + faculty.getStudent(rindex)
  429. .getPhoneContacts().length);
  430.  
  431. System.out.print("Comparing dates: ");
  432. int posEmail = rvalue
  433. % faculty.getStudent(rindex).getEmailContacts().length;
  434. int posPhone = rvalue
  435. % faculty.getStudent(rindex).getPhoneContacts().length;
  436.  
  437. System.out.println(faculty.getStudent(rindex)
  438. .getEmailContacts()[posEmail].isNewerThan(faculty
  439. .getStudent(rindex).getPhoneContacts()[posPhone]));
  440. }
  441.  
  442. break;
  443. }
  444.  
  445. case "PRINT_FACULTY_METHODS": {
  446. System.out.println("Faculty: " + faculty.toString());
  447. System.out.println("Student with most contacts: "
  448. + faculty.getStudentWithMostContacts().toString());
  449. break;
  450. }
  451.  
  452. }
  453.  
  454. }
  455.  
  456. scanner.close();
  457. }
  458. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement