• ,

com.javarush.task.task18.task1825 Работает, не проходит тестирование

Код рабочий, проверял. Пишет, что у меня не выполнено ни одно условие кроме 1-го

package com.javarush.task.task18.task1825;

/* 
Собираем файл
Собираем файл из кусочков.
Считывать с консоли имена файлов.
Каждый файл имеет имя: [someName].partN.
Например, Lion.avi.part1, Lion.avi.part2, …, Lion.avi.part37.
Имена файлов подаются в произвольном порядке. Ввод заканчивается словом «end«.
В папке, где находятся все прочтенные файлы, создать файл без суффикса [.partN].
Например, Lion.avi.
В него переписать все байты из файлов-частей используя буфер.
Файлы переписывать в строгой последовательности, сначала первую часть, потом вторую, …, в конце — последнюю.
Закрыть потоки.
Требования:
1. Программа должна считывать имена файлов с консоли, пока не будет введено слово "end".
2. Создай поток для записи в файл без суффикса [.partN] в папке, где находятся все считанные файлы.
3. В новый файл перепиши все байты из файлов-частей *.partN.
4. Чтение и запись должны происходить с использованием буфера.
5. Созданные для файлов потоки должны быть закрыты.
*/
import java.io.*;
import java.util.ArrayList;
import java.util.Collections;
public class Solution {
    public static void main(String[] args) throws IOException{
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        ArrayList<File> list = new ArrayList<>();
        while (true) {
            String name = reader.readLine();
            if (!name.equals("end"))
            list.add(new File(name));
            else break;
        }
/*Названия одинаковые, соответственно сортировка листа работает корректно от part1 до partN */
        Collections.sort(list);
        //файл создается в папке с предыдущими файлами
        String resultFile = list.get(0).getAbsolutePath().split(".part")[0] + "";
        File destFile = new File(resultFile);
        destFile.createNewFile();
        FileOutputStream outStream = new FileOutputStream(destFile);
//записывает все буфером
        for (File search : list) {
            FileInputStream inStream = new FileInputStream(search);
            byte[] buffer = new byte[inStream.available()];
            while (inStream.available() > 0) {
                int count = inStream.read(buffer);
                outStream.write(buffer,0,count);
            }
            inStream.close();
        }
        outStream.close();
        reader.close();
    }
}


Ввод:

*C:My programsCodingJavaRushTasks2.JavaCoresrccomjavarushtasktask18task1825avi.part3

C:My programsCodingJavaRushTasks2.JavaCoresrccomjavarushtasktask18task1825avi.part1

C:My programsCodingJavaRushTasks2.JavaCoresrccomjavarushtasktask18task1825avi.part2

end*

Вывод: (создается файл «avi» который содержит инфу 1,2,3 файлов в этой последовательности) «OneTwoThree»
  • ,

level22.lesson05.task01 (task2202) - работает, не проходит проверку - РЕШЕНО

Условие задачи:

Найти подстроку
Метод getPartOfString должен возвращать подстроку начиная с символа после 1-го пробела и до конца слова,
которое следует после 4-го пробела.

Пример:
«JavaRush — лучший сервис обучения Java.»

Результат:
«— лучший сервис обучения»

На некорректные данные бросить исключение TooShortStringException (сделать исключением).

Требования:
1. Класс TooShortStringException должен быть потомком класса RuntimeException.
2. Метод getPartOfString должен принимать строку в качестве параметра.
3. В случае, если строка, переданная в метод getPartOfString содержит менее 4 пробелов должно возникнуть исключение TooShortStringException.
4. Метод getPartOfString должен возвращать подстроку начиная с символа после 1-го пробела и до конца слова, которое следует после 4-го пробела.
Мой код:
package com.javarush.task.task22.task2202;

/* 
Найти подстроку
*/
public class Solution {
    public static void main(String[] args) {
        System.out.println(getPartOfString("JavaRush - лучший сервис обучения Java."));
        System.out.println(getPartOfString("JavaRush - лучший сервис обучения."));
        System.out.println(getPartOfString("JavaRush - лучший сервис."));

    }

