PRY написав:
Teg Miles написав:

Як краще перенести написану на С++ на ОС Андроїд:

  1. Використати відповідне IDE та лишити на С++.

  2. Переписати повністю на Java.

  3. Переписати частково на Java, частини, де найбільше навантаження лишити на С++.

Хочу зрозуміти чи варто вчити Java заради створення додатків для ОС Андроїд.
Чи все ж можна обійтися лише С++?

Як варіант можна ще запропонувати фреймворк Flutter/Dart.

Схоже, що Flutter/Dart доволі перспективна комбінація.

22

(22 відповідей, залишених у C++)

steamwater написав:
steamwater написав:

Перезайшов на сайт з нуля i все спрацювало. I цi люди розповiдають навачкам про iнiцiалiзацiю! Не знаю гарно воно чи погано, але прийняте:https://leetcode.com/problems/cheapest- … 522532439/

Що таке beats? Як я розумiю воно вiдноситься до перфомансу. То чим бiльше тим краще, чи навпаки?

Так, чим більше, тим краще. В ідеалі по 100% має бути.
Порівнюється швидкість і використання пам'яті з іншими рішеннями.

23

(22 відповідей, залишених у C++)

steamwater написав:

Я бачу що там на деякi речи треба сплачувати пiдписку 35$/мiсяць. То як здати на перевiрку?

Зайдіть у необхідне завдання, вставте своє рішення у віконце для рішень і запустіть його.
Якщо рішення прийняте, далі в розділ Solutions, там згори з'явиться запрошення додати своє рішення.
Наскільки я знаю, додавання своїх рішень безкоштовне.

24

(22 відповідей, залишених у C++)

steamwater написав:
Teg Miles написав:

Ваше рішення мені дуже важко зрозуміти.

  Там є readme: https://github.com/IgorPolozov/leetcod … README.md
та коментарi у кодi. На питання по конкретних мiсцях, вiдповiм. За чесно списане рiшення дякую, - завтра потестю. I на leetcode'i подивлюсь. А чи можна своє їм якось запхнути? Я, чесно кажучи аж цiлий фрейм-ворк накатав, щоб генерити випадковi вектори польотiв. Та цiкаво чи вони тестять (на серваку).

Можна. Коли ви вирішуєте завдання, якщо ваше рішення прийняте,
то в категорії Solutions з'являється можливість додати своє рішення.
Там купи різних рішень, найбільше цінуються компактні та швидкі (за швидкістю виконання).
Якщо ваше рішення матиме менше 100% швидкості,
то, швидше за все, загубиться серед решти.

wander написав:

Зараз під розробку на Андроїд рекомендованої мовою є Котлін (самі гугл її форсять). Не бачу сенсу у 2025 вчити жабу..
Лише одним С++ не обійтися, певну частину все ж тре буде написати на Java або Котлін. Якщо мета саме портування, то я б взяв Java, бо вона ближча до С, ніж Котлін. Можна деякі речі майже інтуїтивно писати з певними поправками, звісно. Але точно не намагався б її вивчити.

Прихований текст

Одразу в'єтнамські флешбеки згадуючи один з попередніх проєктів, який розроблявся і під Андроїд теж, ухх..
Один з найгірших досвідів.

Котлін — російська розробка, почитайте статтю про Котлін у Вікіпедії (зверніть увагу на походження назви).
Окрім того 3 з 9 офісів JetBrains російські. З цих причин я не користуюся їхніми продуктами.

26

(22 відповідей, залишених у C++)

steamwater написав:
Teg Miles написав:

Якщо не працює нормально, точно сам написав:). Давно вже списав рішення для цієї задачі і забув про нього:).

Навпаки. Я по iнтернет замучався шукати та так i не знайшов жодного працюючого прикладу. А ваш, - працює. Не швидко, що правда. I ще, - вiн падає на кiлькостях мiст-лiтовищ що перевищують 25, якщо середня кiлькiсть рейсiв перевищує 70-80. Але працює! Враховуючи, що це не самий простий алгоритм. мушу сказати, що ваш рiвень зростає. Якщо бажаєте подивитися на мiй то вiн отут:
https://github.com/IgorPolozov/leetcode … ersing.cpp
доволi швидкий та витривалий до великих обсягiв графу.
Доречi, чи припускає leetcode якiйсь фiдбек. Тобто, чи можуть юзери надсилати рiшення до них?
I ще. Ви кажете - списали рiшення. Тобто ви знайшли у тенетах щось, що таки працює? Якщо так, - покидайте посиланнь, будь ласка.

Ось моє чесно списане рішення:

class Solution {
public:
    int findCheapestPrice(const int& n, const vector<vector<int>>& flights, const int& src, const int& dst, const int& k)
    {
        vector<vector<pair<int, int>>> graph(n);
        for (const auto& item : flights) {
            graph[item[0]].push_back({ item[1], item[2] });
        }
        priority_queue<vector<int>, vector<vector<int>>, greater<vector<int>>> vertexes;
        vertexes.push({ 0, src, 0 });
        vector<int> dist(n + 1, INT_MAX);

        while (!vertexes.empty()) {
            auto item = vertexes.top();
            vertexes.pop();
            int price = item[0];
            int vertex = item[1];
            int end = item[2];

            if (vertex == dst) {
                return price;
            }
            if (dist[vertex] < end) {
                continue;
            }
            dist[vertex] = end;

            if (end > k) {
                continue;
            }
            for (const auto& next_vertex : graph[vertex]) {
                vertexes.push({ price + next_vertex.second, next_vertex.first, end + 1 });
            }
        }
        return -1;
    }
};

На LeetCode в кожному завданні є категорія Solutions, там готові рішення від різних користувачів.
Якщо я взагалі не уявляю як вирішити завдання, просто списую, намагаючись запам'ятати підхід та його деталі.
Коли маю якесь рішення, але воно не працює як слід, запитую тут.
Ваше рішення мені дуже важко зрозуміти.

Як краще перенести написану на С++ на ОС Андроїд:

  1. Використати відповідне IDE та лишити на С++.

  2. Переписати повністю на Java.

  3. Переписати частково на Java, частини, де найбільше навантаження лишити на С++.

Хочу зрозуміти чи варто вчити Java заради створення додатків для ОС Андроїд.
Чи все ж можна обійтися лише С++?

28

(22 відповідей, залишених у C++)

steamwater написав:

Привiт Tag Miles. Вирiшив таки порушити тишу. Скажiть будь ласка, чи ви самi написали ваш код?

Якщо не працює нормально, точно сам написав:). Давно вже списав рішення для цієї задачі і забув про нього:).

29

(12 відповідей, залишених у Статті)

/KIT\ написав:

Ще є книга - збірник таких трюків. "Алгоритмічні трюки для програмістів" Генрі Уоррена

