From 7855d260013653b8da002b4889dd9c5d6760a49b Mon Sep 17 00:00:00 2001
From: Serdyukov Alexander
<30432511+SerdyukovAlexander@users.noreply.github.com>
Date: Tue, 17 Dec 2024 23:30:46 +0500
Subject: [PATCH 1/4] =?UTF-8?q?1=20=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8?=
=?UTF-8?q?=D0=B5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
task01/src/com/example/task01/Pair.java | 62 ++++++++++++++++++++++++-
1 file changed, 60 insertions(+), 2 deletions(-)
diff --git a/task01/src/com/example/task01/Pair.java b/task01/src/com/example/task01/Pair.java
index f6fb603b..f9c9306a 100644
--- a/task01/src/com/example/task01/Pair.java
+++ b/task01/src/com/example/task01/Pair.java
@@ -1,5 +1,63 @@
package com.example.task01;
-public class Pair {
- // TODO напишите реализацию
+import java.util.Objects;
+import java.util.function.BiConsumer;
+
+public class Pair
+{
+ private final A first;
+ private final B second;
+
+ private Pair(A first, B last)
+ {
+ this.first = first;
+ this.second = last;
+ }
+
+ public static Pair of(A first, B second)
+ {
+ return new Pair<>(first, second);
+ }
+
+ public A getFirst()
+ {
+ return first;
+ }
+
+ public B getSecond()
+ {
+ return second;
+ }
+
+ public void ifPresent(BiConsumer super A, ? super B> action)
+ {
+ if (first != null && second != null)
+ {
+ action.accept(first, second);
+ }
+ }
+
+ @Override
+ 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);
+ }
+
+ @Override
+ public int hashCode()
+ {
+ return Objects.hash(first, second);
+ }
}
From dc9aa7096212492d47364fd62d6a80b465ae41dc Mon Sep 17 00:00:00 2001
From: Serdyukov Alexander
<30432511+SerdyukovAlexander@users.noreply.github.com>
Date: Tue, 17 Dec 2024 23:30:52 +0500
Subject: [PATCH 2/4] =?UTF-8?q?1=20=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8?=
=?UTF-8?q?=D0=B5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
task01/src/com/example/task01/Task01Main.java | 9 ++-------
1 file changed, 2 insertions(+), 7 deletions(-)
diff --git a/task01/src/com/example/task01/Task01Main.java b/task01/src/com/example/task01/Task01Main.java
index 54dde94f..c6e786e2 100644
--- a/task01/src/com/example/task01/Task01Main.java
+++ b/task01/src/com/example/task01/Task01Main.java
@@ -4,11 +4,8 @@
import java.io.InputStream;
public class Task01Main {
- public static void main(String[] args) throws IOException {
-
- // TODO С корректно реализованным классом Pair должен компилироваться и успешно работать следующий код:
-
- /*
+ public static void main(String[] args) throws IOException
+ {
Pair pair = Pair.of(1, "hello");
Integer i = pair.getFirst(); // 1
String s = pair.getSecond(); // "hello"
@@ -21,8 +18,6 @@ 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!
- */
-
}
}
From efa52ff5673baa4252f2e52a423bb98f22edc159 Mon Sep 17 00:00:00 2001
From: Serdyukov Alexander
<30432511+SerdyukovAlexander@users.noreply.github.com>
Date: Tue, 17 Dec 2024 23:31:03 +0500
Subject: [PATCH 3/4] =?UTF-8?q?2=20=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8?=
=?UTF-8?q?=D0=B5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
task02/src/com/example/task02/SavedList.java | 77 ++++++++++++++++----
1 file changed, 64 insertions(+), 13 deletions(-)
diff --git a/task02/src/com/example/task02/SavedList.java b/task02/src/com/example/task02/SavedList.java
index 6b3a037d..23b4105d 100644
--- a/task02/src/com/example/task02/SavedList.java
+++ b/task02/src/com/example/task02/SavedList.java
@@ -1,35 +1,86 @@
package com.example.task02;
-import java.io.File;
-import java.io.Serializable;
+import java.io.*;
+import java.nio.file.Files;
import java.util.AbstractList;
+import java.util.ArrayList;
-public class SavedList extends AbstractList {
+public class SavedList extends AbstractList
+{
+ private final ArrayList list = new ArrayList<>();
+ private final File file;
- public SavedList(File file) {
+ 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") // <- Чтобы глаза не мазолило
+ ArrayList loadedList = (ArrayList) stream.readObject();
+ list.addAll(loadedList);
+ }
+
+ catch (IOException | ClassNotFoundException e)
+ {
+ throw new RuntimeException("Error when 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 when saving data to file", e);
+ }
}
@Override
- public E get(int index) {
- return null;
+ public E get(int index)
+ {
+ 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;
+ public int size()
+ {
+ return list.size();
}
@Override
- public void add(int index, E element) {
+ public void add(int index, E element)
+ {
+ list.add(index, element);
+ saveToFile();
}
@Override
- public E remove(int index) {
- return null;
+ public E remove(int index)
+ {
+ E removedElement = list.remove(index);
+ saveToFile();
+ return removedElement;
}
}
From bb7f31f126440cf37dbb508299b0ded87d6d847f Mon Sep 17 00:00:00 2001
From: Serdyukov Alexander
<30432511+SerdyukovAlexander@users.noreply.github.com>
Date: Tue, 17 Dec 2024 23:31:09 +0500
Subject: [PATCH 4/4] =?UTF-8?q?3=20=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8?=
=?UTF-8?q?=D0=B5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
task03/src/com/example/task03/Task03Main.java | 47 ++++++++++++++-----
1 file changed, 36 insertions(+), 11 deletions(-)
diff --git a/task03/src/com/example/task03/Task03Main.java b/task03/src/com/example/task03/Task03Main.java
index 7f255e98..5427405e 100644
--- a/task03/src/com/example/task03/Task03Main.java
+++ b/task03/src/com/example/task03/Task03Main.java
@@ -1,24 +1,49 @@
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 {
-
- public static void main(String[] args) throws IOException {
+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) {
+ 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)))
+ {
+ reader.lines().map(String::toLowerCase)
+ .filter(word -> word.matches("[а-яё]+") && word.length() >= 3)
+
+ .forEach(word ->
+ {
+ String sortedChars = word.chars().sorted()
+ .mapToObj(c -> String.valueOf((char) c))
+ .collect(Collectors.joining());
+
+ result.computeIfAbsent(sortedChars, key -> new TreeSet<>()).add(word);
+ });
+ }
+
+ catch (IOException e)
+ {
+ throw new RuntimeException("Somethings wrong", e);
+ }
+
+ return result.values().stream()
+ .filter(group -> group.size() >= 2)
+ .collect(Collectors.toList());
}
}