• Как сделать постепенное увеличение урона за отсутствие N-ово кол-ва здоровья?

    dollar
    @dollar Куратор тега Lua
    Делай добро и бросай его в воду.
    Введём доп. величины для удобства изложения:
    local startDamage = damage -- Начальное значение на отрезке
    local endDamage = damage * maxMulty --Конечное значение

    Итак у нас есть startDamage, endDamage и percHP. Нам нужно скалировать значение урона от начального до конечного, в зависимости от процента. Показываю на пальцах, как дойти до формулы самому.
    • Очевидно, что когда percHP==1, мы берём startDamage.
    • Очевидно, что когда percHP==0, мы берём endDamage.
    • Что же брать, если percHP==0.5? Очевидно, среднее арифметическое. То есть (startDamage + endDamage)/2, или что то же самое startDamage/2 + endDamage/2

    И здесь уже виден намёк на то, какой будет формула. На 50% мы берём половину от начального и половину от конечного значения. На 60%, очевидно, надо брать 40% от начального и 60% от конечного.
    Значит, формула такая:
    startDamage * percHP + endDamage * (1 - percHP)
    Можно, конечно, подставить теперь сюда ваши переменные, но не советую этого делать, так как в текущем виде формула максимально проста и понятна.

    В мире программирования функцию линейной интерполяции принято называть lerp, хотя это дело вкуса. Тут важно, что она не связана с хп, а пишется в общем виде (немного адаптировал к данному вопросу):
    local function lerp(start_val, end_val, perc)
      return start_val * perc + end_val * (1 - perc) 
    end

    Если объявили эту функцию, то ниже можно будет писать:
    lerp(damage, damage * maxMulty, percHP)

    Если объявить функцию глобально, то можно будет использовать её в прерываниях в любом месте проекта. Глобально объявляется без слова local:
    function lerp(start_val, end_val, perc)
      return start_val * perc + end_val * (1 - perc) 
    end

    Проверка:
    print(lerp(100,400,0.9)) -- 130
    Ответ написан
    3 комментария
  • Как в гугл-таблицах весь столбец констант увеличить на 10% не меняя структуру и форматирование таблицы?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Можно скопировать столбец в другой лист/книгу, там увеличить на 10%, создав ещё один столбец рядом, а потом новый столбец с новыми данными скопировать обратно в исходную таблицу в режиме "Специальная вставка -> Только значения".
    Ответ написан
    1 комментарий
  • Обязательно нужно минифицировать файлы?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Не обязательно.
    Ответ написан
    Комментировать
  • Можно ли и как создать виртуальную карту qiwi api?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    В мире программирования можно всё. Но на практике ваши хотелки могут противоречить хотелкам других людей, так что спрашивать нужно именно у них, можно или нет. Это я намекаю на тех. поддержку qiwi

    P.S. В теории здесь может и найдётся человек, который сможет ответить, но фактически вопрос нарушает п.2.3 правил.
    Ответ написан
    Комментировать
  • Как программисты хранят частоиспользуемые куски кода, чтобы каждый раз не вспоминать заново?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Программисты такое не забывают, чтобы где-то хранить. Забыть можно названия функций, коих 100500 в различных API. Но синтаксис и стандарты языка - это как бы алфавит. Вот вы часто забываете алфавит? Сможете сейчас его воспроизвести: "а", "б", "в"... ? А если другой язык: "a", "b", "c"... ? Также и (настоящие) программисты помнят подобное, как основы основ.

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

    dollar
    @dollar
    Делай добро и бросай его в воду.
    1) Защиты на 100% не существует. Это аксиома.
    Всегда есть терморектальный способ взлома, при котором вы сами отдадите взломщику все пароли и покажете, куда и как их вводить. Ну а так программу шифрования на системном уровне можно считать высоким уровнем безопасности (если без интернета). Даже если ноут украдут, без пароля достать информацию не смогут, ценность будет представлять лишь сам ноут.

    В любом случае, надо заранее понять, от кого защита. Потому что одна и та же защита от соседа будет на 99% защищать, а от товарища майора на 1%. Это как пример. Главное здесь понимать, что 100% достичь невозможно.

    2) Без Интернета можно через флешку передавать относительно безопасно. (см п.1 про 100%-ю безопасность). Даже если вирус на флешке попадёт на ноут, то он ничего не сможет украсть (ведь интернета нет). Самое худшее - это порча файлов и самого ноута, но это маловероятно, и на этот случай должны быть бэкапы. Ну и нужно очень постараться, чтобы запустить сам вирус с флешки, он же прописывает себя в конкретных файлах. Просмотреть скрытые файлы сумеет даже школьник.

    P.S. Есть микроскопический шанс, что специально под ваше поведение будет написан вирус, который умеет ворованные данные писать на флешку в надежде, что другая часть этого вируса примет эти данные на ПК с интернетом и полноценно отправит злоумышленнику. Но шанс настолько мал, что думать об этом не стоит. Плюс см. выше про то, что можно не запускать вирус с флешки (а иметь дело только с документами, картинками, звуком и видео, в общем с данными).
    Ответ написан
    3 комментария
  • Можно ли платно заходить через какой-то сервер на заблокированный сайт?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Платно можно практически всё. ;)

    Как пример, настройка frigate3 примерно такая:
    spoiler
    61f135012bdd7949965813.png
    Прочие сайты идут напрямую, в обход прокси.

    Если мало доверия к frigate3 (или любому другому расширению, скачанному не из магазина), то можно ограничить права в настройках (пример с chrome):
    spoiler
    61f1358f9cd9c931544206.png

    Какой конкретно прокси выбрать - это уже дело вкуса. Можно и платно, и бесплатно.
    Для заблокированных подойдёт antizapret.
    spoiler
    61f136936107d281204705.png

    Сервера в дата-центрах обычно не имеют блокировок РКН при доступе с них в интернет. Так что для максимальной скорости лучше арендовать сервер в своём городе, если нужна реально самая максимально возможная скорость и бесплатный прокси не устраивает.
    Ответ написан
    Комментировать
  • Как переделать регулярное выражение lookBehind?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    цель: удалить все запятые из кода, кроме первой

    Не используя lookBehind, переделать можно так:
    let str = "1,,0,0,";
    let arr = str.split(',');
    str = arr.splice(0,1) + ',' + arr.join(''); // 1,00
    console.log(str);

    Но если нужно, чтобы не спотыкалось на ",1,00" или "1", то нужно ещё чуть-чуть переделать, добавив немного кода.
    Ответ написан
    Комментировать
  • Инвариант в линейном поиске?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    1. A[i] ∈ A
    2. i ∈ {0, ...A.length - 1} или i ∈ {}

    Как по мне, такой инвариант будет несколько бесполезен, поскольку не позволяет доказать правильность алгоритма (по индукции). Также "или i ∈ {}" ещё более бесполезное дополнение к условию, поскольку, хоть и не делает инвариант неверным, но делает его слабее, ведь внутри цикла (да и после него) в i всегда какое-то число.

    Имхо, хороший инвариант:
    В элементах A с индексами до [i-1] включительно не содержится v.
    Ответ написан
    Комментировать
  • Как организовать сетевую ( интернет) коммуникацию между девайсами, БЕЗ IP?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Совсем без IP - никак.

    А так можно, чтобы девайсы сканировали весь Интернет на предмет наличия друг друга. Когда выяснены ip и порты друг друга, то дальше уже можно натягивать шифрованные каналы и т.д. Те девайсы, которые с белыми (выделенными) ip, могут взять на себя роли временных серверов и координировать остальных. Как-то так.

    DNS - вообще практически не нужен. Он для людей, а не для девайсов. Но если его использовать как систему регистрации ip, то польза есть, но тогда нарушается условие про децентрализацию. Если уж мутить координацию через сервер, то есть и другие решения, помимо dynamic dns.
    Ответ написан
    3 комментария
  • Как написать регулярное выражение для роутов?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Просмотр назад нужен, если по-простому исправлять:
    regex = /(?<=:)([a-z0-9_]*)/gi;

    Ещё можно через цикл сделать. А так вообще зависит от условий. Если структура всегда такая, ровно 4 секции, ровно две из них с двоеточием, и меняются только a-z, то решение я написал выше, иначе нужно будет усложнять регулярку и/или сопутствующий код.
    Ответ написан
    2 комментария
  • Какое расширение для браузера Google Chrome позволит осуществлять поиск с использованием регулярных выражений?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Если это форум, то поиск там происходит на стороне сервера.
    Поэтому ответ - никакое.

    Как вариант, можно выкачать весь форум целиком, и у себя уже локально осуществлять поиск по всей "базе данных". Но это начало ответа уже на совсем другой вопрос.
    Ответ написан
    Комментировать
  • Как исправить ошибку Cannot set properties of null (setting 'className')?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Для начала:
    var textel = document.getElementById(id)
    if (!textel) return console.error("HTML id not found:", id);

    А дальше методом исключения пробуй и щупай в консоли.
    Ответ написан
    Комментировать
  • Почему значение переменной изменилось до вызова функции?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Потому что консоль получает значение counter и кеширует его в тот момент, когда вы кликаете на [[Scopes]].

    Проведите простой эксперимент:
    1. Вручную console.dir(innerFunc); Но не раскрывайте пока что.
    2. Несколько раз вручную innerFunc();
    3. Раскройте [[Scopes]] и посмотрите значение. Закройте.
    4. Ещё несколько раз вручную innerFunc();
    5. Снова раскройте [[Scopes]] и посмотрите значение.
    Ответ написан
    Комментировать
  • Как написать регульярное выражение?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    если существует любые буквы или буквы + \n или отдельно \n то текст валиден.

    Ответ: ^[a-zA-Z]*\n?$
    Примеры:
    /^[a-zA-Z]*\n?$/.test("asd") //true
    /^[a-zA-Z]*\n?$/.test("asd\n") //true
    /^[a-zA-Z]*\n?$/.test("asd\n\n") //false
    /^[a-zA-Z]*\n?$/.test("asd asd") //false
    /^[a-zA-Z]*\n?$/.test("123") //false
    /^[a-zA-Z]*\n?$/.test("asd123") //false
    /^[a-zA-Z]*\n?$/.test("\nasd") //false
    /^[a-zA-Z]*\n?$/.test("\n") //true
    /^[a-zA-Z]*\n?$/.test("") //true

    P.S. "Любые буквы" включает также и их отсутствие, т.к. на пустом множестве верно любое утверждение. Если пустота не валидна, то это нужно оговаривать (и проверять) отдельно.

    P.P.S. Обычно перед тем, как скармливать "грязный" текст регулярному выражению, полезно выполнить .trim(), чтобы убрать пробельные символы в начале и в конце текста (но не в середине). Это избавит от необходимости помнить, что в конце может быть \n или случайно нажатый пробел (например, при вводе логина или пароля) и т.п.
    Ответ написан
  • Как научиться писать большие проекты в одиночку и не сойти с ума?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Декомпозиция
    Ответ написан
    Комментировать
  • Как работать двум людям одновременно на ПК, 1й хост, 2й по RDP?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    TeamViewer

    Выбирайте "для личного использования" (при установке или при запуске без установки).
    Ответ написан
  • Может ли VPN ускорять интернет?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Торренты в теории могут ускоряться от VPN, если у вас серый ip, а канал при этом большой. Лично у меня канал 100 Мбит, но при закрытых портах скорость торрентов не выше 20 Мбит, а при открытых портах скорость на максимуме. Но это не ускорение самого Интернета от провайдера, а преодоление ограничений. VPN может убрать одно ограничение, но сам по себе тоже является ограничением. То есть это своеобразный обмен одного зла на другое (в плане скорости). И обмен этот не всегда выгодный.

    Ограничения бывают разные (узкое горлышко). Какие ограничения именно у вас - вам виднее. Это может быть и провайдер, который режет торрент-трафик (а в случае с VPN он не может распознать тип трафика). Это может быть и ограничение на роутере, а также какой-то ограничитель на уровне системного софта (типа firewall) и т.д.

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

    И конечно же, особое место занимает РКН, который в принципе вносит нестабильность в работу некоторых программ, для которых нужны облака и всё такое. В этом случае VPN убирает эту "нестабильность", поскольку с точки зрения провайдера вы подключаетесь лишь к одному серверу. То есть начинает работать принцип "всё или ничего". Правда, к скорости торрентов это уже практически не относится.
    Ответ написан
    Комментировать
  • Почему отличаются данные в массиве объектов при простом выводе и обращении по индексу?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Попробуйте в консоли такое:
    obj={x:0}; console.log(obj); obj.x=123;

    Надеюсь, понятно, что здесь произошло.
    Ответ написан
    Комментировать
  • Как удалить все в строке после последнего пробела через Notepad++?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Удаляет цифры после последнего пробела (и только цифры):
    Найти: ^(.*) \d+$
    Заменить на: \1
    картинка
    61e51dcc8188c100211313.png
    Ответ написан
    2 комментария