Skip to content

Commit

Permalink
Добавлен метод getLettersShuffle()
Browse files Browse the repository at this point in the history
  • Loading branch information
kalenchukov committed Aug 5, 2022
1 parent 71f34bb commit 5f6d487
Show file tree
Hide file tree
Showing 17 changed files with 281 additions and 5 deletions.
18 changes: 18 additions & 0 deletions README.MD
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,24 @@ alphabet.getLettersReverse();
*/
```

#### Получение букв алфавита в перемешанном порядке

```java
Alphabetical alphabet = new RussianAlphabet();
alphabet.getLettersShuffle();
/*
Результат выполнения:
[
Ж, Ё, С, Ш, ф, У, э, о, ю, Я, Т, и,
я, Ц, г, з, Н, И, Е, Ч, Э, е, м, Д,
О, т, у, й, З, Г, Ю, д, п, Ъ, б, ш,
с, Ф, р, ч, Б, х, л, Ы, к, Л, а, К,
Щ, в, Р, ё, В, ъ, ь, Х, П, ы, Й, ц,
М, н, ж, щ, А, Ь
]
*/
```

#### Получение среза букв алфавита

```java
Expand Down
1 change: 0 additions & 1 deletion TODO.MD
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,5 @@
* Латинский алфавит добавить
* [?] Перечисления для получения алфавитов, алфавитов прописных букв, алфавитов строчных букв
* [+] Метод join() объединения букв в строку с разделителем и без
* Метод shuffle() для получения букв алфавита в перемешанном случайном образом порядке
* [+] Метод random() для получения случайных букв указанного количества
*
32 changes: 28 additions & 4 deletions src/main/java/dev/kalenchukov/alphabet/AbstractAlphabet.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,7 @@
import org.jetbrains.annotations.Nullable;
import org.jetbrains.annotations.Unmodifiable;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.*;

/**
* Класс абстрактного алфавита.
Expand Down Expand Up @@ -167,6 +164,33 @@ protected Integer getPosition(@NotNull final List<@NotNull Character> alphabet,
return Collections.unmodifiableList(this.getLettersReverse(this.letters));
}

/**
* @see Alphabetical#getLettersShuffle()
*/
@NotNull
@Unmodifiable
@Override
public List<@NotNull Character> getLettersShuffle()
{
final int coefficientShuffle = (int) (this.letters.size() * 2.5);

List<Character> letters = new ArrayList<>(this.letters);
Random random = new Random();

for (int iterationShuffle = 0; iterationShuffle < coefficientShuffle; iterationShuffle++)
{
int indexFrom = random.nextInt(this.letters.size());
int indexIn = random.nextInt(this.letters.size());

final char charTemp = letters.get(indexIn);

letters.set(indexIn, letters.get(indexFrom));
letters.set(indexFrom, charTemp);
}

return Collections.unmodifiableList(letters);
}

/**
* Возвращает буквы алфавита в обратном порядке.
*
Expand Down
9 changes: 9 additions & 0 deletions src/main/java/dev/kalenchukov/alphabet/Alphabetical.java
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,15 @@ public interface Alphabetical
@NotNull
List<@NotNull Character> getLettersReverse();

/**
* Возвращает буквы алфавита в перемешанном порядке.
*
* @return Коллекция букв алфавита.
*/
@Unmodifiable
@NotNull
List<@NotNull Character> getLettersShuffle();

/**
* Возвращает позицию буквы в алфавите.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import org.jetbrains.annotations.NotNull;
import org.junit.Test;

import java.util.Arrays;
import java.util.List;
import java.util.Optional;

Expand Down Expand Up @@ -103,6 +104,22 @@ public void testGetLettersReverse()
assertEquals(Optional.of('я'), Optional.ofNullable(letters.get(0)));
}

/**
* Проверяет получение букв алфавита в перемешанном порядке.
*/
@Test
public void testGetLettersShuffle()
{
List<Character> letters = List.of(
'а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з',
'і', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р',
'с', 'т', 'у', 'ў', 'ф', 'х', 'ц', 'ч', 'ш',
'ы', 'ь', 'э', 'ю', 'я'
);

assertFalse(Arrays.equals(letters.toArray(), ALPHABET.getLettersShuffle().toArray()));
}

/**
* Проверяет получение среза букв алфавита.
*/
Expand Down
20 changes: 20 additions & 0 deletions src/test/java/dev/kalenchukov/alphabet/BelarusianAlphabetTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import org.jetbrains.annotations.NotNull;
import org.junit.Test;

