Advertisement
dzocesrce

[NP] Phone Book

Apr 23rd, 2025
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.43 KB | None | 0 0
  1. import java.util.Scanner;
  2. import java.util.Comparator;
  3. import java.util.HashMap;
  4. import java.util.Map;
  5. import java.util.TreeMap;
  6. import java.util.Set;
  7. import java.util.TreeSet;
  8. import java.util.*;
  9. import java.util.stream.Collectors;
  10. class Contact {
  11.     String name;
  12.     String number;
  13.  
  14.     public Contact(String name, String number) {
  15.         this.name = name;
  16.         this.number = number;
  17.     }
  18.  
  19.     public String getName() {
  20.         return name;
  21.     }
  22.  
  23.     public String getNumber() {
  24.         return number;
  25.     }
  26.  
  27.     public boolean checkSimularity(String numberPart) {
  28.         Set<String> allParts = new TreeSet<>();
  29.         for(int i=0;i<number.length();i++) {
  30.             for(int j=i+3;j<=number.length();j++) {
  31.                 allParts.add(number.substring(i,j));
  32.             }
  33.         }
  34.         //System.out.println(allParts);
  35.         if(allParts.contains(numberPart))
  36.             return true;
  37.         return false;
  38.     }
  39.  
  40.     @Override
  41.     public String toString() {
  42.         return String.format("%s %s",getName(),getNumber());
  43.     }
  44. }
  45.  
  46. class DuplicateNumberException extends Exception{
  47.     public DuplicateNumberException(String number) {
  48.         super(String.format("Duplicate number: %s",number));
  49.     }
  50. }
  51.  
  52. class PhoneBook {
  53.     Map<String,Contact> contactsByNumberMap = new TreeMap<>();
  54.     Map<String,List<Contact>> contactsByNameMap = new TreeMap<>();
  55.     public void addContact(String name , String number) throws DuplicateNumberException {
  56.         if(contactsByNumberMap.containsKey(number))
  57.             throw new DuplicateNumberException(number);
  58.         Contact contact = new Contact(name, number);
  59.         contactsByNumberMap.putIfAbsent(number, contact);
  60.         contactsByNameMap.putIfAbsent(name, new ArrayList<>());
  61.         contactsByNameMap.get(name).add(contact);
  62.  
  63.     }
  64.  
  65.     public void contactsByNumber(String numberPart) {
  66.         Comparator<Contact> comparator = Comparator.comparing(Contact::getName).thenComparing(Contact::getNumber);
  67.         List<Contact> simularContacts = contactsByNumberMap.values().stream().filter(i->i.checkSimularity(numberPart))
  68.                 .sorted(comparator).collect(Collectors.toList());
  69.         if(simularContacts.isEmpty()){
  70.             System.out.println("NOT FOUND");
  71.             return ;
  72.         }
  73.         simularContacts.stream().forEach(i-> System.out.println(i));
  74.  
  75.     }
  76.  
  77.     public void contactsByName(String name) {
  78.         if(!contactsByNameMap.containsKey(name)){
  79.             System.out.println("NOT FOUND");
  80.             return;
  81.         }
  82.  
  83.         contactsByNameMap.get(name).stream().sorted(Comparator.comparing(Contact::getNumber)).forEach(i-> System.out.println(i));
  84.     }
  85. }
  86. public class PhoneBookTest {
  87.  
  88.     public static void main(String[] args) {
  89.         PhoneBook phoneBook = new PhoneBook();
  90.         Scanner scanner = new Scanner(System.in);
  91.         int n = scanner.nextInt();
  92.         scanner.nextLine();
  93.         for (int i = 0; i < n; ++i) {
  94.             String line = scanner.nextLine();
  95.             String[] parts = line.split(":");
  96.             try {
  97.                 phoneBook.addContact(parts[0], parts[1]);
  98.             } catch (DuplicateNumberException e) {
  99.                 System.out.println(e.getMessage());
  100.             }
  101.         }
  102.         while (scanner.hasNextLine()) {
  103.             String line = scanner.nextLine();
  104.             System.out.println(line);
  105.             String[] parts = line.split(":");
  106.             if (parts[0].equals("NUM")) {
  107.                 phoneBook.contactsByNumber(parts[1]);
  108.             } else {
  109.                 phoneBook.contactsByName(parts[1]);
  110.             }
  111.         }
  112.     }
  113.  
  114. }
  115.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement