• ,

level07.lesson09.task04 У кого быстрее алгоритм работает? Конкурс.

Интересно, полагаю, будет посмотреть на самые быстродействующие алгоритмы решения этой задачи. Естественно, что число записей в списке должно быть таким, чтобы время выполнения программы на компьютере можно было бы легко вычислить. Так создадим единый список из ста тысяч строк и сравним время выполнения…

N.B.!
1. Согласно пункту 2.2. предложенной задачи: «удваивать все слова содержащие букву «л».», для единообразия станем так:

На входе:
роза
лира
лоза
ложка
коза
кора
коралл
сорока
носорог
финал

На выходе:
лира
лоза
лоза
ложка
ложка
коза
коралл
финал
финал


2. Список один и тот же, и хотя он формируется путем десяти тысячекратного повторения из десяти строк, считаем его случайным.
3. Срок самостоятельной публикации конкурсных вариантов решения этой задачи истекает 5 февраля 2017 года в 12 часов дня (время московское).
4. Каждый участник форума может самостоятельно оценить быстродействие предложенных вариантов на своем компьютере и поставить «плюсик» тому, кого он считает победителем в этом конкурсе."


/*
ТЕКСТ КОНКУРСНОЙ ЗАДАЧИ СО ВСЕМИ КОРРЕКТИРОВКАМИ ИСХОДНОЙ ЗАДАЧИ level07.lesson09.task04:
*/


/*

2. Метод fix должен:
2.1. удалять из списка строк все слова, содержащие букву «р»
2.2. удваивать все слова содержащие букву «л».
2.3. если слово содержит и букву «р» и букву «л», то оставить это слово без изменений.
2.4. с другими словами ничего не делать.
Пример:
роза
лира
лоза
ложка
коза
кора
коралл
сорока
носорог
финал
...
Выходные данные:
лира
лоза
лоза
ложка
ложка
коза
коралл
финал
финал
...
*/



import java.util.ArrayList;

public class ManipulationsWithTheList {

    public static void main(String[] args) throws Exception
    {
        long startTime = System.currentTimeMillis();

        ArrayList<String> list = new ArrayList<String>();

        for (int i = 0; i < 10000 ; i++) {
            list.add("роза");
            list.add("лира");
            list.add("лоза");
            list.add("ложка");
            list.add("коза");
            list.add("кора");
            list.add("коралл");
            list.add("сорока");
            list.add("носорог");
            list.add("финал");
        }

        list = fix(list);

        for (String s : list)
        {
            System.out.println(s);
        }

        long timeSpent = System.currentTimeMillis() - startTime;

        System.out.println("Эта программа выполнялась " + timeSpent + " миллисекунд.");
    }

    public static ArrayList<String> fix(ArrayList<String> list)
    {
        //напишите тут ваш код

    }
}


Дополнение от 31.01.2017
Уважаемые коллеги!
Настоятельно прошу еще раз ознакомиться со всеми условиями конкурсной задачи. Особо отмечу следующее:
на входе упорядоченная коллекция строк;
на выходе также должна быть упорядоченная коллекция строк (вывод её в консоль используется исключительно для визуального подтверждения верности произведенных манипуляций с исходной псевдослучайной коллекцией);
— сколько времени выполнялся метод fix, просьба, вывести в консоль дополнительно.

Ссылки на все конечные полные тексты программ участвующих в конкурсе будут находиться в самом первом сообщении темы. Просьба к участникам опубликовать их в своих сообщениях с пометкой: «НА КОНКУРС», чтобы я смог бы их собрать вместе и опубликовать.

Конкурсанты:
Torin текст программы содержит отклонения от конкурсной задачи
JuriMik текст программы
Javin текст программы
Himeg текст программы
Тестирование

Проводилось на:
Intel Core i7-2600 CPU @ 3.4 GHz x 4, RAM 16 GB

Windows 7 professional x64
JRE 1.8.0_121
IDE Eclipse Java EE IDE for Web Developers. Version: Neon.1a Release (4.6.1)