    public static String getPartOfString(String string) throws TooShortStringException {
        int index = 0;
        /*for (int i = 0, j = 0; i < 4; i++) {
            index = string.indexOf(' ',j);
            if (index < 0) throw  new TooShortStringException();
            j = index + 1;
        }*/
        int count = 0, j = 0;
        while (true) {
            index = string.indexOf(' ',j);
            if (index < 0) break;
            else count++;
            if (count == 4) break;
            j = index + 1;
        }
        //if (count < 4) throw new TooShortStringException();
        int i = index + 1;
        while (!string.substring(i,i+1).matches("^(\\p{Punct}| )$")) {
            i++;
        }
        try {
            String result = string.substring(string.indexOf(' ') + 1, i);
            return result;
        } catch (Exception e) {
            throw new TooShortStringException();
        }
    }

    public static class TooShortStringException extends RuntimeException {
    }
}
  • ,

task29.task2909 Рефакторинг (13) HELP не проходит (Решено)

Доброго дня. Помогите плиз, уже устал от этих танцев с бубном. Вроде всё как надо, а тестирование не проходит.

Разберись с кодом пакета user (пользователь).
13.1. Извлечение метода. Добавь метод printInfo(), который будет выводить имя и фамилию
в консоль в формате
Имя: Вася
Фамилия: Пупкин
Замени повторяющийся код метода printUsers() его вызовом.
13.2. Встраивание метода. Избавься от метода ageLessThan16().
13.3. Перемещение метода. Перемести методы printInfo() и printAdditionalInfo() в класс User.
13.4. Расщепление переменной. Переменная age в методе calculateAverageAge() используется для разных промежуточных значений. Перепиши метод без использования этой переменной.
13.5. Удаление присваиваний параметрам. Перепиши метод calculateRate(), чтобы он не
пытался менять входные параметры, а просто возвращал рассчитанное значение.

package com.javarush.task.task29.task2909.user;

import java.util.concurrent.atomic.AtomicInteger;

public class UserHelper {
    private User userAnya = new User("Аня", "Смирнова", 10);
    private User userRoma = new User("Рома", "Виноградов", 30);

    private boolean isManAnya = false;
    private boolean isManRoma = true;

    public void printUsers() {
        userAnya.printInfo();
        userAnya.printAdditionalInfo();
        userRoma.printInfo();
        userRoma.printAdditionalInfo();
    }

    public int calculateAverageAge() {
        User userUra = new User("Юра", "Карп", 28);

        return (userAnya.getAge() + userRoma.getAge() + userUra.getAge()) / 3;
    }

    public int calculateRate(AtomicInteger base, int age, boolean hasWork, boolean hasHouse) {
        AtomicInteger calc = new AtomicInteger();

        calc.set(base.get() + age / 100);
        calc.set((int) (calc.get() * (hasWork ? 1.1 : 0.9)));
        calc.set((int) (calc.get() * (hasHouse ? 1.1 : 0.9)));

        return calc.get();
    }

    public String getBossName(User user) {
        Work work = user.getWork();
        return work.getBoss();
    }
}


package com.javarush.task.task29.task2909.user;

public class User {
    private String name;
    private String surname;
    private int age;

    private String country;
    private String city;
    private House house;

    private Work work;

