kristina7

НП - Уникатни имиња

Jan 13th, 2019
831
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.95 KB | None | 0 0
  1. /*
  2. Да се имплементира класа Names со следните методи:
  3.  
  4. public void addName(String name) - додавање на име
  5. public void printN(int n) - ги печати сите имиња кои се појавуваат n или повеќе пати, подредени лексикографски според името, на крајот на зборот во загради се печати бројот на појавувања, а по него на крај бројот на уникатни букви во зборот (не се прави разлика на големи и мали)
  6. public String findName(int len, int x) - го враќа името кое со наоѓа на позиција x (почнува од 0) во листата од уникатни имиња подредени лексикографски, по бришење на сите имиња со големина поголема или еднаква на len. Позицијата x може да биде поголема од бројот на останати имиња, во тој случај се продожува со броење од почетокот на листата. Пример за листа со 3 имиња A, B, C, ако x = 7, се добива B. A0, B1, C2, A3, B4, C5, A6, B7.
  7. */
  8.  
  9. import java.util.*;
  10. import java.util.stream.Collectors;
  11.  
  12. class Name {
  13.     String name;
  14.     int count;
  15.  
  16.     public Name(String name) {
  17.         this.name = name;
  18.         this.count = 0;
  19.     }
  20.  
  21.     public int uniqueLetters() {
  22.         Set<Character> bukvi = new HashSet<>();
  23.         for (Character c : name.toCharArray())
  24.             bukvi.add(Character.toLowerCase(c));
  25.         return bukvi.size();
  26.     }
  27.  
  28.     @Override
  29.     public String toString() {
  30.         return String.format("%s (%d) %d", name, count, uniqueLetters());
  31.     }
  32. }
  33.  
  34. class Names {
  35.     Map<String, Name> names;
  36.  
  37.     public Names() {
  38.         names = new TreeMap<>();
  39.     }
  40.  
  41.     public void addName(String name) {
  42.         names.computeIfAbsent(name, key -> new Name(name));
  43.         names.get(name).count += 1;
  44.     }
  45.  
  46.     public void printN(int n) {
  47.         names.values().stream().filter(name -> name.count >= n).forEach(System.out::println);
  48.     }
  49.  
  50.     public String findName(int len, int x) {
  51.         List<String> lista = names.keySet().stream().filter(name -> name.length() < len).collect(Collectors.toList());
  52.         return lista.get(x % lista.size());    
  53.     }
  54. }
  55.  
  56. public class NamesTest {
  57.     public static void main(String[] args) {
  58.         Scanner scanner = new Scanner(System.in);
  59.         int n = scanner.nextInt();
  60.         scanner.nextLine();
  61.         Names names = new Names();
  62.         for (int i = 0; i < n; ++i) {
  63.             String name = scanner.nextLine();
  64.             names.addName(name);
  65.         }
  66.         n = scanner.nextInt();
  67.         System.out.printf("===== PRINT NAMES APPEARING AT LEAST %d TIMES =====\n", n);
  68.         names.printN(n);
  69.         System.out.println("===== FIND NAME =====");
  70.         int len = scanner.nextInt();
  71.         int index = scanner.nextInt();
  72.         System.out.println(names.findName(len, index));
  73.         scanner.close();
  74.  
  75.     }
  76. }
Advertisement
Add Comment
Please, Sign In to add comment