Валидатор отказывается принимать задачи.

Уже который день сталкиваюсь с тем, что валидатор не принимает полностью рабочие задачи! На моем счету их уже накопилось целых три (думаю, скоро их будет гораздо больше) и над одной из них (com.javarush.task.task20.task2025) я просидел два дня, потом просто плюнул.
У меня вопрос. Как можно было так запороть проект просто поняв дизайн и изменив порядок задач?
Ведь на старой версии сайта все эти задачи без проблем принимались.
Я прекрасно знаю, что теперь открыт доступ к первой версии явараш, но нафига мне все эти танцы с бубном, чтобы откатиться? Выпустили сырой продукт, так ладно был бы это бесплатный сервис, но нет, люди платят деньги и ожидают получить качественный результат, и сейчас все просто тратят время на тестирование и поиск багов. Замечательно!
В общем вот список задач, которые не поддаются решению:
com.javarush.task.task20.task2025;
com.javarush.task.task30.task3002;
com.javarush.task.task30.task3008.big08.

+com.javarush.task.task30.task3010

Думаю, другие смогут накидать сюда гораздо больше таких задач, я тоже буду добавлять по мере нахождения.
Надеюсь, разработчики проекта очень оперативно решат проблемы со своим обновленным валидатором и не надо будет убивать пол дня на поиск несуществующих ошибок и гадании на кофейной гуще.

P.S. Новый дизайн проекта и плагина меня порадовал.
  • ,

task18.task1827 не проходит проверку_РЕШЕНО

Всем доброго дня. Задача task18.task1827. Условие:
Прайсы
CrUD для таблицы внутри файла.
Считать с консоли имя файла для операций CrUD.

Программа запускается со следующим набором параметров:
-c productName price quantity

Значения параметров:
где id — 8 символов.
productName — название товара, 30 chars (60 bytes).
price — цена, 8 символов.
quantity — количество, 4 символа.
-c — добавляет товар с заданными параметрами в конец файла, генерирует id самостоятельно, инкрементируя максимальный id, найденный в файле.

В файле данные хранятся в следующей последовательности (без разделяющих пробелов):
id productName price quantity

Данные дополнены пробелами до их длины.

Пример:
19846 Шорты пляжные синие 159.00 12
198478 Шорты пляжные черные с рисунко173.00 17
19847983Куртка для сноубордистов, разм10173.991234


Валидатор при проверке выдаёт не засчитывает один пункт:
CrUD_test

Перепробовал что смог, может кто сможет помочь. Чего хочет валидатор и почему формат новой чтроки прайса его не устраивает. Заранее спасибо. Код программы ниже.

package com.javarush.task.task18.task1827;

/* 
Прайсы
*/

import java.io.*;
import java.util.*;

public class Solution {
    static String fileName;
    final static byte idLength = 8,
            productNameLength = 38,
            priceLength = 46,
            quantityLength = 50;
    static List<String[]> prices = new ArrayList<>();
    {

    }

    public static void main(String[] args) throws Exception {
        readPrices();
        switch (args[0]) {
            case ("-c"):
                createPrice(args);
                break;
        }
    }

    static void enterFileName() throws IOException{
        BufferedReader bRead = new BufferedReader(new InputStreamReader(System.in));
        fileName = bRead.readLine();
        bRead.close();
    }

    public static void createPrice(String[] args) throws IOException{//добавляет в список прайсов новый прайс и запис. в файл
        prices.add(getNewPriceArr(args));
        BufferedWriter bWriter = null;

        try {
            bWriter = new BufferedWriter(new FileWriter(fileName));

            for (int i = 0, end = prices.size() - 1;i < end;i++){
                bWriter.write(getPriceLine(prices.get(i)));
                bWriter.newLine();
            }

            bWriter.write(getPriceLine(prices.get(prices.size() - 1)));

        } catch (IOException e) {
            throw new IOException("Exception when file write", e);
        } finally {
            if (bWriter != null) {
                try {
                    bWriter.close();
                }
                catch (IOException ignore) {
                    /*NOP*/
                }
            }
        }
    }

    public static void readPrices() throws IOException{//загружает в карту содержимое файла
        enterFileName();
        BufferedReader bRead = null;
        String nextLine;

        try
        {
            bRead = new BufferedReader(new FileReader(fileName));
            while (bRead.ready())
            {
                nextLine = bRead.readLine();
                prices.add(new String[] {getID(nextLine), getProductName(nextLine), getPrice(nextLine), getQuantity(nextLine)});
            }
        } catch (FileNotFoundException e) {
            System.out.println("Exception when file found");
        } catch (IOException e) {
            throw new IOException("Exception when file read", e);
        } finally {
            if (bRead != null){
                try
                {
                    bRead.close();
                } catch (IOException ignore) {
                    /*NOP*/
                }
            }
        }
    }