    public User(String name, String surname, int age) {
        this.name = name;
        this.surname = surname;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSurname() {
        return surname;
    }

    public void setSurname(String surname) {
        this.surname = surname;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getCountry() {
        return country;
    }

    public void setCountry(String country) {
        this.country = country;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getAddress() {
        return country + " " + city + " " + house.house;
    }

    public Work getWork() {
        return work;
    }

    public void setWork(Work work) {
        this.work = work;
    }

    public void printInfo() {
        System.out.println("Имя: " + getName());
        System.out.println("Фамилия: " + getSurname());
    }

    public void printAdditionalInfo() {
        if (getAge() < 16)
            System.out.println("Пользователь моложе 16 лет");
        else
            System.out.println("Пользователь старше 16 лет");
    }
}


На выходе:



Подкиньте кто-нибудь идею. А то шаманство какое-то.
  • ,

task21.task2113 Ипподром(11)

Валидатор не принимает нивкакую… :(

package com.javarush.task.task21.task2113;

import java.util.ArrayList;
import java.util.List;

public class Hippodrome {
    private List<Horse> horses;
    static Hippodrome game;

    public static void main(String[] args) {
        game = new Hippodrome(new ArrayList<Horse>());
        Horse flame = new Horse("Flame", 3, 0);
        Horse water = new Horse("Water", 3, 0);
        Horse earth = new Horse("Earth", 3, 0);
        game.horses.add(flame);
        game.horses.add(water);
        game.horses.add(earth);
        game.run();

    }

    public Hippodrome(List<Horse> horses) {
        this.horses = horses;
    }

    public List<Horse> getHorses() {
        return horses;
    }

    public void run() {
        for(int i = 0; i < 100; i++) {
            move();
            try {
                Thread.sleep(200);
            }
            catch(InterruptedException e) {
                e.printStackTrace();
            }
            print();
        }
    }

    public void move() {
        for(int i = 0; i < horses.size(); i++) {
            horses.get(i).move();
        }
    }

    public void print() {
        for(int i = 0; i < horses.size(); i++) {
            horses.get(i).print();
        }
        for(int i = 0; i < 10; i++) {
            System.out.println();
        }
    }
}
  • ,

level14.lesson08.home06 - не проходит проверку

Сама программа работает, но проверку не проходит.
Вот условие:

MovieFactory

Расширение функционала по аналогии, чтение с консоли:

1. Разобраться, что программа умеет делать.

2. Все классы должны быть внутри класса Solution.

3. Добавить классы Cartoon, Thriller.

4. Разобраться, как мы получаем объект класса SoapOpera по ключу «soapOpera«.

Аналогично получению объекта SoapOpera сделать:

5. Добавить в MovieFactory.getMovie получение объекта Cartoon для ключа «cartoon«.

6. Добавить в MovieFactory.getMovie получение объекта Thriller для ключа «thriller«.

7. Считать с консоли несколько ключей (строк).

7.1. Ввод заканчивается, как только вводится строка не совпадающая с одной из: «cartoon«, «thriller«, «soapOpera«.

8. Создать переменную movie класса Movie и для каждой введенной строки(ключа):

8.1. Получить объект используя MovieFactory.getMovie и присвоить его переменной movie.

8.2. Вывести на экран movie.getClass().getSimpleName().

Вот мой код:

package com.javarush.task.task14.task1414;

/* 
MovieFactory
*/

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Solution {
    public static void main(String[] args) throws Exception {
        //ввести с консоли несколько ключей (строк), пункт 7

        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        String key;
        Movie movie;
        while (true) {
            key = reader.readLine();
            if ("cartoon".equals(key) || "thriller".equals(key) || "soapOpera".equals(key)) {
            //if(!key.equals("cartoon") && !key.equals("thriller") && !key.equals("soapOpera") )
            //{break;}
                movie = MovieFactory.getMovie(key);
                System.out.println(movie.getClass().getSimpleName());

            } else break;
        }

        /*
8 Создать переменную movie класса Movie и для каждой введенной строки(ключа):
8.1 получить объект используя MovieFactory.getMovie и присвоить его переменной movie
8.2 вывести на экран movie.getClass().getSimpleName()
        */

    }

    static class MovieFactory {

        static Movie getMovie(String key) {
            Movie movie = null;

            //создание объекта SoapOpera (мыльная опера) для ключа "soapOpera"
            if ("soapOpera".equals(key)) {
                movie = new SoapOpera();
            }

            //напишите тут ваш код, пункты 5,6
            if ("cartoon".equals(key)) {
                movie = new Cartoon();
            }

            if ("thriller".equals(key)) {
                movie = new Thriller();
            }

            return movie;
        }
    }

    static abstract class Movie {
    }

    static class SoapOpera extends Movie {
    }

    //Напишите тут ваши классы, пункт 3
    static class Cartoon extends Movie {
    }

    static class Thriller extends Movie {
    }

}


В валидации написано, что ошибка в следующем: «Для каждой введенной строки необходимо вызвать метод MovieFactory.getMovie».
Остальное всё ОК, а именно следующее:
  • Классы Cartoon и Thriller должны быть статическими и существовать внутри класса Solution.
  • Метод MovieFactory.getMovie должен возвращать объект типа Cartoon в случае передачи ему строки «cartoon» в качестве параметра.
  • Метод MovieFactory.getMovie должен возвращать объект типа Thriller в случае передачи ему строки «thriller» в качестве параметра
  • Метод main должен считывать строки с клавиатуры.
  • Метод main должен прекращать считывать строки с клавиатуры в случае, если была введена некорректная строка(не «cartoon», не «thriller» или не «soapOpera»).
  • Для всех введенных корректных строк необходимо вывести на экран простые имена(movie.getClass().getSimpleName()) типов объектов возвращаемых методом MovieFactory.getMovie.

level19.lesson10.home03 Задваивается результат

Всем привет, помогите, почему в консоли задваивается результат 1-го человека из списка?
Задание
/* Хуан Хуанович
В метод main первым параметром приходит имя файла.
В этом файле каждая строка имеет следующий вид:
имя день месяц год
где [имя] - может состоять из нескольких слов, разделенных пробелами, и имеет тип String
[день] - int, [месяц] - int, [год] - int
данные разделены пробелами

Заполнить список PEOPLE импользуя данные из файла
Закрыть потоки. Не использовать try-with-resources

Пример входного файла:
Иванов Иван Иванович 31 12 1987
Вася 15 5 2013
*/

Код:
package com.javarush.test.level19.lesson10.home03;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class Solution {
    public static final List<Person> PEOPLE = new ArrayList<Person>();

    public static void main(String[] args) throws IOException, ParseException {
        BufferedReader reader = new BufferedReader(new FileReader(args[0]));
        while (reader.ready()) {
            StringBuilder name = new StringBuilder();
            StringBuilder date = new StringBuilder();
            String[] data = reader.readLine().split(" ");
            for (String d : data) {
                try {
                    date.append(Integer.parseInt(d));
                    if (d.length() == 1) {
                        d = "0" + d;
                    }
                    date.append(" ");
                } catch (NumberFormatException e) {
                    name.append(d);
                    name.append(" ");
                }
            }
            String nameString = name.toString().trim();
            Date birthday = new SimpleDateFormat("dd MM yyyy").parse(date.toString().trim());
            PEOPLE.add(new Person(nameString, birthday));
            for (Person p : PEOPLE) {
                System.out.println(p.getName() + " " + p.getBirthday());
            }
        }
        reader.close();
    }
}


Файл peoples.txt
Иванов Иван Иванович 31 12 1987
Вася 15 5 2013


Вывод программы в консоль:
Иванов Иван Иванович Thu Dec 31 00:00:00 MSK 1987
Иванов Иван Иванович Thu Dec 31 00:00:00 MSK 1987
Вася Wed May 15 00:00:00 MSK 2013

Process finished with exit code 0
  • ,

task30.task3008 Задание 19

1. Переопредели метод clientMainLoop():

а) С помощью метода sendTextMessage() отправь сообщение с текстом «Привет чатику. Я бот. Понимаю команды: дата, день, месяц, год, время, час, минуты, секунды.»

б) Вызови реализацию clientMainLoop() родительского класса.

2. Переопредели метод processIncomingMessage(String message). Он должен следующим образом обрабатывать входящие сообщения:

а) Вывести в консоль текст полученного сообщения message.

б) Получить из message имя отправителя и текст сообщения. Они разделены «: «.

