|
Вторничный Квайн
|
|||
---|---|---|---|
#18+
Привет коты! В продолжение Найдите д.н.ф. и к.н.ф. для : Необходимо реализовать следующее. Input (ДНФ) Код: sql 1.
(в задании предполагается что "+" - это логическое OR, а восклицательный знак - это инверсия) Outpus (минимальная форма): Код: sql 1.
Можно брать метод Квайна или Квайна-Макласски. Primary Goal: Реализация на любом языке. Главное чтоб были сорцы и было понятно. Secondary Goal #1: Потестировать скорость на большом числе аргументов (16 - 32). Secondary Goal #2: Попробовать эвристики о которых говорил exp98. Цитирую его Случайный метод: от простого к сложному отжигом, роевым, генетическим ... пока таблица не станет хэммингово близкой к нужной. Затем доработать напильником, мож что и получится. Эффективность этого способа мне не известна. Тестовые данные Здась https://www.sql.ru/forum/1134172/tyapnichnyy-koi-8r можно взять больше тестовых данных. Например таблицу koi8-unicode16. Если ковертить обратно от unicode-русских букв то получается 14 аргументов в каждом минитерме. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2021, 01:20 |
|
Вторничный Квайн
|
|||
---|---|---|---|
#18+
результат должен быть в виде ДНФ? и почему вторничный, если уже среда? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2021, 16:19 |
|
Вторничный Квайн
|
|||
---|---|---|---|
#18+
Начал писать пост во вторник. Да. Результат в СДНФ. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2021, 17:53 |
|
Вторничный Квайн
|
|||
---|---|---|---|
#18+
Не упоминайте мене в суе. Возможно, сейчас напишу крамолу. Эта формула мне представляется из класса P . Автоматика и телемеханика, 1995, выпуск 2, с. 111–124 "Новые классы КНФ, с полиномиально распознаваемым свойством выполнимости" Б.А.Кулик АннотацияНа основе методов алгебры кортежей [1] разработан алгоритм решения задачи ВЫПОЛНИМОСТЬ КНФ. Доказано, что для класса "плотных" КНФ, у которых "пустые" переменные, не включенные в дизъюнкты, распределены равномерно с вероятностью не более 1/3, сложность этого алгоритма в среднем полиномиальна. Рассмотрены варианты выигрышной стратегии этого алгоритма, позволяющие расширить класс КНФ с полиномиально распознаваемым свойством выполнимости ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2021, 23:09 |
|
Вторничный Квайн
|
|||
---|---|---|---|
#18+
Буду упоминать. Это usecase нашего форума. Так что, не обижайся. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 10:09 |
|
Вторничный Квайн
|
|||
---|---|---|---|
#18+
Ну и зря. Какхозяин своего слова могу его и обратно взять. Но всё же, пока на бумажке, набросал даже ещё не эскиз прототипа алгоритма, скорее некий пробник, посмотреть, имеет ли смысл дёргаться. Скоро не обещаю, нууу м.б. в выхи. Идея простая, наращивать формулу с нуля - какая получится. Для применения с не очень длинными формулами. Без эвристик. Набросок схемы примерно такой. For ........... Наращивать "как бы конкатенацией" с нуля формулу в зависимости от 3-х случайных зачений: z1 - номер очередной переменной (х1, х2 или х3) z2 - сотрицанием или без z3 - с какой связкой присоединяется к предудущей формуле " & " / " V " Вычислить текущий вектор истиностных значений и сравнить с входным. Откат текущей итерации, если близость уменьшилась. Условие прекращении цикла End For Примерно так. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 15:30 |
|
Вторничный Квайн
|
|||
---|---|---|---|
#18+
Если считать близость как расстояние хемминга, то может быть один или группа битиков перепрыгивает или меняют своё место формально улучшая будущий расклад, но наша формула не видит улучшений. Тоесть метрика Хемминга наверное не очень чувствительна к улучшениям. Может брать какой-то другой критерий? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 15:53 |
|
Вторничный Квайн
|
|||
---|---|---|---|
#18+
exp98 Идея простая, наращивать формулу с нуля - какая получится. Для применения с не очень длинными формулами. Без эвристик. Набросок схемы примерно такой. For ........... Наращивать "как бы конкатенацией" с нуля формулу в зависимости от 3-х случайных зачений: Тут даже самый первый ход не понятен. Вот формула !x!y!z + !xy!z + x!y!z + x!yz + xy!z Как наращивать? Можно хотя-бы "прошагать" с тобой первые 2 итерации цикла? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 16:37 |
|
Вторничный Квайн
|
|||
---|---|---|---|
#18+
Во-первых, это всего лишь эксперимент, не известно к чему приведущий. Поэтому рекомендаций не даю. Во-вторых, исходная формула нужна только, чтоб вычислить вектор её значений. Наращивать от нуля, вот же написано, три (пока 3) случайные величины: авторz1 - номер очередной переменной (х1, х2 или х3) z2 - с отрицанием или без z3 - "&" или "V" Сначала буду держать такой последовательный массив для отладки. А вообще, в символьном виде наращивание может выглядеть так (здесь пробел вместо умнож). Код: plaintext
Проблем много. Метрика, собссно новая длина, критерий остановки. И конечно же как допилить. Проблему новой длины я сначала прозевал, да. Если в обратную сторону, т.е. от начальной формулы к более короткой, конкретных мыслей нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 18:48 |
|
Вторничный Квайн
|
|||
---|---|---|---|
#18+
"Автоматизацией Квайна" занимались с шестидесятых годов до 80-х прошлого века. Потом это стало не актуально. Сегодня можно найти тексты программ "Квайна" практически на любом языке программирования. В предыдущем обсуждении булевых функций, ссылка на которое дано в первом сообщении, был задан вопрос о критериях минимизации. Без ответа на этот вопрос минимизация теряет смысл. Для программистов это может быть стандартный критерий: наименьшее количество переменных в записи функции и операций над ними. Для схемотехников - это отсутствие гонок; минимальное количество логических элементов, желательно одного типа; минимальное число корпусов микросхем, . . . Здесь, кроме минимизации логических функций, появляется понятие "факторизация булевых функций". Сегодня большинство логических схем реализуются на ПЛМ (программируемых логических матрицах). Здесь булева функция должна быть представлена в ДНФ и критерием оптимизации является площадь ПЛМ, занимаемая этой функцией. Чем меньше, тем лучше, но не забыть бы при этом о гонках. Да, еще есть ситуации, когда для реализации всех необходимых логических функций одной ПЛМ не хватает, тогда к минимизации может добавиться понятие "декомпозиция булевых функций". Кстати говоря, рассматривать логические функции, зависящие более чем от 7 переменных, скорее всего, не имеет смысла, так они находятся за гранью человеческого восприятия. Поскольку от минимизации ДНФ не уйти, а карты Карно хороши для функций, зависящих не более чем от 4-х переменных, в следующем сообщении еще раз рассмотрим алгоритм Квайна. Постараемся обойтись только самыми простыми законами алгебры логики, чтобы потом не дорабатывать результат драчёвым напильником. Тем более, что ТС уже пятилетку говорит об этом алгоритме, но все еще не добрался до его реализации. В Союзе пятилетку обычно выполняли за три года. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 18:48 |
|
Вторничный Квайн
|
|||
---|---|---|---|
#18+
До программной реализации алгоритма Квайна еще очень далеко, сначала нужно понять, в чем же он состоит. Я уже рассмотрел его в сообщении 22406820 . Сейчас подробнее рассмотрим применение этого алгоритма к предложенной ТС функции !x!y!z + !xy!z + x!y!z + x!yz + xy!z. Каждое "слагаемое" в СДНФ называется конституентой единицы (в СКНФ каждое "произведение" называется конституентой нуля), если контекст понятен, то просто говорят конституента. Конституенту можно представить набором нулей и единиц. Если некоторая переменная входит в конституенту с отрицанием, то вместо нее в наборе пишем 0, в противном случае – 1. Например конституента !x!y!z записывается как набор 000, а конституента !xy!z – 010. Операция склеивания этих двух конституент: Код: plaintext 1. 2.
Представим исходную функцию (СДНФ) в виде набора конституент (столбик 1). Наборы пронумеруем. Проведем все склейки (в скобках через черточку указаны номера наборов, из которых получена импликанта, а сами эти наборы отметим плюсиком): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Код: plaintext 1. 2. 3. 4. 5.
Поскольку больше склеивать нечего, то процесс нахождения простых импликант закончен. 3. На этом этапе находится покрытие исходной функции найденными простыми импликантами. Очевидно, что две найденные простые импликанты покрывают исходную булеву функцию. Осталось записать ответ F(x, y, z) = x¬y \/ ¬z или в нотации ТС: F(x, y, z) = x!y + !z. Перебор можно уменьшить, если помнить, что могут склеиваться только конституенты, отличающиеся только в одном "разряде". Поэтому конституенту 1 из исходного набора нет смысла сравнивать с конституентами 4 и 5. Собственно - это и весь алгоритм Квайна с его улучшениями. Т.е. все улучшения сводятся к сокращению числа перебора двоичных наборов. Теперь можно перейти к реализации этого метода. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 18:52 |
|
Вторничный Квайн
|
|||
---|---|---|---|
#18+
Что касается выбора структуры данных, то это массив. Каждый набор может быть представлен массивом, в котором каждый элемент может принимать значения 0, 1, *. Тогда массив наборов будет представлять СДНФ логической функции. Достоинства такого представления логической функции в простоте операций склеивания, а недостатком излишнее потребление памяти. Попробуем взять в качестве одного набора одно целое число и манипулировать битами этого числа. Для представления одной переменной потребуется два бита: 1 0 - биты числа 0 0 - представляют не х1 0 1 - представляют х1 1 * - представляют склейку по переменной х1, в этом контексте знак * обозначает, что значение бита может быть любым и не имеет значения. Для отметки будем использовать знак числа. Число отрицательное говорит о том, что этот набор был склеен с другим набором. Для 32-битного числа можно задать до 15 булевых переменных. Функции будет представлять массив целых чисел. Пример склейки ¬x¬y \/ ¬xy = ¬x. Биты 3 и 2 будут представлять переменную x, а биты 1 и 0 – переменную y. Код: plaintext 1. 2. 3. 4. 5.
Алгоритм: 1. Записываем СДНФ в первый массив, а второй очищаем. 2. Каждый элемент первого массива сравниваем со всеми другими элементами этого массива, кроме себя с собой, на возможность их склейки. Возможности сокращения перебора я привел в предыдущем сообщении. Если элементы удовлетворяют условиям сравнения (склеиваются), то отмечаем их изменением знака числа и формируем из них одно число (склейку), которое записываем во второй массив. 3. Запоминаем неотмеченные элементы первого массива и после этого заменяем значение первого массива значением второго массива. Второй массив очищаем. 4. Повторяем пункты 2 и 3 пока есть склеиваемые элементы. 5. Запомненные неотмеченные элементы и будут простыми импликантами. Теперь нужно найти покрытие исходной функции импликантами в соответствии с выбранным критерием. В литературе описано несколько алгоритмов решения этой задачи. Собственно алгоритм Квайна заканчивается нахождением простых импликант, поэтому этот этап я не рассматриваю. Осталось описать функцию сравнения наборов на предмет склейки и можно будет переходить к программированию на выбранном языке. Но у меня сегодня уже иссякли силы для продолжения. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 18:58 |
|
Вторничный Квайн
|
|||
---|---|---|---|
#18+
Wlr-l ...В Союзе пятилетку обычно выполняли за три года. Wlr, такие простыни надо бы прятать в спойлеры. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 18:58 |
|
Вторничный Квайн
|
|||
---|---|---|---|
#18+
А ещё я забыл сказать, что если много переменных, то по моей методе на каждой итерации растущей формулы, надо вычислять новый вектор значений для всех 2^ p комбинаций из p переменных. Т.о., если длина формулы сравнима с 2^p, то алгоритм заведомо экспоненциальный. Что не очень устраивает. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 20:23 |
|
Вторничный Квайн
|
|||
---|---|---|---|
#18+
Wlr-l В предыдущем обсуждении булевых функций, ссылка на которое дано в первом сообщении, был задан вопрос о критериях минимизации. Без ответа на этот вопрос минимизация теряет смысл. Для программистов это может быть стандартный критерий: наименьшее количество переменных в записи функции и операций над ними. Это - форум программистов. Поэтому будем искать наименьшее количество переменных. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 20:53 |
|
Вторничный Квайн
|
|||
---|---|---|---|
#18+
Wlr-l Поскольку от минимизации ДНФ не уйти, а карты Карно хороши для функций, зависящих не более чем от 4-х переменных, в следующем сообщении еще раз рассмотрим алгоритм Квайна. Постараемся обойтись только самыми простыми законами алгебры логики, чтобы потом не дорабатывать результат драчёвым напильником. Тем более, что ТС уже пятилетку говорит об этом алгоритме, но все еще не добрался до его реализации. В Союзе пятилетку обычно выполняли за три года. 1) К чорту Карно. 2) Да ТС - большой бездельник. Я тут делаю +100. Но как говорил красавчик, начальник милиции всего Махачкалы - "и тем не менее..." ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 20:59 |
|
Вторничный Квайн
|
|||
---|---|---|---|
#18+
Wlr-l Кстати говоря, рассматривать логические функции, зависящие более чем от 7 переменных, скорее всего, не имеет смысла, так они находятся за гранью человеческого восприятия. В топике нас не будет интересовать человеческое восприятие. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 21:05 |
|
Вторничный Квайн
|
|||
---|---|---|---|
#18+
Wlr-l Что касается выбора структуры данных, то это массив В своей реализации я хотел уйти от битов. И просто перейти к использованию списков символов. Или к деревьям. Но .. лучше начать со списков. Wlr-lПопробуем взять в качестве одного набора одно целое число и манипулировать битами этого числа. Для представления одной переменной потребуется два бита: 1 0 - биты числа 0 0 - представляют не х1 0 1 - представляют х1 1 * - представляют склейку по переменной х1, в этом контексте знак * обозначает, что значение бита может быть любым и не имеет значения. Игры с кубитами или с иммитацией символа asterisk "*" кажутся мне не очень актуальными применительно к решению задачи которая в пределе двигается к экспоненциальной. Памяти у нас сегодня достаточно чтоб не обращать внимание на биты. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 22:46 |
|
Вторничный Квайн
|
|||
---|---|---|---|
#18+
Остальные молчат)), так хоть я немножко добавлю. Сляпал черновичок проги по алгоритму случайного подбора, что выше. Только без откатов и без условия окончания, чтобы только посмотреть варианты. Ограничился 15 итерациями в каждом запуске (соответственно 15 переменных с повторениями). Запускал прогу несколько раз, пока не встретил в конце distance=2. На этом и закончил. Скажу точнее. Массив значений distance(k) , где k - итерация, заканчивался числами ... 2 3 3. Значит на 14-й итерации надобыло делать откат. Вот что получилось. Исходные данные. Получить ф-цию ДНФ: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
Результат случайного наращивания (всего 15 итераций, 14-15-ые откат, осталось 13 переменных, distance=2) x3 + ~x1 ~x2 + x3 + ~x2 ~x2 ~x3 ~x1 + x1 ~x3 + ~x3 + x1 + ~x2 [+x3 + ~x3] После ручной оптимизации (~Y + X ~Z ) = ( 1, 1, 0, 0, 1, 1, 1, 0 ), distance=2 Далее по задумке в ход идёт напильник. Тут разные лёгкие пути, но ф-ла сократилась и видно по таблице глазами, что последние 4 набора значений совпали с тебуемым. Осталось допилить для первых 4х наборов. И видно, что тут достаточно инвертировать 2-3й наборы, причём получить в 1-4м наборах зависимость ~x3. Самая уж короткая таким путём может и не получится, но в этом частном случае есть надежда, что всё же итог будет короче. Обобщать сказанное на все функции слишком рано. P.S. Пишу тильду (~) вместо "!", чтобы было лучше видно. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2021, 20:53 |
|
Вторничный Квайн
|
|||
---|---|---|---|
#18+
Кстати допилить можно и так. Для примера. Формулу (~Y + X ~Z ) 1) ...*Х домножить 2) ... + ~(X ~Z)= ... + ~X +Z = прибавить отрицание 2-го слагаемого == аннулирование 3) ... + Z Если не ошибся, получим искомый рез-т (X ~Y + Z). ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2021, 21:11 |
|
Вторничный Квайн
|
|||
---|---|---|---|
#18+
Боюсь спросить. Почему, когда говорят, сколько штук различных дизъюнктов(слагаемых) всего может быть в ДНФ, называют 2^ 3 ^N ? В Яблонском, Мендельсоне ... Мне кажется, что немножко меньше. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2021, 19:56 |
|
Вторничный Квайн
|
|||
---|---|---|---|
#18+
Так случилось, что сам и разобрался. Просто внимательно прочитал очевидное место в Яблонском. Из-за сомнений я разрывался между 2-мя подходами к ответу. Теперь однозначно речь идёт об ощем числе различных наборов конъюнкций (да и дизъюнкций тоже), а пустой набор явно обзывается как "1". Число отображений {x1 x2 ...} --> {xk ~xk пусто} = 3^n ровно. Соответственно всего логических ф-ций как и было указано. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2021, 16:27 |
|
Вторничный Квайн
|
|||
---|---|---|---|
#18+
Насчёт своих экмпериментов со случайными формулами. Вывод про концепцию негативный. Много их не проводил. Первичные допустимые формулы не использовал. Рассмотрел только 2 исходных ф-ции. Для 3-х переменных оказалось мало интересным. Для 4-х переменных взял исходный вектор с 3-мя нулями (из 16 возможных). И результаты случайных подстановок не порадовали. Ну да, различие в 3-х координатах находилось быстро, в пределах 5-15 итераций. Но что такое были эти 3 различия? Это полностью "1"-ый вектор! Хоть стой, хоть падай. В рез-те "допиливание" ни чем не лучше начала от типовой СДНФ. Для 4-х переменных получались векторы <> "1" с 3-мя отличиями, но хорошо, когда "допилить" надо 0 до 1, а когда 1 до 0, то уже не лучше стандартной КНФ. 2 отличия находились при >100, или даже >400 итераций, а дальнейшая работа та же самая, что и выше. Во всяком случае если эти "3 или 2 отличия" << 2^n. Соображения с корреляциями могут помогать, но не превращаются в формальную методику. Короче говоря, не получилось простым навалом надёжно наворотить хороший случайный вектор. Если без откатов, то доходишь до тупика. Если делать откат, то необходим полноценный поиск с возвратом. Но не смог придумать эвристики (наподобие правильных перестановок или даже шахмат), чтобы удачно перепрыгивать с ветки на ветку без полного перебора. Но я знаю одного мастера по эвристикам. И как проблематичный вопрос. Тот же Яблонский пишет, что доля минимальных ДНФ среди тупиковых -->0. И это "...заставляет думать, что статистические соображения вряд ли что дают для алгоритма упрощения [ДНФ/КНФ]". Думать-то оно заставляет, только ведь и в задаче нахождения максимума отжигом случайность неплохо приближается к ответу. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2021, 17:05 |
|
Вторничный Квайн
|
|||
---|---|---|---|
#18+
Я решил восстановить тестовые данные в более каноничном виде. Рудиментарные предикторы и отклики x8, y16-y15 я вернул обратно. Так будет правильно. Чуть позже я попробую сконвертить их в каноническое уравнение ДНФ. Берите в качестве тестовых данных. Если слишком мало - я придумаю другую функцию конвертер. Пока будет koi8-to-UTF-16. koi8-rutf-16charx8..x1y16..y1802500─100000000010010100000000812502│10000001001001010000001082250C┌100000100010010100001100832510┐100000110010010100010000842514└100001000010010100010100852518┘10000101001001010001100086251C├100001100010010100011100872524┤10000111001001010010010088252C┬100010000010010100101100892534┴1000100100100101001101008A253C┼1000101000100101001111008B2580▀1000101100100101100000008C2584▄1000110000100101100001008D2588█1000110100100101100010008E258C▌1000111000100101100011008F2590▐100011110010010110010000902591░100100000010010110010001912592▒100100010010010110010010922593▓100100100010010110010011932320⌠1001001100100011001000009425A0■100101000010010110100000952219∙10010101001000100001100196221A√100101100010001000011010972248≈100101110010001001001000982264≤100110000010001001100100992265≥1001100100100010011001019A00A0 1001101000000000101000009B2321⌡1001101100100011001000019C00B0°1001110000000000101100009D00B2²1001110100000000101100109E00B7·1001111000000000101101119F00F7÷100111110000000011110111A02550═101000000010010101010000A12551║101000010010010101010001A22552╒101000100010010101010010A30451ё101000110000010001010001A42553╓101001000010010101010011A52554╔101001010010010101010100A62555╕101001100010010101010101A72556╖101001110010010101010110A82557╗101010000010010101010111A92558╘101010010010010101011000AA2559╙101010100010010101011001AB255A╚101010110010010101011010AC255B╛101011000010010101011011AD255C╜101011010010010101011100AE255D╝101011100010010101011101AF255E╞101011110010010101011110B0255F╟101100000010010101011111B12560╠101100010010010101100000B22561╡101100100010010101100001B30401Ё101100110000010000000001B42562╢101101000010010101100010B52563╣101101010010010101100011B62564╤101101100010010101100100B72565╥101101110010010101100101B82566╦101110000010010101100110B92567╧101110010010010101100111BA2568╨101110100010010101101000BB2569╩101110110010010101101001BC256A╪101111000010010101101010BD256B╫101111010010010101101011BE256C╬101111100010010101101100BF00A9©101111110000000010101001C0044Eю110000000000010001001110C10430а110000010000010000110000C20431б110000100000010000110001C30446ц110000110000010001000110C40434д110001000000010000110100C50435е110001010000010000110101C60444ф110001100000010001000100C70433г110001110000010000110011C80445х110010000000010001000101C90438и110010010000010000111000CA0439й110010100000010000111001CB043Aк110010110000010000111010CC043Bл110011000000010000111011CD043Cм110011010000010000111100CE043Dн110011100000010000111101CF043Eо110011110000010000111110D0043Fп110100000000010000111111D1044Fя110100010000010001001111D20440р110100100000010001000000D30441с110100110000010001000001D40442т110101000000010001000010D50443у110101010000010001000011D60436ж110101100000010000110110D70432в110101110000010000110010D8044Cь110110000000010001001100D9044Bы110110010000010001001011DA0437з110110100000010000110111DB0448ш110110110000010001001000DC044Dэ110111000000010001001101DD0449щ110111010000010001001001DE0447ч110111100000010001000111DF044Aъ110111110000010001001010E0042EЮ111000000000010000101110E10410А111000010000010000010000E20411Б111000100000010000010001E30426Ц111000110000010000100110E40414Д111001000000010000010100E50415Е111001010000010000010101E60424Ф111001100000010000100100E70413Г111001110000010000010011E80425Х111010000000010000100101E90418И111010010000010000011000EA0419Й111010100000010000011001EB041AК111010110000010000011010EC041BЛ111011000000010000011011ED041CМ111011010000010000011100EE041DН111011100000010000011101EF041EО111011110000010000011110F0041FП111100000000010000011111F1042FЯ111100010000010000101111F20420Р111100100000010000100000F30421С111100110000010000100001F40422Т111101000000010000100010F50423У111101010000010000100011F60416Ж111101100000010000010110F70412В111101110000010000010010F8042CЬ111110000000010000101100F9042BЫ111110010000010000101011FA0417З111110100000010000010111FB0428Ш111110110000010000101000FC042DЭ111111000000010000101101FD0429Щ111111010000010000101001FE0427Ч111111100000010000100111FF042AЪ111111110000010000101010 ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2021, 01:09 |
|
Вторничный Квайн
|
|||
---|---|---|---|
#18+
Как то так получилось. Провертьте меня. Нигде-ли я не ошибся? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2021, 02:04 |
|
|
start [/forum/topic.php?fid=16&msg=40120773&tid=1339587]: |
0ms |
get settings: |
18ms |
get forum list: |
7ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
37ms |
get topic data: |
4ms |
get forum data: |
1ms |
get page messages: |
449ms |
get tp. blocked users: |
1ms |
others: | 2493ms |
total: | 3012ms |
0 / 0 |