From 8c233cb17d9feea0941002109df0c754197fb838 Mon Sep 17 00:00:00 2001 From: Liveenjuck Date: Mon, 8 Dec 2025 17:48:49 +0500 Subject: [PATCH 1/3] task01 solve --- task01/src/com/example/task01/Pair.java | 40 ++++++++++++++++++- task01/src/com/example/task01/Task01Main.java | 7 +--- 2 files changed, 40 insertions(+), 7 deletions(-) diff --git a/task01/src/com/example/task01/Pair.java b/task01/src/com/example/task01/Pair.java index f6fb603b..8bd27906 100644 --- a/task01/src/com/example/task01/Pair.java +++ b/task01/src/com/example/task01/Pair.java @@ -1,5 +1,41 @@ package com.example.task01; -public class Pair { - // TODO напишите реализацию +import java.util.Objects; +import java.util.function.BiConsumer; + +public class Pair { + private final T first; + private final U second; + + private Pair(T first, U second) { + this.first = first; + this.second = second; + } + + public static Pair of(T first, U second) { + return new Pair<>(first, second); + } + + public T getFirst() { + return first; + } + + public U getSecond() { + return second; + } + + public void ifPresent(BiConsumer cons) { + if (first != null && second != null) cons.accept(first, second); + } + + public boolean equals(Object obj) { + if (this == obj) return true; + if (obj == null || getClass() != obj.getClass()) return false; + Pair pair = (Pair) obj; + return Objects.equals(first, pair.first) && Objects.equals(second, pair.second); + } + + public int hashCode() { + return Objects.hash(first, second); + } } diff --git a/task01/src/com/example/task01/Task01Main.java b/task01/src/com/example/task01/Task01Main.java index 54dde94f..d57ff61b 100644 --- a/task01/src/com/example/task01/Task01Main.java +++ b/task01/src/com/example/task01/Task01Main.java @@ -5,10 +5,6 @@ public class Task01Main { public static void main(String[] args) throws IOException { - - // TODO С корректно реализованным классом Pair должен компилироваться и успешно работать следующий код: - - /* Pair pair = Pair.of(1, "hello"); Integer i = pair.getFirst(); // 1 String s = pair.getSecond(); // "hello" @@ -21,8 +17,9 @@ public static void main(String[] args) throws IOException { Pair pair2 = Pair.of(1, "hello"); boolean mustBeTrue = pair.equals(pair2); // true! boolean mustAlsoBeTrue = pair.hashCode() == pair2.hashCode(); // true! - */ + System.out.println(mustBeTrue); + System.out.println(mustAlsoBeTrue); } } From 0142bfad0c1ca81fc1db9d62d556eb52d6d712b4 Mon Sep 17 00:00:00 2001 From: Liveenjuck Date: Mon, 8 Dec 2025 17:50:18 +0500 Subject: [PATCH 2/3] task02 solve --- task02/src/com/example/task02/SavedList.java | 41 +++++++++++++++++--- 1 file changed, 35 insertions(+), 6 deletions(-) diff --git a/task02/src/com/example/task02/SavedList.java b/task02/src/com/example/task02/SavedList.java index 6b3a037d..36122d6e 100644 --- a/task02/src/com/example/task02/SavedList.java +++ b/task02/src/com/example/task02/SavedList.java @@ -1,35 +1,64 @@ package com.example.task02; -import java.io.File; -import java.io.Serializable; +import java.io.*; import java.util.AbstractList; +import java.util.ArrayList; public class SavedList extends AbstractList { + private final AbstractList list = new ArrayList<>(); + private final File file; public SavedList(File file) { + this.file = file; + readFromFile(); } @Override public E get(int index) { - return null; + return list.get(index); } @Override public E set(int index, E element) { - return null; + E e = list.set(index, element); + writeToFile(); + return e; } @Override public int size() { - return 0; + return list.size(); } @Override public void add(int index, E element) { + list.add(index, element); + writeToFile(); } @Override public E remove(int index) { - return null; + E e = list.remove(index); + writeToFile(); + return e; + } + + public void readFromFile() { + ArrayList loadList; + try (ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream(file))) { + loadList = (ArrayList) inputStream.readObject(); + list.clear(); + list.addAll(loadList); + } catch (IOException | ClassNotFoundException e) { + e.getStackTrace(); + } + } + + public void writeToFile() { + try (ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream(file))) { + outputStream.writeObject(list); + } catch (IOException e) { + e.getStackTrace(); + } } } From e9b6c21177d42afa88aac868e07d17156cb907e5 Mon Sep 17 00:00:00 2001 From: Liveenjuck Date: Mon, 8 Dec 2025 17:51:03 +0500 Subject: [PATCH 3/3] task03 solve --- task03/src/com/example/task03/Task03Main.java | 51 ++++++++++++++++--- 1 file changed, 45 insertions(+), 6 deletions(-) diff --git a/task03/src/com/example/task03/Task03Main.java b/task03/src/com/example/task03/Task03Main.java index 7f255e98..bba71ead 100644 --- a/task03/src/com/example/task03/Task03Main.java +++ b/task03/src/com/example/task03/Task03Main.java @@ -1,17 +1,15 @@ package com.example.task03; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; +import java.io.*; import java.nio.charset.Charset; -import java.util.List; -import java.util.Set; +import java.util.*; public class Task03Main { public static void main(String[] args) throws IOException { List> anagrams = findAnagrams(new FileInputStream("task03/resources/singular.txt"), Charset.forName("windows-1251")); + for (Set anagram : anagrams) { System.out.println(anagram); } @@ -19,6 +17,47 @@ public static void main(String[] args) throws IOException { } public static List> findAnagrams(InputStream inputStream, Charset charset) { - return null; + + Map> groups = new HashMap<>(); + List> words = new ArrayList<>(); + + try (BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, charset))) { + + String line; + + while ((line = reader.readLine()) != null) { + + line = line.toLowerCase(); + + if (line.matches("[а-яё]{4,}")) { + + char[] arr = line.toCharArray(); + Arrays.sort(arr); + String key = new String(arr); + + if (!groups.containsKey(key)) { + groups.put(key, new TreeSet<>()); + } + + groups.get(key).add(line); + } + } + } catch (IOException e) { + e.getStackTrace(); + } + + for (Set check : groups.values()) { + if (check.size() >= 2) { + words.add(check); + } + } + + words.sort((a, b) -> { + String firstA = a.iterator().next(); + String firstB = b.iterator().next(); + return firstA.compareTo(firstB); + }); + + return words; } }