в) Отправить ответ в зависимости от текста принятого сообщения.

Если текст сообщения:

«дата» – отправить сообщение содержащее текущую дату в формате «d.MM.YYYY«;

«день» – в формате «d«;

«месяц» — «MMMM«;

«год» — «YYYY«;

«время» — «H:mm:ss«;

«час» — «H«;

«минуты» — «m«;

«секунды» — «s«.

Указанный выше формат используй для создания объекта SimpleDateFormat. Для получения текущей даты необходимо использовать класс Calendar и метод getTime().

Ответ должен содержать имя клиента, который прислал запрос и ожидает ответ, например, если Боб отправил запрос «время«, мы должны отправить ответ «Информация для Боб: 12:30:47«.

Наш бот готов. Запусти сервер, запусти бота, обычного клиента и убедись, что все работает правильно.

Помни, что message бывают разных типов и не всегда содержат «:«

package com.javarush.task.task30.task3008.client;

import com.javarush.task.task30.task3008.ConsoleHelper;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;

public class BotClient extends Client {
    public class BotSocketThread extends Client.SocketThread{
        @Override
        protected void clientMainLoop() throws IOException, ClassNotFoundException {
            BotClient.this.sendTextMessage("Привет чатику. Я бот. Понимаю команды: дата, день, месяц, год, время, час, минуты, секунды.");
            super.clientMainLoop();
        }

