Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Да се имплементира класа Names со следните методи:
- public void addName(String name) - додавање на име
- public void printN(int n) - ги печати сите имиња кои се појавуваат n или повеќе пати, подредени лексикографски според името, на крајот на зборот во загради се печати бројот на појавувања, а по него на крај бројот на уникатни букви во зборот (не се прави разлика на големи и мали)
- 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.
- */
- import java.util.*;
- import java.util.stream.Collectors;
- class Name {
- String name;
- int count;
- public Name(String name) {
- this.name = name;
- this.count = 0;
- }
- public int uniqueLetters() {
- Set<Character> bukvi = new HashSet<>();
- for (Character c : name.toCharArray())
- bukvi.add(Character.toLowerCase(c));
- return bukvi.size();
- }
- @Override
- public String toString() {
- return String.format("%s (%d) %d", name, count, uniqueLetters());
- }
- }
- class Names {
- Map<String, Name> names;
- public Names() {
- names = new TreeMap<>();
- }
- public void addName(String name) {
- names.computeIfAbsent(name, key -> new Name(name));
- names.get(name).count += 1;
- }
- public void printN(int n) {
- names.values().stream().filter(name -> name.count >= n).forEach(System.out::println);
- }
- public String findName(int len, int x) {
- List<String> lista = names.keySet().stream().filter(name -> name.length() < len).collect(Collectors.toList());
- return lista.get(x % lista.size());
- }
- }
- public class NamesTest {
- public static void main(String[] args) {
- Scanner scanner = new Scanner(System.in);
- int n = scanner.nextInt();
- scanner.nextLine();
- Names names = new Names();
- for (int i = 0; i < n; ++i) {
- String name = scanner.nextLine();
- names.addName(name);
- }
- n = scanner.nextInt();
- System.out.printf("===== PRINT NAMES APPEARING AT LEAST %d TIMES =====\n", n);
- names.printN(n);
- System.out.println("===== FIND NAME =====");
- int len = scanner.nextInt();
- int index = scanner.nextInt();
- System.out.println(names.findName(len, index));
- scanner.close();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment