1. Куча / Говнокод #19864

    +5

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    \message{Russian hyphenation patterns by D. Vulis,}
    \message{modified by M.Vorontsova and S.Lvovski.}
    \message{Version date: 24.02.96}
    
    --- неинтересная часть пропущена ---
    
    {
     \lccode`\a=`\м
     \lccode`\b=`\г
     \lccode`\c=`\у
     \lccode`\d=`\е
     \lccode`\e=`\с
     \lccode`\f=`\х
     \lccode`\g=`\у
     \lccode`\h=`\к
     \lccode`\i=`\г
     \lccode`\j=`\х
     \lccode`\k=`\м
     \lccode`\l=`\н
     \lccode`\n=`\ъ
     \lccode`\o=`\з
     \lccode`\p=`\й
     \lccode`\q=`\ю
     \lccode`\r=`\д
     \lccode`\s=`\у
     \lccode`\t=`\д
     \lccode`\u=`\х
     \lccode`\v=`\я
     \lccode`\w=`\ы
     \lccode`\x=`\z
     \lccode`\y=`\ь
     \lccode`\z=`\ч
     \lowercase{
      \patterns{
       6jcp. 6usv. 6fgq. 6ucdk.
      }
     }
    }

    Отрывок из образцов переноса слов для TeX'а. Авторы постеснялись написать открытым текстом четыре образца (строка 35), поэтому зашифровали их простой подстановкой.

    Читателю предлагается расшифровать эти образцы и догадаться, чего испугались авторы.

    Запостил: inkanus-gray, 22 Апреля 2016

    Комментарии (68) RSS

    • Запрос раздела для очередного языка.
      Ответить
    • Подставлял в надежде получить что-нибудь интересное, а в результате получил хуй :(
      Ответить
      • Так часто бывает...
        Ответить
        • А зачем там 6 и точка?
          Ответить
          • Это знать надо, если ты учился в шестом училище! Это классика!

            This section contains a brief explanation of Knuth's algorithm, in
            case you missed it from the TeX books. We'll use the semi-word
            "example" as our running example.

            Since the beginning and end of a word are special, the algorithm is
            actually run over the prepared word (prep_word in the source)
            ".example.". Knuths algorithm basically just does pattern matches from
            the rule set, then applies the matches. The patterns in this case that
            match are "xa", "xam", "mp", and "pl". These are actually stored as
            "x1a", "xam3", "4m1p", and "1p2l2". Whenever numbers appear between
            the letters, they are added in. If two (or more) patterns have numbers
            in the same place, the highest number wins. Here's the example:

            . e x a m p l e .
                 x1a
                 x a m3
                    4m1p
                      1p2l2
             -----------------
             . e x1a4m3p2l2e .


            Finally, hyphens are placed wherever odd numbers appear. They are,
            however, suppressed after the first letter and before the last letter
            of the word (TeX actually suppresses them before the next-to-last, as
            well). So, it's "ex-am-ple", which is correct.


            Точка означает начало либо конец слова (как в регулярках ^ или $). Чётные числа указывают на нежелательность переноса в этом месте, нечётные — на желательность. Если слову соответствуют несколько образцов и образцы накладываются, для каждой пары букв выигрывает наивысшее число среди образцов.

            Короче, 6 и точка означают, что перед слогами хуй$, хую$, хуе$, хуем$ перенос делать нежелательно, дабы не смущать воспитанниц Института благородных девиц. Перекрыть это правило можно, если добавить образец типа 7ху
            Ответить
            • P.S. Нашёл свою опечатку: s/хуе/хуя/
              Ответить
            • пиздец. почему я думал, что этот алгоритм придумал Дейкстра?
              Ответить
          • точка не нужен
            Ответить
            • Действительно, с точкой в шаблоне слово «страхуйся» может быть перенесено как «стра-хуйся» и глаза будут цепляться за «хуйся» в начале строки. А без точки в шаблоне даже в этом слове перенос будет запрещён.
              Ответить
      • Хуй не нужен
        Ответить
    • TeX не нужен
      Ответить
    • Отображение не биективно. увы, так что это не шифр. Видимо поЦиЭнт - долбоеб
      Ответить
      • Если отображение биективно, то это шифр.

        Если несколько кодов могут отображаться на один, то это сжимающее отображение, т. е. хэш.

        Если один код может отображаться на несколько, как здесь, то это... разжимающее отображение. Большое количество вореций зашифрованной информации не позволяет восстановить её с помощью частотного анализа, не зная ключа.

        Недостаток разжимающего отображения заключается в том, что алфавит зашифрованного текста должен быть мощнее алфавита источника.
        Ответить
    • Будете смеяться, когда
      • tex.org/downloads/hyp-ru.tex.gzip
      Причина блокировки: использование нецензурной лексики
      Доступ: разрешить после обработки автоматическим фильтром
      Ответить
      • Самое смешное, что тот же алгоритм переноса слов (только на собственном движке) использует Опенофис и все программы, основанные на библиотеке libhnj (даже для Питона есть адаптер этой библиотеки). Поскольку у этих программ крутого теховского препроцессора нет, табличка образцов лежит в незашифрованном виде:
        6хв.
        6хрь.
        6хуем.
        6хуй.
        6хую.
        6хуя.
        6ценни
        6ч1к

        Отсюда:
        C:\Program Files\LibreOffice 5\share\extensions\dict-ru\hyph_ru_RU.dic

        Если РКН запретит нецензурную лексику в файлах, то скачать Опенофис/Либрофис не получится...
        Ответить
        • Пора запасаться софтом в прок.
          Ответить
          • Ну как, запасся?
            Ответить
            • А ты?
              Ответить
              • Потихоньку запасаюсь.

                Не подскажешь список того, что «must have»?
                Ответить
                • Foobar (или 1by1), 7zip, Alcohol 120%, QIP, IrfanView, Firefox, Paint.NET
                  Ответить
                • Советую начать тут
                  https://lh4.googleusercontent.com/-0RTe0qQVcec/T6lrwK9SGMI/AAAAAAAABe4/CJxl-Xp6wY0/s640/P1130754_2012-05-08T16-03-22.JPG

                  https://www.phantom.sannata.org/viewtopic.php?t=6133&start=693
                  Ответить
                  • > https://www.phantom.sannata.org

                    SQL ERROR [ mysqli ]

                    MySQL server has gone away [2006]

                    An sql error occurred while fetching this page. Please contact an administrator if this problem persists.
                    Ответить
                    • > MySQL server has gone away [2006]

                      Уже 15 лет как ушёл...
                      Ответить
                    • Ну как, контактнул?
                      Ответить
                    • Too many connections [1040]

                      Нифига себе сколько народу на «Говнокоде»! Сайт положили сразу после публикации ссылки.
                      Ответить
        • 6хв.
          6хрь.

          Это же не слоги?
          Ответить
          • Как я понял - это не слоги, а просто паттерны. Чётные цифры помечают места в паттерне, куда нельзя сувать перенос. Нечётные - куда можно. Если несколько паттернов совпало - большая цифра побеждает меньшую.

            Т.е. если у тебя есть и1х и 6хрь, то сти-хи будут переноситься, а вихрь - нет.

            Пусть инканус поправит, если я гоню.
            Ответить
            • Тут, возможно, вопрос в том, нужны ли данные исключения. Если я правильно понимаю, переносы в общем случае расставляются алгоритмом, распознающем слоги по гласным и согласным, а это - исключения, т.е. сти-хи он перенесет без всяких правил. Но *ви-хрь алгоритм же и так не должен переносить, ведь "хрь" - не слог?
              Ответить
              • Исключения не нужны
                Ответить
              • В том и дело, что эту таблицу используют программы, у которых нет алгоритма распознавания слогов по гласным и согласным. Так что паттерны — это не просто исключения.

                Алгоритм первоначально был рассчитан на английский и на всякие романо-германские языки, которым свойственны буквосочетания (вроде дифтонгов или обозначения звука [ш] несколькими буквами), так что без детального анализа нельзя разобрать слово на гласные-согласные.
                Ответить
                • Дифтонги не нужны
                  Ответить
                • Насколько надежно работает этот алгоритм? Делаю переносы именно по словарю опенофиса, неправильно, кажется, не переносил, а вот переносы расставлял не везде где надо.
                  Ответить
                  • Тут от самого словаря многое зависит. С Опенофисом распространяется словарь Д. Вулиса, упомянутый в этом говнокоде (известны как минимум три модификации этого словаря, какая именно из них в Опенофисе, я точно не знаю). Он не самый большой, хотя и не самый маленький. В комплекте TeXLive можно найти более мощные словари.
                    Ответить
                  • Например, этот:
                    % ruhyphal.tex:  Russian hyphenation patterns, version 2003/03/10
                    % Copyright 1999-2003 Alexander I. Lebedev <[email protected]>
                    %
                    % This program may be distributed and/or modified under the conditions
                    % of the LaTeX Project Public License, either version 1.2 or any later
                    % version.
                    %
                    % Patterns were generated with patgen from a 990,000-word list and then
                    % manually corrected.
                    %

                    Или этот:
                    %-----------------------------------------------------------------------
                    %------------------- ruhyphas.tex v1.0b4a 23-Jul-98 --------------------
                    %------ (c) 1997,1998 by A.Slepuhin, Moscow State University -----------
                    %-----------------------------------------------------------------------
                    %
                    % This file contains an experimental version of Russian hyphenation
                    % patterns built using basic Russian hyphenation rules and a dictionary
                    % of approximately 1,300,000 different word forms. Note, that these
                    % patterns use *strong* hyphenation rules and were in use by most
                    % publishers until modern times. Modern tradition uses *weaker* rules
                    % (i.e. offering more break points), which sometimes make text difficult
                    % to read. Due to TeX's excellent paragraph formatting algorithm, even
                    % these strong rules give good word spacing. These patterns have been
                    % checked on some books edited by Holy Trinity St.Sergius Lavra
                    % Publishers. As a result about 40 patterns were added and changed. I
                    % would be pleased to receive any remarks and bug reports (first of all
                    % lists of words hyphenated with errors). Please send your messages via
                    % e-mail to:
                    %
                    %   [email protected]
                    Ответить
                  • Или этот:
                    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
                    %                                                                            %
                    %    This is russian hyphenetion patterns hyphen.rus,  version 2.01 beta     %
                    %    This file is the part of a Russian Foundation of Basic Research         %
                    %                   PUBLIC  DOMAIN TeX distribution                          %
                    %                                                                            %
                    %  (c) Russian Foundation of Basic Research,  1996.                          %
                    %  (c) Sergei V. Znamenskii ([email protected]) 1995--1996    %
                    %                                                                            %
                    Ответить
                  • Алгоритм не учитывает специфику языков. Например, в старой орфографии немецкого языка можно было переносить сочетание «ck» как «k-k». Описать эту возможность словарём невозможно. Тут остаётся только вставлять хак уже после расстановки возможных переносов.
                    Ответить
                    • Для таких изысков ЛаТеК уже тяжело использовать в любом случае. Обычно для верстки нужно редактировать разрядку по-строково. Есть еще и другие правила, касающиеся переносов, не только благозвучность. Например, в хорошей книге нельзя, чтобы было больше четырех переносов подряд (т.е. чтобы четыре строки подряд заканчивались переносами). Такое поиском-заменой по слогам не сделать.
                      Ответить
                      • Строгие правила типографии также запрещают «тоннели». Это когда в четырёх строках подряд в какой-нибудь позиции пробелы аккурат друг над другом или по диагонали. «Тоннель» коварен тем, что у читателя может создаться ощущение новой колонки.

                        Для устранения «тоннеля» приходится добавлять пробелы в случайных местах. ТеХ, кажется, с этой задачей справляется, а в текстах, свёрстанных в Ворде, нередко вижу «тоннели».

                        Но это уже к алгоритму переносов имеет отдалённое отношение.
                        Ответить
      • Да он не нужег
        Ответить
      • > .gzip
        > нецензурной лексики
        Во времена однобайтных кодировок хуи в рандомных данных встречались довольно часто.
        Ответить
    • Ответить
      • Этот фрагмент запрещает перенос перед последним слогом в словах типа «застрахуй», «подстрахуй», «заштрихуй», «підрахуй», а также «штрихую», «штрихуем».

        P.S. Не могу придумать пример слова, заканчивающегося на «-хуе».
        Ответить
        • > перед последним слогом
          А "страхуемый" он может перенести как стра-
          хуемый?
          Ответить
          • Да, я уже об этом чуть выше написал. Точка в образце матчится концу слова, поэтому образец "6хуе." на слово «страхуемый» не наложится. Не было бы точки, перенос был бы запрещён.
            Ответить
    • Отвлекусь от данного кода. Вспомнил о двух задачах:

      1. Как получают эти паттерны? Вручную, основываясь на свою интуицию, выдирают из словаря или есть какие-нибудь автоматические алгоритмы получения паттернов?

      2. Табличка паттернов может быть использована для получения новых слов в бредогенераторе. Для этого нужно выбирать из неё достаточно длинные паттерны. В генерации связных текстов это никак не поможет, но может выдать что-нибудь типа «верблюдается» и «одновременьше».
      Ответить
      • 1. Есть мнение, что сидят какие-то люди на кафедре и за небольшую денежку клепают. Во всяком случае, с чем-то похожим уже сталкивался. Корпус текстов есть, натравливаем на него что-нибудь самописное, получаем сырые данные и вперёд... Я не уверен, само собой.
        Ответить
        • Я теперь заметил в одном из словарей: «Patterns were generated with patgen from a 990,000-word list and then manually corrected». Так что софт есть.
          Ответить
          • Ну, судя по доке, ему на вход надо список всех слов с уже расставленными переносами...
            Ответить
            • изейшая программа
              Ответить
              • Если изейшая, то напиши свою реализацию. А мы посмотрим.
                Ответить
                • если тебе на вход приходит список всех слов, разбитых по слогам, то все просто. Не влезает? - ищем в списке. Есть - разбиваем, нет - переносим целиком. И до утра
                  Ответить
                  • Первое, что приходит в голову, это из слова «про-грам-ма» сделать паттерн «.про1грам1ма.». Потом ты вспоминаешь, что слово «программа» может склоняться и может образовывать производные слова. Паттернов становится слишком много, и надо придумать способ оптимизировать их, но так, чтобы не было ложных срабатываний.
                    Ответить
                    • >> Потом ты вспоминаешь, что слово «программа» может склоняться и может образовывать производные слова.

                      скорее всего эти производные тоже заносятся

                      тут думать надо
                      Ответить
                      • В словаре Вулиса, например, нет слова «подосиновик», но есть паттерны «по2д1о2си», «о1до», «о1си», «1си», «и1но», «2ов», «о1ви».

                        В словарях, которые я видел, общее число паттернов от 3 до 6 тысяч, хотя исходная база содержит около миллиона слов.
                        Ответить
    • Странные люди, если бы мне выпала возможность невозбранно написать где-нибуль "хуй", я бы это обязательно сделал.

      ХУЙ!
      Ответить
      • ААААА!

        https://en.wiktionary.org/wiki/huy

        А ещё в табасаранском языке слово «хуй» означает собаку, в монгольском языке слово «хуй» означает рулон или ножны. А «хуйхуй» —– это самоназвание народа дунгане:
        https://en.wikipedia.org/wiki/Hui_people

        Сейчас в литературе и в СМИ вместо «хуйхуй» стыдливо употребляют «облагороженное» слово «хуэй».
        Ответить

    Добавить комментарий