        @Override
        protected void processIncomingMessage(String message) {
            ConsoleHelper.writeMessage(message);
            String[] text = message.split(": ");
            SimpleDateFormat simpleDateFormat = null;
            switch (text[1]) {
                case "дата":
                    simpleDateFormat = new SimpleDateFormat("d.MM.YYYY");
                    break;
                case "день":
                    simpleDateFormat = new SimpleDateFormat("d");
                    break;
                case "месяц":
                    simpleDateFormat = new SimpleDateFormat("MMMM");
                    break;
                case "год":
                    simpleDateFormat = new SimpleDateFormat("YYYY");
                    break;
                case "время":
                    simpleDateFormat = new SimpleDateFormat("H:mm:ss");
                    break;
                case "час":
                    simpleDateFormat = new SimpleDateFormat("H");
                    break;
                case "минуты":
                    simpleDateFormat = new SimpleDateFormat("m");
                    break;
                case "секунды":
                    simpleDateFormat = new SimpleDateFormat("s");
                    break;
            }
            if(simpleDateFormat != null)
                sendTextMessage(String.format("Информация для %s: %s", text[0], simpleDateFormat.format(Calendar.getInstance().getTime())));
        }
    }

    @Override
    protected String getUserName() {
        return String.format("date_bot_%d", (int)(Math.random() * 100));
    }

    @Override
    protected boolean shouldSendTextFromConsole() {
        return false;
    }

    @Override
    protected SocketThread getSocketThread() {
        return new BotSocketThread();
    }

    public static void main(String[] args) {
        new BotClient().run();
    }
}
  • ,

level13.lesson11.home03 - не проходит проверку

Программа работает, но не проходит проверку. Условие задачи:
  1. Считать с консоли имя файла.
  2. Вывести в консоль(на экран) содержимое файла.
  3. Не забыть освободить ресурсы. Закрыть поток чтения с файла и поток ввода с клавиатуры.

Вот мой код:

package com.javarush.task.task13.task1318;

import java.io.*;

/*
Чтение файла
*/

public class Solution {
    public static void main(String[] args) throws IOException {
        // напишите тут ваш код
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        String fileName = reader.readLine();

        InputStream fis = new FileInputStream(fileName);

        while (fis.available() > 0) {
            System.out.print((char)fis.read());
        }
        fis.close();
        reader.close();

    }
}
  • ,

package com.javarush.task.task20.task2025 Не проходит валидацию

Условие:

Алгоритмы-числа
Число S состоит из M цифр, например, S=370 и M (количество цифр) = 3
Реализовать логику метода getNumbers, который должен среди натуральных чисел меньше N (long)
находить все числа, удовлетворяющие следующему критерию:
число S равно сумме его цифр, возведенных в M степень
getNumbers должен возвращать все такие числа в порядке возрастания.

Пример искомого числа:
370 = 3*3*3 + 7*7*7 + 0*0*0
8208 = 8*8*8*8 + 2*2*2*2 + 0*0*0*0 + 8*8*8*8

На выполнение дается 10 секунд и 50 МБ памяти.