import java.util.Arrays;
import java.util.List;
import java.util.Optional;

Expand Down Expand Up @@ -167,6 +168,25 @@ public void testGetLettersReverse()
assertEquals(Optional.of('я'), Optional.ofNullable(letters.get(0)));
}

/**
* Проверяет получение букв алфавита в перемешанном порядке.
*/
@Test
public void testGetLettersShuffle()
{
List<Character> letters = List.of(
'А', 'а', 'Б', 'б', 'В', 'в', 'Г', 'г', 'Д', 'д',
'Е', 'е', 'Ё', 'ё', 'Ж', 'ж', 'З', 'з', 'І', 'і',
'Й', 'й', 'К', 'к', 'Л', 'л', 'М', 'м', 'Н', 'н',
'О', 'о', 'П', 'п', 'Р', 'р', 'С', 'с', 'Т', 'т',
'У', 'у', 'Ў', 'ў', 'Ф', 'ф', 'Х', 'х', 'Ц', 'ц',
'Ч', 'ч', 'Ш', 'ш', 'Ы', 'ы', 'Ь', 'ь', 'Э', 'э',
'Ю', 'ю', 'Я', 'я'
);

assertFalse(Arrays.equals(letters.toArray(), ALPHABET.getLettersShuffle().toArray()));
}

/**
* Проверяет получение среза букв алфавита.
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import org.jetbrains.annotations.NotNull;
import org.junit.Test;

import java.util.Arrays;
import java.util.List;
import java.util.Optional;

Expand Down Expand Up @@ -103,6 +104,22 @@ public void testGetLettersReverse()
assertEquals(Optional.of('Я'), Optional.ofNullable(letters.get(0)));
}

/**
* Проверяет получение букв алфавита в перемешанном порядке.
*/
@Test
public void testGetLettersShuffle()
{
List<Character> letters = List.of(
'А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З',
'І', 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р',
'С', 'Т', 'У', 'Ў', 'Ф', 'Х', 'Ц', 'Ч', 'Ш',
'Ы', 'Ь', 'Э', 'Ю', 'Я'
);

assertFalse(Arrays.equals(letters.toArray(), ALPHABET.getLettersShuffle().toArray()));
}

/**
* Проверяет получение среза букв алфавита.
*/
Expand Down
17 changes: 17 additions & 0 deletions src/test/java/dev/kalenchukov/alphabet/CyrillicAlphabetTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import org.jetbrains.annotations.NotNull;
import org.junit.Test;

import java.util.Arrays;
import java.util.List;
import java.util.Optional;

Expand Down Expand Up @@ -125,6 +126,22 @@ public void testGetLettersReverse()
assertEquals(Optional.of('Ѵ'), Optional.ofNullable(letters.get(0)));
}

/**
* Проверяет получение букв алфавита в перемешанном порядке.
*/
@Test
public void testGetLettersShuffle()
{
List<Character> letters = List.of(
'А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ж', 'Ѕ', 'З', 'И', 'І',
'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'Ꙋ', 'Ф',
'Х', 'Ѡ', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь', 'Ѣ', 'Ю',
'Ꙗ', 'Ѥ', 'Ѧ', 'Ѫ', 'Ѩ', 'Ѭ', 'Ѯ', 'Ѱ', 'Ѳ', 'Ѵ'
);

assertFalse(Arrays.equals(letters.toArray(), ALPHABET.getLettersShuffle().toArray()));
}

/**
* Проверяет получение среза букв алфавита.
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import org.jetbrains.annotations.NotNull;
import org.junit.Test;

import java.util.Arrays;
import java.util.List;
import java.util.Optional;

Expand Down Expand Up @@ -91,6 +92,21 @@ public void testGetLettersReverse()
assertEquals(Optional.of('z'), Optional.ofNullable(letters.get(0)));
}

/**
* Проверяет получение букв алфавита в перемешанном порядке.
*/
@Test
public void testGetLettersShuffle()
{
List<Character> letters = List.of(
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i',
'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r',
's', 't', 'u', 'v', 'w', 'x', 'y', 'z'
);

assertFalse(Arrays.equals(letters.toArray(), ALPHABET.getLettersShuffle().toArray()));
}

/**
* Проверяет получение среза букв алфавита.
*/
Expand Down
19 changes: 19 additions & 0 deletions src/test/java/dev/kalenchukov/alphabet/EnglishAlphabetTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import org.jetbrains.annotations.NotNull;
import org.junit.Test;

