Задать вопрос
  • Как рассчитать размеры блока с сохранением пропорций не превышая заданной ширины и высоты?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Чистая математика.

    Предлагаю такой алгоритм. Сначала считаем, превышен ли размер (по каждой оси отдельно). Если превышен, то считаем коэффициент превышения:
    2800/1000 = 2.8
    700/400 = 1.75
    Если не превышен, то коэффициент будет равен 1.
    Далее смотрим, какой из коэффициентов больше (функция Math.max). Выбираем его.
    И если он больше 1, то делим ширину и высоту прямоугольника на этот коэффициент.
    Пропорции будут примерно сохранены (после округления). И в поле тоже влезет.

    Сорри, что без кода, но ведь и в вопросе кода нет. ;)
    Ответ написан
    1 комментарий
  • Как использует ОЗУ бесконечный цикл?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Не должно влиять на ОЗУ никак. К слову, ОЗУ - это оперативная память (RAM). То есть нагрузки на оперативную память точно нет.

    Влияние было бы, если бы в каждой итерации цикла выделялась бы новая память под что-то. А этого не происходит. Переменные у вас либо статические, либо на стеке (т.е. временные). В теории переменные на стеке могут переполнить стек, если вы используете рекурсию (это когда функция вызывает саму себя), но вы её не используете, так что всё норм.
    Ответ написан
    1 комментарий
  • Как должно выглядеть правильно регулярное выражение для поиска имени хоста?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    У вас как минимум точка не экранирована, а значит это "любой символ". Но это так, к слову.

    А ответ такой:
    def URL = "sdfgsdfg https://inclouds.bizmail.ru hgfghfhgfhgf gfhgf"
    
    print(URL.findAll(/(?<=:\/\/)[\w\d.]+/))

    Хотя и он далёк от совершенства. Более точные условия задачи помогут его улучшить.
    Ответ написан
    Комментировать
  • Существует ли ЯП с подобным синтаксисом логических операций?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Если оптимизировать скорость, то нужно использовать силу хеш-таблиц, поиск по которым занимает примерно O(1):
    const NEEDED_STATUS = { complete: true, deleted: true, updated: true}
    if (NEEDED_STATUS[status]) { /*... */ }

    Однако стоит иметь в виду два момента:
    1. Это экономия на спичках.
    2. Прирост производительности начнётся примерно, когда количество вариантов будет больше 4. Реальный прирост будет при очень большом количестве вариантов.

    Хеш-таблицы (или возможность из создания) есть практически в любом ЯП.

    Если же оптимизировать красоту и понятность кода, то я бы предложил такое:
    let is_complete = (status === 'complete');
    let is_deleted = (status === 'deleted');
    let is_updated = (status === 'updated');
    if (is_complete || is_deleted || is_updated) { /*... */ }

    При этом общий размер кода вырастет, но само условие станет более компактным и понятным. Кроме того, зачастую вот эти is_что-то нужны в других местах кода, которые тоже будут выглядеть опрятно, и в целом общее количество кода порой может даже уменьшиться.
    Этот приём возможен в любом ЯП.
    Ответ написан
    Комментировать
  • Работать в выходные или нет?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Лучший отдых - это смена вида деятельности.

    Поэтому, если работа для вас достаточно разнообразная и вы не чувствуете монотонности в ней, то можно и в выходные работать в удовольствие. Главное, не забывать про образ жизни (питание, физ. нагрузки).

    Однако есть ещё такой момент в отношении творческих профессий, что время на работу лимитировано неким умственным ресурсом, который восстанавливается только лишь со временем. Условно это 40 часов в неделю для взрослых. Дело ваше, как эти часы будут распределены (по 8 часов по рабочим, или по 6 часов всю неделю, или по 12 часов с выходным через день, или вообще абы как). Однако прыгнуть выше головы никто ещё не смог (если брать людей, а не другие формы жизни). Некоторым людям может показаться, что они работают больше, но если присмотреться, то они много пьют чая, кофе, смотрят в окошко и т.д. - такое время смело можно делить пополам. А в последнее время модно вообще работать не более 3 часов в день (программистам), но это уже спорно.
    Ответ написан
    Комментировать
  • Как сделать все возможные комбинации?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Вложенный цикл, очевидно.
    $arr = [1, 2, 3];
    $len = count($arr);
    
    $new_arr = [];
    
    for($i=0; $i<$len; $i++) {
        for($j=0; $j<$len; $j++) {
            $new_arr[] = [$arr[$i],$arr[$j]];
        }
    }
    
    var_dump($new_arr);
    Ответ написан
    1 комментарий
  • Как найти все HTML элементы, попадающие в область другого элемента?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Можно разбить на два этапа:
    1) Сначала подготавливаем массив элементов, - а именно считаем прямоугольную область каждого элемента. Теперь у нас массив прямоугольников. Исходя из того, что области меняться не будут, делаем кое-какие дополнительные вычисления для оптимизации этапа №2.
    2) При каждом выделении мышкой, решаем геометрическую задачу по поиску пересечений прямоугольников, которая уже не имеет прямого отношения к HTML, DOM и т.д.

    Навскидку могу предложить такое решение:

    Режем экран в виде невидимой сетки. Размеры ячеек вы выбираете сами. Пусть это будет сетка 10х10 ячеек. Для каждого элемента заранее считаем, в какие ячейки он попадает. То есть каждая ячейка - это массив ссылок на элементы, которые в неё попадают.

    Теперь, если юзер выделяет прямоугольником область, которая касается четырёх ячеек (2х2), то нам нужно перебирать не вообще все элементы, а лишь те, которые в этих ячейках.

    Если же юзер выбирает область побольше, которая касается уже ячеек 4х4, то элементы из внутренних ячеек автоматически попадают в результат без проверок границ.

    И, наконец, когда юзер выделяет слишком большую область, которая ложится на 9х10 ячеек, то уже выгоднее искать те прямоугольники, которые могут не попасть в результат, то есть которые в ячейках 2х10. А все оставшиеся непроверенные автоматически попадают в результат.

    Это был пример простой оптимизации, далёкой от совершенства.
    Ответ написан
    5 комментариев
  • Как правильно написать регулярное выражение?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    • слова, которые не завернуты в тег
    • нет вложенных тегов

    Следовательно, нужны слова, которые:
    • либо сразу после </ ... >
    • либо сразу после < ... />
    • либо в начале строки

    Так и запишем:
    (?<=<\/[^<>]+>|<[^<>]+\/>|^)([^<>]+)
    https://regex101.com/r/6OliJi/1

    P.S. Отдельные слова

    (?<=(?:<\/[^<>]+>|<[^<>]+\/>|^)[^<>]*)([a-zа-яё-]+)

    https://regex101.com/r/HT9qs6/1
    Ответ написан
    4 комментария
  • Как обезопаситься от кражи игры?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Строго говоря, никак. Если украдут, то судиться. У тебя же есть свидетели того, как ты разрабатываешь свою игру. Возможно, ещё какие-то концепты, которые ты не расшарил. Это всё косвенно поможет.

    Однако вряд ли кому нужна сомнительная недоделанная игра без команды разработки, то есть без тебя. Так что основную ценность представляешь как раз ты, а тебя у тебя украсть не могут. И не будь уверен, что игра обязательно сразу принесёт миллионы. Шанс есть, но это далеко не факт.

    К слову, идеи вообще никак защитить нельзя, даже авторским правом. Так что если компания посмотрит на твою игру и сделает (с нуля) примерно такую же (типа клон), то это абсолютно законно.
    Ответ написан
    4 комментария
  • Как составить regex: все, что не содержит слова "slovo1, slovo2"??

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Можно с помощью негативного просмотра вперёд/назад.
    И другими странными способами типа посимвольной проверки.

    Но вообще регулярные выражения не предназначены для сложной запутанной логики. А у вас уже маленькая база данных (из двух слов). Подобные задачи принято решать программно в два этапа:
    1) Регуляркой находится то, что удобно найти именно регуляркой.
    2) И дальше на нужном языке программирования:
    IF (найденное != "slovo1" AND найденное != "slovo2") .....
    Ответ написан
    Комментировать
  • Каким образом можно сделать ровную табуляцию в строке?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Каким образом можно сделать ровную табуляцию в строке?

    Это можно сделать способом, который обычно называют "в лоб". То есть по сути просто взять и сделать, потому что здесь нет каких-либо сложностей даже для начинающего программиста. Проблема отсутствует, как таковая.

    Не справиться может только ленивый, который желает переложить всю работу на плечи другого человека, либо несведущий в программировании человек. Судя по тому, что вы приводите код, вы всё же имеете какое-то отношение к программированию, пытаетесь сами что-то делать. Следовательно, это не второй, а первый вариант - лень.

    Очень жаль.

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

    Вот, например, у вас есть подзадача:
    мне нужно как-то посчитать количество символов во всех строках

    Отлично, ведь это отдельная подзадача, которую можно изолировать и просто решить, абстрагируясь от связей с другими подзадачами (ведь это ещё успеется):
    text.split('\n').forEach(
      (s,i)=>console.log('Символов в строка №'+(i+1)+': '+s.length)
    );

    Вероятно, вам кажется, что это не совсем то, что вам нужно. Всё верно, потому что это просто пример того, как легко можно решить отдельную простую подзадачу. А учитывая все связи, это решение придётся немного модифицировать под ваши хотелки, но это уже вы сами как-нибудь.

    Предлагаю вам следующий алгоритм ваших дальнейших действий:
    • Если вы поняли код выше и легко можете написать подобный, то, как я и ответил выше, просто решайте вашу задачу в лоб. Сложную задачу разбивайте на подзадачи. Обучение вас этому навыку выходит за рамки ответа на ваш вопрос, но вы можете начать с Википедии.
    • Если вы с трудом поняли код выше или вообще ничего не поняли, но хотели бы понять, то подтяните знание самого языка. Без таких базовых понятий, как "массив" или "цикл", программировать практически не получится вообще. Объяснение основ выходит за рамки ответа на ваш вопрос, но вы можете начать с чтения учебника.
    • Если вы не хотите ни в чём разбираться, а просто хотите, чтобы вам предложили готовое решение и чтобы оно просто работало, то подтяните ваше умение формулировать, чего именно вы хотите. Текущий ваш вопрос сформулирован сумбурно, в стиле "чтобы у меня всё было, и мне за это ничего не было". При таком подходе придётся слишком долго ждать телепата 80 лвл. Лучше будет красиво, коротко и ясно объяснить детали, чтобы помочь смог любой специалист без уточняющих вопросов. Увы, объяснение принципов того, как задавать вопросы, снова выходит за рамки ответа на ваш изначальный вопрос, но вы можете начать с чтения правил этого ресурса. Хотя лаконично формулировать мысли они вас не научат. Но ведь надо же с чего-то начинать, верно?
    Ответ написан
    Комментировать
  • Какой процент комментариев на хабре проходит модерацию?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Тебе кажется.

    Если у тебя нет полноценных прав на комментирование, то твои комментарии должны быть одобрены хотя бы автором статьи. А если автору лень или если он не читает комментарии, то и одобрения нет. Ну и одобрение может прилететь не сегодня и не завтра, а через неделю, всё это время комментарий будет висеть "на модерации".

    ПРЕмодерацию проходит очень небольшой процент комментариев. Примерно 1%. Сужу по комментариям к моим статьям.
    Ответ написан
    Комментировать
  • Как выложить игру в steam?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Чтобы выложить игру, нужно заплатить 100$, оформить всё и подождать две недели.
    Ответ написан
    Комментировать
  • Как исправить ошибку "CreateTexture2D: due to removed device"?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Да, что-то с драйверами.

    Или с переключением между картами. Возможно, у тебя две видеокарты - встроенная и дискретная, и система определённым образом настроена, чтобы переключаться между ними при запуске игр и т.д. Только это приходит в голову на "removed device".

    Также попробуй убрать разгон. Пусть видяха работает чуть медленнее, зато надёжнее. И в целом проверь, не перегревается ли она, мало ли.
    Ответ написан
  • Как функцией "если" проверить условия разных диапазонов?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Если информация есть в первом диапазоне и если информация есть во втором диапазоне, то отобразить данные в целевой ячейке, что бы ни подразумевалось под словом "есть" (следует придумать формулу) и какие бы данные ни были (следует придумать выражение для вычислений).

    То есть логика такая:
    =ЕСЛИ(И(..... ; .....); ..... ; "")

    P.S. Хоть это и не относится напрямую к вопросу, но на всякий случай дополню. Проверить наличие информации можно, например, так:
    =СЧЁТЕСЛИ(A1:A99;"Москва")>0
    Будет истиной, если и только если "Москва" есть в указанном диапазоне.
    Ответ написан
    Комментировать
  • Алгоритм перевода RGB-компонент в длину волны?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Если цвет как бы чистый, т.е. светит на одной длине волны (и с одной конкретной частотой), то он будет соответствовать какому-то одному конкретному "цвету": либо R, либо G, либо B, либо что-то между ними. И если между, то глаз может вообще это не увидеть.

    На этом принципе построены светодиодные лампы. Зачем тратить электричество на свет в том диапазоне, который не видно?

    Естественный же свет - это обычно целый спектр. И RGB - это всего лишь 3 точки на нём (условно). Вот я набросал пример спектра:
    spoiler
    614b1f51996c6771307024.png

    А теперь главный вопрос. Ну, предположим, мы смирились с тем, что из всего спектра нам известны всего 3 значения. В конце концов таково человеческое зрение, ничего не поделаешь. И нашли функцию преобразования к длине, то есть к единственному числу. Тогда как в таком случае из единственного числа снова получить три значения RGB? Никак.
    Ответ написан
  • Почему скомпилированная программа детектится вирус тоталом?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Совпадение с базой, либо эвристика, либо действительно вирус.

    У меня был реальный случай, как знакомый написал утилиту и раздавал другим знакомым, поддерживал её. Тот факт, что антивирус ругается, просил игнорировать, типа ложное срабатывание. Мне стало интересно, какой именно вирус нашёл антивирус, и я стал копать (по названию вируса). Оказалось, что этот вирус действительно был, он сидел в самом компиляторе и заражал все компилируемые программы. Мне пришлось потом рассказать, и этот знакомый даже вроде немного обиделся, ибо я выставил его лохом каким-то.

    Ну а так смотри на гигантов. Например, DrWeb и Касперский. Если они молчат, то у других антивирусов скорее всего ложное срабатывание. Антивирус может быть заточен на "лучше перебздеть, чем недобздеть", такие настройки мало подходят для домашнего пользования, зато подходят для организаций, где желателен только популярный и проверенный временем софт. Кроме того, если в названии вируса есть слово "подозрительный" ("suspicious"), то это лишний раз указывает, что вирус не был найден, а сработала эвристика.
    Ответ написан
    Комментировать
  • Может ли ios app перезагрузить девайс?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Нет.
    Ответ написан
    Комментировать
  • Как вставить в строки числа?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Быстрый вариант решения:
    1. Выделить ячейки с только что вставленными данными.
    2. Нажать Ctrl+H
    3. Ввести в "найти" точку, а в "заменить на" - запятую.


    Надёжный вариант решения:
    1. Вставить сначала в текстовый редактор, например в Notepad++
    2. Нажать Ctrl+H
    3. Ввести в "найти" точку, а в "заменить на" - запятую.
    4. После замены результат уже скопировать в Google Sheets.
    Ответ написан
    Комментировать
  • Как заменить %s на число?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Есть такое:
    console.log(`${s} штук`);
    console.log(`Hello ${name}`);
    Ответ написан