Может какойто хитрый подход есть или я не так что-то сделал, или просто валидатор не принимает из-за полнолуния, может кто-то ткнёт меня на ошибку? :(

package com.javarush.task.task20.task2025;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/*
Алгоритмы-числа
*/


public class Solution {
    public static void main(String[] args) {
        long a = System.currentTimeMillis();
        long[] y = getNumbers(Integer.MAX_VALUE);
        long b = System.currentTimeMillis();
        System.out.println("Time: " + (b - a) / 1000 + " seconds " + ((b - a) % 1000) + " ms");
        System.out.println("Memory: " + (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) / 1024 / 1024 + " mb");
        System.out.println(y.length);
        for(long i : y) {
            System.out.print(i + ", ");
        }
    }

    public static long[] getNumbers(long N) {
        // Init power array
        final int NUMBERS = 9;
        final int SQRT = 10;
        int[][] power = new int[NUMBERS + 1][SQRT + 1];
        for(int i = 0; i <= NUMBERS; i++) {
            int temp = i;
            power[i][1] = temp;
            for(int j = 2; j <= SQRT; j++) {
                temp *= i;
                power[i][j] = temp;
            }
        }
        List<Integer> armstrong = new ArrayList<>();
        for(int i = 0; i < N; i++) {
            if(i < 0) break;
            // All 1-digit numbers are armstrong's numbers
            if(i > 9) {
                int n = i;
                int last;
                int prev;
                int degree = 1;
                boolean shouldVerify = true;

                // Verifying that every digit is less or equals next one
                // And calculate digits number
                while(n > 9) {
                    degree++;
                    last = n % 10;
                    n /= 10;
                    prev = n % 10;

                    if(last == 0) {
                        last = 10;
                    }

                    if(prev == 0) {
                        prev = 10;
                    }

                    if(last < prev) {
                        shouldVerify = false;
                        break;
                    }
                }

                if(!shouldVerify)
                    continue;

                // Calculate sum of powered digits
                int m = i;
                int sum = 0;
                while(m > 0) {
                    sum += power[m % 10][degree];
                    m /= 10;
                }

                if(sum == i && !armstrong.contains(sum)) {
                    armstrong.add(i);
                }
                else {
                    // Verify if calculated sum is armstrong number
                    int checksum = 0;
                    int checkdegree = 0;
                    int k = sum;
                    while(k > 0) {
                        checkdegree++;
                        k /= 10;
                    }

                    int l = sum;
                    while(l > 0) {
                        checksum += power[l % 10][checkdegree];
                        l /= 10;
                    }

                    if(sum == checksum && !armstrong.contains(sum)) {
                        armstrong.add(sum);
                    }
                }
            }
            else {
                armstrong.add(i);
            }
        }

        // Convert List with armstrong numbers to array
        long[] result = new long[armstrong.size()];
        for(int i = 0; i < armstrong.size(); i++) {
            result[i] = armstrong.get(i);
        }
        Arrays.sort(result);
        return result;
    }
}

  • ,

com.javarush.task.task19.task1918

Условие:

Знакомство с тегами
Считайте с консоли имя файла, который имеет HTML-формат.

Пример:
Info about Leela <span xml:lang=»en» lang=»en»><b><span>Turanga Leela
</span></b></span><span>Super</span><span>girl</span>


Первым параметром в метод main приходит тег. Например, «span«.
Вывести на консоль все теги, которые соответствуют заданному тегу.
Каждый тег на новой строке, порядок должен соответствовать порядку следования в файле.
Количество пробелов, n, r не влияют на результат.
Файл не содержит тег CDATA, для всех открывающих тегов имеется отдельный закрывающий тег, одиночных тегов нет.

Тег может содержать вложенные теги.

Пример вывода:
<span xml:lang="en" lang="en"><b><span>Turanga Leela</span></b></span>
<span>Turanga Leela</span>
<span>Super</span>
<span>girl</span>


Шаблон тега:
<tag>text1</tag>
<tag text2>text1</tag>
<tag
text2>text1</tag>
text1, text2 могут быть пустыми


Кто может подсказать в чём моя ошибка из-за которой не принимает валидатор, проверял на разных исходниках, программа работает как задумано.

package com.javarush.task.task19.task1918;

/*
Знакомство с тегами
*/

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.InputStreamReader;
import java.util.Map;
import java.util.TreeMap;

public class Solution {
    public static void main(String[] args) throws Exception {
        String openTag = "<" + args[0].toLowerCase();
        String closeTag = "</" + args[0].toLowerCase() + ">";
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        String file = bufferedReader.readLine();
        bufferedReader.close();
        BufferedReader bufferedContentReader = new BufferedReader(new FileReader(file));
        StringBuilder stringContentBuilder = new StringBuilder();
        while(bufferedContentReader.ready()) {
            stringContentBuilder.append(bufferedContentReader.readLine());
            stringContentBuilder.append(System.getProperty("line.separator"));
        }
        bufferedContentReader.close();
        String content = stringContentBuilder.toString().toLowerCase();
        Map<Integer, String> map = new TreeMap<>();
        for(int i = 0; i < content.length(); i++) {
            if(content.charAt(i) == '<' && (content.substring(i, i + openTag.length() + 1).equals(openTag + " ") || content.substring(i, i + openTag.length() + 1).equals(openTag + ">"))) {
                map.put(i, openTag);
            }
            else if(content.charAt(i) == '<' && content.substring(i, i + closeTag.length()).equals(closeTag)) {
                map.put(i + closeTag.length(), closeTag);
            }
        }
        int count = 0;
        boolean tag = false;
        int indexStart = 0;
        for(Map.Entry<Integer, String> pair : map.entrySet()) {
            if(pair.getValue().equals(openTag) && !tag) {
                indexStart = pair.getKey();
                tag = true;
            }
            else if(tag && pair.getValue().equals(openTag)) {
                count++;
            }
            else if(pair.getValue().equals(closeTag) && count != 0) {
                count--;
            }
            else if(pair.getValue().equals(closeTag) && count == 0) {
                tag = false;
                System.out.println(content.substring(indexStart, pair.getKey()));
            }
        }
    }
}

Баг валидатора задачи com.javarush.task.task33.task3303

Имеется следующая задача:
Десериализация JSON объекта
НЕОБХОДИМО: подключенные библиотеки Jackson Core, Bind и Annotation версии 2.6.1

В метод convertFromJsonToNormal первым параметром приходит имя файла, который содержит один ДЖЕЙСОН объект.
Вторым параметром приходит имя класса, объект которого находится в файле.
Метод convertFromJsonToNormal должен вычитать объект из файла, преобразовать его из JSON и вернуть.

Вариант решения 1:
public static <T> T convertFromJsonToNormal(String fileName, Class<T> clazz) throws IOException {
        return new ObjectMapper().readValue(new FileReader(fileName), clazz);
    }

Результат:
Задача не прошла тестирование!
— Объект возвращаемый методом convertFromJsonToNormal должен быть получен с помощью метода readValue класса ObjectMapper.

Вариант решения 2:
public static <T> T convertFromJsonToNormal(String fileName, Class<T> clazz) throws IOException {
        FileReader reader = new FileReader(fileName);
        ObjectMapper mapper = new ObjectMapper();

        return mapper.readValue(reader, clazz);
    }

Результат:
Задача не прошла тестирование!
— В методе convertFromJsonToNormal должен быть создан объект типа ObjectMapper с помощью конструктора без параметров.
— Объект возвращаемый методом convertFromJsonToNormal должен быть получен с помощью метода readValue класса ObjectMapper.

PS. Используемая версия Jackson — 2.8.5

task.task09.task0924 не понял условие задачи и не проходит проверку

Собственно, заголовок

package com.javarush.task.task09.task0924;

import java.util.ArrayList;

/* 
Страшная сказка
*/

public class Solution {

public static LittleRedRidingHood hood = new LittleRedRidingHood();
public static Grandmother grandmother = new Grandmother();
public static Patty patty = new Patty();
public static Woodman woodman = new Woodman();
public static Wolf wolf = new Wolf();

public static void main(String[] args) {
    Wolf.ate.add(grandmother);
    Wolf.ate.add(hood);
    Woodman.killed.add(wolf);
    
}

//красная шапочка
public static class LittleRedRidingHood extends StoryItem {
}

//бабушка
public static class Grandmother extends StoryItem {
}

//пирожек
public static class Patty extends StoryItem {
}

//дровосек
public static class Woodman extends StoryItem {
}

//волк
public static class Wolf extends StoryItem {
}

public static abstract class StoryItem {
    public static ArrayList<StoryItem> killed = new ArrayList<StoryItem>();
    public static ArrayList<StoryItem> ate = new ArrayList<StoryItem>();
}
}

В чем суть задания? Если суть задания в добавлении объектов в листы killed и ate в соответствии с сюжетом сказки, то почему задание не проходит проверку ни по одному из пунктов?
x: Метод main должен изменить состояние (внутренние переменные) объекта волк wolf и woodman, пирожки никто не ел, волк чуток поел, а потом волка убили.