import java.util.Arrays;
import java.util.List;
import java.util.Optional;

Expand Down Expand Up @@ -143,6 +144,24 @@ public void testGetLettersReverse()
assertEquals(Optional.of('z'), Optional.ofNullable(letters.get(0)));
}

/**
* Проверяет получение букв алфавита в перемешанном порядке.
*/
@Test
public void testGetLettersShuffle()
{
List<Character> letters = List.of(
'A', 'a', 'B', 'b', 'C', 'c', 'D', 'd', 'E', 'e',
'F', 'f', 'G', 'g', 'H', 'h', 'I', 'i', 'J', 'j',
'K', 'k', 'L', 'l', 'M', 'm', 'N', 'n', 'O', 'o',
'P', 'p', 'Q', 'q', 'R', 'r', 'S', 's', 'T', 't',
'U', 'u', 'V', 'v', 'W', 'w', 'X', 'x', 'Y', 'y',
'Z', 'z'
);

assertFalse(Arrays.equals(letters.toArray(), ALPHABET.getLettersShuffle().toArray()));
}

/**
* Проверяет получение среза букв алфавита.
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import org.jetbrains.annotations.NotNull;
import org.junit.Test;

import java.util.Arrays;
import java.util.List;
import java.util.Optional;

Expand Down Expand Up @@ -91,6 +92,21 @@ public void testGetLettersReverse()
assertEquals(Optional.of('Z'), Optional.ofNullable(letters.get(0)));
}

/**
* Проверяет получение букв алфавита в перемешанном порядке.
*/
@Test
public void testGetLettersShuffle()
{
List<Character> letters = List.of(
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I',
'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R',
'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
);

assertFalse(Arrays.equals(letters.toArray(), ALPHABET.getLettersShuffle().toArray()));
}

/**
* Проверяет получение среза букв алфавита.
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import org.jetbrains.annotations.NotNull;
import org.junit.Test;

import java.util.Arrays;
import java.util.List;
import java.util.Optional;

Expand Down Expand Up @@ -89,6 +90,21 @@ public void testGetLettersReverse()
assertEquals(Optional.of('ω'), Optional.ofNullable(letters.get(0)));
}

/**
* Проверяет получение букв алфавита в перемешанном порядке.
*/
@Test
public void testGetLettersShuffle()
{
List<Character> letters = List.of(
'α', 'β', 'γ', 'δ', 'ε', 'ζ', 'η', 'θ', 'ι',
'κ', 'λ', 'μ', 'ν', 'ξ', 'ο', 'π', 'ρ', 'σ',
'ς', 'τ', 'υ', 'φ', 'χ', 'ψ', 'ω'
);

assertFalse(Arrays.equals(letters.toArray(), ALPHABET.getLettersShuffle().toArray()));
}

/**
* Проверяет получение среза букв алфавита.
*/
Expand Down
18 changes: 18 additions & 0 deletions src/test/java/dev/kalenchukov/alphabet/GreekAlphabetTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import org.jetbrains.annotations.NotNull;
import org.junit.Test;

import java.util.Arrays;
import java.util.List;
import java.util.Optional;

Expand Down Expand Up @@ -137,6 +138,23 @@ public void testGetLettersReverse()
assertEquals(Optional.of('ω'), Optional.ofNullable(letters.get(0)));
}

/**
* Проверяет получение букв алфавита в перемешанном порядке.
*/
@Test
public void testGetLettersShuffle()
{
List<Character> letters = List.of(
'Α', 'α', 'Β', 'β', 'Γ', 'γ', 'Δ', 'δ', 'Ε', 'ε',
'Ζ', 'ζ', 'Η', 'η', 'Θ', 'θ', 'Ι', 'ι', 'Κ', 'κ',
'Λ', 'λ', 'Μ', 'μ', 'Ν', 'ν', 'Ξ', 'ξ', 'Ο', 'ο',
'Π', 'π', 'Ρ', 'ρ', 'Σ', 'σ', 'ς', 'Τ', 'τ', 'Υ',
'υ', 'Φ', 'φ', 'Χ', 'χ', 'Ψ', 'ψ', 'Ω', 'ω'
);

assertFalse(Arrays.equals(letters.toArray(), ALPHABET.getLettersShuffle().toArray()));
}

/**
* Проверяет получение среза букв алфавита.
*/
Expand Down
Loading

0 comments on commit 5f6d487

Please sign in to comment.