Изучаю программирование на c++ ( Day_3 )
Утро! (может доброе, а может и нет). Короче небольшое оправдание за то что сегодня не так много изучил - я не спал, в смысле просто лежал на кровати до 04 50 а потом пошёл всё таки продолжать изучение. Давно не выкладывал ничего потому что был занят запахиванием всего мистера робота без ощутимой потери качества на сд карту 32 гб.
Итак, сегодня узнал о том как в c++ пишутся ветвления, циклы, функции, так что вот что то такое получилось:
здесь у нас происходит несколько вещей, сначала идёт заголовок моей функции, потом вызывается функция main которая в свою очередь вызывает функцию которую я инициализирую после. В итоге программа запускается, main вызывает функцию, та инициализируются и просит у пользователя число, потом находит корень из него и выводит его в консоль, далее процесс повторяется пока пользователь не введёт число 101, тогда цикл остановится, main вернёт 0 и программа успешно завершится, как то так, если я что то не правильно понял - буду рад объяснению.
как долго.......
Syntropy — легковесные живые обои с симуляцией эволюции для Windows и Linux
Привет!
Захотелось оживить рабочий стол, но обычные живые обои либо быстро надоедали, либо слишком сильно грузили систему. В итоге решил написать свой проект с нуля - 🧬Syntropy. Это интерактивные неоновые обои, которые превращают рабочий стол в живую цифровую экосистему.
В основе лежит процедурная симуляция эволюции. Прямо под иконками автономные ИИ-команды рождаются, мутируют и воюют за территории. Движок постоянно просчитывает случайные мутации, поэтому цвета фракций и рисунок сражений никогда не повторяются. При этом симуляция интерактивна. Кликами по экрану можно спавнить новые клетки, искусственно влияя на баланс сил. Из визуальных эффектов добавил мягкое свечение, физику микрочастиц и параллакс при движении курсора. Все параметры вроде скорости эволюции, размеров ячеек и яркости настраиваются через меню в системном трее.
Основной упор я делал на оптимизацию, чтобы программа работала даже на слабых ноутбуках. Проект написан на C++17 и SFML без тяжелых готовых движков, а эффекты обрабатываются через кастомные шейдеры. Для игр и полноэкранных приложений предусмотрена умная автопауза. В этот момент обои полностью останавливают расчеты, снижая нагрузку на процессор и видеокарту до абсолютного нуля.
Программа полностью портативная, не требует установки и работает на Windows и Linux. Также сделал бесшовную поддержку нескольких мониторов и автоматическое сохранение карты клеток, так что после перезапуска системы симуляция продолжается с того же места.Делал для себя, но буду рад, если кому-то тоже зайдет.
Скачать готовую сборку можно у меня на GitHub.
Как вам вообще такая идея? Готов ответить на вопросы в комментариях.
Зацените двигло
Делать мне нечего, решил подружить Ogre Next 3.0.0 с jolt physics. Вот результат.
Изучаю программирование на c++ ( Day_2)
Доброе утро! Сегодня продолжил изучение книги Стивена Праты и изучил cin и теперь cin и cout не абстрактные методы а именно ввод и вывод, также я поработал с fstream и очень удивлён лаконичностью работы с файлами в сравнении с питоном, ещё поработал с chrono ( модуль для работы со временем ) и получилось пока что написать что то такое:
вот что получаем на выходе программы:
и вот что содержится в текстовом файле:
также сегодня покастомизировал свою виртуальную машину и теперь у меня вместо вот такого:
вот такое:
я заменил foot на alacrity что было довольно сложно и пришлось с нейрокой фиксить очень многое и добавил конфигурацию zproger с красивой темой, результатом более чем доволен и пока что останусь на alacritty Fish
Общий Интернет
Посетило в раз очередной, нереальной кайфости идея, сделать для людей инет такой, чтобы был он общий и без денег, ну совсем без денег так никак, а как можно будет это сделать, повествую ниже смысл для всех, тех кто немного шарит в кодах devах. С mesh сетями кто чуток знаком, там мештастик типа и мешкоры, про меш вайфай полюбэ слышал полюбому что-то тоже. Но идея этого вайфая, как по мне реально нераскрыта. Надо сделать тема чтоб была такая, что к примеру в доме все вайфаи меж собою, через роутера с прошивкою спецальной в сетку общую объединялись, е когда участник той сети чего качает, то запрос в инет меж всеми гейтвеями распределялся и общим потоком с этих разных выходов закачивался, но при этом чтоб хозяин этой точки, мог в процентах выставлять канал для общей сетки, тобишь скажем 10-ть я % от канала интернета своего даю на общий интернетный наш канал. И при том чтоб всё вот это по вайфаю... Смысл такой примерно, тем кто шарит в теме можно обсудить идею...
О замене человека искусственным интеллектом
Недавно устроился на новую работу в связи с банкротством компании, в которой работал. Поскольку начинаю работать только в Сентябре, решил порешать задачки с leetcode, чтоб совсем мозги не закисали.
И вот одна из этих задачек. Даны два числа, представленные связными списками. Каждый элемент списка - это один знак этого числа. Причём в обратном порядке. Т.е. 721 будет выглядеть так: 1 -> 2 -> 7
Задача написать функцию, складывающую эти два числа. И дана уже заготовка кода.
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {}
};
Т.е. нужно по сути написать эту функцию. Сначала создал временную переменную, куда буду пихать результат, организовал цикл, но потом брослся в глаза последний конструктор класса ListNode. Ну прямо просится рекурсия под этот конструктор. В результате, стираю всё, что наваял и получился вот такой код, который заработал и прошёл все тесты.
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
if((l1 != nullptr) || (l2 != nullptr) || (carry != 0) ) {
int tmp_result = ((l1 != nullptr) ? l1->val : 0) + ((l2 != nullptr) ? l2->val : 0) + carry;
if(tmp_result >= 10) {
carry = 1;
tmp_result -= 10;
} else {
carry = 0;
}
return new ListNode(tmp_result, addTwoNumbers((l1 != nullptr) ? l1->next : nullptr, (l2 != nullptr) ? l2->next : nullptr));
} else {
return nullptr;
}
}
private:
int carry = 0;
};
А причём тут ИИ, спросите вы? Да после того, как решил эту задачу, решил посмотреть, как её решит ИИ. А сделал он достаточно топорно, а именно так, как я хотел решать изначально.
class Solution {
public:
ListNode* addTwoNumbers(ListNode* _l1, ListNode* _l2) {
// Create a dummy head to simplify the list construction logic
ListNode* dummyHead = new ListNode(0);
ListNode* currentNode = dummyHead;
int carryValue = 0;
// Iterate while there are nodes in either list or a carry remains
while (_l1 != nullptr || _l2 != nullptr || carryValue != 0) {
// Get values from the current nodes, default to 0 if list is exhausted
int firstVal = (_l1 != nullptr) ? _l1->val : 0;
int secondVal = (_l2 != nullptr) ? _l2->val : 0;
// Calculate the sum of the digits and the current carry
int sumValue = firstVal + secondVal + carryValue;
carryValue = sumValue / 10;
// Create a new node with the digit part of the sum
currentNode->next = new ListNode(sumValue % 10);
currentNode = currentNode->next;
// Advance the pointers of the input lists
if (_l1 != nullptr) {
_l1 = _l1->next;
}
if (_l2 != nullptr) {
_l2 = _l2->next;
}
}
// Store the actual head of the result list
ListNode* resultHead = dummyHead->next;
// Free the dummy head memory to prevent memory leaks
delete dummyHead;
return resultHead;
}
};
На самом leetcode есть несколько решений к данной задаче. И нет ни одного решения с рекурсией. Да, я понимаю, многие не любят рекурсию и считают её антипаттерном, но тем не менее, задание тестовое, есть конструктор, кричащий: "Будь мужиком, заюзай рекурсию, б***ь!". По мне так, вариант с рекурсией выглядит проще и элегантнее.
Вывод напрашивается сам собой. Да, ИИ решит задачу. Но решит её так, чтоб она просто работала, т.е. на уровне индуса. А вот если надо проявить креативность, тут уже не так всё радужно. Хотя, зная, что это по сути языковая модель, а не интеллект, ожидать какой-то креативности от него не стоит.
P.S. Да, я знаю, что вместо (l1 != nullptr) можно было написать просто l1, но я предпочитаю именно такую запись в своём коде. Чтоб другие разрабы не искали каждый раз, что за переменные l1, l2, а уже понимали, что это какие-то указатели.
Изучаю программирование на c++ ( Day_1 )
Доброе утро. На данный момент начал прочтение книги Язык программирования C++ (Стивен Прата), вспомнил строгую типизацию ( был опыт с Arduino ), разобрался что за int main():
int main() это обязательная функция которая возвращает строго int и на сколько я понял, число которая она возвращает указывает на статус выполнения, в ней есть необязательный return 0; который ещё может вызываться неявно. Также узнал у существовании cout в пространстве имён std и вывел свой первый текст ( не особо понял в чём такая великая сложность вызвать функцию и в место print("Some text") написать std::cout << "Some text";)
Вот пока что код который отражает все полученные мной знания в данном языке, компилировал с помощью g++:








