Перейти к публикации
  • Сейчас на странице   Всего пользователей: 0   (0 пользователей, 0 гостей)

Rooster

Программирование, т. 8

  

315 пользователей проголосовало

У вас нет прав на голосование в этом опросе, или на просмотр результатов опроса. Пожалуйста, войдите или зарегистрируйтесь для голосования в опросе.

Рекомендованные сообщения

 


только можешь плиз пожалуйста 

  .stream()  .filter()  .map()

так писать.

Могу, в продакшоне.

 

Не хочется растягивать код ввысь для топана 

Поделиться сообщением


Ссылка на сообщение

еще версий 5 и в джаву завезут экстеншен методы, будет еще красивше


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

Поделиться сообщением


Ссылка на сообщение

Уже есть в котлине.

Поделиться сообщением


Ссылка на сообщение

еще две версии и в джовку завезут  case классы и нормальные свитч кейсы

хотя я уже видел JEP на эту тему. что хотят например результат свитч кейса сразу в переменную записывать

:trollface:

еще пару версий и появтся параметры по умолчанию

вот тогда и заживем как белые люди  :fffuuu:


крч тут есть олимпиадники ебучие

как это можно ускорить и уменьшить количество ветвлений?

GCD

while (a > 0 && b > 0) {
            if (a >= b)
                a %= b;
            else
                b %= a;
        }
System.out.println(Math.max(a, b));

:buba:

ни мало ни много, а много и мало

Поделиться сообщением


Ссылка на сообщение

лови

 

http://rosettacode.org/wiki/Greatest_common_divisor#Java

 

ну и вообще, не понятно, зачем тебе сравнения размеров на каждой итерации

они нужны для алгоритма через вычитание, тк там ты не знаешь конкретный момент когда ты досчитал до "остатка"

 

при использовании сразу операции остатка от деления у тебя результат будет гарантированно меньше второго операнда, то есть твое условие всегда будет через один прыгать

 

то есть при исходных a > b после итерации у тебя a становится гарантированно меньше чем b и ты пойдешь по второй ветке

потом ты сразу получаешь новое b гарантированно меньшее чем a и идешь по первой ветке

 

так что http://rosettacode.org/wiki/Greatest_common_divisor#Iterative_Euclid.27s_Algorithm уже убирает все проверки кроме на ноль, и должно по идее хорошо на асм ложиться

только там почему-то нет входной проверки для переворота чтобы всегда a был больше b при старте

choojoykin понравилось это

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

Поделиться сообщением


Ссылка на сообщение

тот самый момент, когда в топике погромистов собственно погромистов три с половиной калеки да пара джунов с одинэсниками

Поделиться сообщением


Ссылка на сообщение

Каждый третий джун, я не джун


Russia.png.ea080e101222d708d08842dae4ccc684.png USA.png.9b863586cd992fb91bf92ed1de03e4cc.png Israel.png.f27d10a4455f05cd161a8c2c52b8b5e1.png

Поделиться сообщением


Ссылка на сообщение

Бтв мне тут задание на курсач отгрузили, нужно будет простые интерфейсы с javaFx делать. Есть лайфхаки?

Java :lol: ? земля пухом братишка 

Поделиться сообщением


Ссылка на сообщение

 

 

джунов
стажеров  :buba:  

DB: click

Поделиться сообщением


Ссылка на сообщение

тем более

 

 

кстати что там жаст дуит писал типа вас мало и потому всякие ci и cd не нужны, я считаю неправильным

 

пока вас мало и особо не дрючат по таймингам, вы можете на изичах договориться о том какой процесс хотели бы выстроить и средства его автоматизации выбрать и сделать все по красоте

 

чем потом пойти в норм контору и охуеть с требований помимо написания качественного кода ещё и пайпланы ебашить

 

а так все сделаешь сам и ультра доволен этим, и потом затирать сможешь мол я босс

 

620_ понравилось это

Поделиться сообщением


Ссылка на сообщение

вот меня например зовут на собес

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

схожу крч посмотрю чо хотят в действительности


:buba:

ни мало ни много, а много и мало

Поделиться сообщением


Ссылка на сообщение
(изменено)

@@TheDeadSkin @@moonfangtopich @@Index спасибо

 

вот наговнокодил

 

 

public class Facts {
    private static final String SEPARATOR = "----------------------------------------------------------------";

    public static void main(String args[]) {
        String fileName = args[0];

        try (BufferedReader reader = new BufferedReader(
                new InputStreamReader(
                        new FileInputStream(fileName)))) {
            String line;
            List<String[]> rulesList = new ArrayList<>();
            while (!(line = reader.readLine()).equals(SEPARATOR)) {
                rulesList.add(getRules(line));
            }
            Set<String> facts = getFacts(reader.readLine());
            addFacts(rulesList, facts);
            System.out.println(facts);
        } catch (IOException e) {
            e.printStackTrace();
        }


    }

    public static void addFacts(List<String[]> rulesList, Set<String> facts) {
        Iterator<String[]> rulesIter = rulesList.iterator();
        while (true) {
            boolean noChanges = true;
            while (rulesIter.hasNext()) {
                String[] expressions = rulesIter.next();
                boolean isFact = true;
                for (int j = 0; j < expressions.length - 1; j++) {
                    if (!facts.contains(expressions[j])) {
                        isFact = false;
                        break;
                    }
                }
                if (isFact) {
                    facts.add(expressions[expressions.length - 1]);
                    rulesIter.remove();
                    noChanges = false;
                }
            }
            if (noChanges) break;
            rulesIter = rulesList.iterator();
        }
    }