Linux Mint 17 Cinnamon 64-bit (v. 2.2.16) 3.13.0-24-generic
JRE 1.8.0_25
IDE Eclipse Java EE IDE for Web Developers. Version: Neon.2 Release (4.6.2)

Средние арифметические значения времени выполнения метода fix (в миллисекундах) подсчитывались по десяти попыткам:

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));
        String fileName1, fileName2, fileName3;
        fileName1 = reader.readLine();
        fileName2 = reader.readLine();
        fileName3 = reader.readLine();
        reader.close();

        FileInputStream inputStreamReader = new FileInputStream(fileName1);
        int available = inputStreamReader.available();
        byte[] read = new byte[available];
        int count = inputStreamReader.read(read);
        inputStreamReader.close();

        FileOutputStream fileOutputStream = new FileOutputStream(fileName2);
        fileOutputStream.write(read, 0, (int)Math.ceil(count/2.0));
        fileOutputStream.close();

        fileOutputStream = new FileOutputStream(fileName3);
        fileOutputStream.write(read, (int)Math.ceil(count/2.0),  count/2);
        fileOutputStream.close();
    }
}

level10.lesson11.home09

package com.javarush.test.level10.lesson11.home09;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

/* Одинаковые слова в списке
Ввести с клавиатуры в список 20 слов. Нужно подсчитать количество одинаковых слов в списке.
Результат нужно представить в виде словаря Map<String, Integer>, где первый параметр – уникальная строка,
а второй – число, сколько раз данная строка встречалась в списке.
Вывести содержимое словаря на экран.
В тестах регистр (большая/маленькая буква) влияет на результат.
*/

public class Solution
{
public static void main(String[] args) throws Exception
{
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

ArrayListwords = new ArrayList();
for (int i = 0; i < 20; i++)
{
words.add(reader.readLine());
}

Map<String, Integer> map = countWords(words);

for (Map.Entry<String, Integer> pair: map.entrySet())
{
System.out.println(pair.getKey() + " " + pair.getValue());
}
}

public static Map<String, Integer> countWords(ArrayListlist)
{
HashMap<String, Integer> result = new HashMap<String, Integer>();

int count;//напишите тут ваш код
for (int i=0; i<list.size()-1; i++)
{
count=1;
if (!result.containsKey(list.get(i)))
{
for (int j=i+1; j<list.size(); j++)
{
if (list.get(i).equals(list.get(j))) count++;
}
if (count>1) result.put(list.get(i), count);
}
else continue;

}

return result;
}

}


Не понимаю, что только не пробовал. Вроде все работает. Тестирование не проходит
  • ,

level07.lesson09.task05

Задание:
/* Удвой слова
1. Введи с клавиатуры 10 слов в список строк.
2. Метод doubleValues должен удваивать слова по принципу a,b,c -> a,a,b,b,c,c.
3. Используя цикл for выведи результат на экран, каждое значение с новой строки.
*/

Мой код:

public class Solution
{
    public static void main(String[] args) throws Exception
    {
        Scanner sc = new Scanner(System.in);
        ArrayList<String> list = new ArrayList<>();
        for (int i = 0; i < 10; i++)
        {
            list.add(sc.nextLine());
        }//Считать строки с консоли и объявить ArrayList list тут

        ArrayList<String> result = doubleValues(list);

        for (String s : result)
        {
            System.out.println(s);
        }
        //Вывести на экран result
    }

    public static ArrayList<String> doubleValues(ArrayList<String> list)
    {
        ListIterator<String> iter = list.listIterator();
        while(iter.hasNext())
        {
            String s = iter.next();
            iter.add(s);
        }
        return list;
    }
}

Вопрос:
Почему не проходит тестирование?

com.javarush.test.level08.lesson08.task05