    static String getID(String priceLine){//возвращает численное значение ID
        return priceLine.substring(0, idLength);
    }

    static String getProductName(String priceLine){//возвращает строку-название товара
        return priceLine.substring(idLength, productNameLength);
    }

    static String getPrice(String priceLine){//возвращает строку-цену товара
        return priceLine.substring(productNameLength, priceLength);
    }

    static String getQuantity(String priceLine){//возвращает строку-количество товара
        return priceLine.substring(priceLength);
    }

    static int getMaxID(){
        if (prices.size() == 0) {
            return 0;
        }
        Object[] idS = new Object[prices.size()];

        for (int i = 0, end = prices.size();i < end;i++){
            idS[i] = getIntID(prices.get(i)[0]);
        }

        Arrays.sort(idS);
        return (int)idS[idS.length - 1];
    }

    static String getNextID(){
        int nextID = getMaxID() + 1;
        String nextIDStr = Integer.toString(nextID);

        if (nextIDStr.length() < idLength) {
            for (int i = 0, end = idLength - nextIDStr.length();i < end;i++) {
                nextIDStr = nextIDStr + " ";
            }

            return nextIDStr;
        } else if (nextIDStr.length() > idLength) {
            return nextIDStr.substring(0, 8);
        }

        return nextIDStr;
    }

    static int getIntID(String stringID){
        return Integer.parseInt(stringID.split(" ")[0]);
    }

    static String[] getNewPriceArr(String[] args){//возвр массив [4] с занесенными параметрами
        return new String[]{getNextID(), getNewPriceProdName(args[1]), getNewPricePrice(args[2]), getNewPriceQuantity(args[3])};
    }

    static String getNewPriceProdName(String prodName){//возвращает адаптированное значение названия
        int prodNameSize = productNameLength - idLength;
        String newProdName = prodName;

        if (prodName.length() > prodNameSize) {
            newProdName = newProdName.substring(0, prodNameSize);
        } else if (prodName.length() < prodNameSize) {
            for (int i = 0, end = prodNameSize - prodName.length();i < end;i++) {
                newProdName = newProdName + " ";
            }
        }

        return newProdName;
    }

    static String getNewPricePrice(String price){//возвращает адаптированное значение цены
        int priceSize = priceLength - productNameLength;
        String newPrice = price;

        if (price.length() > priceSize) {
            newPrice = newPrice.substring(0, priceSize);
        } else if (price.length() < priceSize) {
            for (int i = 0, end = priceSize - price.length();i < end;i++) {
                newPrice = newPrice + " ";
            }
        }

        return newPrice;
    }

    static String getNewPriceQuantity(String quant){//возвращает адаптированное значение количества
        int quantSize = quantityLength - priceLength;
        String newQuant = quant;

        if (quant.length() > quantSize) {
            newQuant = newQuant.substring(0, quantSize);
        } else if (quant.length() < quantSize) {
            for (int i = 0, end = quantSize - quant.length();i < end;i++) {
                newQuant = newQuant + " ";
            }
        }

        return newQuant;
    }

    static String getPriceLine(String[] price){
        return price[0] + price[1] + price[2] + price[3];
    }
}
  • ,

level18.lesson05.task03

Народ, подскажите, пожалуйста, что тут может быть не так. В файлы все пишется как надо, отрабатывает и для четных байт, и для нечетных, для пустого первого файла тоже все работает. Все потоки закрыты. Что тут не так?

package com.javarush.test.level18.lesson05.task03;

/* Разделение файла
Считать с консоли три имени файла: файл1, файл2, файл3.
Разделить файл1 по следующему критерию:
Первую половину байт записать в файл2, вторую половину байт записать в файл3.
Если в файл1 количество байт нечетное, то файл2 должен содержать бОльшую часть.
Закрыть потоки. Не использовать try-with-resources
*/

import java.io.*;

public class Solution {
    public static void main(String[] args) throws IOException {

//        чтение файлов с консоли
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        InputStream inputStream = new FileInputStream(reader.readLine());
        FileOutputStream outputStream1 = new FileOutputStream(reader.readLine());
        FileOutputStream outputStream2 = new FileOutputStream(reader.readLine());

//        определяем, сколько всего символов, заносим их в массив buffer
        int count = inputStream.available();
        int countFirstOutput, countSecondOutput;
        byte[] buffer = new byte[inputStream.available()];
        inputStream.read(buffer);

        if (count > 0) {
            if (count % 2 == 0) {
                countFirstOutput = count / 2;
                countSecondOutput = (countFirstOutput / 2) + 1;
            } else {
                countFirstOutput = count / 2;
                countSecondOutput = (countFirstOutput / 2) + 2;
            }
        } else {

//            выполняется в том случае, если первый файл пустой
            countFirstOutput = 0;
            countSecondOutput = 0;
        }

//        пишем в потоки
        outputStream1.write(buffer, 0, countFirstOutput);
        outputStream2.write(buffer, countFirstOutput, countSecondOutput);

//        закрытие потоков
        reader.close();
        inputStream.close();
        outputStream1.close();
        outputStream2.close();

    }
}
  • ,

