• Как сгруппировать массив по его значениям?

    kimono
    @kimono
    Web developer
    $week = [
      'Понедельник' => [0 => '9:00', 1 => '19:00'],
      'Вторник'     => [0 => '9:00', 1 => '19:00'],
      'Среда'       => [0 => '9:00', 1 => '19:00'],
      'Четверг'     => [0 => '10:00', 1 => '14:00'],
      'Пятница'     => [0 => '9:00', 1 => '19:00'],
      'Суббота'     => [0 => '9:00', 1 => '19:00'],
      'Воскресенье' => [0 => '10:00', 1 => '16:00']
    ];
    
    $data = [];
    $current = '';
    $i = 0;
    
    foreach ($week as $day => $schedule) {
      if ($current !== $schedule) {
        $current    = $schedule;
        $data[$i++] = ['start' => $day, 'end' => $day, 'time' => implode(' - ', $schedule)];
      }
      $data[$i - 1]['end'] = $day;
    }
    foreach ($data as $id => $row) {
      $data[$id] = [implode(' - ', array_unique([$row['start'], $row['end']])) => $row['time']];
    }
    var_dump($data);

    на выходе:
    'Понедельник - Среда' => '9:00 - 19:00'
    'Четверг' => '10:00 - 14:00'
    'Пятница - Суббота' => '9:00 - 19:00'
    'Воскресенье' =>  '10:00 - 16:00'
    Ответ написан
    Комментировать
  • Как убедить начальство отказаться от велосипедов?

    evnuh
    @evnuh
    Поиск Гугл помог мне, впусти и ты его в свой дом
    Не волнуйтесь, вас уволят и правильно сделают. И вот почему.
    Начну со стороны хорошего бизнесмена:
    У него уже есть cms и crm, которую он пилил 5 лет, умеет продавать и знает. Да, так получилось, свой велосипед, ужасно написанный, но это его не волнует до тех пор, пока она кормит и его и всех его подопечных. Отказаться от неё означает не только огромные временные затраты на смену всего, начиная от обучения программистов как её пилить, заканчивая обучением всех, кто будет её касаться. Так же это означает поддержка уже двух систем, старых клиентов со старой и новых с новой. Но самое главное - это высокий риск того, что продавать её будет тяжелее.

    Со стороны хорошего разработчика:
    А хорошему разработчику вообще до фени, с чем ему работать. Спросите у опытных. Эмоционировать при виде говнокода и велосипедов - это максимализм юного программиста. Разработчики с опытом умеют погружаться в любой велосипед, в любой говнокод и работать с ним. А потому что они уже навидались и в своё время тоже кричали и пытались перевернуть мир, но, кому это надо? Вы - наёмный работник, вы не должны писать красивый код, вы должны решать бизнес задачи. Бывалые так и делают, просто иногда про себя вздыхая, т.к. чувство прекрасного всё же не убить :)
    Ответ написан
    18 комментариев
  • Как убедить начальство отказаться от велосипедов?

    Matvey-Kuk
    @Matvey-Kuk
    Разработчик в Cisco, CA.
    Уходить.
    Ответ написан
    Комментировать
  • Как решить задача связанную с такой арифметической прогрессией?

    @throughtheether
    human after all
    Значение на i-том месте (начиная счет с единицы) равно 2i(i-1). Если надо найти индекс значения, то необходимо решить квадратное уравнение вида 2i(i-1)=A, где i-переменная.
    Ответ написан
    1 комментарий
  • Как часто вы используете/нужно исользовать паттерны проектирования и построении api?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Вы должны понимать зачем вообще нужны паттерны. Со временем вы можете и без книг придти к каким-то типовым решениями и т.д. То есть вы можете как-нибудь взять туже "банду четырех" и так вот... смотришь свой код и "а, так вот как это называется".

    Например почти каждый javascript разработчик писал что-то в духе...

    var api = (function() {
        // какие-то приватные вещи, к которым не стоит давать доступ из вне
        // что бы все было чистенько
        var privateVars =  {};
     
        // публичный метод
        return function () {
             
        }
    }();


    Но сказать что это "шаблон модуль" могут не все. В случае с CommonJS оно происходит автоматически, но суть остается той же. Думаю добрая половина даже не знают что все это ради инкапсуляции.

    Суть не в том что бы использовать шаблоны (важно понимать почему вообще они появились), так как вы так или иначе их будете использовать, а больше в общей терминологии. Это сокращает время требуемое на обсуждение реализации.

    p.s. пользуюсь постоянно, в контексте Angular реализую даже сервисный слой, что бы вся бизнес логика была вне контроллера и последний использовался для отделения бизнес логики от логики представления.
    Ответ написан
  • Как решаются задачи на вероятность?

    @Alexander1705
    Конкретно эту задачу можно решить так:

    И так, у нас p - вероятность нападения разбойников, 0 <= p <= 1. Пускай q - вероятность выйти из леса.
    Рассмотрим какие варианты событий могут произойти и с какой вероятностью:
    1. С вероятностью 0,(3) богатырь выходит из леса.
    2. С вероятностью 0,(6)*p нападают разбойники.
    3. С вероятностью 0.(6)*(1-p) богатырь проходит в другой город. (рекурсивный вариант)

    Так как 3 вариант рекурсивный, он не меняет соотношение вероятностей выйти_из_леса и нападения_разбойников. Значит в итоге соотношение будет 0,(3) к 0,(6)*p, а их сумма будет равна единице.

    Получаем уравнение:
    q / ( 1 - q ) = 0.(3) / ( 0.(6) * p )

    Решаем, получаем следующее выражение:
    q = 0.(3) / ( 0.(6)*p + 0.(3) )
    Ответ написан
    Комментировать
  • Как удалить запрещенные символы из строки?

    adugin
    @adugin Куратор тега Python
    >>> s = 'abc<def*gh?ikl'
    >>> s.translate(None, '\/:*?"<>|')
    'abcdefghikl'
    Ответ написан
    9 комментариев
  • Как правильно писать асинхронный код?

    dizballanze
    @dizballanze
    Software developer at Yandex
    Вы все правильно поняли, так и нужно делать. Только в if не хватает return.
    Ответ написан
    Комментировать
  • Регулярные выражения, отрицание слова?

    Всего-то и нужно, что уменьшить жадность квантификатора:
    /(x1)[\s\S]*?(x2)/u
    Посмотреть пример
    Ответ написан
    1 комментарий
  • Что лучше: передавать функцию или ее результат в аргумент?

    С точки зрения интерпретатора эти конструкции практически идентичны, единственное, в первом случае в scope создается дополнительная ссылка на результат функции.

    Так что какой вариант использовать, в данном случае - решение стилистическое:
    с одной стороны есть мнение, что если результат вычислений используется лишь в одном месте, то не стоит создавать на него ссылку,
    с другой - сворачивание кода в бессылочную конструкцию приведет к его полной нечитабельности
    funcA(funcB(funcC(funcD(5))));
    Всего должно быть в меру.
    Ответ написан
    Комментировать
  • Можно ли использовать ассоциативные массивы в качестве альтернативы операторов ветвления?

    @lPolar
    data scientist
    Кстати, Лутц в "Изучаем Python" как раз писал о том, что словари и нужно использовать в качестве операторов ветвления.
    Ответ написан
    1 комментарий
  • Как в Питоне проверять есть ли подключение к интернету?

    dizballanze
    @dizballanze
    Software developer at Yandex
    Можно как-то так:

    import subprocess
    
    internet = False
    while not internet:
        try:
            subprocess.check_call(["ping", "-c 1", "www.google.ru"])
            print("Internet is up again!")
            internet = True
        except subprocess.CalledProcessError:
            print("Internet is still down :(")
    Ответ написан
    1 комментарий
  • А в чем минусы node.js?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    В том же в чем его и плюсы.

    Асинхронность... ее там нет. Там есть event loop что позволяет писать крайне эффективные программы в плане работы с I/O (что для web очень неплохо) и не париться о таких вещях как потокобезопасность, блокировки и т.д. А если еще и несколько инстансов приложения запусть - по одному на ядро скажем, то утилизация вычислительных мощностей выйдет неплохой. Но распаралелить что-то в рамках одного процесса воркера мы уже не можем. Мы не можем посчитать что-то, проанализировать, заняться обработкой жирной картинки прямо при обработке запроса потому что наш процесс воркер так же обрабатываете еще пару десятков запросов, и пока мы будем удовлетворять нужды одного простаивать будут все. Нода хороша когда у нас все состоит из элементарных операций которые не занимают много времени, все жирное надо выносить из основного процесса и разруливать очередями и т.д. Эта проблема имеет массу решений на самом деле, но все уже усложняется и нода теряет свою красоту. Лучше взять Java/c#/Python для этого (и не надо тут вспоминать про шутки с многопоточностью в CPython).

    callback-hell. Собственно наличие event loop диктует так же правила о том, как должна писаться программа. Кучи колбэков, невозможность дебажить нормально и получить четкий стэктрейс из ошибки. Да, есть промисы которые решают первую проблему, да есть либы вроде zone.js которые решают вторую и частично первую проблему... но все это не тривиальное дело.

    Собственно... разработка больших и сложных проектов на ноде возможна... но требует от разработчика хорошие знания и понимание того, как работает его платформа. А это увеличивает стоимость разработки в то время как можно взять более эффективные в этом плане инструменты.
    Ответ написан
    10 комментариев
  • Почему многие программисты не любят javascript?

    SagePtr
    @SagePtr
    Еда - это святое
    Каждый кулик хвалит своё болото
    Ответ написан
    Комментировать
  • Как реализовать событие hover на сложных фигурах?

    Taraflex
    @Taraflex
    Ищу работу. Контакты в профиле.
    Рисуйте фигуры с помощью svg ( например raphaeljs.com )
    И вешайте обработчик как на обычный dom элемент.
    Ответ написан
    Комментировать
  • С чего начать web разработчику ?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Кем я хочу быть: Мастером Ёдой в деле веб разработки . (front+back). Сейчас только front.

    То есть по итогу спятившим зеленым каратышкой хихикающим где-то в одиночестве на богом забытой планете?
    Ответ написан
    9 комментариев
  • Как запускать скрипт php каждую минуту?

    0neS
    @0neS
    Лучше пусть при нажатии кнопки пользователем в БД или еще где-нибудь сохраняется нужная инфа, а единственный в cron'е скрипт дергает инфу и выполняет нужные действия.
    Ответ написан
    Комментировать
  • Как сделать запрос SQL?

    -- Запрос на выборку всех квартир, свободных на определенную дату
    SELECT * FROM Apartment a
    WHERE NOT EXISTS (
        SELECT 1 FROM Apartment_Dates
        WHERE apartment_id = a.id AND ? BETWEEN arrival_time AND departure_time
    );
    -- Запрос на выборку всех квартир, свободных в определенный промежуток дат
    SELECT * FROM Apartment a
    WHERE NOT EXISTS (
        SELECT 1 FROM Apartment_Dates
        WHERE apartment_id = a.id AND 
            (arrival_time BETWEEN ? AND ? OR departure_time BETWEEN ? AND ?)
    );
    -- Запрос на выборку всех квартир, занятых в определенный промежуток дат
    SELECT * FROM Apartment a
    WHERE EXISTS (
        SELECT 1 FROM Apartment_Dates
        WHERE apartment_id = a.id AND 
            (arrival_time BETWEEN ? AND ? OR departure_time BETWEEN ? AND ?)
    );
    Ответ написан
    3 комментария