public class Solution
{
    public static HashMap<String, String> createMap()
    {
        HashMap<String,String> map = new HashMap<String, String>();
        map.put("Сергей","Ефремов");
        map.put("ольга","Терентьева");
        map.put("Татьяна","Ефремов");
        map.put("Оксана","Митрофанова");
        map.put("Вячеслав","Оливанов");
        map.put("Виталий","Оливанов");
        map.put("Андрей","Алексеев");
        map.put("Алексей","Иванов");
        map.put("Леха","Николаев");
        map.put("Владислав","Оливанов");
        return map;
    }

    public static void removeTheFirstNameDuplicates(HashMap<String, String> map)
    {
        HashMap<String,String> copy = new HashMap<String, String>(map);
        Iterator<Map.Entry<String,String>> itr = copy.entrySet().iterator();
        while(itr.hasNext()){
            Map.Entry<String,String> name = itr.next();

            if (copy.containsValue(name.getValue()))
                removeItemFromMapByValue(map,name.getValue());
        }
    }

    public static void removeItemFromMapByValue(HashMap<String, String> map, String value)
    {
        HashMap<String, String> copy = new HashMap<String, String>(map);
        for (Map.Entry<String, String> pair: copy.entrySet())
        {
            if (pair.getValue().equals(value))
                map.remove(pair.getKey());
        }
    }

    public static void main(String[] args)
    {
        HashMap<String, String> map = createMap();
        removeTheFirstNameDuplicates(map);
        for (Map.Entry<String, String> pair:map.entrySet()){
            String s = pair.getValue();
            System.out.println(s);
        }
    }
}


или я не вижу какой то банальной ошибки, или я просто не понял, как оно должно работать, но у меня выводит пустой map.

Помогите решить задачку )

Текст на украинском, но кто-то да и поймет )

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/*
Космічний Робот висадився на чужу планету. Спочатку Робот виконує
одну операцію — бере камінець и кладе його в контейнер для червоних камінців. Якщо все
правильно — продовжує набирати камінці, якщо ж взятий камінь виявився синім - Робот
виконує іншу операцію — перекладає камінець в контейнер для синіх камінців, або
відкидає далеко в сторону, якщо контейнер заповнений (він вже поклав 40 синіх камінців
туди раніше). Як тільки «червоний» контейнер заповнено — продовжуємо всі ті ж дії для
синіх камінців. Усього поряд з Роботом лежить А червоних та В синіх камінців.
Технічні умови. Програма Spacerobot читає з пристрою стандартного введення в одному
рядку два числа А, В (40 ≤ А, В ≤100). Програма виводить на пристрій стандартного
виведення максимальну кількість операцій, які вимушений буде виконати робот, аби
заповнити «синій» та «червоний» контейнери, кожен із яких розрахований на 40 камінців.
Приклад
Введення Виведення
40 40 120
100 40 239

*/


public  class Two
{
    public static void main(String[] args) throws IOException
    {
        BufferedReader rd = new BufferedReader(new InputStreamReader(System.in));
        int a = Integer.parseInt(rd.readLine()); // красні
        int b = Integer.parseInt(rd.readLine()); // сині
        int c = 0; // korobka
        int d = 0; // korobka
        int e = 0;
        int t = 0;
        int u = 0;
        int i = 0;
        int v;

        if (40 <= a && b <= 100) {
            while (true) {
                v = (int)(Math.random()*2);

                if (a != 0) {
                    if (v == 1 && c <= 40) {
                        c++;
                    }
                    else if (v == 1 && c > 40) {
                        e++;
                    }
                }
                else if (b != 0) {
                    if (v == 0 && d <= 40) {
                        d++;
                    }
                    else if (v == 0 && d > 40) {
                        t++;
                    }
                }
                else if (a == 0 && c != 40){
                    e--;
                    c++;
                }
                else if (b == 0 && d != 40){
                    t--;
                    d++;
                }
                else if (c == 40 && d == 40) break;
                i++;
                a--;
                b--;
            }
            System.out.println(i);
        }
    }


}

Проблема заключается в следующем:
Если ввести 2 числа которые подходят для входа в цикл — программа бесконечно просит ввести ей числа.
  • ,

level06.lesson11.bonus02

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

/* Нужно добавить в программу новую функциональность
Задача: У каждой кошки есть имя и кошка-мама. Создать класс, который бы описывал данную ситуацию. Создать два объекта: кошку-дочь и кошку-маму. Вывести их на экран.
Новая задача: У каждой кошки есть имя, кошка-папа и кошка-мама. Изменить класс Cat так, чтобы он мог описать данную ситуацию.
Создать 6 объектов: дедушку(папин папа), бабушку(мамина мама), папу, маму, сына, дочь.
Вывести их всех на экран в порядке: дедушка, бабушка, папа, мама, сын, дочь.

Пример ввода:
дедушка Вася
бабушка Мурка
папа Котофей
мама Василиса
сын Мурчик
дочь Пушинка

Пример вывода:
Cat name is дедушка Вася, no mother, no father
Cat name is бабушка Мурка, no mother, no father
Cat name is папа Котофей, no mother, father is дедушка Вася
Cat name is мама Василиса, mother is бабушка Мурка, no father
Cat name is сын Мурчик, mother is мама Василиса, father is папа Котофей
Cat name is дочь Пушинка, mother is мама Василиса, father is папа Котофей
*/

public class Solution
{
public static void main(String[] args) throws IOException
{
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

String DEDNAME = reader.readLine();
Cat DED = new Cat(DEDNAME);

String BABUSHKANAME = reader.readLine();
Cat BABUSHKA = new Cat(BABUSHKANAME);

String PAPANAME=reader.readLine();
Cat PAPA = new Cat(PAPANAME,null,DED);

String MAMANAME = reader.readLine();
Cat MAMA = new Cat(MAMANAME,BABUSHKA,null);

String SbIN = reader.readLine();
Cat Sin = new Cat(SbIN,MAMA,PAPA);

String DO4 = reader.readLine();
Cat Doch = new Cat(DO4,MAMA,PAPA);

DED.toString();
BABUSHKA.toString();
PAPA.toString();
MAMA.toString();
Sin.toString();
Doch.toString();

}

public static class Cat
{
private String name;
private Cat mother;
private Cat father;

Cat(String name)
{
this.name = name;
}

Cat(String name, Cat mother, Cat father)
{
this.name = name;
this.mother = mother;
this.father = father;
}

public String toString()
{
System.out.print(«Cat name is » +name+",");
if (mother == null)
System.out.print(" no mother, ");
else System.out.print(" mother is "+mother.name +",");
if (father == null)
System.out.println(" no father");
else System.out.println(" father is "+father.name);
return null;
}
}
}

ввод:
дедушка Вася
бабушка Мурка
папа Котофей
мама Василиса
сын Мурчик
дочь Пушинка
Вывод:
Cat name is дедушка Вася, no mother, no father
Cat name is бабушка Мурка, no mother, no father
Cat name is папа Котофей, no mother, father is дедушка Вася
Cat name is мама Василиса, mother is бабушка Мурка, no father
Cat name is сын Мурчик, mother is мама Василиса, father is папа Котофей
Cat name is дочь Пушинка, mother is мама Василиса, father is папа Котофей

накодено плохо и криво, но вроде все как просит, почему не принимает?

level05.lesson12.home05;

/* Вводить с клавиатуры числа и считать их сумму
Вводить с клавиатуры числа и считать их сумму, пока пользователь не введёт слово «сумма». Вывести на экран полученную сумму.
*/
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Solution
{
public static void main(String[] args) throws Exception
{
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int summ = 0;
for (; true; )
{
String text = bf.readLine();
if (text.equals(«сумма»))

System.out.println(summ);
else
{
int num = Integer.parseInt(text);
summ = summ + num;
}

}
}
}


в ИДЕА вроде проходит все мои проверки, но проверку сервера пройти не могу. Подскажите что упустил? Может break; куда то засунуть надо?
  • ,

level09.lesson11.home05 - не проходит проверку

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

