kristina7

НП - Уникатни имиња -решение2

Jan 13th, 2019
447
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.77 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 Names {
  13.     Map<String, Integer> names;
  14.  
  15.     public Names() {
  16.         names = new TreeMap<>();
  17.     }
  18.  
  19.     public void addName(String name) {
  20.         Integer count = names.computeIfAbsent(name, key -> 0);
  21.         names.put(name, ++count);
  22.     }
  23.  
  24.     public void printN(int n) {
  25.         names.forEach((key, value) -> {
  26.             if (value >= n)
  27.                 System.out.printf("%s (%d) %d\n", key, value, uniqueLetters(key));
  28.         });
  29.     }
  30.  
  31.     public String findName(int len, int x) {
  32.         List<String> lista = names.keySet().stream().filter(name -> name.length() < len).collect(Collectors.toList());
  33.         return lista.get(x % lista.size());
  34.     }
  35.  
  36.     public int uniqueLetters(String name) {
  37.         Set<Character> bukvi = new HashSet<>();
  38.         for (Character c : name.toCharArray())
  39.             bukvi.add(Character.toLowerCase(c));
  40.         return bukvi.size();
  41.     }
  42. }
  43.  
  44. public class NamesTest {
  45.     public static void main(String[] args) {
  46.         Scanner scanner = new Scanner(System.in);
  47.         int n = scanner.nextInt();
  48.         scanner.nextLine();
  49.         Names names = new Names();
  50.         for (int i = 0; i < n; ++i) {
  51.             String name = scanner.nextLine();
  52.             names.addName(name);
  53.         }
  54.         n = scanner.nextInt();
  55.         System.out.printf("===== PRINT NAMES APPEARING AT LEAST %d TIMES =====\n", n);
  56.         names.printN(n);
  57.         System.out.println("===== FIND NAME =====");
  58.         int len = scanner.nextInt();
  59.         int index = scanner.nextInt();
  60.         System.out.println(names.findName(len, index));
  61.         scanner.close();
  62.  
  63.     }
  64. }
Advertisement
Add Comment
Please, Sign In to add comment