Перейти к содержимому

Zer0Galaxy

Гуру
  • Публикации

    1 220
  • Зарегистрирован

  • Посещение

  • Победитель дней

    189

Сообщения, опубликованные пользователем Zer0Galaxy


  1. Не знаю, кто как, но я не преследую цель заразить чей то компьютер или очистить от вируса. Для меня написание вируса и антивируса к нему это просто интересная задачка по программированию. Поэтому, давай отбросим практический интерес и придумаем код, который мог бы самораспространяться (вирус), и лекарство для него.


  2. А почему вы решили, что любая программа, которая делает reboot или shutdown непременно вирус?

    А почему вирус непременно должен выполнять reboot или shutdown?

    Думаю, что парсер если и должен искать вирус, то какой то конкретный с известным кодом вирус, а не гипотетический вредоносный код. Вот почему я и предложил: для начала давайте напишем вирус. Между прочим, совершенно серьезно.


  3. Минимальный объем информации, необходимый для кодирования цвета одного вокселя будем называть символом. Очевидно, что символ содержит два бита или число от 0 до 3. Все возможные значения одного символа (0, 1, 2, 3) будем называть алфавитом. Последовательность из нескольких символом будем называть словом. Суть предлагаемого алгоритма сжатия состоит в замене последовательности одинаковых символов XXX...X, словом XN, где X - символ, входящий в исходную последовательность, N- длина этой последовательности, выраженная символами алфавита. Длина последовательности N может принимать значения от 1 (единичный воксель) до 48х48х32=73728 (весь рисунок залит одним цветом). Поскольку длина числа N дешифратору неизвестна, основная проблема это отделить N, входящую в текущую последовательность от начала следующей последовательности. Диапазон изменения N, выраженный в двоичном виде, будет от 1 до 10010000000000000. Каждый бит числа будем кодировать одним символом. Причем, если бит не последний, кодируем его символом "0" или "1", соответственно. В случае если бит завершает слово, кодируем его символом "2", если бит равен 0, или символом "3", если бит равен 1. Поскольку N всегда начинается с бита 1 (незначащие нули не рассматриваем), этот бит при кодировании можно опустить, а при декодировании добавить. Сложность возникает только при кодировании N=1, т.к. в этом случае опускается единственный бит, входящий в N. Для того, чтобы устранить эту проблему, перед кодированием добавим к N единицу, а после декодирования - вычтем.

    Пример кодирования: Предположим, нам необходимо закодировать последовательность из 25-ти символов "2".

    1) Первый символ, входящий в закодированное слово "2" - символ из которых состоит исходная последовательность.

    2) К длине последовательности добавляем единицу 25+1=26 и представляем в двоичном виде 26(10)=11010(2)

    3) Отбрасываем первую единицу - 1010

    4) Кодируем каждый бит кроме последнего символами "0" или "1". Последний бит кодируем символом "2" (соответствует биту 0) В итоге получаем слово - "21012".

    Пять символов вместо 25-ти.

    Последовательность декодирования:

    1) Принимаем из входного потока первый символ. Из этих символов будет состоять последовательность после декодирования.

    2) Присваиваем N=1

    3) Сдвигаем N влево на 1

    4) Принимаем из входного потока очередной символ.

    5) Если принятый символ 1 или 3, N= N+1

    6) Если принятый символ 0 или 1, возвращаемся к пункту 3

    7) N= N-1

    8) Декодированная последовательность представляет собой последовательность из N символов, принятых в п. 1 Предложенный алгоритм сжимает последовательности длиной не менее 3. Последовательности из двух символов не сжимает. А единичные символы замещает словом из двух символов. В наилучшем случае рисунок будет сжат в 4336 раз. В наихудшем - размер увеличится вдвое.

    • Нравится 3

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

    Да, ты прав. Конечно я выразился не совсем точно. Но, надеюсь, мы с Тоторо поняли друг друга.

    На счет "синтаксиса", могу предложить вариант.

    • Нравится 1

  5. Да, думал. Как NEO сказал, уже слегка пожали изображения. С 73 кБ до 19.

    Это не сжатие, а упаковка

    Я возможно добавлю ужатие блоков одинаковых байтов. Это позволит избавиться от орд нулей, которые зополоняют каждый сейв :).

    Во! Я об этом

  6. Хорошая идея, мне нравится. Пока негде использовать если честно.

     

    Возможно Алексу пригодится, чтобы в его банке роботы счета не открывали. Вот только картинку нужно не на весь экран, а оставить место для строки ввода. Попытался изменить width, height = 25,10. Получил

    run:76: index expected, got nil

    Зумирование не реализовано?


  7. Отрисовка изменяющегося за мышкой эллипса/линии может доставить проблем. Можно сделать рисование эллепсов и линий двумя кликами по крайним точкам.

    Конечно по двум кликам. Может даже кликам в разных плоскостях. Для рисования трехмерных линий.
    • Нравится 1

  8. Конструктивная критика

    Конечно, для рисования каляки-маляки, вроде тех, что приведены на скринах, реализованных возможностей редактора достаточно. Но создать более сложный 3D рисунок будет весьма проблематично.
    Уровни, по которым создается голограмма, представляют собой сечения объекта горизонтальными плоскостями. На мой взгляд, основные трудности при создании объекта предложенным способом следующие. Во-первых, довольно сложно представить такое сечение, как правило, не имея самого объекта перед глазами. Во-вторых, как совмещать эти уровни друг с другом, если виден только один уровень?
    Предлагаю расширить редактор следующими возможностями:
    1) Рисование не только по горизонтальным уровням, но и по вертикальным (фронтальным и профильным). Это даст возможность посмотреть на свое творение еще в двух проекциях.
    2) Возможность при рисовании очередного уровня "видеть" выше или нижележащий уровень/уровни, например, прорисовывая их более темным цветом. Значительно облегчит совмещение уровней.
    3) Смещение рисунка уровня вправо-влево, вверх-вниз. Так же может быть полезным при совмещении.
    4) Набор инструментов типа: линейка, рамка, эллипс, заливка.
    • Нравится 2

  9. Таким образом даже на обычную дискету OC (512 кБ) поместится 26 голограмм.

    P.S. NEO готовит вторую часть пакета - консольную программу, которая позволит на любом компьютере быстро развернуть голограмму и показать ее через проектор с произвольным масштабом и углом.

    Например, чтобы украсить ваш дом. Или сделать футуристическую вывеску. Или... да много всего можно сделать.

    Вот бы эта консольная программа могла сменяющиеся изображения показывать. Даешь, к примеру, ей перечень файлов, а она по очереди извлекает из них голограммки и в течении определенного времени каждую демонстрирует. Из 26-ти кадров можно 3D-мультик сделать.
    • Нравится 1

  10. Внимание!

    Только что, игрок Deon нашёл точку CraftNet на координатах

    -477 253 -59

    Выглядит как куб 3*3 с компьютером в отверстии. Deon сломал компьютер, и позвал меня. Также он сказал, что там был какой-то софт.

    Это был роутер "red.stone" :(

  11. Отбросить нулевые символы можно при помощи заклинания

    mess=mess:match("(%Z*)")
    , где mess - принятое сообщение. Передавать длину сообщения при этом не нужно.

    А вот на счет краша при приеме абракадабры, я подумаю над алгоритмом.

    • Нравится 1

  12. Малость доработал алгоритм поиска и вставил в MiddayCommander.

    Встречайте новую версию MC 1.3 (pastebin get 4SnKTzvc mc)

    Теперь комбинация Alt+F7 позволяет найти любой файл на диске компьютера.

    Не помните названия файла полностью? Не беда! Символы ? и * заменят любой символ или группу символов, соответственно.

     

    Изображение

     

    Изображение

     

    Жду сообщений о багах.

    • Нравится 7

  13. Я бы подобную задачу решал при помощи рекурсивной функции. Т.е. функция ищет среди файлов в текущей директории, а потом вызывает саму себя для каждой из вложенных директорий.

    И вместо функции cut используй match.

    Сделаешь поиск по неполному совпадению - вставлю в МС-коммандер.

    • Нравится 1
×
×
  • Создать...