Compare commits
14 Commits
79c26666c6
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2ac4fd401b | ||
|
|
b1682b8cad | ||
|
|
29e9d3247d | ||
|
|
ad0acd060a | ||
|
|
acb617b460 | ||
|
|
0e5fc7175a | ||
|
|
629438b805 | ||
|
|
d125a16368 | ||
|
|
a062cc1ca2 | ||
|
|
a2132695d3 | ||
|
|
f40b140249 | ||
|
|
17eb02553a | ||
|
|
17186bc344 | ||
|
|
2005871330 |
56
src/main/java/com/algos/codewars/BuildTower.java
Normal file
56
src/main/java/com/algos/codewars/BuildTower.java
Normal file
@@ -0,0 +1,56 @@
|
||||
package com.algos.codewars;
|
||||
|
||||
//Build Tower
|
||||
//
|
||||
// Build a pyramid-shaped tower, as an array/list of strings, given a positive integer number of floors. A tower block is represented with "*" character.
|
||||
//
|
||||
// For example, a tower with 3 floors looks like this:
|
||||
//
|
||||
// [
|
||||
// " * ",
|
||||
// " *** ",
|
||||
// "*****"
|
||||
// ]
|
||||
//
|
||||
// And a tower with 6 floors looks like this:
|
||||
//
|
||||
// [
|
||||
// " * ",
|
||||
// " *** ",
|
||||
// " ***** ",
|
||||
// " ******* ",
|
||||
// " ********* ",
|
||||
// "***********"
|
||||
// ]
|
||||
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
public class BuildTower {
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
||||
System.out.println(Arrays.toString(towerBuilder(3)));
|
||||
}
|
||||
|
||||
public static String[] towerBuilder(int nFloors) {
|
||||
|
||||
String[] result = new String[nFloors];
|
||||
int stars = (nFloors - 1) * 2 + 1;
|
||||
int spaces = 0;
|
||||
|
||||
for (int i = nFloors - 1; i >= 0; i--) {
|
||||
result[i] = buildFloor(stars, spaces);
|
||||
stars = stars - 2;
|
||||
spaces++;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private static String buildFloor(int stars, int spaces) {
|
||||
|
||||
String spacesStr = " ".repeat(spaces);
|
||||
return spacesStr + "*".repeat(stars) + spacesStr;
|
||||
}
|
||||
}
|
||||
56
src/main/java/com/algos/codewars/DuplicateEncoder.java
Normal file
56
src/main/java/com/algos/codewars/DuplicateEncoder.java
Normal file
@@ -0,0 +1,56 @@
|
||||
package com.algos.codewars;
|
||||
//The goal of this exercise is to convert a string to a new string where each character in the new
|
||||
// string is "(" if that character appears only once in the original string, or ")" if that character
|
||||
// appears more than once in the original string. Ignore capitalization when determining if a character
|
||||
// is a duplicate.
|
||||
// Examples
|
||||
//
|
||||
// "din" => "((("
|
||||
// "recede" => "()()()"
|
||||
// "Success" => ")())())"
|
||||
// "(( @" => "))(("
|
||||
|
||||
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class DuplicateEncoder {
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
||||
String text = "din";
|
||||
System.out.println(encode(text));
|
||||
|
||||
text = "recede";
|
||||
System.out.println(encode(text));
|
||||
|
||||
text = "Success";
|
||||
System.out.println(encode(text));
|
||||
|
||||
text = "(( @";
|
||||
System.out.println(encode(text));
|
||||
}
|
||||
|
||||
|
||||
// static String encode(String word){
|
||||
//
|
||||
// Set<Character> duplicates = word.toLowerCase().chars().mapToObj(c -> (char) c)
|
||||
// .collect(Collectors.groupingBy(c -> c, Collectors.counting()))
|
||||
// .entrySet()
|
||||
// .stream().filter(e -> e.getValue() > 1)
|
||||
// .map(Map.Entry::getKey)
|
||||
// .collect(Collectors.toSet());
|
||||
//
|
||||
// return word.toLowerCase().chars().mapToObj(c -> (char) c).map(c -> {
|
||||
// if (duplicates.contains(c)) {
|
||||
// return ")";
|
||||
// }
|
||||
// return "(";
|
||||
// }).collect(Collectors.joining());
|
||||
// }
|
||||
|
||||
static String encode(String word) {
|
||||
|
||||
return word.toLowerCase().chars().mapToObj(c -> word.indexOf(c) == word.lastIndexOf(c) ? "(" : ")")
|
||||
.collect(Collectors.joining());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
package com.algos.codewars;
|
||||
|
||||
//Write a function named first_non_repeating_letter† that takes a string input,
|
||||
// and returns the first character that is not repeated anywhere in the string.
|
||||
//
|
||||
// For example, if given the input 'stress', the function should return 't',
|
||||
// since the letter t only occurs once in the string, and occurs first in the string.
|
||||
//
|
||||
// As an added challenge, upper- and lowercase letters are considered the same character,
|
||||
// but the function should return the correct case for the initial letter. For example, the input 'sTreSS' should return 'T'.
|
||||
//
|
||||
// If a string contains all repeating characters, it should return an empty string ("");
|
||||
//
|
||||
// † Note: the function is called firstNonRepeatingLetter for historical reasons,
|
||||
// but your function should handle any Unicode character.
|
||||
|
||||
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class FirstNonRepeatingLetter {
|
||||
|
||||
public static void main(String[] args) {
|
||||
System.out.println(firstNonRepeatingLetter("manOn-aMoon"));
|
||||
}
|
||||
|
||||
public static String firstNonRepeatingLetter(String s) {
|
||||
|
||||
if (s == null || s.isEmpty()) {
|
||||
return "";
|
||||
}
|
||||
|
||||
Map<Character, Integer> charCount = new LinkedHashMap<>();
|
||||
for (int i = 0; i < s.length(); i++) {
|
||||
char c = Character.toLowerCase(s.charAt(i));
|
||||
charCount.merge(c, 1, Integer::sum);
|
||||
}
|
||||
|
||||
for (int i = 0; i < s.length(); i++) {
|
||||
char currentChar = s.charAt(i);
|
||||
if (charCount.get(Character.toLowerCase(currentChar)) == 1) {
|
||||
return String.valueOf(currentChar);
|
||||
}
|
||||
}
|
||||
|
||||
return "";
|
||||
|
||||
// List<String> c = s.toLowerCase().chars().mapToObj(ch -> (char) ch).map(String::valueOf).toList();
|
||||
|
||||
// for (int i = 0; i < s.length(); i++) {
|
||||
// if (Collections.frequency(c, c.get(i).toLowerCase()) == 1) {
|
||||
// return String.valueOf(s.charAt(i));
|
||||
// }
|
||||
// }
|
||||
// return "";
|
||||
}
|
||||
}
|
||||
43
src/main/java/com/algos/codewars/MaximumSubarraySum.java
Normal file
43
src/main/java/com/algos/codewars/MaximumSubarraySum.java
Normal file
@@ -0,0 +1,43 @@
|
||||
package com.algos.codewars;
|
||||
//The maximum sum subarray problem consists in finding the maximum sum of a contiguous subsequence in an array
|
||||
// or list of integers:
|
||||
//
|
||||
// Max.sequence(new int[]{-2, 1, -3, 4, -1, 2, 1, -5, 4});
|
||||
//// should be 6: {4, -1, 2, 1}
|
||||
//
|
||||
// Easy case is when the list is made up of only positive numbers and the maximum sum is the sum
|
||||
// of the whole array. If the list is made up of only negative numbers, return 0 instead.
|
||||
//
|
||||
// Empty list is considered to have zero greatest sum. Note that the empty list or array is also
|
||||
// a valid sublist/subarray.
|
||||
|
||||
public class MaximumSubarraySum {
|
||||
|
||||
public static void main(String[] args) {
|
||||
int [] testArray = new int[] {-2, 1, -3, 4, -1, 2, 1, -5, 4};
|
||||
// int[] testArray = new int[]{2, 3, -8, 7, -1, 2, 3};
|
||||
System.out.println(sequence(testArray));
|
||||
}
|
||||
|
||||
public static int sequence(int[] arr) {
|
||||
|
||||
if (arr.length == 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int maxEnding = arr[0];
|
||||
int result = arr[0];
|
||||
|
||||
for (int i = 1; i < arr.length; i++) {
|
||||
// if (maxEnding < 0) {
|
||||
// maxEnding = arr[i];
|
||||
// } else {
|
||||
// maxEnding + arr[i];
|
||||
// }
|
||||
maxEnding = Math.max(arr[i], maxEnding + arr[i]);
|
||||
result = Math.max(result, maxEnding);
|
||||
}
|
||||
|
||||
return Math.max(result, 0);
|
||||
}
|
||||
}
|
||||
58
src/main/java/com/algos/hh/easy/AgeProcessor.java
Normal file
58
src/main/java/com/algos/hh/easy/AgeProcessor.java
Normal file
@@ -0,0 +1,58 @@
|
||||
package com.algos.hh.easy;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
//Возраст сотрудников
|
||||
// Вы работаете над модулем внутрикорпоративной системы учета данных сотрудников компании. Программа должна:
|
||||
// 1. Найти сотрудника с минимальным возрастом;
|
||||
// 2. Вычислить медианный возраст всех сотрудников;
|
||||
// 3. Найти сотрудника с максимальным возрастом.
|
||||
// Медиана — число, которое находится в середине этого набора, если его упорядочить по возрастанию. Если набор чисел четный, то берется среднее между двумя средними числами и округляется до целого.
|
||||
// Формат ввода
|
||||
// Одна строка — данные сотрудников. Данные включают имя, возраст и отдел, разделенные запятой, без пробелов. Информация о каждом сотруднике разделена через точку с запятой.
|
||||
// Количество сотрудников — от 2 до 100.
|
||||
// Формат вывода
|
||||
// Одна строка содержит три целых числа, разделенные пробелом: минимальный возраст, медианный возраст и максимальный возраст.
|
||||
// Пример 1
|
||||
// Входные данные:
|
||||
// Иван,28,Инженер;Олег,34,HR;Денис,45,Маркетинг;Анна,30,Инженер;Борис,24,HR
|
||||
// Выходные данные:
|
||||
// 24 30 45
|
||||
// Пример 2
|
||||
// Входные данные:
|
||||
// Павел,28,Инженер;Елена,34,Маркетинг
|
||||
// Выходные данные:
|
||||
// 28 31 34
|
||||
public class AgeProcessor {
|
||||
|
||||
public static void main(String[] args) {
|
||||
String input = "Иван,28,Инженер;Олег,34,HR;Денис,45,Маркетинг;Анна,30,Инженер;Борис,24,HR";
|
||||
String input2 = "Павел,28,Инженер;Елена,34,Маркетинг";
|
||||
System.out.println(processEmployeeData(input));
|
||||
System.out.println(processEmployeeData(input2));
|
||||
}
|
||||
|
||||
public static String processEmployeeData(String input) {
|
||||
|
||||
String[] employees = input.split(";");
|
||||
List<Integer> ages = Arrays.stream(employees)
|
||||
.map(s -> s.split(","))
|
||||
.filter(parts -> parts.length >= 2)
|
||||
.map(e -> Integer.parseInt(e[1]))
|
||||
.sorted()
|
||||
.toList();
|
||||
|
||||
if (ages.isEmpty()) {
|
||||
return "0 0 0";
|
||||
}
|
||||
|
||||
int minAge = ages.get(0);
|
||||
int maxAge = ages.get(ages.size() - 1);
|
||||
int middleOfList = ages.size() / 2;
|
||||
int medAge = ages.size() % 2 != 0 ? ages.get(middleOfList) :
|
||||
Math.round((ages.get(middleOfList) + ages.get(middleOfList - 1)) / 2f);
|
||||
|
||||
return minAge + " " + medAge + " " + maxAge;
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.algos.hh;
|
||||
package com.algos.hh.easy;
|
||||
|
||||
//Обработка логов
|
||||
// Вы работаете над системой анализа логов. Вам нужно разработать компонент для обработки и анализа строк. Этот компонент должен выполнять следующие операции:
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.algos.hh;
|
||||
package com.algos.hh.easy;
|
||||
|
||||
//Площадь и периметр
|
||||
// Вы разрабатываете программу для обработки информации о фигурах на плоскости. Вам необходимо создать класс, который будет вычислять площадь и периметр фигуры. Программа работает с двумя типами фигур — круг и квадрат.
|
||||
57
src/main/java/com/algos/hh/medium/Palindrome.java
Normal file
57
src/main/java/com/algos/hh/medium/Palindrome.java
Normal file
@@ -0,0 +1,57 @@
|
||||
package com.algos.hh.medium;
|
||||
//Проверка на палиндром
|
||||
//
|
||||
// Уровень: Средний
|
||||
// Темы: Циклы и итерации, Строки, Условия
|
||||
//
|
||||
// Вы разрабатываете программу для проверки строк на палиндром.
|
||||
// Палиндром — это строка, которая читается одинаково с начала и с конца. При этом пробелы и регистр букв игнорируются.
|
||||
//
|
||||
// Напишите программу, которая определяет, является ли заданная строка палиндромом.
|
||||
//
|
||||
// Формат ввода:
|
||||
// Одна строка, содержащая только заглавные и/или строчные буквы русского алфавита и, в некоторых случаях, пробелы.
|
||||
// Длина строки от 2 до 100 символов включительно.
|
||||
//
|
||||
// Формат вывода:
|
||||
// Одна из двух фраз (без кавычек):
|
||||
// - Палиндром
|
||||
// - Не палиндром
|
||||
//
|
||||
// Примеры:
|
||||
//
|
||||
// Пример 1
|
||||
// Входные данные:
|
||||
// Тут как тут
|
||||
// Выходные данные:
|
||||
// Палиндром
|
||||
//
|
||||
// Пример 2
|
||||
// Входные данные:
|
||||
// Программист
|
||||
// Выходные данные:
|
||||
// Не палиндром
|
||||
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
public class Palindrome {
|
||||
public static void main(String[] args) {
|
||||
|
||||
System.out.println(checkPalindrome("Тут как тут"));
|
||||
System.out.println(checkPalindrome("Программист"));
|
||||
System.out.println(checkPalindrome("Шалаш"));
|
||||
System.out.println(checkPalindrome("А роза упала на лапу Азора"));
|
||||
}
|
||||
|
||||
public static String checkPalindrome(String input) {
|
||||
|
||||
input = input.trim().replaceAll("\\s+", "").toLowerCase(Locale.ROOT);
|
||||
for (int i = 0; i < input.length() / 2; i++) {
|
||||
if (input.charAt(i) != input.charAt(input.length() - 1 - i)) {
|
||||
return "Не палиндром";
|
||||
}
|
||||
}
|
||||
return "Палиндром";
|
||||
}
|
||||
}
|
||||
54
src/main/java/com/algos/hh/medium/TemperatureDrops.java
Normal file
54
src/main/java/com/algos/hh/medium/TemperatureDrops.java
Normal file
@@ -0,0 +1,54 @@
|
||||
package com.algos.hh.medium;
|
||||
//Значительное похолодание
|
||||
// Средний
|
||||
// Временные ряды
|
||||
// Массивы
|
||||
// Циклы
|
||||
// Индексация
|
||||
// Вы разрабатываете приложение для определения погоды. Вы работаете с массивом значений температур по дням. В нем вам нужно найти значительные падения температур — дни, когда температура упала на 3 и более градуса относительно предшествующего значения. Температура может принимать положительные, нулевые и отрицательные значения.
|
||||
// Формат ввода
|
||||
// Одна строка, в которой чередуются целые числа, разделенные пробелами. Числа могут быть положительными, отрицательными или нулем. Длина списка — не больше 100 элементов.
|
||||
// Формат вывода
|
||||
// Одна строка, в которой чередуются целые числа, разделенные пробелами. В строке содержатся индексы дней, соответствующие определению «значительное падение температуры». Если таких дней нет, выводится «Нет».
|
||||
// Пример 1
|
||||
// Входные данные:
|
||||
// 0 5 2 7 4 1
|
||||
// Выходные данные:
|
||||
// 2 4 5
|
||||
// Пример 2
|
||||
// Входные данные:
|
||||
// 10 8 6 4 2 0 -2 -4
|
||||
// Выходные данные:
|
||||
// Нет
|
||||
|
||||
public class TemperatureDrops {
|
||||
public static void main(String[] args) {
|
||||
|
||||
System.out.println(findDrops("0 5 2 7 4 1"));
|
||||
System.out.println(findDrops("10 8 6 4 2 0 -2 -4"));
|
||||
}
|
||||
|
||||
public static String findDrops(String input) {
|
||||
|
||||
String[] sourceArray = input.split(" ");
|
||||
Integer[] destArray = new Integer[sourceArray.length];
|
||||
for (int i = 0; i < sourceArray.length; i++) {
|
||||
destArray[i] = Integer.parseInt(sourceArray[i]);
|
||||
}
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
for (int i = 1; i < destArray.length ; i++) {
|
||||
int prev = destArray[i - 1];
|
||||
int curr = destArray[i];
|
||||
if (Math.abs(prev) - Math.abs(curr) >= 3) {
|
||||
sb.append(i).append(" ");
|
||||
}
|
||||
}
|
||||
|
||||
if (!sb.isEmpty()) {
|
||||
return sb.toString().trim();
|
||||
}
|
||||
|
||||
return "Нет";
|
||||
}
|
||||
}
|
||||
50
src/main/java/com/algos/om/Ranges.java
Normal file
50
src/main/java/com/algos/om/Ranges.java
Normal file
@@ -0,0 +1,50 @@
|
||||
package com.algos.om;
|
||||
|
||||
//Вам дан отсортированный массив уникальных целых чисел nums.
|
||||
//
|
||||
// Диапазон [a, b] — это набор всех целых чисел от a до b (включительно).
|
||||
//
|
||||
// Верните наименьший отсортированный список диапазонов, которые покрывают все числа в массиве точно.
|
||||
// То есть, каждый элемент nums должен быть покрыт ровно одним из диапазонов,
|
||||
// и не должно быть такого числа x, которое находится в одном из диапазонов, но отсутствует в nums.
|
||||
//
|
||||
// Каждый диапазон [a, b] в списке должен быть представлен в следующем формате:
|
||||
//
|
||||
// "a->b", если a != b
|
||||
// "a", если a == b
|
||||
//
|
||||
// Пример:
|
||||
|
||||
// Вход: [1, 2, 3, 5, 6, 8]
|
||||
// Выход: ["1->3", "5->6", "8"]
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class Ranges {
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
||||
// int[] source = new int[]{1, 2, 3, 5, 6, 8};
|
||||
int[] source = new int[]{1, 3, 4, 5, 6, 8, 9};
|
||||
System.out.println(getRanges(source));
|
||||
}
|
||||
|
||||
public static List<String> getRanges(int[] source) {
|
||||
|
||||
List<String> result = new ArrayList<>();
|
||||
int begin = source[0];
|
||||
int end = source[0];
|
||||
for (int i = 1; i < source.length; i++) {
|
||||
int nextValue = source[i];
|
||||
if (nextValue - end > 1) {
|
||||
result.add(begin == end ? String.valueOf(end) : begin + "->" + end);
|
||||
begin = nextValue;
|
||||
}
|
||||
end = nextValue;
|
||||
}
|
||||
|
||||
result.add(begin == end ? String.valueOf(end) : begin + "->" + end);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
46
src/main/java/com/algos/shortcut/Atm.java
Normal file
46
src/main/java/com/algos/shortcut/Atm.java
Normal file
@@ -0,0 +1,46 @@
|
||||
package com.algos.shortcut;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
|
||||
// В банкомате доступны банкноты различных номиналов, например, [100, 500, 1000].
|
||||
// Вам необходимо написать программу, которая по заданной сумме определяет минимальное количество банкнот,
|
||||
// необходимое для выдачи этой суммы. Допускается использовать любое количество банкнот каждого номинала.
|
||||
//
|
||||
// Если точно составить требуемую сумму с использованием имеющихся номиналов невозможно,
|
||||
// программа должна вернуть -1.
|
||||
public class Atm {
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
||||
int[] banknotes = {100, 500, 1000};
|
||||
// int[] banknotes = {1000, 100, 500};
|
||||
// int amount = 1500;
|
||||
int amount = 1803;
|
||||
// int amount = 1800;
|
||||
// int amount = 600;
|
||||
int result = minBanknotes(banknotes, amount);
|
||||
System.out.println(result);
|
||||
|
||||
}
|
||||
|
||||
private static int minBanknotes(int[] banknotes, int amount) {
|
||||
|
||||
Arrays.sort(banknotes);
|
||||
int[] result = new int[banknotes.length];
|
||||
|
||||
for (int i = banknotes.length - 1; i >= 0; i--) {
|
||||
if (amount < banknotes[i]) {
|
||||
continue;
|
||||
}
|
||||
result[i] = amount / banknotes[i];
|
||||
amount = amount % banknotes[i];
|
||||
}
|
||||
|
||||
if (amount != 0) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
return Arrays.stream(result).sum();
|
||||
}
|
||||
}
|
||||
63
src/main/java/com/algos/stepik/FillDiags.java
Normal file
63
src/main/java/com/algos/stepik/FillDiags.java
Normal file
@@ -0,0 +1,63 @@
|
||||
package com.algos.stepik;
|
||||
|
||||
//У вас есть переменная n, которая содержит входные пользовательские данные.
|
||||
//
|
||||
// Напишите код, который создает двумерный список и заполняет его по следующему правилу: на главной диагонали должны быть записаны числа 0. На двух диагоналях, прилегающих к главной, числа 1. На следующих двух диагоналях числа 2, и т.д.
|
||||
//
|
||||
// Результат записать в виде нового списка в переменную result.
|
||||
//
|
||||
// Например:
|
||||
//
|
||||
// Если n = 4 тогда:
|
||||
//
|
||||
// [
|
||||
// [ 0, 1, 2, 3 ],
|
||||
// [ 1, 0, 1, 2 ],
|
||||
// [ 2, 1, 0, 1 ],
|
||||
// [ 3, 2, 1, 0 ]
|
||||
// ]
|
||||
//
|
||||
// Если n = 5 тогда:
|
||||
//
|
||||
// [
|
||||
// [ 0, 1, 2, 3, 4 ],
|
||||
// [ 1, 0, 1, 2, 3 ],
|
||||
// [ 2, 1, 0, 1, 2 ],
|
||||
// [ 3, 2, 1, 0, 1 ],
|
||||
// [ 4, 3, 2, 1, 0 ]
|
||||
// ]
|
||||
|
||||
import com.google.gson.Gson;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
public class FillDiags {
|
||||
|
||||
public static void main(String[] args) {
|
||||
//int n = readInput();
|
||||
int n = 5;
|
||||
List<List<Integer>> result = fillDiagonalList(n);
|
||||
|
||||
System.out.println(new Gson().toJson(result));
|
||||
}
|
||||
|
||||
public static List<List<Integer>> fillDiagonalList(int n) {
|
||||
|
||||
List<List<Integer>> result = new ArrayList<>();
|
||||
|
||||
for (int i = 0; i < n; i++) {
|
||||
List<Integer> row = new ArrayList<>();
|
||||
for (int j = 0; j < n; j++) {
|
||||
row.add(Math.abs(i - j));
|
||||
}
|
||||
result.add(row);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public static int readInput() {
|
||||
Scanner scanner = new Scanner(System.in);
|
||||
return Integer.parseInt(scanner.nextLine().trim());
|
||||
}
|
||||
}
|
||||
56
src/main/java/com/algos/stepik/FindLongestSeries.java
Normal file
56
src/main/java/com/algos/stepik/FindLongestSeries.java
Normal file
@@ -0,0 +1,56 @@
|
||||
package com.algos.stepik;
|
||||
|
||||
//У вас есть переменная data которая содержит входные пользовательские данные.
|
||||
//
|
||||
// data - список из элементов целых числел.
|
||||
//
|
||||
// Напишите код, который находит наибольшую серию подряд идущих элементов, расположенных по возрастанию.
|
||||
//
|
||||
// Результат записать в переменную result.
|
||||
//
|
||||
// Sample Input 1:
|
||||
//
|
||||
// [1, 2, 3, 4, 4, 3, 4, 6, 8, 10]
|
||||
//
|
||||
// Sample Output 1:
|
||||
//
|
||||
// 5
|
||||
//
|
||||
// Sample Input 2:
|
||||
//
|
||||
// [1, 2, 3, 4, 4, 3, 5, 5, 8, 10]
|
||||
//
|
||||
// Sample Output 2:
|
||||
//
|
||||
// 4
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class FindLongestSeries {
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
||||
List<Integer> list1 = List.of(1, 2, 3, 4, 4, 3, 4, 6, 8, 10);
|
||||
List<Integer> list2 = List.of(1, 2, 3, 4, 4, 3, 5, 5, 8, 10);
|
||||
|
||||
System.out.println(findLongestSeries(list1));
|
||||
System.out.println(findLongestSeries(list2));
|
||||
}
|
||||
|
||||
public static int findLongestSeries(List<Integer> data) {
|
||||
|
||||
int max = 0;
|
||||
int counter = 1;
|
||||
|
||||
for(int i = 1; i < data.size(); i++) {
|
||||
if (data.get(i) - data.get(i - 1) > 0) {
|
||||
counter++;
|
||||
} else {
|
||||
max = Math.max(max, counter);
|
||||
counter = 1;
|
||||
}
|
||||
|
||||
}
|
||||
return Math.max(max, counter);
|
||||
}
|
||||
}
|
||||
60
src/main/java/com/algos/vtb/exceptions/Main.java
Normal file
60
src/main/java/com/algos/vtb/exceptions/Main.java
Normal file
@@ -0,0 +1,60 @@
|
||||
package com.algos.vtb.exceptions;
|
||||
|
||||
import java.util.stream.IntStream;
|
||||
|
||||
public class Main {
|
||||
public static void main(String[] args) {
|
||||
|
||||
String[][] myArray = new String[][]{
|
||||
{"1", "2", "3", "4"},
|
||||
{"5", "6", "7b", "8"},
|
||||
{"9", "10", "5", "12"},
|
||||
{"13", "14", "15", "16"}
|
||||
};
|
||||
try {
|
||||
System.out.printf("Cумма = %d%n", getSum(myArray));
|
||||
} catch (MyArrayException e) {
|
||||
System.out.println("Exception processed");
|
||||
}
|
||||
}
|
||||
|
||||
private static int getSum(String[][] myArray) throws MyArraySizeException, MyArrayDataException {
|
||||
|
||||
if (myArray.length != 4) {
|
||||
throw new MyArraySizeException("Размер массива должен быть 4x4!");
|
||||
}
|
||||
|
||||
// for (int i = 0; i < myArray.length; i++) {
|
||||
// if (myArray[i].length != 4) {
|
||||
// throw new MyArraySizeException(i);
|
||||
// }
|
||||
// }
|
||||
|
||||
// IntStream.range(0, myArray.length)
|
||||
// .forEach(i -> {
|
||||
// if (myArray[i].length != 4) {
|
||||
// throw new MyArraySizeException(i);
|
||||
// }
|
||||
// });
|
||||
|
||||
|
||||
IntStream.range(0, myArray.length)
|
||||
.filter(i -> myArray[i].length != 4)
|
||||
.findFirst()
|
||||
.ifPresent(i -> {
|
||||
throw new MyArraySizeException(i);
|
||||
});
|
||||
|
||||
int sum = 0;
|
||||
for (int i = 0; i < myArray.length; i++) {
|
||||
for (int j = 0; j < myArray[i].length; j++) {
|
||||
try {
|
||||
sum += Integer.parseInt(myArray[i][j]);
|
||||
} catch (NumberFormatException e) {
|
||||
throw new MyArrayDataException(i, j, myArray);
|
||||
}
|
||||
}
|
||||
}
|
||||
return sum;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package com.algos.vtb.exceptions;
|
||||
|
||||
public class MyArrayDataException extends MyArrayException {
|
||||
|
||||
private int row;
|
||||
|
||||
private int col;
|
||||
|
||||
private Object value;
|
||||
|
||||
public MyArrayDataException() {
|
||||
super();
|
||||
}
|
||||
|
||||
public MyArrayDataException(String message) {
|
||||
super(message);
|
||||
}
|
||||
|
||||
public MyArrayDataException(int row, int col, Object[][] array) {
|
||||
super("Неверные данные в массиве [" + row + "][" + col + "]: " + array[row][col]);
|
||||
this.row = row;
|
||||
this.col = col;
|
||||
this.value = array[row][col];
|
||||
}
|
||||
}
|
||||
10
src/main/java/com/algos/vtb/exceptions/MyArrayException.java
Normal file
10
src/main/java/com/algos/vtb/exceptions/MyArrayException.java
Normal file
@@ -0,0 +1,10 @@
|
||||
package com.algos.vtb.exceptions;
|
||||
|
||||
public class MyArrayException extends RuntimeException{
|
||||
public MyArrayException() {
|
||||
}
|
||||
|
||||
public MyArrayException(String message) {
|
||||
super(message);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package com.algos.vtb.exceptions;
|
||||
|
||||
public class MyArraySizeException extends MyArrayException {
|
||||
|
||||
int row;
|
||||
|
||||
public MyArraySizeException() {
|
||||
super();
|
||||
}
|
||||
|
||||
public MyArraySizeException(String message) {
|
||||
super(message);
|
||||
}
|
||||
|
||||
public MyArraySizeException(int row) {
|
||||
super(String.format("Размер массива в строке %d не равен 4", row));
|
||||
this.row = row;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
package com.algos.vtb.generics_collections.generics_collections;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
//Написать метод, который меняет два элемента массива местами (массив может быть любого
|
||||
// ссылочного типа).
|
||||
public class Task1 {
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
||||
String[] strArray = new String[]{"a", "c", "b"};
|
||||
System.out.println("before : " + Arrays.toString(strArray));
|
||||
System.out.println("after : " + Arrays.toString(exchangeElements(1, 2, strArray)));
|
||||
|
||||
Integer[] intArray = new Integer[]{20, 19, 22, 21};
|
||||
System.out.println("before : " + Arrays.toString(intArray));
|
||||
exchangeElements(0, 1, intArray);
|
||||
exchangeElements(2, 3, intArray);
|
||||
System.out.println("after : " + Arrays.toString(intArray));
|
||||
|
||||
}
|
||||
|
||||
public static <T> T[] exchangeElements(int i, int j, T[] array) {
|
||||
|
||||
if (i >= array.length || j >= array.length) {
|
||||
throw new IllegalArgumentException("Индекс превышает размер массива");
|
||||
}
|
||||
|
||||
T temp = array[i];
|
||||
array[i] = array[j];
|
||||
array[j] = temp;
|
||||
|
||||
return array;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package com.algos.vtb.generics_collections.generics_collections;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public class Task2 {
|
||||
|
||||
// Написать метод, который преобразует массив в ArrayList.
|
||||
public static void main(String[] args) {
|
||||
|
||||
String[] strArray = new String[]{"one", "two", "three", "four"};
|
||||
List<String> strList = convertArrayToArrayList(strArray);
|
||||
System.out.println(strList.getClass().getSimpleName() + ": " + strList);
|
||||
|
||||
Integer[] intArray = new Integer[]{5, 4, 3, 2, 1};
|
||||
List<Integer> intList = convertArrayToArrayList(intArray);
|
||||
System.out.println(intList.getClass().getSimpleName() + ": " +intList);
|
||||
}
|
||||
|
||||
public static <T> List<T> convertArrayToArrayList(T[] array ) {
|
||||
|
||||
return Arrays.asList(array);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,125 @@
|
||||
package com.algos.vtb.generics_collections.generics_collections;
|
||||
|
||||
//a. Даны классы Fruit -> Apple, Orange.
|
||||
// b. Класс Box, в который можно складывать фрукты. Коробки условно сортируются по типу
|
||||
// фрукта, поэтому в одну коробку нельзя сложить и яблоки, и апельсины.
|
||||
// c.
|
||||
// Для хранения фруктов внутри коробки можно использовать ArrayList.
|
||||
// d. Написать метод getWeight(), который высчитывает вес коробки. Задать вес одного
|
||||
// фрукта и их количество: вес яблока — 1.0f, апельсина — 1.5f (единицы измерения не
|
||||
// важны).
|
||||
// e. Внутри класса Box написать метод Compare, который позволяет сравнить текущую
|
||||
// коробку с той, которую подадут в Compare в качестве параметра. True, если их массы
|
||||
// равны, False — в противном случае. Можно сравнивать коробки с яблоками и
|
||||
// апельсинами.
|
||||
// f.
|
||||
// Написать метод, который позволяет пересыпать фрукты из текущей коробки в другую.
|
||||
// Помним про сортировку фруктов: нельзя высыпать яблоки в коробку с апельсинами.
|
||||
// Соответственно, в текущей коробке фруктов не остаётся, а в другую перекидываются
|
||||
// объекты, которые были в первой.
|
||||
// g. Не забываем про метод добавления фрукта в коробку.
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class Task3 {
|
||||
|
||||
public static void main(String[] args) {
|
||||
Box<Apple> boxOfApples = new Box<>();
|
||||
boxOfApples.addFruit(new Apple());
|
||||
boxOfApples.addFruit(new Apple());
|
||||
boxOfApples.addFruit(new Apple());
|
||||
// boxOfApples.addFruit(new Orange());
|
||||
System.out.println(boxOfApples.getWeight());
|
||||
System.out.println(boxOfApples);
|
||||
|
||||
Box<Orange> boxOfOranges = new Box<>();
|
||||
boxOfOranges.addFruit(new Orange());
|
||||
boxOfOranges.addFruit(new Orange());
|
||||
System.out.println(boxOfOranges.getWeight());
|
||||
System.out.println(boxOfOranges);
|
||||
|
||||
System.out.println(boxOfOranges.compare(boxOfApples));
|
||||
|
||||
// boxOfApples.moveTo(boxOfOranges);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
abstract class Fruit {
|
||||
protected float weight;
|
||||
|
||||
public Fruit(float weight) {
|
||||
this.weight = weight;
|
||||
}
|
||||
|
||||
public float getWeight() {
|
||||
return weight;
|
||||
}
|
||||
}
|
||||
|
||||
class Apple extends Fruit {
|
||||
|
||||
public Apple() {
|
||||
super(1.0f);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Apple{" +
|
||||
"weight=" + weight +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
|
||||
class Orange extends Fruit {
|
||||
|
||||
public Orange() {
|
||||
super(1.5f);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Orange{" +
|
||||
"weight=" + weight +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
|
||||
class Box<T extends Fruit> {
|
||||
private final List<T> storage = new ArrayList<>();
|
||||
|
||||
public void addFruit(T fruit) {
|
||||
storage.add(fruit);
|
||||
}
|
||||
|
||||
public double getWeight() {
|
||||
|
||||
return storage.stream().mapToDouble(Fruit::getWeight).sum();
|
||||
}
|
||||
|
||||
public boolean compare(Box<?> box) {
|
||||
|
||||
// return box.getWeight() == this.getWeight();
|
||||
return Math.abs(box.getWeight() - this.getWeight()) < 0.00001;
|
||||
}
|
||||
|
||||
public Box<T> moveTo(Box<T> boxSource) {
|
||||
|
||||
if (boxSource == this) {
|
||||
throw new IllegalArgumentException("Could not move elements to itself");
|
||||
}
|
||||
|
||||
storage.forEach(boxSource::addFruit);
|
||||
storage.clear();
|
||||
return boxSource;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Box{" +
|
||||
"storage=" + storage +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user