не проходит тестирование

Работает как надо,
но я уже забодался гадать, что этой проверке нужно:
может кто подскажет?
package com.javarush.test.level09.lesson11.home05;

import java.awt.*;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.LinkedList;

/* Гласные и согласные буквы
Написать программу, которая вводит с клавиатуры строку текста.
Программа должна вывести на экран две строки:
1. первая строка содержит только гласные буквы
2. вторая - только согласные буквы и знаки препинания из введённой строки.
Буквы соединять пробелом, каждая строка должна заканчиваться пробелом.

Пример ввода:
Мама мыла раму.
Пример вывода:
а а ы а а у
М м м л р м .
*/

public class Solution
{

    public static void main(String[] args) throws Exception
    {
        //напишите тут ваш код
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String string = reader.readLine();
        char[] arr = string.toCharArray();
        LinkedList<Character> list = new LinkedList<>();
        for (int i = 0; i < arr.length; i++)
        {
            list.add(arr[i]);
        }
        LinkedList<Character> lv = new LinkedList<>();
        for (int i = 0; i < list.size(); i++)
        {
            if (isVowel(list.get(i))){
                lv.add(list.get(i));
                list.remove(i);
                if (i!=0) i--;
            }
            if (list.get(i) == " ".charAt(0)) list.remove(i);
        }
        System.out.println(setStr(lv));
        System.out.print(setStr(list));
    }

    public static char[] vowels = new char[]{'а', 'я', 'у', 'ю', 'и', 'ы', 'э', 'е', 'о', 'ё'};

    //метод проверяет, гласная ли буква
    public static boolean isVowel(char c)
    {
        c = Character.toLowerCase©;  //приводим символ в нижний регистр - от заглавных к строчным буквам

        for (char d : vowels)   //ищем среди массива гласных
        {
            if (c == d)
                return true;
        }
        return false;
    }

    public static String setStr (LinkedList list)
    {
        String str="";
        for (int i = 0; i < list.size(); i++)
        {
            str += list.get(i)+" ";
        }
        return str;

    }
}
  • ,

Изменения в лекциях

Недавно в комментариях к какой-то теме один добрый человек выложил свои материалы, которые он писал, обучаясь тут. За что ему большое спасибо, но не помню, где это было, чтобы написать там.
Но дело не в этом. Произошла такая интересная история:
как и у многих, уровни начиная с 17 требуют много времени. Вот сижу, ковыряю. Доковыряла до задач 18ого уровня, прочитав лекции и половину доп.материалов. Смотрю задачу, понимаю, что решить ее можно несложно, но кажется велосипед. Думаю-думаю, ничего не придумывается кроме похожих на велосипед вещей. Думаю, а как ее решали до меня. Смотрю, все как один используют RandomAccessFile, о котором в лекциях ни слова. Только в доп.материалах. Мой велосипед на нем и основывался, но до некоторых вещей я своим умом не дошла. Думаю, надо получше почитать про это… где-то были тут материалы от доброго человека. Открываю, смотрю и понимаю, что раньше (похоже) это было в лекциях. А сейчас нет. А задача осталась.
Дело не в том, что непонятно как ее решать (хотя, конечно, некоторые непонятки могут возникать и иногда довольно сильно раздражают). Как-то грустно стало, что лекции урезали и я сейчас читаю эти урезанные лекции, а доп.информация впитывается не так хорошо, как лекции.

