From f522377020bff9c33f5b40db604f939d5e20a928 Mon Sep 17 00:00:00 2001 From: Knyaz-v Date: Tue, 25 Nov 2025 00:54:18 +0500 Subject: [PATCH] =?UTF-8?q?=D0=9A=D0=BD=D1=8F=D0=B7=D0=B5=D0=B2=D0=B0=20?= =?UTF-8?q?=D0=92=D0=B0=D0=BB=D0=B5=D1=80=D0=B8=D1=8F=20=D0=9F=D1=80=D0=98?= =?UTF-8?q?-201=209.1-9.3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- task01/src/com/example/task01/Pair.java | 48 ++++++++++++++++- task01/src/com/example/task01/Task01Main.java | 6 +-- task02/list1.dat | Bin 0 -> 72 bytes task02/list1a.dat | Bin 0 -> 78 bytes task02/list2.dat | Bin 0 -> 1162 bytes task02/list4.dat | Bin 0 -> 155 bytes task02/src/com/example/task02/SavedList.java | 49 +++++++++++++++--- task02/src/com/example/task02/Task02Main.java | 3 -- task03/src/com/example/task03/Task03Main.java | 38 +++++++++++--- testlist.dat | Bin 0 -> 62 bytes 10 files changed, 119 insertions(+), 25 deletions(-) create mode 100644 task02/list1.dat create mode 100644 task02/list1a.dat create mode 100644 task02/list2.dat create mode 100644 task02/list4.dat create mode 100644 testlist.dat diff --git a/task01/src/com/example/task01/Pair.java b/task01/src/com/example/task01/Pair.java index f6fb603b..77862d59 100644 --- a/task01/src/com/example/task01/Pair.java +++ b/task01/src/com/example/task01/Pair.java @@ -1,5 +1,49 @@ package com.example.task01; -public class Pair { - // TODO напишите реализацию +import java.util.Objects; +import java.util.Optional; +import java.util.function.BiConsumer; + +public class Pair { + private final T first; + private final K second; + + private Pair(T first, K second){ + this.first = first; + this.second = second; + } + + public static Pair of(T first, K second){ + return new Pair<>(first, second); + } + + public T getFirst(){ + return first; + } + + public K getSecond(){ + return second; + } + + public void ifPresent(BiConsumer consumer) { + if (first != null && second != null) + consumer.accept(first, second); + } + + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + + if (!(obj instanceof Pair)) { + return false; + } + + Pair other = (Pair) obj; + return Objects.equals(first, other.first) && Objects.equals(second, other.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..f1a62c2f 100644 --- a/task01/src/com/example/task01/Task01Main.java +++ b/task01/src/com/example/task01/Task01Main.java @@ -8,7 +8,6 @@ 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 +20,7 @@ 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); } - } diff --git a/task02/list1.dat b/task02/list1.dat new file mode 100644 index 0000000000000000000000000000000000000000..e09632d32de0890ed6bfc295d1ff21b297459f13 GIT binary patch literal 72 zcmZ4UmVvdnh(S0ju`E%qv?Mb}&#|Z|vC=2AxTK=-lI+amiF2757(E$SiZiQHD+(AG Z7?{dgKx7F6vwvP{2?J|LMp0^N1ps)r7AXJ# literal 0 HcmV?d00001 diff --git a/task02/list1a.dat b/task02/list1a.dat new file mode 100644 index 0000000000000000000000000000000000000000..e23b42f9a735d90d23859e7eda7a1fa0bfaa7dc6 GIT binary patch literal 78 zcmZ4UmVvdnh(S0ju`E%qv?Mb}&#|Z|vC=2AxTK=-lI+amiF2757(E$SiZiQHD+(AG e7?{ghKx7F6vwvPHkPIo$FJWK}$tX%qtpET3&KKMO literal 0 HcmV?d00001 diff --git a/task02/list2.dat b/task02/list2.dat new file mode 100644 index 0000000000000000000000000000000000000000..5f09bec6154ced2ca7c099b43ff047d57d70a008 GIT binary patch literal 1162 zcmYMzJxT;Y5QgEF-9>Zb1y8V8)j!o6nkfh-USNU|XBkvxW_2|47zW`=M>;Kc7@SS^xk5 literal 0 HcmV?d00001 diff --git a/task02/list4.dat b/task02/list4.dat new file mode 100644 index 0000000000000000000000000000000000000000..76e4dedeefb88bd4d9b05d5d6f99998683a3b4d4 GIT binary patch literal 155 zcmZ4UmVvdnh(S0ju`E%qv?Mb}&#|Z|vC=2AxTK=-lI+amiF2757(E$SiZiQHD+(AG z7?{ghKqOF;AXrmQVqUtQXI@EadTNo-qXkR8H?~_afwZueCFYc-RunM^Ak_Jl<|d^U hwXK;d%RS{mHxmN`$Vler#f1!Y3_u extends AbstractList { + private final File file; + private final List list = new ArrayList<>(); public SavedList(File file) { + this.file = file; + loadFromFile(); + } + + private void loadFromFile() { + if (!file.exists()) return; + + try (ObjectInputStream stream = new ObjectInputStream(Files.newInputStream(file.toPath()))) { + @SuppressWarnings("unchecked") + List loadedList = (List) stream.readObject(); + list.clear(); + list.addAll(loadedList); + } catch (IOException | ClassNotFoundException e) { + throw new RuntimeException("Error loading data from file", e); + } + } + + private void saveToFile() { + try (ObjectOutputStream stream = new ObjectOutputStream(Files.newOutputStream(file.toPath()))) { + stream.writeObject(list); + } catch (IOException e) { + throw new RuntimeException("Error saving data to file", e); + } } @Override public E get(int index) { - return null; + return list.get(index); } @Override - public E set(int index, E element) { - return null; + public E set(int index, E element){ + E oldElement = list.set(index, element); + saveToFile(); + return oldElement; } @Override public int size() { - return 0; + return list.size(); } @Override public void add(int index, E element) { + list.add(index, element); + saveToFile(); } @Override public E remove(int index) { - return null; + E removedElement = list.remove(index); + saveToFile(); + return removedElement; } -} +} \ No newline at end of file diff --git a/task02/src/com/example/task02/Task02Main.java b/task02/src/com/example/task02/Task02Main.java index dedc9f91..bb31fb51 100644 --- a/task02/src/com/example/task02/Task02Main.java +++ b/task02/src/com/example/task02/Task02Main.java @@ -6,7 +6,6 @@ public class Task02Main { public static void main(String[] args) throws IOException { - File file = new File("./testlist.dat"); SavedList list1 = new SavedList<>(file); @@ -15,7 +14,5 @@ public static void main(String[] args) throws IOException { SavedList list2 = new SavedList<>(file); System.out.println("list2: " + list2); - } - } diff --git a/task03/src/com/example/task03/Task03Main.java b/task03/src/com/example/task03/Task03Main.java index 7f255e98..4eef177d 100644 --- a/task03/src/com/example/task03/Task03Main.java +++ b/task03/src/com/example/task03/Task03Main.java @@ -1,11 +1,9 @@ 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.*; +import java.util.stream.Collectors; public class Task03Main { @@ -15,10 +13,34 @@ public static void main(String[] args) throws IOException { for (Set anagram : anagrams) { System.out.println(anagram); } - } - public static List> findAnagrams(InputStream inputStream, Charset charset) { - return null; + public static List> findAnagrams( + InputStream inputStream, Charset charset) { + + Map> result = new TreeMap<>(); + try (BufferedReader reader = new BufferedReader( + new InputStreamReader(inputStream, charset))) { + List lines = reader.lines() + .map(String::toLowerCase) + .filter(str -> str.matches("[а-яё]+") && str.length() >= 3) + .distinct() + .collect(Collectors.toList()); + + for (String line : lines) { + char[] symbols = line.toCharArray(); + Arrays.sort(symbols); + String key = new String(symbols); + result.computeIfAbsent(key, value -> new TreeSet<>()).add(line); + } + + } catch (Exception e) { + return new ArrayList<>(); + } + + return result.values() + .stream() + .filter(value -> value.size() >= 2) + .collect(Collectors.toList()); } } diff --git a/testlist.dat b/testlist.dat new file mode 100644 index 0000000000000000000000000000000000000000..c73617b15a15d88985efb25bd3603e06d6cf2121 GIT binary patch literal 62 zcmZ4UmVvdnh(S0ju`E%qv?Mb}&#|Z|vC=2AxTK=-lI+amiF2757(E$SiZiQHD+(AG P7#Pc0Kx7F6V^jqItH2WM literal 0 HcmV?d00001