• Как узнать сколько прошло дней между двумя днями недели?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    (DateTime1 - DateTime2).Days
    Ответ написан
    Комментировать
  • Можно ли написать веб-приложение на C#, схожее с финансовыми веб-приложениями?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Конечно реально. Сделать можно с помощью чего угодно.
    Ответ написан
    Комментировать
  • На сколько хорош данный roadmap для PostgreSQL DBA?

    Melkij
    @Melkij
    PostgreSQL DBA
    Его написал мой коллега https://github.com/kamranahmedse/roadmap.sh/pull/196 Алексей Лесовский после сбора фидбека со всей нашей команды DBA. Так что вряд ли раскритикую год спустя.

    "конца" у roadmap нет. troubleshooting и optimization бесконечны. А уж тем более необъятна hackers тематика.

    Если заходить со стороны разработки - создайте маленькую базу неважно какой тематики (да хоть q&a сервиса), заполните сгенерированными данными гигабайт на 10-100 и заставьте это шевелиться за вменяемое время под синтетической нагрузкой (хоть pgbench). А потом начните менять схему данных, не останавливая нагрузку. А потом восстановить базу на состояние до миграции из бекапа.
    Ответ написан
    Комментировать
  • Как создать строку из массива с разделителем?

    1. Держи екстеншен, который я только что написал (протестировал его, чтобы вёл себя почти как string.Split)
    Код, конечно, не идеален, но работает
    public static class ArrayExtensions
    {
        public static List<List<T>> Split<T>(this IEnumerable<T> array, T separator, IEqualityComparer<T>? equalityComparer = null)
        {
            equalityComparer ??= EqualityComparer<T>.Default;
            var parts = new List<List<T>>();
            var currentPart = new List<T>();
            foreach (var element in array)
            {
                var isSeparator = equalityComparer.Equals(element, separator);
                if (isSeparator)
                {
                    parts.Add(currentPart);
                    currentPart = new List<T>();
                }
                else
                {
                    currentPart.Add(element);
                }
            }
            parts.Add(currentPart);
            return parts;
        }
    }


    2. Тогда с ним можно будет сделать так:
    var array = new [] { "Привет", "меня", "зовут", "*", "Мой", "возраст", "таков" };
    var parts = array.Split("*").Select(x => string.Join(' ', x)).ToArray();
    var name = parts[0];
    var age = parts[1];
    Ответ написан
    5 комментариев
  • Как сократить данный код?

    Если совсем упороться, то можно вот так сделать:
    new[] { lEntry.Message, lEntry.Sender, lEntry.Level }
      .Any(x => x.Contains(searchText, StringComparsion.OrdinalIgnoreCase)

    Ну или ещё можно написать свой метод, который будет в любой из n строк искать подстроку.

    Например вот такой:
    public static bool IsSubstringOfAny(this string search, params string[] samples) =>
      samples.Any(x=>x.Contains(search, StringComparsion.OrdinalIgnoreCase));
    Ответ написан
    2 комментария
  • Как это быстро сделать?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Надо решить как можно больше аналитически.
    a + a + a = ...a
    Это возможно только при a = 0 или a = 5.
    k + k + k = ...k при a = 0 или k + k + k + 1 = ...k при a = 5
    Эта система имеет решение только при a = 0 и k = 5.
    s - это перенос из младшего разряда. Значит s ∈ {1, 2}.
    e + 0 + e = ...0 или e + 0 + e + 1 = ...0 или e + 0 + e + 2 = ...0
    Такое возможно только при e ∈ {0, 4, 5, 9}. Но 0 и 5 уже заняты. Значит e ∈ {4, 9}.
    Получаем
    int a = 0;
    int k = 5;
    for (int s = 1; s <= 2; s++) {
      for (int e = 4; e <= 9; e += 5) {
        ...Тут все остальные буквы.

    Такой анализ даст сокращение полного перебора в 2500 раз.
    Затем, можно сказать, что d > b > r, соответственно записать циклы как
    ...
        for (int d = 3; d <= 9; d++) {
          for (int b = 2; b < d; b++) {
            for (int r = 1; r < b; r++) {
              ...

    Это сократит перебор ещё почти в 12 раз (с 1000 циклов до 84)
    Для p, с учётом, что из младшего разряда переносится 1, а в старший должна уйти 2, можно записать условие
    d + b + p + 1 >= 20 => p >= 19 - d - b
    Значит получим цикл
    ...
              for (int p = 19 - d - b; p <= 9; p++) {
                ...

    z можно вообще не оборачивать в цикл, а вычислять как z = (d + b + p + 1) % 10.
    Это уменьшит перебор ещё в 10 раз.
    Ну и, как правило, в таких задачах есть условие, что разным буквам соответствуют разные цифры. Стоит добавить проверку там, где это необходимо.
    Суммарно перебор сократится более, чем в 300000 раз.
    Решение на PHP

    <?php
    $a = 0;
    $k = 5;
    $count = 0;
    for ($s = 1; $s <= 2; $s++) {
      for ($e = 4; $e <= 9; $e += 5) {
        for ($d = 3; $d <= 9; $d++) {
          if ($d == 5 || $d == $e) {
            continue;
          }
          for ($b = 2; $b < $d; $b++) {
            if ($b == 5 || $b == $s || $b == $e) {
              continue;
            }
            for ($r = 1; $r < $b; $r++) {
              if ($r == 5 || $r == $s || $r == $e) {
                continue;
              }
              for ($p = 19 - $d - $b; $p <= 9; $p++) {
                if ($p == 5 || $p == $s || $p == $e || 
                    $p == $d || $p == $b || $p == $r) {
                  continue;
                }
                $z = ($d + $b + $p + 1) % 10;
                if ($z == 0 || $z == 5 || $z == $s || 
                    $z == $e || $z == $d || $z == $b || 
                    $z == $r || $z == $p) {
                  continue;
                }
                $count += 1;
                $dedka = $d * 10100 + $e * 1000 + 50;
                $babka = $b * 10100 + 50;
                $repka = $r * 10000 + $e * 1000 + $p * 100 + 50;
                $skazka = $s * 100000 + $z * 100 + 50050;
                if ($dedka + $babka + $repka == $skazka) {
                  print " {$dedka}\n+{$babka}\n+{$repka}\n======\n{$skazka}\n";
                }
              }
            }
          }
        }
      }
    }
    print "count = {$count}\n";
    /*
     94950
    +80850
    +74350
    ======
    250150
    count = 17
    */


    Фактически, проверка основного условия выполнилась только 17 раз вместо 1000000000 в вашем случае.

    P.S. Да, и s можно тоже не перебирать, а вычислять. Тогда будет ещё быстрее, основная проверка выполнится 11 раз.
    Ответ написан
    Комментировать
  • Можно ли в Dictionary cделать так?

    HemulGM
    @HemulGM
    Delphi Developer, сис. админ
    Нет нельзя. Словарь - это Key, Value список. Если по ключу нужно хранить несколько значения, то создай, например, структуру и храни её как value.

    public struct MyStruct
    {
         public int ID;
         public string FIleName;
    }
    
    MyStruct myFile = new MyStruct();
    myFile.ID = 1;
    myFile.FileName = "File.png";
    
    var dictionary = new Dictionary<string, MyStruct> {
    "Файл1" ,  myFile
    }
    Ответ написан
    2 комментария
  • С чего начать новичку в изучении c# для gamedev?

    Casper-SC
    @Casper-SC
    Программист (.NET)
    Для C# (пишется с большой буквы) установи cреду разработки Visual Studio Community (ссылка).

    В первую очередь тебе нужно выучить C#. Чтобы у тебя дошло до автоматизма написание кода. Первое время ты будешь сильно подвисать на каждой мелочи. Простейшие ошибки будут ставить в тупик. Наверняка, сюда задавать вопросы, что нормально. Это дело не быстрое, невозможно с полного нуля за неделю всё выучить, уйдёт от полугода. И нужно на это будет тратить много времени, желательно даже каждый день. Без знания языка и умения писать в стиле ООП простые приложения я уверен, что в Unity делать нечего.

    Рекомендую создать Решение (Solution) на C# в Visual Studio и в него добавлять проекты по темам из книги.
    Пример проектов в решении:
    Изучение C# (.sln)
    1. Переменные, циклы (.csproj)
    2. Классы (.csproj)
    3. Наследование (.csproj)
    4. Делегаты и события (.csproj)
    Только проекты называй по-английски.
    Прочитал главу, сделал примеры из книги, написал везде комментарии с пояснениями. Делай так, чтобы потом можно было вернуться к этим проектам и быстро вспомнить, что забылось. После того как ты будешь много времени тратить на обучение и чтение книги, у тебя всё лучше и лучше будут запоминаться детали языка. Именно за счёт траты большого кол-ва времени и обучения на длительном промежутке времени всё и выучится само. Я не зубрил ничего почти.

    Очень хорошее объяснение по C# здесь. Сразу скажу, уроки очень старые, но очень хорошие (там про платформу .NET Framework, но ничего нет про .NET Core, а теперь уже просто .NET (начиная с 5) и многого другого). Можно посмотреть эти уроки, после них начать читать книгу по C#, пусть из уроков много будет знакомо, но, скорее всего, в книге ты узнаешь новые детали и учить будет легче.

    Ещё такой курс более современный, его не смотрел.

    Кстати, чтобы не терять интерес, ты конечно можешь установить себе Unity, найти уроки по созданию 2D платформера, даже начать делать по урокам первую игру, но я тебе советую периодически как посидел над Unity возвращаться к книге и читать её дальше и так пока всю не прочитаешь. Я так и учил C#. Писал приложение, так как именно это было интересно, и периодически возвращался к книге.

    Алгоритмы. Можешь почитать хотя бы что-то простое для начала. Например,
    Алгоритмы. Вводный курс | Кормен Томас Х.

    https://qna.habr.com/q/848533#answer_1745621

    Книги есть такие:
    C# 9.0. Справочник. Полное описание языка (ссылка)
    Язык программирования C# 7 и платформы .NET и .NET Core | Джепикс Филипп, Троелсен Эндрю (ссылка)

    Возможно даже
    C# для чайников | Мюллер Джон Поль, Семпф Билл (здесь C# 7.0). ISBN: 978-5-907144-43-9
    Ответ написан
    7 комментариев
  • Как лучше учиться на data scienstа?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    У вас прямой доступ к самым лучшим советникам в этой области - преподавателям. Используйте эту возможность.
    Ответ написан
    1 комментарий
  • Код не идёт дальше в c#?

    Следующие после первого условия не будут выполнены если:
    randwar1 > randatk1 - тогда первое условие будет выполнено и сработает continue;
    randwar1 < randatk1 - тогда будет выполнена ветка else, и также сработает continue;
    Тоесть к следующим условиям выполнение перейдёт только если randwar1 == randatk1
    randwar2 > randatk2 - снова попадёт в continue;
    randwar2 < randatk2 - также
    if (randwar1 > randatk1){
              hp2 = hp2 - 1;
              Console.WriteLine("bruh 1");
              continue;
            }
            else if (randwar1 < randatk1){
              Console.WriteLine(hp2);
              continue;
            }
            if (randwar2 > randatk2){
              hp1 = hp1 - 1;
              Console.WriteLine("bruh 2");
              continue;
            }
            else if (randwar2 < randatk2){
              Console.WriteLine("iu 2");
              continue;
            }
            if (hp2 < 0){
              Console.WriteLine("1 team win");
              break;
            }
            if (hp1 == 0){
              Console.WriteLine("2 team win");
              break;
            }
    Ответ написан
    Комментировать
  • Как реализовать действие через n-секунд (см. внутри)?

    GavriKos
    @GavriKos
    Есть по сути ровно два подхода.
    Первый - если вам надо чтобы программа сама разблокировалась - то нужен таймер. Обычно для всяких формочек существует компонент "таймер". Ну и привязываетесь там к времени и по истечению разблокируете форму.
    Второй. Программа сама никак ничего не меняет в своем состоянии. Однако при попытке авторизации если время не истекло - то выводится сообщение о блокировке по времени. Тут все проще - вам нужна переменная когда можно в след. раз авторизовываться, и в авторизации сначала сравниваете ее с текущим времнем
    Ответ написан
    Комментировать
  • Как создать pci-e устройство?

    gbg
    @gbg Куратор тега Электроника
    Любые ответы на любые вопросы
    1) Начнем с того, что с логической точки зрения, RS232 и UART полностью идентичны.

    2) Переходник нужен только для того, чтобы сопрячь микроконтроллер, у которого внутри нет физики интерфейса PCI-E c интерфейсом PCI-E. Если у вас на руках контроллер или ПЛИС с таким интерфейсом, то и преобразователь вам не нужен.

    3) Для работы с шиной PCI-E нужно соблюсти крайне жесткие требования к разводке платы между слотом и той микросхемой, куда PCI-E идет. Если вы нуб в электронике, пропасть в знаниях слишком велика, вам придется или сделать 5-10-100 промежуточных проектов, или взять готовую и отлаженную плату вроде Arduino MKR Vidor 4000. Без опыта разводки многослойных ВЧ плат вы угробите кучу времени (и денег, дома вы такую плату не сделаете, если вы не живете на заводе по производству плат - придется каждую итерацию заказывать на заводе).

    4) Идея работать напрямую с памятью через UART - это сразу провал, потому что максимальная скорость, на которую способен UART - ну мегабит 16, это еще надо их из него вытянуть, а память может прокачивать в худшем случае 10 гигабит. Я повторяю. в худшем случае.

    То есть, как учебный проект это все похвально и интересно, как рабочий - не работоспособно от слова "совсем".
    Ответ написан
    Комментировать
  • Как создать Bitmap большого размера в C#?

    Ну во-первых точно не получится использовать стандартный Bitmap.
    Хранить в куче такой большой объект тоже не следует, тк он 100% попадёт в LOH
    + в .NET есть ограничение в 2гб на объекты в управляемой куче.
    Описанное вами изображение как раз в этот лимит и не влезет.

    Остаётся два с половиной варианта:
    1. Делить огромное изображение на чанки по меньше (либо по пикселям, либо по каналам, либо и так и так)
    2. Хранить изображение в неуправляемой памяти, выделять и освобождать память вручную.
    В .net 6 как раз добавили Native alloc API для этого.
    3. Возможно есть какая-нибудь нативная библиотека для работы с большими изображениями.
    Возможно даже уже есть обёртка для работы с ней.

    Во всех случаях придётся отказаться от Bitmap и использовать другие подходы
    без доп. библиотек и массива битмапов

    Не получится
    Ответ написан
    9 комментариев
  • Что значит после класса?

    @Mercury13
    Программист на «си с крестами» и не только
    Шаблонный класс.
    Гугли «Java Generics»

    String — Input parameter type
    Integer — progress report type
    String — result parameter type
    Ответ написан
    Комментировать
  • Скачать компьютерную Флэш игру на свой сайт?

    gbg
    @gbg
    Любые ответы на любые вопросы
    Была такая технология в мобильном браузере Dolphin на андроид, причем была еще лет 10 назад. Они запускали флешовый ролик у себя на сервере, а клиенту стримили с него видео-аудио. Работало жутко (качество видео было на минималках, все шло кубиками), но работало.

    Мораль такова - современные технологии позволяют засунуть что угодно куда угодно. Вопрос только в отношении затрат / выгоды
    Ответ написан
    1 комментарий
  • Как использовать массив в другой части программы?

    samodum
    @samodum
    Какой вопрос - такой и ответ
    Бери и используй.
    Но для этого надо изучить программирование и почитать книжки
    Ответ написан
    Комментировать
  • C# .NET в Линукс. Хочу попробовать. Кто отговорит?

    samodum
    @samodum
    Какой вопрос - такой и ответ
    Всё зависит от того насколько кривые у тебя руки.
    Можно сделать тормозное говно, а можно написать прекрасное быстрое приложение практически не потребляющие ресурсы
    Ответ написан
    Комментировать
  • Есть ли Roadmap C# для Web разработчика?

    hottabxp
    @hottabxp
    Сначала мы жили бедно, а потом нас обокрали..
    1 комментарий