Если вдруг кто-то из администраторов сюда зайдет, было бы интересно узнать, почему так порезали лекции =(

Ошибка сервера при сдаче задач

Всем привет. Помогите плиз. Все было нормально как вдруг при сдаче задач появляется «Неизвестная ошибка при работе с сервером» — что может это значить? Как решить?

Задачи окружающего мира решаемые Java

Прим. автора поста: Перевод местами сделан не совсем гладко. В попытке сгладить шероховатости, были сделаны вольные дополнения, которые нисколько не портят смысл статьи. Оригинал статьи вот здесь
Целевая аудитория статьи — люди, которые колеблются пуститься в плавание в мире Java.


Редакция dzone.com побеседовала с 11 профессионалами в бизнесе, плотно работающих большую часть, если не больше, свой карьеры в экосистеме Java. Спросили их о задачах в реальном мире, которые решаются Java.
  • ,

Онлайн тесты на работу.

Добрый день. Вообщем решил создать такую тему. Многие конторы при устройстве на работу используют онлайн тестирование. При том условия на англ. языке и вот сегодня я писал такой тест — www.hackerrank.com/
Рекомендую всем попробовать. Тем более что JavaRush свои задачи в паблик не приветствует, а там можно рейтинг потом работодателю показать. Но да ладно, не об этом сейчас.
Вообщем у меня было 4 теста, на 90 минут. Решать все не обязательно и написано что лучше решить несколько но качественно. И я бы хотел их обсудить, т.к. не понял как их можно было решить лучше)))))
Задача 1. Написать такое — static int result(int[] arr){}
Дается массив, в котором найти разницу между самым большим элементом и самым маленьким, при том индекс самого маленького должен быть меньше индекса самого большого.
Я решал наверно как все подумали — первый for ищет самый большой элемент и индекс.
Потом второй for ищет самый маленький элемент в элементах до indexMax.
И просто вывожу разницу. И вот это решение не самое оптимальное, набрало всего 3 теста из 10.
Какие есть предложения решить ее лучше? сейчас вот думаю может можно было как то в один фор вложить, но как, если последовательность после max элемента не должна участвовать… или возможно что нибудь типа public static synchronized и т.д. тоже дают плюсы по тестам, не проверял кроме public

Задача 2. написать String[] result(String S, String T){}
Дается две строки. (На javarush похожая была с файлами) Строка T это строка S без некоторых слов. Вернуть массив слов которых не хватает в Т.
Решал так split(t)=" " — результат в set;
split(s)=" ", for и если !set.contains(s[i]) то добавляем в ArrayListresult;
потом return result.toArray(new String[0]);
5 теста из 10;
Сначала result был Set — было 3 теста из 10;
У кого еще какие замечания и предложения есть?

Задача 3. я не решал но если кому интересно — дан текст String[] и найти все домены в тексте и вывести на экран. Типа «ляляля www.xyz.ru лялл ялл ww2.abc.com/sfsflj&dsf?dsfslj/index.html ляляля» вывести «xyz.ru;abc.com»

4-ая С бинарными деревьями, не читал, жаль времени было
  • ,

javarush.test.level18.lesson05.task03 HELP!

/* Разделение файла
Считать с консоли три имени файла: файл1, файл2, файл3.
Разделить файл1 по следующему критерию:
Первую половину байт записать в файл2, вторую половину байт записать в файл3.
Если в файл1 количество байт нечетное, то файл2 должен содержать бОльшую часть.
Закрыть потоки. Не использовать try-with-resources
*/
Код функцию выполняет, тестирование не проходит, помогите люди добрые

import java.io.*;

public class Solution {
    static String nameOne;
    static String nameTwo;
    static String nameThree;
    static FileInputStream fileInputStream;
    static FileOutputStream fileOutputStreamOne;
    static FileOutputStream fileOutputStreamTwo;
    public static void main(String[] args) {
        BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(System.in));
        try
        {
            nameOne=bufferedReader.readLine();
            nameTwo=bufferedReader.readLine();
            nameThree=bufferedReader.readLine();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        try
        {
            fileInputStream=new FileInputStream (nameOne);
            fileOutputStreamOne=new FileOutputStream(nameTwo);
            fileOutputStreamTwo=new FileOutputStream(nameThree);
        }
        catch (FileNotFoundException e)
        {
            e.printStackTrace();
        }
        try
        {
            byte [] byffer=new byte[fileInputStream.available()];

            while (fileInputStream.available()>0)
            {
                int count = fileInputStream.read(byffer);


                fileOutputStreamOne.write(byffer, 0, count/2+count%2);

                fileOutputStreamTwo.write(byffer,  count/2+count%2, count-count/2-count%2);

            }

        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        try
        {
            fileInputStream.close();
            fileOutputStreamTwo.close();
            fileOutputStreamOne.close();
            bufferedReader.close();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }

    }
}

level18.lesson05.task03

У меня вопрос ведь в задании не сказано что для каждого файла должен быть свой поток. Я решил задачу используя один поток для записи в файл. Открыл поток для первого файла, записал в него часть данных, закрыл. Открыл для второго файла, записал оставшееся и закрыл. Задача не была принята на сервере до тех пор пока не сделал для каждого файла свой поток записи. Почему нельзя было использовать один поток, из-за этого могут быть какие-то проблемы?