Задать вопрос
  • Как сделать кнопку маленькой в телеграмм боте nodejs?

    lastuniverse
    @lastuniverse
    Елизавета, понятия не имею:)
    Я своего бота делал на node-telegram-bot-api.
    Покажите кусок кода, в котором вы создаете кнопку, посмотрим что можно сделать:)
  • Для чего var elem = options.elem; и и в чем разница и для чего в 31 строке файла JS change, и "index.html" addEventListener('change')?

    lastuniverse
    @lastuniverse
    olya_097,
    ocument.getElementById('voter').addEventListener('change'
    - навешивает на некий элемент с id="voter" функцию, которая будет вызвана если в элементе произошли изменения (например когда в поле ввода текста введен новый текст)
    CustomEvent - позволяет создать свой объект события который в последствии можно передать своему, кастомному обработчику некого события. Например если текст введенный в поле ввода текста содержит емайл адрес, можно с генерировать событие (назовем его условно) "emailentered", и сформировав свой CustomEvent, одним из параметров которого будет введенный емайл адрес передать его обработчикам события "emailentered".

    подробно про события можно почитать тут
  • Что такое Node.js в сравнении с PHP?

    lastuniverse
    @lastuniverse
    Алексей сложившаяся специфика использования не определяет спектр возможных предназначений.
    нода = чат, пхп = блог
    только лишь потому, что на ноде до сих пор не написан нормальный блогодвижек, что в свою очередь лишь потому, что таких движков, вылизанных временем, с кучей возможностей уже немало написано на php. То есть, если все таки взять и написать качественный блог на node.js он будет ничем не хуже чем написанный на php, просто чтобы это сделать понадобится немало времени и усилий, за которые никто дополнительно денег не даст:)
  • Почему NaN в строке?

    lastuniverse
    @lastuniverse
    Neizvest, вот немного привел код в порядок, убрал знак =, сделал мгновенное преобразование при нажатии на кнопки, для примера добавил кнопки КМ и ВЕРСТ


    ЗЫ: исправил ошибки)
  • Как сделать подключение модулей в браузере с помощью require(...) так же как в это делается в nodejs?

    lastuniverse
    @lastuniverse Автор вопроса
    profesor08, :)))
    Теоретически наверное можно сделать скрипты и со 100500 зависимостей но я не использую кучу уже готового, лежащего в npmjs и написанного для браузера. Загружаю только то что написанного своими руками, каждый файл если и имеет зависимости, то только другие модули написанные мной же. Всего их около 2-3 десятков файлов, подгружаются асинхронно чуть меньше чем за секунду.
    Если уж говорить на чистоту, то предложенный вариант является нишевым решением с очень узким сектором применения.
  • Как нарисовать линию с помощью алгоритма Брезенхема и гамма-коррекции в текстовом файле?

    lastuniverse
    @lastuniverse
    Гамма-коррекция тут никак не поможет. sRGB также не касается вашей задачи. Оба по большей части предназначены для унификации цветопередачи на мониторах и печатной продукции.
    Как вариант, для сглаживания линий используйте Wu Algorithm (алгоритм для сглаживания линий).
    Wu Algorithm
    antialias.pngzoom.png


    Для более "тонкого" сглаживания обратите внимание на возможность субпиксельного сглаживания
    субпиксельное сглаживание
    3_1-666x167.png


    PS: перенес из комментариев 2 имплементации:
    1. попытка соединить Ваш код с кодом WuLine (некий псевдокод для понимания)
    // array[][] - полотно на котором рисуем 
    // (далее все функции переделаны под grayscale вариант)
    
    #include "stdafx.h"
    
    #include <iostream> 
    
    #include <iomanip>
    
    #include <fstream> 
    
    #include <sstream>
    
    using namespace std;
    
    // функция рисования линии
    void WuLine(int** array, int x0, int y0, int x1, int y1)
    {
        var steep = Math.Abs(y1 - y0) > Math.Abs(x1 - x0);
        if (steep)
        {
            Swap(ref x0, ref y0);
            Swap(ref x1, ref y1);
        }
        if (x0 > x1)
        {
            Swap(ref x0, ref x1);
            Swap(ref y0, ref y1);
        }
    
        DrawDarkPoint(steep, x0, y0, 1);
        DrawDarkPoint(steep, x1, y1, 1);
        float dx = x1 - x0;
        float dy = y1 - y0;
        float gradient = dy / dx;
        float y = y0 + gradient;
        for (var x = x0 + 1; x <= x1 - 1; x++)
        {
            DrawDarkPoint(steep, x, (int)y, 1 - (y - (int)y));
            DrawDarkPoint(steep, x, (int)y + 1, y - (int)y);
            y += gradient;
        }
    }
    
    // функция рисования "черной" точки
    void DrawDarkPoint(bool steep, int x, int y, float c)
    {
        if (!steep)
        {
            var color = GetPixel(x, y);
            color *= (1 - c);
            SetPixel(x, y, color);
        }
        else
        {
            var color = GetPixel(y, x);
            color *= (1 - c);
            SetPixel(y, x, color);
        }
    
    }
    
    // считываем значение цвета точки с полотна в координатах x,y
    int GetPixel(int x, int y){
      // настоятельно рекомендую вставить проверку на выход за границы полотна
      return array[x][y];
    }
    
    
    // рисуем точку на полотне в координатах x,y цветос c (число от 0 до 255)
    void SetPixel(int x, int y, int c){
      // настоятельно рекомендую вставить проверку на выход за границы полотна
      array[x][y] = c;
    }
    
    
    // далее почти без изменений Ваш код
    int main(void)
    {
      ofstream fout;
      
      fout.open("E:\\line.pgm");
    
      fout.write("", 0);
    
      fout « "P2" « "\n" ;
    
      int numcols, numrows, x1, x2, y1, y2;
    
      cout « "Enter rows and columns number: ";
    
      cin » numrows » numcols;
    
      cout « "Enter coords x1 and y1: ";
    
      cin » x1 » y1;
    
      cout « "Enter coords x2 and y2: ";
    
      cin » x2 » y2;
    
      fout « numrows « " " « numcols « "\n";
    
      fout « 255 « "\n";
    
      int** array = new int*[numrows];
    
      for (int count = 0; count < numrows; count++)
    
        array[count] = new int[numcols];
    
      for (int i = 0; i < numrows; ++i) {
    
        for (int j = 0; j < numcols; ++j) {
           array[i][j] = 255;
        }
    
      }
    
      WuLine(array, x1, y1, x2, y2);
    
      for (int i = 0; i < numrows; ++i) {
    
        for (int j = 0; j < numcols; ++j) {
          fout « array[i][j] « " ";
        }
    
      }
    
      fout.close();
    
    }

    2. полностью рабочий вариант на nodejs
    // подключаем библиотеку работы с файлами
    const fs = require('fs');
    
    // создаем сласс Canvas
    function Canvas(width,height){
      this.width = width;
      this.height = height;
      this.sheet = [];
      for(let y=0; y<height; y++){
        this.sheet[y]=[];
        for(let x=0; x<width; x++){
          this.sheet[y][x]=255;
        }
      }
    };
    
    // Метод рисования линии
    Canvas.prototype.WuLine = function(x0, y0, x1, y1) {
      const steep = Math.abs(y1 - y0) > Math.abs(x1 - x0);
      if (steep) {
        var swap; 
        swap = x0; x0 = y0; y0 = swap;
        swap = x1; x1 = y1; y1 = swap;
      }
      if (x0 > x1) {
        var swap; 
        swap = x0; x0 = x1; x1 = swap;
        swap = y0; y0 = y1; y1 = swap;
      }
    
      this.DrawDarkPoint(steep, x0, y0, 1);
      this.DrawDarkPoint(steep, x1, y1, 1);
      const dx = x1 - x0;
      const dy = y1 - y0;
      const gradient = dy / dx;
      let y = y0 + gradient;
      for (var x = x0 + 1; x <= x1 - 1; x++)
      {
        this.DrawDarkPoint(steep, x, y, 1 - (y - Math.floor(y) ) );
        this.DrawDarkPoint(steep, x, y + 1, y - Math.floor(y) );
        y += gradient;
      }
    };
    
    // метод рисования "черной" точки
    Canvas.prototype.DrawDarkPoint = function(steep, x, y, c) {
      const xx = Math.floor(x);
      const yy = Math.floor(y);
    
      if (!steep)	{
        var color = this.GetPixel(xx, yy);
        color *= (1 - c);
        this.SetPixel(xx, yy, color);
      } else {
        var color = this.GetPixel(yy, xx);
        color *= (1 - c);
        this.SetPixel(yy, xx, color);
      }
    
    };
    
    // метод получает значение цвета точки с полотна в координатах x,y
    Canvas.prototype.GetPixel = function(x, y) {
      return this.sheet[y][x];
    };
    
    
    // метод устанавливает значение с в точку на полотне в координатах x,y 
    Canvas.prototype.SetPixel = function(x, y, c) {
      c = Math.floor(c);
      if(x<0 && x>=this.width) return;
      if(y<0 && y>=this.height) return;
      this.sheet[y][x] = c;
    };
    
    // метод сохраняет картинку в файл в формате PPM
    Canvas.prototype.savePPM = function(fname) {
      const fd = fs.openSync(fname, 'a');
      fs.writeSync(fd, "P3\n");
      fs.writeSync(fd, "# P3 обозначает, что цвета даны в ASCII,\n");
      fs.writeSync(fd, "# затем идут цифры, обозначающие число колонок и рядов\n");
      fs.writeSync(fd, "# 255 для максимального значения цвета\n");
      fs.writeSync(fd, "# затем триплеты RGB\n");
      fs.writeSync(fd, this.width + " " + this.height + "\n");
      fs.writeSync(fd, "255\n");
      this.sheet.forEach(a=>{
        a.forEach(c=>{
          fs.writeSync(fd, c + " " + c + " " + c + "\n"); 
        });
      });
    };
    
    
    
    
    var canvas = new Canvas(400,400);
    for(let i=0; i<360; i+=10 ){
      const x = 200+Math.round(Math.cos(Math.PI*i/180)*190 );
      const y = 200+Math.round(Math.sin(Math.PI*i/180)*190 );
      canvas.WuLine(200, 200, x, y);
    }
    
    canvas.savePPM("test.ppm");

    5bd6cb8fbf6b3023697404.png
  • Как реализовать алгорим задачи о сумме подмножеств?

    lastuniverse
    @lastuniverse
    Посидел, подумал, ничего толкового не придумал:)
    собрал вариант тупого перебора

    Если задать 330 значений, ждать можно очень долго, возможно день, возможно год, надо считать :) (максимально возможное число вариантов которое будет перебирать алгоритм будет запредельно)
    Поэтому в примере задал множество включающее всего 30 элементов.
    код:
    /**
     * готовим исходные данные (рандомно:)
     */
    
    // искомая сумма, генерируем случайное целое число в диапазоне от 0 до 100.
    var S = Math.floor(Math.random()*50);
    
    // массив в котором хранится подмножество
    var N = [];
    
    // заполняем его случайными целыми числами в диапазоне от -s до +s
    for( var i=0; i<30; i++){
    	N[i] = Math.floor(Math.random()*S*2)-S;
    }
    
    
    /**
     * перебираем (в случае большого числа элементов в N может быть критично по памяти :) 
     */
    
    // начинаем поиск (алелуя :)
    console.log("искомая сумма: ("+S+")");
    console.log("множество значений:\n("+N.join(", ")+")\n");
    
    searchSubN(S, N, [])
    
    // рекурсивная функция (производит полный перебор всех вариантов)
    function searchSubN(S, N, sub) {
    	// начинаем перебор
    	N.forEach((c,i)=>{
    		// клонируем массив решений
    		var cloneSub = sub.slice();
    		if(c===S){
    			// найдено очередное решение
    			cloneSub.push(c);
    			// выводим сообщение
    			console.log("найдено решение: summ("+cloneSub.join(", ")+") = "+cloneSub.reduce( (a,c)=>{return a+c;} ) );
    		}else if(c<S){
    			// возможно это станет решением
    			cloneSub.push(c);
    
    			// делаем клон массива 
    			var clone = N.slice();
    			// удаляем из клона текущий элемент
    			clone.splice(i,1);
    			
    			// ищем следи оставшихся подмножество равное S-c
    			searchSubN(S-c, clone, cloneSub);
    		}
    	});
    }


    результат:
    ~/share/programming/work/test> node search.sub.01.js 
    искомая сумма: (14)
    множество значений:
    (11, 8, -5, 9, -8, -6, 2, 4, 12, -11, -2, -4, 6, -10, -1, -7, -13, -10, 9, -7, 2, -3, 5, 0, -13, 7, -11, -8, 10, -12)
    
    найдено решение: summ(11, -5, 8) = 14
    найдено решение: summ(11, -5, -8, 8, -6, 9, 2, -11, 4, -2, 12) = 14



    Пойду еще подумаю как применить стандартные алгоритмы к подмножествам, включающим отрицательные числа.
  • Как рандомно менять картинки в блоке?

    lastuniverse
    @lastuniverse
    А можно по другому, например вот так :)
  • Как сделать подключение модулей в браузере с помощью require(...) так же как в это делается в nodejs?

    lastuniverse
    @lastuniverse Автор вопроса
    profesor08, вы правы, это именно костыли, цель которых заменить отрубленную ногу :(
  • Как сделать подключение модулей в браузере с помощью require(...) так же как в это делается в nodejs?

    lastuniverse
    @lastuniverse Автор вопроса
    Николай Чуприк, не пойму с сарказмом вы или нет :)
    документирования пока нет совсем, так черновые наброски.
  • Не работает. IP TV на сайте?

    lastuniverse
    @lastuniverse
    L1nw0od, по ссылке 198.16.64.45:8081/telenovella/index.m3u8 ничего нет, потому и не пашет

    Подключил этот же плеер, кинул в него ссылку на mp4 файл, все пашет
    https://game.lastuniverse.ru/player.01/
    PS:
    эту строчку поместите в head
    <script src="http://bestgoal.top/js/playerjs.js" type="text/javascript"></script>


    этот элемент вставте в body,
    <div id="player"></div>
    при этом он должен быть раньше чем
    var player = new Playerjs({id:"player", file:"http://198.16.64.45:8081/telenovella/index.m3u8"});


    Возможно имеет смысл написать как то так:
    <!DOCTYPE html>
    <html>
    <head>
            <title>graph eginere</title>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
            <meta name="viewport" content="initial-scale = 1.0" />
            <script src="https://game.lastuniverse.ru/player.01/js/playerjs.01.js" type="text/javascript"></script>
    </head>
    <body class="my_body">
        <div id="player"></div>
        <script>
            window.onload = function() {
                var player = new Playerjs({id:"player", file:"https://game.lastuniverse.ru/player.01/data/video/test.01.mp4"});
            };
        </script>
    </body>
    </html>
  • Как сверстать полукруглую границу блока?

    lastuniverse
    @lastuniverse
    afishr, Украл реализацию у автора этого ответа :)

  • Как сделать spread объекта??

    lastuniverse
    @lastuniverse
    Сдается мне что не получится через spread
  • Как реализовать алгорим задачи о сумме подмножеств?

    lastuniverse
    @lastuniverse
    #, так и есть, пол дня думал, ничего хорошего не придумал)
  • Как реализовать алгорим задачи о сумме подмножеств?

    lastuniverse
    @lastuniverse
    Demond98, не могли бы Вы внести ясность, как понимать фразу "Числа могут быть отрицательными, а также повторяться."?
    множество может содержать одинаковые числа
    или
    числа из множества можно повторять сколько угодно раз
  • Как реализовать алгорим задачи о сумме подмножеств?

    lastuniverse
    @lastuniverse
    Adamos,
    1. согласен
    2. согласен (хотя в случае с отрицательными числами может возникнуть проблема выбора)

    НО по моему каждое число из исходного множества можно использовать лишь один раз в каждом конкретном решении, так что перебор делать придется:)

    PS: сейчас спрошу у автора что имелось ввиду под фразой "Числа могут быть отрицательными, а также повторяться."
    - по моему то что числа в множестве могут повторятся
    - по вашему то что числа из множества можно повторять

    если прав я - то перебор
    если вы - то эвристики (предложенные вами и множество других)
  • Как реализовать алгорим задачи о сумме подмножеств?

    lastuniverse
    @lastuniverse
    Шарпер, мы эту ссылку уже почти пол дня по комментам гоняем, но по ней лишь классика для всюду положительных чисел исходного множества :)