Программист прикладного уровня
4,0
рейтинг
20 июня 2011 в 11:27

Разработка → Эффект Кембриджского университета

Перемешивание букв. Эффект Кембриджского университета.


По рзелульаттам илссеовадний одонго анлигйсокго унвиертисета, не иеемт занчнеия, в кокам пряокде рсапожолены бкувы в солве. Галвоне, чотбы преавя и пслоендяя бквуы блыи на мсете. Осатьлыне бкувы мгоут селдовтаь в плоонм бсепордяке, все-рвано ткест чтаитсея без побрелм. Пичрионй эгото ялвятеся то, что мы чиатем не кдаужю бкуву по отдльенотси, а все солво цликеом.
Тема очень старая и гуляет по интернетам давно, но везде приводится как пример один и тот же текст, мне было интересно попробовать данный эффект на собственных текстах, в результате чего и родилась эта программа.

Пример работы программы:


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

Пока заметил что текст с научными терминами, например с википедии, читается труднее художественного, что впрочем логично, наиболее часто употребляемые слова распознаются сразу без усилий.

Исходного кода совсем немного, функция преобразования текста:
       string eng_rus_alphavit = "АаБбВвГгДдЕеЁёЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЪъЫыЬьЭэЮюЯяAaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz";
        Random rnd = new Random((int)DateTime.Now.Ticks);
        /// <summary>
        /// Перемешивание букв в слове за исключением первого и последнего символа
        /// </summary>
        public string RndSym(string word)
        {
            if (word.Length > 2)
            {
                string ret = "";
                //Построим массив случайно перемешанных индексов кроме первого и последнего
                int[] index = new int[word.Length];
                for (int i = 0; i < word.Length; i++)
                    index[i] = -1;
                index[0] = 0;
                index[word.Length - 1] = word.Length - 1;
                int v = rnd.Next(1, word.Length - 1);
                for (int i = 1; i < word.Length - 1; i++)
                {
                    while (index[v] != -1)
                        v = rnd.Next(1, word.Length - 1);
                    index[v] = i;
                }
                //Соберем слово используя массив индексов
                for (int i = 0; i < word.Length; i++)
                {
                    ret += word[index[i]];
                }
                return ret;
            }
            return word;
        }
        /// <summary>
        /// Преобразование текста
        /// </summary>
        private string TransformText(string text)
        {
            int begin;
            string nword;
            char[] array = text.ToCharArray();
            for (int i = 0; i < array.Length; i++)
            {
                if (eng_rus_alphavit.Contains(array[i].ToString()))
                {
                    begin = i;
                    while (eng_rus_alphavit.Contains(array[i].ToString()) && (++i < array.Length)) ;
                    nword = RndSym(text.Substring(begin, i - begin));
                    //Замена исходного слова на перемешанное
                    for (int j = begin; j < i; j++)
                    {
                        array[j] = nword[j - begin];
                    }
                }
            }
            string ret = "";
            foreach (char c in array)
                ret += c;
            return ret;
        }


Релиз(Win x86/x64) и исходники(C#, VS2010) можно скачать здесь.

Практической пользы программа не несет, разве что прокачать навыки чтения и подгрузить мозг.
Ogoun @Ogoun
карма
59,0
рейтинг 4,0
Программист прикладного уровня
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (134)

  • +50
    Автор, попробуйте сделать из этого новый вид капчи, получится очень интересная вещь)
    • +7
      Слишком легко взломать с помощью обычного словаря.
      • 0
        Там, где прокатывает «2+2» прокатить и это =)
        Все от требуемой сложности зависит.
    • +3
      На некоторых сайтах требуется ввести капчу из двух английских слов, причем часто слова несуществующие(или неизвестные мне), т.е. порядок букв незнаком. Так вот это жутко раздражает при вводе, учитывая еще и искажения.
      • +9
        Меня больше бесит когда помимо незнакомых слов, ещё и написаны они так что глаза сломать можно. Я такие капчи называю «система угадай мелодию с одной ноты». Аж бесит, ощущение что не роботов фильтруют а людей…
        • –3
          Самая ужасная капча в мире это во вконтакте. Не знаю как вы, но я обычно разгадываю её попытки с 6-8 (в прямом смысле, без преувеличения), притом каждая из моих попыток длится по секунд 5-10 (то бишь достаточно вдумчиво).
          • +9
            Наверное, ты видел не все капчи в мире.
            Попробуй разгадать вот эту
            • 0
              Само собой, я имел ввиду стандартные капчи.
              • –4
                Стандартные? Капчи уже стали подчиняться какому-то стандарту?
                • +5
                  Не занудничайте, вы прекрасно поняли о чём я.
                  • НЛО прилетело и опубликовало эту надпись здесь
            • +2
              léi tíng zhàn chúi
              • +2
                … прошло 4 часа 36 минут
                • +2
                  Да не, прошло где-то меньше минуты… Пока моя девушка это не расшифровала. Впрочем, она родом из Китая, так что это, наверное, не чистый эксперимент. )
              • +2
                雷筳战锤
                так? (сомневаюсь насчёт второго иероглифа)
              • 0
                雷 霆 站 垂 :-) Да капча из разных шрифтов :)
                вроде похоже…
          • +1
            ReCaptcha порой вводит в ступор покруче всякого вконтакта:
            img.picsa.ru/pictures/0/000/092/116/92116.png
            • +1
              image
              • +6
                По-моему, такая рекапча проглотит любую ерунду вместо второго слова.
                • +3
                  рекапча априори проглотит любую ерунду вместо второго слова. она так устроена.
                  • +5
                    Нет. Иногда она проглатывает ерунду вместо первого слова
              • 0
                Однажды попадалась математическая формула. И проглатывало что угодно вместо этой самой формулы.
          • 0
            А мне доказывали что самая ужастная эта.
            • 0
              Слава богам, её теперь не нужно каждый раз вводить...))…
        • +1
          Я сразу ухожу с таких сайтов. Мое мнение таково: если капча мешает пользователю — убираем капчу и набираем модераторов. Если пофиг на людей ставим капчу покруче.
          • 0
            Самое смешное что капча системы «угадай мелодию» нередко стоит на сайтах типа маленьких блогов и.т.д.

            Т.е проблемы спама там как таковой нет. Не было бы капчи (у меня был такой сайт) ну максимум раз в недельку один спамобот пролез, и ничего страшного бы не случилось, удалить в два клика и не париться. А вот сколько ценных людей/мнений отсеивается, одному богу известно…
            • 0
              У меня нарегилось нереальное количество спамоботов за то время, что не было капчи, зачем — не понятно, ибо они ничо не делали. Сайт слабо посещаем. Регилось штук по 5 в день, за годик ого-го насобиралось ))
      • +5
        Это рекачпа, вводя её вы фактически играете роль файнридера. Она вам дает на распознание два слова: одна проверочное, которое система знает, а второе — не распознанное, вводя которое вы помогаете гуглу распознать книгу. Фишка в том, что вводить можно только одно — проверочное, а вместо второго можно написать что угодно. После некоторой практики легко распознать какое из слов проверочное (сейчас такие слова слега раздвоены, но это меняется время от времени), но вот основное правило: если в слове есть знаки препинания, числа, любые не латинские символы — вместо это слова можно просто стукнуть по клавиатуре и отправить случайный набор символов.
        Вот вам явный пример, когда второе слово вводить не обязательно: img850.imageshack.us/img850/5286/captchafc.jpg
        • +4
          image
          • +19
            cabrour elefant
            • +2
              По мотивам поста о ребус-капче — у меня появилось настойчивое желание добавить слону запятых :)
            • +12
              ну тогда уже cabrour elephant
    • 0
      Боюсь, без контекста не получится распознать слово (на каптче).
  • +1
    Большие слова плохо воспринимаются, те, что поменьше — нормально.
    Однако, в целом текст плохо воспринимается. Возможно, причина тому — понедельник
    • +7
      А я на оборот, только когда автор раскрыл суть понял, что читаю исковерканный текст. Я думаю тут еще играет роль навык скорочтения и словарный запас. В этих случаях мозг быстрее подбирает слова и не замечает проблем.
      • +1
        Нет, вступительный текст — понятно, а вот текст на скриншоте — там уже интереснее
        • +2
          Тематика тоже имеет огромное значение, я споткнулся на слове «акустики» (четвертое) толкьо потому что не был готов к этой теме. Думаю если бы перед этим читал тексты на подобную тематику, то проблемы бы не возникло. Да еще и в понедельник, с утра, пока мозги «не прогреты»…
          • 0
            То же самое, только акустика заставила запнуться
          • 0
            … толкьо потому что...
            Сначала подумал что Вы прогнали коммент через программу автора.)

            А по теме — слова после аккустики, включая ее, искаверканы чрезмерно, читать просто тяжело:
            … обтаоркби… слганиов
            — рвет мозг
    • 0
      У меня тоже такое ощущение, что текст со скриншота программы воспринимается куда хужэе, чем «классический» вариант. Возможно, причиной тому то, что в классическом варианте часто вторая и предпоследняя буквы остаются на месте, а также особо нет непроизносимых буквосочетаний.
  • 0
    Перемешивание букв + транслит — вот это гремачая смесь получится…
    Уровень для продвинутых: перемешивание букв после транслита.
    • +4
      Была такая игра на радио — сначала русский текст переводили на инглиш, а потом обратно, но уже с другим словарем.
      Надо было угадать о чем была речь
      • +2
        Игра случаем не Google Translate называется?
  • 0
    Я как-то пробовал читать перевернутый текст, тоже практически не отличается от привычного процесса. Можете добавить в свою программу еще и поворот на 180°)
    • +4
      Тогда можно развить до уровня игры, на первом уровне просто надо ввести текст, распознав за время, с каждым следующим усложняется трудоемкость восприятия. Повороты, искажения. И продавать в китай для тренировок распознавателей каптч.
      • +3
        В последнее время всё чаще капчи распознаются не китайцами, а пользователями adult-сайтов, которые вводят каптчу с целью увидеть вожделенные картинки/видео. Этим, в отличие от китайцев, даже платить не надо — сами всё делают.
        • +6
          Красивое решение
          • 0
            Ещё красивее будет, когда месячную подписку они будут зарабатывать вводом капчи. Или я отстал от жизни и всё именно так и обстоит?
    • +3
      У меня перевёрнутый русский текст читается легко, а перевёрнутый английский — хуже.

      Может быть, можно использовать перевёрнутое чтение как средство освоения языка?
      • +2
        Пардон, каким боком? :-))

        Навык чтения изковерканного текста это следствие знания языка, а не причина.
        • 0
          А обратная связь? Я так вижу, что при чтении происходят два процесса — побуквенное распознавание и «подтягивание» слов из словарного запаса для понимания смысла. Искусстенно замедлив первый процесс (например, переворачиванием), мы тем самым даём больше времени второму процессу и соответствующей «прокачке».
          • 0
            Ой не знаю, не знаю…

            Точно так же можно и выдумать обучение иностранцев русскому через «пандонкавский» сленг.
            • 0
              В «падонкавском» варианте отсутствует момент подтверждения-закрепления. Заметьте — я говорил не о перемешанном, а о перевёрнутом варианте — слово присутствует в его изначальном виде, отличается лишь визуальное представление.
              • 0
                Из личного опыта — закрепление правописания слов происходит только при непосредственном употреблении слов в письме, а не лишь только чтении.
  • 0
    Коли ради интереса… даешь обратное преобразование! :) але без словарей не обойтись.
    • +2
      Без словарей никак. Но в целом несложно, достаем слова по первой букве, отсеиваем по длине и последней букве, и фильтруем по набору букв. Получится список подошедших.
      • 0
        Гораздо больше можно будет отсеять если учесть вероятности следования определённых букв друг за другом.
      • +1
        Во-первых, марковские цепи половину сделают гораздо более простыми методами.
        Во-вторых — берем словарь, сортируем буквы в каждом слове по алфавиту, строим дерево последовательностей, в распознаваемом слове также сортируем буквы по алфавиту и пробегаемся по дереву — получится гораздо быстрее.
  • +2
    Мне кажется, что надо ввести доп критерий — количество «правильно стоящих» букв в начале\конце.
    Для слова < 7 символов это 1 (первая и последняя)
    Для слова > 7 это 2 буквы.

    + запретить некоторые сочетания (например, когда я вижу БС в начале длинного слова, я впадаю в ступор и начинаю шепотом повторять «бс, бэс, бс, бз, бззз...»). Интересно, такой эффект наблюдается еще у кого то?
    • 0
      ИМХО всегда лучше две, ибо так человек не сразу понимает что происходит.
      Если только одна буква, то хотя текст и читается, сразу видно что с ним не так.
  • +48
    Пнаацы, не кйчайте, там вриус, паваерешимеет бвукы!
  • +11
    Просто переставил внутренние буквы текста наоборот
    > По раттаьлулезм ииндавоесслй огнодо агкосйгилно
    прочитать практически не реально
    А как вам слово — ржнлпсооаеы
    Так что совсем без порядка не прочитать. В том тексте практически все гласные на своих местах, да и согласные не сильно смещены — поэтому читать не сложно.
    • 0
      Да, да тоже такая мысль пришла. В оригинале вообще слабо перемешано. В общем, британские ученые…
    • 0
      читать нужно текст, а не слова.
      • +1
        Читайте :)
        По раттаьлулезм ииндавоесслй огнодо агкосйгилно утеситреивна порядок имеет зиечанне.

        Если и можно здесь что-то прочитать, то надо повозиться и попереставлять буквы сначала.
        И это я всего лишь переставил все буквы наоборот (вторую на предпоследнее место и тд..) от того, что предлагалось изначально. Я даже не подбирал ничего специально.
        • –3
          И тем не менее, по прежнему прочиталось без проблем.
  • +1
    Мне кажется что перемешивать надо не абы как, а менять местами рядом стоящие буквы, чтоб они не «убегали» далего. Если вторая буква вдруг окажется предпоследней, то шансы на прочтение существенно уменьшаются.
    • 0
      Может и так, но я руководствовался фразой из текста:
      >в полном беспорядке
      • +3
        В исходном тексте нет полного беспорядка :)
    • 0
      А мне кажется гораздо больше сбивает с толку мешанина, неожиданно похожая на нормальное слово (чередование гласных и согласных). Например во фразе «сосредоточиться на возможностях слуха» первые два слова я прочитал спокойно, а на третьем засыпался :) Потому что стал гадать, что это за сухло такое.
    • 0
      Мозг распознает образы методом сравнения с образцом, поэтому чем дальше уходят буквы от своих мест, тем сильнее искажения.

      Возможности слуха тоже ограничены, мозг не может слышать «бесконечное число частот», так как сложный гармонический сигнал разлагается в спектр при помощи улитки, в которой есть мембраны разного размера. Каждая мембрана резонирует на определенной частоте, и амплитуда этой частотной составляющей определяется по интенсивности сигнала от связанных с этой мембраной рецепторов.
  • +14
    «Новость» с очень длинной бородой (уж не один год ей точно).
    Чтобы понять, насколько это неправда делаем такой тест: вместо предложения пишем фанарную последовательность слов; буквы внутри слов перемешиваем таким образом, чтобы сначла шли гласные (в алфавитном порядке), а затем согласные. После чего пытаемся доказать, что способны прочесть эту лабуду.

    Вот пример, который является последовательностью слов из двух вполне осмысленных фраз, после перестановки превращается в полнейшую абракадабру:

    мааееикмсттче иеиюклнсче раобты саоюявлстт эогто гаеииивдклрсче аоврта яюявлстя уойврсстта эееииодклнпцй аионнтчй паиодклнрй мааеикмтти


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

    Текст опровержения нагло скопипащен отсюда.
    • 0
      Но с другой стороны ваш пример не являет собой случайное перемешивание букв, а имеет вполне конкретную последовательность(гласные-согласные), вероятность получения такого следования в случайном перемешивании очень мала и вряд ли может служить опровержением.
      • +1
        По рзелульаттам илссеовадний одонго анлигйсокго унвиертисета, не иеемт занчнеия, в кокам пряокде рсапожолены бкувы в солве. Галвоне, чотбы преавя и пслоендяя бквуы блыи на мсете.
        Условие соблюдено, про случайность в исследованиях ни слова.
    • +2
      А я таки что-то прочитал :)

      математические исключение? работы составляют этого … являются устройства энциклопедий античной … математики

      Вообще удивительно, как же наш мозг умудряется вычленять информацию из такой каши
  • +20
    • –2
    • 0
      «Язык этой страницы — болгарский» ©

      «Котовдсво» очень круто смотрится =)
  • +2
    Оригинальный текст всё же читается проще. Заметил, что когда читаю тот текст глаза цепляются не только за конец и начало слова, но и за некоторые «опорные» точки — буквы в середине. Т.е. слово «илссеовадний» читается примерно как и-сс-ова-ний (что уже близко к нормальному варианту).

    По сути, в искаженном слове буквы не уходят далеко от своих исходных позиций, что позволяет легче читать искаженные слова.
  • +7
    чуть меньше кода)
    //import java.util.Collections;
    //import java.util.ArrayList;
    
    String text = "Практической пользы программа не несет, разве что прокачать навыки чтения и подгрузить мозг.";
    final StringBuffer sb = new StringBuffer( text.length() );
    Matcher m = Pattern.compile("[а-яА-Яa-zA-Z]{4,}").matcher(text);
    while (m.find()) { // words
    	for(int g=0; g<=m.groupCount(); ++g) {
    		String wrd = m.group(g);
    		String wrd_new = wrd.substring(0,1);
    		char[] chars = wrd.substring(1, wrd.length()-1 ).toCharArray();
    		ArrayList<String> al = new ArrayList();
    		for(int i=0; i<chars.length; ++i)
    			al.add( String.valueOf(chars[i]) );
    		Collections.shuffle(al);
    		for(String tmp : al)
    			wrd_new += tmp;
    		wrd_new += wrd.substring(wrd.length()-1,wrd.length());
    		m.appendReplacement( sb, Matcher.quoteReplacement( wrd_new ) );
    	}
    }
    m.appendTail( sb );
    System.out.println(sb);
    
    • +7
      Чуть меньше кода — 2:
      # -*- coding: utf-8 -*-
      import re, random
      
      def _reword(m):
          bits = list(m.group(0))
          prefix, core, suffix = bits[:1], bits[1:-1], bits[-1:]
          random.shuffle(core)
          return ''.join(prefix + core + suffix)
      
      def shuffle_text_letters(s):
          return re.sub(u'[а-яА-Яa-zA-Z]{4,}', _reword, s)
      
      print shuffle_text_letters(u"Практической пользы программа не несет, разве что прокачать навыки чтения и подгрузить мозг.")
      
      • +3
        чуть меньше кода — 3 :)
        $text = "Практической пользы программа не несет, разве что прокачать навыки чтения и подгрузить мозг.";
        $text = preg_replace_callback("/(?<=[а-я])[а-я]{2,}(?=[а-я])/iu", 'rndstr', $text);
        function rndstr($matches) {
        	preg_match_all("/./u",$matches[0],$m);
        	shuffle($m[0]);
        	return join('',$m[0]);
        }
        echo $text;
        
        • +3
          Чуть меньше кода — 4: возвращение блудного верблюда
          use utf8;
          use List::Util 'shuffle';
          $text = 'Практической пользы программа не несет, разве что прокачать навыки чтения и подгрузить мозг.'; 
          $text =~ s/(?<=[а-яa-z])([а-яa-z]{2,})(?=[а-яa-z])/join('',shuffle(split('',$1)))/eg;
          print "$text\n"; 
          
          • 0
            сдесь должен быть код на руби в две элегантных строчки, но его еще не написали
            • 0
              И что помешало?
  • –8
    Автор, ты можешь объяснить, зачем постить такую элементарную ерунду на хабр? Давайте каждый хабровчанин будет сюда постить все программы сложнее хеллоу ворлда, которые он написал.
    • 0
      Объясняю, я нисколько не пытаюсь показать новый алгоритм, или сверхоптимизацию, или еще что-либо что является новым словом в программировании. Я реализовал очень старый и давно известный алгоритм просто ради интереса. И насчет данной темы, я уверен, не все люди в курсе, кому то вполне может быть интересно узнать и попробовать.
  • +1
    Посмотрите работы Сергея Михайлова (автора книги по скорочтению «Шаманство над книгой»). У него на сайте есть много на тему www.sm100.ru
    В частности, его проект с перемешиванием букв http://www.dadon.ru/mik/mix_letters
    По себе знаю — такие упражнения очень помогают повысить скорость чтения. Вот-бы кто-нибудь FBReader с такой фичей написал…
    • +1
      Насколько я знаю fb2 формат является xml подобным, вполне можно попробовать сделать конвертер книг в перемешанное состояние.
      • 0
        Мысль интересная!
        Но я думал еще повороты букв сделать. Начал когда-то давно для N900 писать, потом пересел на андройд и тема завяла. Может кто-нибудь подхватит тему.
        Логика была простая: нужно развивать навыки быстрого чтения на том, что читать легко и приятно, что-бы применять потом на сложном.
  • 0
    Опять же, предлагаю автору задуматься над слогами. Вот слово из авторского текста «пноеедрлжпоии» мне в чтении далось сложнее всего)
    • 0
      Вам оно далось сложно поскольку слово длинное, и вы, скорее всего, охватываете его не полностью за раз.
    • +6
      В пенодрелжoпии, где же ещё…
  • +6
    Интересная мысль родилась: а если не просто случайно переставлять, а переставлять так, чтоб в результате при сжатии с помощью алгоритма Huffman-а выходили меньшие деревья?

    Т.е. в простом варианте для каждого слова составить все возможные перестановки букв, и посмотреть какая из перестановок уже содержится в предполагаемом дереве.

    Или построить дерево для исходного документа, потом пройтись по «листьям» и посмотреть не можем ли мы переставить что-то в каком-то из слов чтоб получился этот листик.

    Или с помощью dynamic programming постепенно построить дерево+перестановки.

    Мне кажется что будет оч-чень интересный результат в виде существенно большего коэффициента сжатия.

    Фактически это будет JPEG для текста :)

    Есть желающие попробовать? По идее не сложный алгоритм будет — чуть более сложнее задачка чем на CodeJam (вспомнилась задача прo «wellcome to code jam»).
    • 0
      Но что делать с коллизиями? Наверняка найдутся разные слова с одинаковым набором букв, у которых первая и последняя буквы также одинаковы(сходу не подобрал). Тогда однозначного декодирования получить не сможем. И выйдет как и в jpeg сжатие с потерями, что в случае с текстом нежелательно.
      • +2
        в том то и суть — ведь по «рзелульаттам илссеовадний» Вы не сразу отличите что в каком-то месте было другое слово и Ваш мозг «достроит» нужные перестановки в обоих случаях. Ведь задача не восстановить 1 в 1 оригинальный текст, а получить текст, который читается так же.

        Именно за счет этой «фичи мозга» и можем получить сжатие большее, чем при обычном хуффмане :)

        Думаю эксперимент стоит того, чтоб попробовать.
  • 0
    Глаз цепляется за гласные.

    Посмотрите на исходный текст, практически все гласные на своих местах. Если они переставлены, узнать слово уже значительно труднее, особенно если это длинное слово. Так что простой микс — не подойдет.
  • 0
    Не особо читаемо получается, кстати.
  • 0
    Назвать программу нужно было бы чем-то в духе: «Бумперекешовка» :-)
    • +1
      • НЛО прилетело и опубликовало эту надпись здесь
  • –3
    WHY C#?
    на js же легко пишется, и не нужно обладать такой фигней как винда
    • 0
      Возможно не все люди знают JS.
      • 0
        Но все, блин, как один, знают C#.
        • +1
          Нет.
  • +2
    Практической пользы программа не несет, разве что прокачать навыки чтения и подгрузить мозг.

    А вот это Вы зря.
    Подобной программой отучивал своего младшего брата читать по слогам.
    Успешно. :)
  • +16
    image
    • +1
      RAHДОМ

      АДЖ3ДO
    • 0
      Читал справа налево и снизу вверх.
      Был не прав…
    • +1
      … юутсупв онечартоп инемерв окьлотс, нилБ
      • 0
        (:.латичорп ортсыб оньловод я а, ах-аХ
  • +1
    То же самое коротко и на Haskell

    import System.Random

    blendText :: String -> IO String
    blendText s = sequence ( map blendWord (words s) ) >>= return . unwords

    blendWord :: String -> IO String
    blendWord w = rearrange (( tail . init ) w) >>= \x -> return ([head w] ++ x ++ [last w])

    rearrange :: [a] -> IO [a]
    rearrange [] = return []
    rearrange (x:xs) = getStdRandom (randomR (0, (length (x:xs)) - 1))
    >>= \n -> sequence [rearrange (take n xs), return [x], rearrange (drop n xs)]
    >>= return . concat


    • 0
      На С++ с использованием STL
      • –1
        Holy s~t, еще и с комментариями! Ой, а можно вот это на С++, пожалуйста!
        • +1
          29 строчек до 2000 не дотянул:) Все можно, только за отдельныю плату)
  • 0
    Главное первые слова дать нормально прочитать, дальше из контекста додумываешь.
  • 0
    Как-то раз в одном из обзоров у меня таким способом было написано пара абзацев — по-моему, даже никто не заметил этого )
    • +5
      или просто не дочитали, учитывая объем Ваших постов и если эти абзацы ближе к концу
    • –1
      Реквестирую посты про всякие железки. Если вы конечно этим еще занимаетесь…
  • +1
    Мне даже показалось, что исковерканный текст читается быстрее. Видимо потому что в этом случае слова про себя не проговариваешь.
  • +2
    Что? Здесь не было ещё ни одной шутки про британских учёных?
    • +5
      [скриншот]
      «…ви — питоряся!» — напоследок оценила программа половую ориентацию британских учёных.
  • +5
    Если хорошенько приглядеться, то буквы в исходном примере (а так же в оригинале, на английском) расставлены не абы как, замес идет максимум в пределах трех символов. Именно поэтому сгенерированный текст куда сложнее для восприятия.
    • 0
      Вот-вот, я тоже это подметил.
    • +1
      Как всегда, британские учёные [TM] сделали текст, в котором буква не уходит далеко от исходного места. А обыватель хавает.
  • +1
    Было бы интересно сделать такой текст, который читался бы неправильно — т.е. состоящий из слов, значение которых можно было бы интерпретировать двояко после такой обработки.
  • +4
    Занимался этим вопросом, в реальности дело в сохранении распознавания корня. Я усовершенствовал немного алгоритм перемешивания для затруднения восприятия, а именно: буквы делятся на гласные и согласные и выстраиваются в обратном порядке, сначала гласные, потом — согласные. При этом первая и последняя буквы всегда остаются на месте. Читается хуже на два порядка.
    Для примера абзац выше, переделанный по моему алгоритму:
    Заиаслмня эитм вооосрпм, в роьаетснли дело в сиеаоннрхи риааоанвнзпся конря. Я уаоееоввтсншрвсл ноегнмо аиотрглм пиаиееенвшмря для зиеуанндртя вияиотрпся, а иеннмо: бувкы дяестля на гыансле и сыаонслге и вюаиаыствртся в ооантрбм пяокдре, саалчна сыаонслге, поотм — гыансле. При эотм паевря и пяеондлся бувкы ведгса оюасттся на метсе. Чеаисття хуже на два пяокдра.
  • 0
    Хехъ, давным давно писал такой скриптик для mirc32, который все что я писал преобразовывал согласно этому правилу. Те, кто со мной общались, очень скоро начинали возмущаться :)
  • 0
    Для более-менее комфортного чтения менять местами можно только соседние буквы исходного слова.
  • +1
    Очередной бредовый псевдонаучный вывод… прочитайте что здесь написано — нноороосссоообьбтп
    • +2
      Внезапно — обороноспособность! Я это понял, потому что это единственное слово в русском языке с семью буквами «о».
      • 0
        «ты не поверишь» (с) почему именно его я выбрал
        на самом деле я проводил такой эксперимент ещё три года назад, когда первый раз увидел эту статью — легко угадываются только общеупотребительные слова, в которых переставлены соседние буквы, и то не все!
  • 0
    Недавно был на докладе по задачам автоматического распознавания искаженного текста. В частности обсуждали эффект Кембриджского университета. Вот пара ссылок по теме:

    Обширное обсуждение феномена. В числе основных причин эффекта указывают автор указывает следующие:

    1) Short words are easy — 2 or 3 letter words don't change at all.
    2) Function words (the, be, and, you etc.) stay the same — mostly because they are short
    3) Of the 15 words in this sentence, there are 8 that are still correct
    4) Transpositions of adjacent letters (porbelm / problem) are easier to read
    5) None of the words that have reordered letters create another word
    6) Transpositions were used that preseve the sound of the original word
    7) given the first few words of the sentence, you can guess what words are coming next

    Тезисы PhD «The Significance of Letter Position in Word Recognition» (1976) — вероятно, первое исследование читабельности текстов с переставленными буквами. Кстати, никакой не Кембридж, а Ноттингем
  • 0
    Спасибо большое, собрал для украинского языка, компилятором который идет в комплекте .Net Framework, =)
    Кому надо, вот строка, запускать в каталоге с исходниками
    %WinDir%\Microsoft.NET\Framework\v4.0.30319\csc.exe /optimize /target:winexe *.cs

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.