Задать вопрос
  • Как выполнить проверку всех возможных вариантов?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Кажется, вам подойдёт такой простой алгоритм: перебрать все числа в двоичной записи от 1 до 2n, и брать те элементы строки, которым соответствует 1.

    Набросал функцию, подбирающую из данных элементов комбинацию, дающую наиболее близкую сумму к заданной:
    function nearest(arr, total) {
      var len = arr.length
        , i
        , bit
        , sum
        , n = Math.pow(2, len)
        , currDist
        , index = undefined
        , dist = undefined
        , result = []
      ;
      
      for( i = 1; i < n; i++) {
        sum = 0;
        for( bit = 0; bit < len; bit++) {
          if( i & (1 << bit)) sum += arr[bit];
        }
        
        currDist = Math.abs(total - sum);
        if( typeof dist === 'undefined' || dist > currDist) {
          index = i;
          dist = currDist;
          if( dist === 0) break;
        }
      }
      
      for(bit = 0; bit < len; bit++) {
        if( index & (1 << bit)) result.push(arr[bit]);
      }
      
      return result;  
    }
    
    nearest([1,3,4,6,8], 12) // [1,3,8]
    nearest([1,2,4,6,8], 12) // [2,4,6]
    nearest([7,9,13,19,28], 12) // [13] dist = 1
    nearest([7,9,13,19,28], 28) // [9,19] не [28] т.к. останавливается на первом найденном варианте
    Ответ написан
    Комментировать
  • Что быстрее и лучше map() или foreach() или for() в javascript?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Зачем гадать, если можно измерить. Например.
    Ответ написан
    Комментировать
  • Как работать с состояниями в приложений JavaScript?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Один из вариантов хранить их как битовую карту – одно целое число, где определённый бит что-то значит. В вашем случае первые 5 битов, например, отражают состояние чекбоксов:
    0000 0010
       │ │││┕╼ бит 0, чекбокс 0
       │ ││└── бит 1, чекбокс 1
       │ │└─── бит 2, чекбокс 2
       │ └──── бит 3, чекбокс 3
       └────── бит 4, чекбокс 4


    Так вы сможете чуть быстрее писать условия, напр.
    switch( bitmap) {
      case 0: // все выключены
        // загрузить что-то там
        break;
      case 1<<3: // включен только 3-й бит
        // загрузить что-то для 3-го чекбокса
        break;
      case 28: // вкл. 3, 4 и 5-й
      // ...
    }
    Ответ написан
    2 комментария
  • Какие различия программирования под UNIX и Linux?

    Сможете.

    Различия UNIX и Linux (на англ.)

    Linux is a Unix clone written from scratch by Linus Torvalds with assistance from a loosely-knit team of hackers across the Net. It aims towards POSIX compliance.
    Ответ написан
    Комментировать
  • Функция сортировки массива в js?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    в документации на MDN неплохо описано назначение сортировочной функции:
    Если функция сравнения compareFunction предоставлена, элементы массива сортируются в соответствии с её возвращаемым значением. Если сравниваются два элемента a и b, то:

    Если compareFunction(a, b) меньше 0, сортировка поставит a по меньшему индексу, чем b, то есть, a идёт первым.

    Если compareFunction(a, b) вернёт 0, сортировка оставит a и b неизменными по отношению друг к другу, но отсортирует их по отношению ко всем другим элементам. Обратите внимание: стандарт ECMAscript не гарантирует данное поведение, и ему следуют не все браузеры (например, версии Mozilla по крайней мере, до 2003 года).

    Если compareFunction(a, b) больше 0, сортировка поставит b по меньшему индексу, чем a.

    Функция compareFunction(a, b) должна всегда возвращать одинаковое значение для определённой пары элементов a и b. Если будут возвращаться непоследовательные результаты, порядок сортировки будет не определён.
    Ответ написан
    Комментировать
  • Как сконвертировать плоский массив в дерево?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    1. Найти корневой элемент – в вашем случае это с наименьшим id
    2. Далее рекурсивно вызывать функцию, которая получая на вход элемент дописывает ему детей по их id.


    Чтобы быстрее по id находить весь элемент, данные в начале преобразовываются в «словарь» – объект, где свойства это id, а значения элементы.

    var data = [
    {id: 0, name: 'Main', path: '/', childs: [1,2]},
    {id: 1, name: 'One', path: '/one', childs: [3]},
    {id: 2, name: 'Two', path: '/two', childs: []},
    {id: 3, name: 'Three', path: '/one/three', childs: []}
    ];
    
    function makeTree(d) {
      var id, el, i, dict = {}, minId, r;
      
      function parseChildren(el) {
        var i, newEl;
        for( i = 0; i < el.childs.length; i++) {
          newEl = makeElement(dict[ el.childs[i] ]);
          parseChildren( newEl);
          el.children.push( newEl);
        }
        delete el.childs;
      }
      
      for( i = 0; i < d.length; i++) {
        el = d[i];
        id = el.id;
        if( typeof minId === 'undefined' || minId > id) minId = id;
        dict[id] = el;
      }
    
      r = makeElement( dict[minId] ); // root element
      parseChildren(r);
      return r;
    }
    
    function makeElement(arrElement) {
      return {
        name: arrElement.name,
        path: arrElement.path,
        childs: arrElement.childs,
        children: []
      };
    }
    
    var tree = makeTree(data);
    /* {
    	"name": "Main",
    	"path": "/",
    	"children": [{
    		"name": "One",
    		"path": "/one",
    		"children": [{
    			"name": "Three",
    			"path": "/one/three",
    			"children": []
    		}]
    	}, {
    		"name": "Two",
    		"path": "/two",
    		"children": []
    	}]
    } */
    Ответ написан
    Комментировать
  • Как мне добавить к 001 единицу и чтобы стало 002?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    1. найти позицию, с которой начинаются цифры в конце
    2. запомнить длину числа
    3. увеличить на 1 и перевести в строку
    4. при необходимости дописать нулей
    5. склеить с частью до числа
    function stringInc(s) {
      var pos = s.length - 1;
      while(pos >= 0) {
        if( Math.abs(s.charCodeAt(pos) - 52.5) < 5) pos--;
        else break;
      }
      if( ++pos >= s.length) return s; // no number
      var numLength = s.length - pos;
      var numString = (parseInt(s.substr(pos)) + 1).toString();
      if( numString.length < numLength) {
        numString = ((Array(1 + numLength).join('0')) + numString).substr(-numLength);
      }
      
      return s.substr(0,pos) + numString;
    }
    
    stringInc('abc123') // abc124
    stringInc('abc999') // abc1000
    stringInc('abc00009') // abc00010
    stringInc('009') // 010
    stringInc('9') // 10
    stringInc('aaa') // aaa
    Ответ написан
    Комментировать
  • Как правильно распарсить массив?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Создать объект со свойством areas:
    var result = { "areas": "значение для areas"}

    Взять массив из свойства "mh" исходных данных. Это запись в JSON поэтому просто пишем
    peremennaya = {...тут весь этот JSON...}
    peremennaya.mh // тут нужный массив


    Из этого массива нужно сделать новый, где каждый элемент будет содержать только два свойства: id и title. Первое берется из оригинала как есть, а второе нужно составить, собрав значения свойств элемента title и count через пробел-дефис-пробел:
    '' + el.title + ' - ' + el.count

    Когда нужно над каждым элементом массива произвести какое действие, удобен метод массивов map(). В него передаётся функция, которая, получая на вход очередное значение из массива, что-то с ним делает и возвращает новое значение.

    Итого:
    var d = {"mh": [{"id": "BR", "count": 18516, "title": "Brazil"}, 
        {"id": "US", "count": 4514, "title": "United States"}, 
        {"id": "MY", "count": 390, "title": "Malaysia"}, 
        {"id": "IT", "count": 208, "title": "Italy"}]
    };
    
    var result = {areas: d.mh.map(el => ({id:el.id, title:''+el.title+' - '+el.count}))}
    
    // {"areas":[{"id":"BR","title":"Brazil - 18516"},{"id":"US","title":"United States - 4514"},
    //   {"id":"MY","title":"Malaysia - 390"},{"id":"IT","title":"Italy - 208"}]}
    Ответ написан
    Комментировать
  • Как деактивировать ключ вк сообщества через этот же самый ключ?

    sergiks
    @sergiks Куратор тега ВКонтакте
    ♬♬
    Такие методы API отсутствуют.

    Попробуйте задать вопрос в тех. поддержку ВК по API.
    Если отыщите решение, поделитесь, пожалуйста, в этом же вопросе.
    Ответ написан
    Комментировать
  • Как правильно посчитать площадь прямоугольника?

    Недоделили. 1 квадратный метр это 1000*1000мм.
    Полученные миллиметры надо делить на миллион.
    Ответ написан
    Комментировать
  • Как быстро научиться читать «с листа» математические формулы?

    sergiks
    @sergiks Автор вопроса
    ♬♬
    Нашёл отличную шпаргалку, которая решает все мои вопросы: приложение к книге Sebastian Raschka «Introduction to Artificial Neural Networks and Deep Learning: A Practical Guide with Applications in Python»

    sebastianraschka.com...appendix_a_math_notation.pdf

    Ноутбуки книги на github: rasbt/deep-learning-book
    Ответ написан
    Комментировать
  • С чего нужно начать изучать программирование нейронных сетей?

    всерьёз и надолго – это выбрать и пройти программу обучения.

    Как вариант, Школа Анализа Данных Яндекса. Посмотрите вступительные задания (напр. 2016 года)

    На английском языке выбор шире – на Coursera, Udacity есть программы по ML.
    Ответ написан
    Комментировать
  • Чем реально полезным можно заняться школьнику знающему программирование?

    «Заявить о себе» можно на крупных публичных площадках:
    1. github – помочь существующему проекту или запилить новый, свой, невероятно полезный многим;
    2. kaggle – разобраться с машинным обучением и научиться точнее всех прогнозировать;
    3. олимпиады.
    Warning обратная сторона медали: в результате попытки заявить о себе может случиться так, что станет очевидным, как много кругом крутых перцев и как до них бесконечно далеко, что угрожает самооценке.
    Ответ написан
    Комментировать
  • Как избавится от знака? , в запросе?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Решается настройкой веб-сервера. Это он должен при отсутствии папки или файла с запрошенным названием «переписывать» запрос и передавать в index.php уже GET-параметрами или иначе запрошенный адрес.

    У вас Nginx или Apache? Такой паттерн называется «front controller».

    Nginx:
    try_files $uri $uri/ /index.php?q=$uri&$args;
    или ещё проще, читайте запрошенную строку из переменной $_SERVER['REQUEST_URI'] и напишите просто try_files $uri $uri/ /index.php;

    Apache:
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ /index.php?$1 [QSA,L]
    Ответ написан
    1 комментарий
  • Как выбрать из текста 3 слова одинаковой или похожей (максимально приближенной) длины?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Собрать из текста словарь "длина": [слово,слово]
    Выбирать слова нужной длины, а при отсутствии смотреть соседние по значению ключи.

    words = txt.replace(/[\.,\?\!\:;\–\(\)]/g, '').toLowerCase().split(/\s+/);
    
    // make dictionary
    var db = [];
    for( var i = 0; i < words.length; i++) {
      word = words[i];
      len = word.length;
      if(db.length <= len || typeof db[len] == 'undefined') db[len] = [];
      if(!~db[len].indexOf(word)) db[len].push(word);
    }
    
    function getWords(db, length, n) {
      n = n || 3;
      var result = [], offset = 0, m;
      length = Math.max(0, Math.min(length, db.length));
      while( result.length < n) {
    
        m = n - result.length;
        if( db[length + offset]) {
          result = result.concat( getUpTo(m, db[length + offset]))
        }
    
        m = n - result.length;
        if( offset &&  m  &&  db[length - offset]) {
          result = result.concat( getUpTo(m, db[length - offset]))
        }
        
        m = n - result.length;
        if( m === 0) break;
        offset++;
        if( offset + length > db.length && offset > length) break;
      }
      
      return result;
    }
    
    function getUpTo(n, arr) {
      return arr.slice(0, Math.min(n, arr.length));
    }


    Fiddle
    Ответ написан
    1 комментарий
  • Что нужно что бы доработать это до нейронной сети?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Чтобы обучить сеть понадобится немаленькая «обучающая» выборка правильных данных: 4 ваших входных параметра + ответ. Таких строк бы да побольше, разных.

    У вас 3 булевых входа (true/false) и один реальный (float). На выходе true/false.

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

    Возвращаясь к нейронной сети и весам. На рисунке – три слоя: входной, скрытый и выходной. В каждом слое от 1 до нескольких «нейронов».

    У каждого нейрона два параметра, допустим, a и b. На вход к нему попадает некое значение x. Нейрон его умножает на a и прибавляет b, чтобы отправить дальше.

    Часто сеть инициализируют случайными весами, чтобы они не были нулевыми.

    Затем начинают прогонять через неё готовые, «обучающие» примеры. И смотреть, что на выходе. Разницу между «ожиданием» и «реальностью» называют «потерей» (loss). Её нужно минимизировать. Тема длинная, я плохо рассказываю. Лучше посмотрите курс какой-нибудь. Ответы на ваши вопросы:

    1. коэффициентов обычно не так много. Их держат в памяти во время работы сети и сохраняют в файл на диске, чтобы потом можно было снова загрузить.
    2. связи все-ко-всем. Если какие-то из них не нужны – ставится нулевой вес. Расчёт этих коеффициентов обычно делается «оптом» – операциями с матрицами.
    3. ваш код пока далёк от реализации нейронной сети, а ближе к упомянутому выше дереву принятия решений.
    4. в случае нейронной сети и градиентного спуска считается частная производная и делается маленький «шаг» в нужном направлении – коэфф. изменяется с текущего значения «чуть-чуть».
    Ответ написан
    2 комментария
  • Самый сильно защищенный мессенджер — какой он?

    Посмотрите исходники и спецификации протокола мессенджера Signal:
    https://signal.org/docs/
    Ответ написан
    Комментировать
  • Как правильно сгенерировать SSL сертификат для Telegram?

    Выполните эту команду 1:1, у вас создадутся файлы YOURPRIVATE.key и YOURPUBLIC.pem
    Ответ написан
    Комментировать
  • Как записываются видеоданные в *.mov?

    Ответ написан
    Комментировать