Пример ввода:
Мама мыла раму.
Пример вывода:
а а ы а а у
М м м л р м .
 */
package javaapplication58;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
/**
 *
 * @author СВС
 */
public class JavaApplication58 {

    /**
     * @param args the command line arguments
     * @throws java.lang.Exception
     */
      public static void main(String[] args) throws Exception
    {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String a = reader.readLine();
        
        char[] chars = a.toCharArray();
        
        ArrayList<Character> list1 = new ArrayList<Character>();
        ArrayList<Character> list2 = new ArrayList<Character>();
        
        for(int i = 0; i < a.length(); i++)
        {
            if(chars[i] == (' '))
            {
                continue;
            }
            
            else if (isVowel(chars[i]) == true)
          {
              list1.add(chars[i]);
          }
            else 
          {
            list2.add(chars[i]); 
          
          }
          }
        
        
        for (int i = 0; i < list1.size(); i++)
{
  
  System.out.print( list1.get(i) + "_" );
        
}
        System.out.println();
       for (int i = 0; i < list2.size(); i++)
{
 
  System.out.print( list2.get(i) + "_" );
        
       
          }
       System.out.println();
}
    
        
    

        


    public static char[] vowels = new char[]{'a', 's', 'd',};

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

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

Задача: У каждой кошки есть имя и кошка-мама. Создать класс, который бы описывал данную ситуацию

Подскажите что не так? читал все топики ни че не понял чё переставить где? выводит все нормуль

public static void main(String[] args) throws IOException
    {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));


        String motherName = reader.readLine();
        Cat catMother = new Cat(motherName);

        String fazedName = reader.readLine();
        Cat catFazed = new Cat(fazedName);

        String gfName = reader.readLine();
        Cat catGf = new Cat(gfName, catMother, null );

        String gmName = reader.readLine();
        Cat catGm = new Cat(gmName,null, catFazed );

        String daughterName = reader.readLine();
        Cat catDaughter = new Cat(daughterName, catGm, catGf);

        String sonName = reader.readLine();
        Cat catSon = new Cat(sonName, catGm, catGf);

        System.out.println(catMother);
        System.out.println(catFazed);
        System.out.println(catGf);
        System.out.println(catGm);
        System.out.println(catDaughter);
        System.out.print(catSon);
    }

    public static class Cat
    {
        private String name;
        private Cat parentu;
        private Cat parent;


        Cat(String name)
        {
            this.name = name;
        }

        Cat(String name,  Cat parent, Cat parentu )
        {
            this.name = name;
            this.parent = parentu;
            this.parentu = parent;
        }

        @Override
        public String toString()
        {
            return "Cat name is " + name +
                    (parentu!=null ? ", father is " + parentu.name : ", no father") +
                    ((parent != null ? ", mother is " + parent.name : ", no mother"));


вывод:
Cat name is 1, no father, no mother
Cat name is 2, no father, no mother
Cat name is 3, father is 1, no mother
Cat name is 4, no father, mother is 2
Cat name is 5, father is 4, mother is 3
Cat name is 6, father is 4, mother is 3
Process finished with exit code 0
  • ,

com.javarush.test.level13.lesson11.home04;

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

package com.javarush.test.level13.lesson11.home04;

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

/* Запись в файл
1. Прочесть с консоли имя файла.
2. Считывать строки с консоли, пока пользователь не введет строку "exit".
3. Вывести абсолютно все введенные строки в файл, каждую строчку с новой стороки.
*/

public class Solution
{
    public static void main(String[] args) throws Exception
    {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        OutputStream fos = new FileOutputStream(reader.readLine());
        ArrayList<String> list = new ArrayList<String>();
        while (true)
        {
            String s = reader.readLine() + "\n";
            list.add(s);
            if (s.equals("exit\n"))
            {
                for (int i = 0; i < list.size(); i++)
                {

                    fos.write(list.get(i).getBytes());
                }
                break;
            }
        }
        reader.close();
        fos.close();
    }
}