    private static Set<String> getFacts(String s) {
        return new LinkedHashSet<>(Arrays.asList(s.split(", ")));
    }

    public static String[] getRules(String s) {
        return s.split("\\|\\||&&|->");
    }
}

 


Изменено пользователем Ramil

javascript:void(0);

Поделиться сообщением


Ссылка на сообщение

гуйз кто шарит

крч есть сущность С как контейнер для двух других энтити А и Б

А и Б в совокупности образуют логическую пару данных, которые как раз и объединяются в С под общей сущностью

 

и А и Б имеют дохуя полей

часть полей инитится при создании их экземпляров, а часть полей заполняется потом данными из БД

собсна вопрос - каким образом это организовать? DTO по сути не имеет методов для изменения данных и по сути несет иммутабельность (т.е. сеттеры по факту отпадают :hmm: )

ебашить билдер тоже как-то хуево в плане что по сути нельзя билдить экземпляр объекта без других его полей  :hmm:


:buba:

ни мало ни много, а много и мало

Поделиться сообщением


Ссылка на сообщение

ты бы хоть лукас про НОД поставил, пидор неблагодарный

я на тебя целых 10 минут своей жизни потратил

а он новый вопрос штопает

JuJeu понравилось это

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

Поделиться сообщением


Ссылка на сообщение
(изменено)

да ссорян я чот задумался  :trollface:

крч хз

есть варик поля которые инитятся сразу - засунуть в конструктор (опять же он большой блять будет)

а для остальных полей оставить сеттеры  :hmm:


Изменено пользователем choojoykin

:buba:

ни мало ни много, а много и мало

Поделиться сообщением


Ссылка на сообщение

@@TheDeadSkin @@moonfangtopich @@Index спасибо

 

вот наговнокодил

 

 

public class Facts {
    private static final String SEPARATOR = "----------------------------------------------------------------";

    public static void main(String args[]) {
        String fileName = args[0];

        try (BufferedReader reader = new BufferedReader(
                new InputStreamReader(
                        new FileInputStream(fileName)))) {
            String line;
            List<String[]> rulesList = new ArrayList<>();
            while (!(line = reader.readLine()).equals(SEPARATOR)) {
                rulesList.add(getRules(line));
            }
            Set<String> facts = getFacts(reader.readLine());
            addFacts(rulesList, facts);
            System.out.println(facts);
        } catch (IOException e) {
            e.printStackTrace();
        }


    }

    public static void addFacts(List<String[]> rulesList, Set<String> facts) {
        Iterator<String[]> rulesIter = rulesList.iterator();
        while (true) {
            boolean noChanges = true;
            while (rulesIter.hasNext()) {
                String[] expressions = rulesIter.next();
                boolean isFact = true;
                for (int j = 0; j < expressions.length - 1; j++) {
                    if (!facts.contains(expressions[j])) {
                        isFact = false;
                        break;
                    }
                }
                if (isFact) {
                    facts.add(expressions[expressions.length - 1]);
                    rulesIter.remove();
                    noChanges = false;
                }
            }
            if (noChanges) break;
            rulesIter = rulesList.iterator();
        }
    }

    private static Set<String> getFacts(String s) {
        return new LinkedHashSet<>(Arrays.asList(s.split(", ")));
    }

    public static String[] getRules(String s) {
        return s.split("\\|\\||&&|->");
    }
}

 

Мне кажется твой код может обосраться (как и мой я проверил) на некоторых начальных условиях.

Например.

"A->B"
"C->A"
"G&&A->H"
"A||G->F"
"B->D"

Внимание на 4-ю строку. Так как A у нас однозначный факт, то и F тоже факт. Должен быть.

Но мой алгоритм выдает результат

A,B,C,D,E
И правильный только когда G внести сразу в таблицу как не однозначный.
funFacts.put("G", 0);
Результат = A,B,C,D,E,F

Короче игнорировать булеву алгебру  явная ошибка.

У меня код фиксится установкой всех переменных встречающихся в левой части, но не встречающихся в правой в 0-е значение.

А ну и 

    private static final String SEPARATOR = "----------------------------------------------------------------";
 while (!(line = reader.readLine()).equals(SEPARATOR)) {

Я бы заменил на

   private static final String LINE_MATCHER = "[-]+";
 while (!(line = reader.readLine()).trim().matches(LINE_MATCHER)) {

Поделиться сообщением


Ссылка на сообщение

@@Index

да, обосрался, надо переделать

там в условии еще что сепаратор это 64 минуса, но это не важно, поэтому не стал писать


javascript:void(0);

Поделиться сообщением


Ссылка на сообщение

я думал ему для начала надо была версия где похуй на булеву алгебру, а потом уже допиливать это дело чтоб её учитывать

чтоб учитывать алгебру выражения надо строить синтаксическое дерево со скобками, приоритетом операторов и прочими радостями жизни

Поделиться сообщением


Ссылка на сообщение
(изменено)

я тож думал)))

ну мне хотя бы без скобок, с двумя операторами сделать

 

нагуглил такую залупу https://habr.com/post/122397/

мб поможет


Изменено пользователем Ramil

javascript:void(0);

Поделиться сообщением


Ссылка на сообщение
Гость
Эта тема закрыта для публикации сообщений.

×
×
  • Создать...