Оригінальна назва цієї книги Hacker`s Delight. Ледь не сказився доки шукав Algorithmic tricks for developers:).

30

(12 відповідей, залишених у Статті)

Чи варто заміняти abs(), min(), max() на аналогічні бітові операції заради швидкості?
Чи стандартні бібліотеки в поєднанні з сучасними компіляторами не поступаються в швидкості
бітовим операціям у цьому випадку (найбільше цікавить С++)?

31

(12 відповідей, залишених у C++)

koala написав:

Краще за яким саме критерієм?
Ну і так, є конструктор.

Краще щодо швидкості й обсягу пам'яті, що використовується при цьому.

32

(12 відповідей, залишених у C++)

steamwater написав:

Teg Miles, звернiть увагу на конструктор 5 https://en.cppreference.com/w/cpp/conta … tor/vector

Тобто std::copy просто переносить вказівники на ітератори з одного контейнера в інший?

33

(12 відповідей, залишених у C++)

Скажімо, я використав set, щоб прибрати всі копії, а потім мені треба перенести все до vector.
Що краще використати для цього std::copy чи звичайний цикл?

34

(11 відповідей, залишених у C)

koala написав:
Teg Miles написав:

може, варто створити бота з прив'язкою до поштучного інтелекту?

Нащо? Ті, хто хоче отримати "відповідь" від ШІ, можуть спитати у Copilot чи ChatGPT. Ті, хто хоче дійсно отримати відповідь, спершу гуглять, а потім, якщо не знайшли відповідь, питають на форумах (з уточненням про те, що нагуглили). А ті, хто хоче просто поспілкуватися з живими людьми, але не отримати відповідь, ідуть до барів чи клубів. Іти на форум перш ніж гуглити, чи іти в бар, щоб отримати професійну пораду, чи запускати на форумі бота з ШІ - безглуздо.

Саме тому цей форум майже мертвий, бо ви хочете перекласти всю свою роботу на Ґуґл.
І, до речі, наґуґлити щось українською мовою — місія майже неможлива,
бо статей і питань-відповідей на форумах щодо програмування саме українською мовою вкрай мало.
Потрібен контент по якому можна буде ґуґлити,
але модератори не відповідають на питання,
а вимагають, щоб спочатку ґуґлили.
Я, звісно, без проблем можу ґуґлити й англійською,
але тоді постає питання нащо мені український форум, коли є той же Stackoverflow і т.д.

35

(11 відповідей, залишених у C)

ReAl написав:
Teg Miles написав:

Як порахувати загальну кількість нулів і одиниць в бінарній формі числа?
Як порахувати кількість послідовних нулів чи одиниць?

Це треба у якийсь список «Не задавати запитання, поки не прочитав ці статті»
Bit Twiddling Hacks by Sean Eron Anderson

То додали б у розділ "Статті" свої посилання на цікаві статті щодо різних хаків для С++.
Не знаю, чому моє питання перенесли в тему для С.

36

(11 відповідей, залишених у C)

Якщо вам так бракує модераторів, які ще не вигоріли, то,
може, варто створити бота з прив'язкою до поштучного інтелекту?
Назвіть його Lazy Koala  і хай собі видає відповіді на шаблонні питання,
на які ви вже мільйон разів відповідали і від яких вас, як я розумію, уже верне.
Можливо, це навіть якось оживить цей форум.

Як порахувати загальну кількість нулів і одиниць в бінарній формі числа?
Як порахувати кількість послідовних нулів чи одиниць?

38

(22 відповідей, залишених у C++)

Ось так переписав. Код працює, але жере забагато пам'яті.

class Solution {
    bool visited(const int& vertex, const vector<int>& path)
    {
        for (size_t i = 0; i < path.size(); ++i) {
            if (path[i] == vertex) {
                return true;
            }
        }
        return false;
    }

public:
    int findCheapestPrice(const int& n, const vector<vector<int>>& flights, const int& src, const int& dst, const int& k)
    {
        queue<vector<int>> paths;
        vector<int> path;
        path.push_back(src);
        paths.push(path);
        vector<vector<int>> total_paths;
        int answer { INT_MAX };

        while (!paths.empty()) {
            path = paths.front();
            paths.pop();
            int last = path[path.size() - 1];
            if (last == dst) {
                int path_size = path.size();
                if (path_size <= k + 2) {

                    total_paths.push_back(path);
                }
            }
            for (size_t i = 0; i < flights.size(); ++i) {
                int source = flights[i][0];
                int target = flights[i][1];
                if (source == last && !visited(target, path)) {
                    vector<int> new_path(path);
                    new_path.push_back(target);
                    paths.push(new_path);
                }
            }
        }
        for (size_t i = 0; i < total_paths.size(); ++i) {
            int cur_path { 0 };
            for (size_t j = 0; j < total_paths[i].size() - 1; ++j) {
                for (size_t f = 0; f < flights.size(); ++f) {
                    if (flights[f][0] == total_paths[i][j] && flights[f][1] == total_paths[i][j + 1]) {
                        cur_path += flights[f][2];
                    }
                }
            }
            answer = min(cur_path, answer);
        }
        return total_paths.empty() ? -1 : answer;
    }
};

39

(22 відповідей, залишених у C++)

Дано граф у форматі початкова вершина, кінцева вершина, вартість переходу.
Початок і кінець маршруту.
А також кількість зупинок, які можна зробити при переході
з початку до кінця вказаного маршруту.
Потрібно знайти найдешевший шлях з пункту А в пункт Б із обмеженою кількістю зупинок.
Моделюється найдешевший переліт літаком з обмеженою кількістю пересадок.
Завдання звідси https://leetcode.com/problems/cheapest- … scription/ .

Найдешевший маршрут я знаходжу ось так:

class Solution {
public:
    int findCheapestPrice(const int& n, const vector<vector<int>>& flights, const int& src, const int& dst, const int& k)
    {
        priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> dist_vert;
        vector<int> distances(n, 1e9 + 7);
        distances[src] = 0;
        dist_vert.push(make_pair(0, src));

        while (!dist_vert.empty()) {
            pair<int, int> item = dist_vert.top();
            int distance = item.first;
            int vertex = item.second;
            dist_vert.pop();
            for (size_t i = 0; i < flights.size(); ++i) {
                int source = flights[i][0];
                int destin = flights[i][1];
                int price = flights[i][2];
                if (source == vertex && (distance + price < distances[destin])) {
                    distances[destin] = distance + price;
                    dist_vert.push(make_pair(distances[destin], destin));
                }
            }
        }

        return distances[dst] >= 1e9 + 7 ? -1 : distances[dst];
    }
};

Але не розумію як реалізувати обмеження зупинок.
Має бути якийсь бектрекінґ абощо, проте фантазії на нього бракує.

40

(13 відповідей, залишених у C++)

steamwater написав:
Teg Miles написав:

Від мене там тільки count_if:) У мене не дуже з побітовими операціями поки що.

Я так i думав. А чи зрозумiли ви, що саме робить алгоритм у циклах? Це вже те, другу питання, пiсля якого можна було б перейти до std::count_if. Поки що, можу наперед сказати, що count_if реалiзовано як прямий послiдовний проход по заданому iтераторами, iнтервалу з перевiркою унарного предiкату на кожному елементi, пiдвищуючи лiчильник для true, який потiм повертається як результат. У складних випадках, таких як текучий, вiн не кращий за цикл, а враховуючи нетрiвiальнiсть задачи написання предiкату, - цикл гнучкіший, тому у цьому я пiдтримую позицiю koala.

Зрозумів, там, де я брав код, було пояснення.