Advertisement
Guest User

Family Tree

a guest
Jun 17th, 2018
412
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.37 KB | None | 0 0
  1. package _10FamilyTree;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.IOException;
  5. import java.io.InputStreamReader;
  6. import java.util.ArrayList;
  7. import java.util.List;
  8.  
  9. /**
  10. * Created by IntelliJ IDEA.
  11. * User: LAPD
  12. * Date: 15.6.2018 г.
  13. * Time: 10:56 ч.
  14. */
  15. public class Main {
  16. public static void main(String[] args) throws IOException {
  17. BufferedReader bufferedReader = new BufferedReader(
  18. new InputStreamReader(System.in));
  19.  
  20. String parentNameChildName = "^[\\w\\s]+ - [\\w\\s]+$";
  21. String parentNameChildBDate = "^[\\w\\s]+ - [\\w\\/]+$";
  22. String parentBDateChildName = "^[\\w\\/]+ - [\\w\\s]+$";
  23. String parentBDateChildBDate = "^[\\w\\/]+ - [\\w\\/]+$";
  24. String personNameBDate = "^[\\w\\s]+ [\\w\\/]+$";
  25.  
  26. String searchedPersonNameOrBDate = bufferedReader.readLine();
  27.  
  28. List<Person> relatives = new ArrayList<>();
  29.  
  30. List<String> relations = new ArrayList<>();
  31.  
  32. String input = null;
  33. while (!"End".equals(input = bufferedReader.readLine())) {
  34.  
  35. if (input.matches(personNameBDate)) {
  36. String[] inputArgs = input.split("\\s+");
  37.  
  38. String name = inputArgs[0] + " " + inputArgs[1];
  39. String birthday = inputArgs[2];
  40.  
  41. Person person = new Person(name, birthday);
  42.  
  43. relatives.add(person);
  44. } else {
  45. relations.add(input);
  46. }
  47. }
  48.  
  49. Person searchedPerson = new Person();
  50.  
  51. if (searchedPersonNameOrBDate.contains("/")) {
  52. String birthday = searchedPersonNameOrBDate;
  53. searchedPerson.setBirthday(birthday);
  54.  
  55. relatives.stream()
  56. .filter(r -> birthday.equals(r.getBirthday()))
  57. .forEach(r -> searchedPerson.setName(r.getName()));
  58. } else {
  59. String name = searchedPersonNameOrBDate;
  60. searchedPerson.setName(name);
  61.  
  62. relatives.stream()
  63. .filter(r -> name.equals(r.getName()))
  64. .forEach(r -> searchedPerson.setBirthday(r.getBirthday()));
  65. }
  66.  
  67. for (String relation : relations) {
  68.  
  69. String[] relationArgs = relation.split(" - ");
  70. String parentData = relationArgs[0];
  71. String childData = relationArgs[1];
  72.  
  73. if (!parentData.equals(searchedPerson.getName())
  74. && !parentData.equals(searchedPerson.getBirthday())
  75. && !childData.equals(searchedPerson.getName())
  76. && !childData.equals(searchedPerson.getBirthday())) {
  77. continue;
  78. }
  79.  
  80.  
  81. if (relation.matches(parentNameChildName)) {
  82. String parentName = parentData;
  83. String childName = childData;
  84.  
  85. if (parentName.equals(searchedPerson.getName())) {
  86. relatives.stream()
  87. .filter(r -> childName.equals(r.getName()))
  88. .forEach(r -> searchedPerson.getChildren().add(r));
  89. } else {
  90. relatives.stream()
  91. .filter(r -> parentName.equals(r.getName()))
  92. .forEach(r -> searchedPerson.getParents().add(r));
  93. }
  94. } else if (relation.matches(parentNameChildBDate)) {
  95. String parentName = parentData;
  96. String childBDate = childData;
  97.  
  98. if (parentName.equals(searchedPerson.getName())) {
  99. relatives.stream()
  100. .filter(r -> childBDate.equals(r.getBirthday()))
  101. .forEach(r -> searchedPerson.getChildren().add(r));
  102. } else {
  103. relatives.stream()
  104. .filter(r -> parentName.equals(r.getName()))
  105. .forEach(r -> searchedPerson.getParents().add(r));
  106. }
  107. } else if (relation.matches(parentBDateChildName)) {
  108. String parentBDate = parentData;
  109. String childName = childData;
  110.  
  111. if (parentBDate.equals(searchedPerson.getBirthday())) {
  112. relatives.stream()
  113. .filter(r -> childName.equals(r.getName()))
  114. .forEach(r -> searchedPerson.getChildren().add(r));
  115. } else {
  116. relatives.stream()
  117. .filter(r -> parentBDate.equals(r.getBirthday()))
  118. .forEach(r -> searchedPerson.getParents().add(r));
  119. }
  120. } else if (relation.matches(parentBDateChildBDate)) {
  121. String parentBDate = parentData;
  122. String childBDate = childData;
  123.  
  124. if (parentBDate.equals(searchedPerson.getBirthday())) {
  125. relatives.stream()
  126. .filter(r -> childBDate.equals(r.getBirthday()))
  127. .forEach(r -> searchedPerson.getChildren().add(r));
  128. } else {
  129. relatives.stream()
  130. .filter(r -> parentBDate.equals(r.getBirthday()))
  131. .forEach(r -> searchedPerson.getParents().add(r));
  132. }
  133. }
  134. }
  135.  
  136. System.out.println(searchedPerson);
  137. }
  138. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement