Advertisement
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;
- 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();
- }
- }
- class Name {
- private String name;
- private Integer occurances;
- public Name(String name) {
- this.name = name;
- this.occurances = 0;
- }
- public String getName() {
- return name;
- }
- public Integer getOccurances() {
- return occurances;
- }
- public void increaseOccurances() {
- occurances++;
- }
- public Integer getUniqueLetters() {
- TreeSet<Character> uniqueChars = new TreeSet<>();
- char[] letters = name.toLowerCase().toCharArray();
- for(char letter : letters) {
- uniqueChars.add(letter);
- }
- return uniqueChars.size();
- }
- @Override
- public String toString() {
- return name + " (" + occurances + ") " + getUniqueLetters();
- }
- }
- class Names {
- private Map<String, Name> names;
- public Names() {
- this.names = new TreeMap<>();
- }
- public void addName(String name) {
- Name newName = names.computeIfAbsent(name, Name::new);
- newName.increaseOccurances();
- }
- public void printN(int n) {
- names.values().stream()
- .filter((name) -> name.getOccurances() >= n)
- .forEach(System.out::println);
- }
- public String findName(int len, int x) {
- List<String> nameSet =
- names.entrySet().stream()
- .filter((s) -> s.getValue().getName().length() < len)
- .map(Map.Entry::getKey)
- .collect(Collectors.toList());
- return nameSet.get(x % nameSet.size());
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement