Ответы пользователя по тегу JavaScript
  • Нужна регулярка для строки аргументов, как реализовать?

    ProgrammerForever
    @ProgrammerForever
    Учитель, автоэлектрик, программист, музыкант
    Можно и без регулярок:
    function test_f(){
    	let s;
    	s = "123 check";
    	console.log(`${s} --> ${f(s," ")}`)
    	s = "ok check";
    	console.log(`${s} --> ${f(s)}`)
    	s = "россия, москва";
    	console.log(`${s} --> ${f(s)}`)
    	s = "россия москва";
    	console.log(`${s} --> ${f(s)}`)
    	s = "привет хабр, вопрос";
    	console.log(`${s} --> ${f(s)}`)
    	s = "привет хабр";
    };
    
    f = function(s, delimiter){
    	delimiter = delimiter || ",";
    	let a = (s+"").split(delimiter).map(x=>x.trim());
    	return (a.length<=1)?null:a;
    };
    Ответ написан
    Комментировать
  • Как составить формулу зависимости?

    ProgrammerForever
    @ProgrammerForever
    Учитель, автоэлектрик, программист, музыкант
    Если срок увеличивается - процент уменьшается

    p ~ 1/t
    Процент обратно пропорционален времени

    если сумма увеличивается - процент тоже увеличивается

    p ~ m
    Процент пропорционален деньгам

    Если объединить обе мысли, получится
    p=k*m/t;
    m - деньги
    t - время
    k - некий коэффициент пропорциональности, подбирается опытно или из соображений краевых условий
    Ответ написан
    Комментировать
  • Что делает нижеприведённый метод window в js?

    ProgrammerForever
    @ProgrammerForever
    Учитель, автоэлектрик, программист, музыкант
    Кто-то сделал
    window.params_card = {};
    т.е. добавили в глобальный контекст новое поле. Можно посмотреть значение в консоли F12, набрав
    window.params_card
    без скобок
    Ответ написан
  • Как сделать пользовательскую функцию для гугл-таблицы?

    ProgrammerForever
    @ProgrammerForever Куратор тега Google Sheets
    Учитель, автоэлектрик, программист, музыкант
    А не проще ли так считать ссылки? (считает в столбце A):
    =СЧЁТЗ(ЕСЛИОШИБКА(filter(A:A;REGEXMATCH(A:A;"(https?:\/\/)?([\w\.]+)\.([a-z]{2,6}\.?)(\/[\w\.]*)*\/?"))))
    Ответ написан
  • Как получить число из инпута в массив?

    ProgrammerForever
    @ProgrammerForever
    Учитель, автоэлектрик, программист, музыкант
    Просто преобразовывайте в числа
    let array = inputVal.split(',').map(x=>+x);
    Ответ написан
    Комментировать
  • Чем друг от друга отличаются эти три выражения?

    ProgrammerForever
    @ProgrammerForever
    Учитель, автоэлектрик, программист, музыкант
    1)
    var i = 0;
    if( (function(){return i%2==0})(i) ){
      console.log(i);
    };

    в условии функция, вызванная с глобальной i=0, вернет true, в консоль выведется 0

    2) То же самое, что 1). Только в 1) функция обернута в скобки, и то что в скобках - вызывается, в 2) в скобки обернут результат вызова. В консоль - 0.

    3) Нет вызова функции внутри скобок, но сама функция интерпретируется как true, и получаем тот же 0 в консоли.

    Зачем это всё? В образовательных целях?
    Ответ написан
    2 комментария
  • Как определить лидерство в матче?

    ProgrammerForever
    @ProgrammerForever
    Учитель, автоэлектрик, программист, музыкант
    const totalTime = 90;
    const a = [12, 34, 56];
    const b = [45];
    
    let score = 0;
    let aWin = 0;
    let bWin = 0;
    let draw = 0;
    for (let i=0;i<totalTime;i++){
    score+=(a.indexOf(i)!=-1?1:0)-(b.indexOf(i)!=-1?1:0);
    aWin += score>0?1:0;
    bWin += score<0?1:0;
    draw += score==0?1:0;
    };
    console.log("a - " + aWin + " minutes");
    console.log("b - " + bWin + " minutes");
    console.log("a=b - " + draw + " minutes");
    Ответ написан
    3 комментария
  • Формулы 3д обектов?

    ProgrammerForever
    @ProgrammerForever
    Учитель, автоэлектрик, программист, музыкант
    Матрицы и линейная алгебра с ними связанная, используются для трансформации точек. Например, есть матрица, которая поворачивает вектор на определенный угол. Вектор(радиус-вектор), в данном случае, заменяет собой точку. Матрица, на которую надо умножить вектор (и получить другой вектор) - преобразование. Есть много всяких преобразований - проекции, вращения, масштабирование, перемещение и т.п.
    Можно всё это сделать примитивно с помощью формул школьной геометрии, но суть матриц - в том что такие операции могут быть вычислены на видеокарте, что гораздо быстрее.
    1) Углубиться в линейную алгебру - понятие векторов, матриц, преобразований матриц, умножение и т.п.
    2) Углубиться в геометрию, хватит школьного уровня - векторы и операции с ними.

    Если нужно "только нарисовать", то можно обойтись школьной математикой:
    Xпроекции = X*cos(xx) + Y*cos(xy) + Z*cos(xz)
    Yпроекции = X*cos(yx) + Y*cos(yy) + Z*cos(yz)

    ,где
    xx - угол между новой осью X и старой X (0)
    xy - угол между новой осью X и старой Y (90)
    xz - угол между новой осью X и старой Z (240)
    yx - угол между новой осью Y и старой X (-90)
    yy - угол между новой осью Y и старой Y (0)
    yz - угол между новой осью Y и старой Z (150)
    Углы в скобках - как пример, когда ось Z находится в 3 четверти под 45 градусов.
    Тогда:
    Xпроекции = X + Z*cos(xz)
    Yпроекции = Y + Z*cos(yz)

    Берите объект как массив точек (для начала куб например - 8 точек) и присваивайте сначала координаты XYZ, а потом пересчитывайте их по этой формуле и отображайте на экране. И всё будет работать.
    PS: в школе ещё, как только появились векторы, дошел до этих формул сам; пока выводил - исписал 12листовую тетрадку.
    Ответ написан
    Комментировать
  • Зачем в этой функции сдвиг?

    ProgrammerForever
    @ProgrammerForever
    Учитель, автоэлектрик, программист, музыкант
    1) ([1e7]+-1e3+-4e3+-8e3+-1e11) - формируется строка "10000000-1000-4000-8000-100000000000"
    2) .replace(/[018]/g,c= - пробегаемся по символам, и с каждым 0, 1 и 8 делаем что-то
    3) 15 >> c/4 - 0,1,8 => 15,15,3
    4) crypto.getRandomValues(new Uint8Array(1))[0] - случайное число 0..255
    5) crypto.getRandomValues(new Uint8Array(1))[0]&15 >> c/4 - побитовое И сужает 0..255 до 0..15 или 0..3 (если с=8)
    6) c^crypto.getRandomValues(new Uint8Array(1))[0]&15 >> c/4 - 0 или 1 или 8 XORятся с 5)
    7) Что получилось - переводится в HEX и возвращается вместо символа

    Сдвиг и XOR ( 3) и 6) ) вероятно нужны для большей энтропии, хотя работает и без этого.
    Ответ написан
    1 комментарий
  • Как нарисовать луч функцией исходя из двух точек и на луче вычислить пересечение перпендикуляра от третей точки?

    ProgrammerForever
    @ProgrammerForever
    Учитель, автоэлектрик, программист, музыкант
    1) Вычислить уравнение прямой, походящей через точки 1 и 2
    (x − x₁) / (x₂ − x₁) = (y − y₁) / (y₂ − y₁)
    выражаем у через х, получим уравнение
    y = a₁x + b₁
    2) Построить перпендикуляр из точки к прямой из пункта 1)
    (y – y₃) = -1/a₁ * (x - x₃)
    и выразить у через х, получится
    y = a₂x + b₂
    3) Есть уравнения прямых - надо найти пересечение, т.е. решить систему двух линейных уравнений. Тут методов масса - от простых преобразований до матриц. т.к. у нас уравнения в виде y=f(x), то можно сделать так:
    приравниваем уравнения 1 и 2, избавляемся тем самым от y
    вычисляем x
    подставляем найденное x в любое уравнение
    Ответ написан
    1 комментарий
  • Как сделать код индивидуальным для каждого пользователя?

    ProgrammerForever
    @ProgrammerForever
    Учитель, автоэлектрик, программист, музыкант
    Может использовать конечный автомат для отслеживания "состояния" пользователя?
    Ответ написан
  • Как заставить работать скрипт в google forms по отправке формы?

    ProgrammerForever
    @ProgrammerForever Куратор тега Google Apps Script
    Учитель, автоэлектрик, программист, музыкант
    Если код ранее не запускался вручную, то надо запустить и разрешить гуглу работать с этим скриптом. С пользовательскими функциями в таблицах та же беда - пока не запустишь в рукопашку из редактора кода - не работают в таблице.
    Ответ написан
    Комментировать
  • Как исправить ошибку, (проверка на столкновение) Game?

    ProgrammerForever
    @ProgrammerForever
    Учитель, автоэлектрик, программист, музыкант
    Сочетание for..in и изменения массива в самом цикле - возможно дело в этом
    Ответ написан
    Комментировать