Ответ на загадку про дни недели.

Многие написали интересные предположения, имеющие право на жизнь и не очень, были и верные ответы. Те, кто говорили, что возможно неправильный шрифт на компьютере, где проходила расечатка, видимо, не очень много работали со шрифтами. В этом случае мы получили бы или полную абракадабру или нормально написанное слово, выглядящее просто не так. Версия на счет распознания текста со сканера интересная, если забыть о том, что речь идёт об издательском деле, где такой ерундой не занимаются, конечно же. Остальные версии как правило умирали еще на стадии высказывания, потому что противоречили простой данности, которую обнаруживали другие: буквы не просто поменялись, они поменялись очень закономерно, а именно так:

В -> А
Н -> Л
О -> М
П -> Н
Р -> О
Т -> Р
У -> С

Это говорит во-первых о том, что все буквы изменили своё значение в алфавите на две буквы назад, а во-вторых это означает, что дело точно не во вводе, то есть дело ни в контроллере клавиатуры, ни в самой клавиатуре, потому что там эти символы разбросаны хаотично, и такой закономерности, будь проблема именно во вводе, не образовалось бы, все эти буквы на клавиатуре на разном расстоянии друг от друга, и не могло так совпасть, чтобы столько букв отстали от алфавита ровно на две позиции. Высказывались и совсем уж невзрослые мнения о том, что наборщик был пьян, хотя еще в условии задачи было упомянуто, что это не так, и опять же, не было бы такого чёткого оставания на два значения.

А теперь, внимание, правильный ответ:

Текст был набран редакторами абсолютно правильно, и, скорее всего, верстальщики тоже видели его вполне нормально. Проблема возникла только на компьютере, на котором производилась печать. Любой редактор и корректор заметили бы такой вопиющий «косяк», а вот человеку, задача которого распечатать на бумаге присланный материал, глубоко всё равно, что там написано, это не его работа.

Но к сожалению для газеты «Серп и Молот» их системный администратор не очень следил за состоянием компьютера печатника. При чтении файла со страницами газеты компьютер, фактически, должен посимвольно записывать считываемые данные в оперативную память. Причем во вполне определенное адресное пространство. Записал восемь кодирующих бит (то есть один байт) этой буквы, передал на печать, стёр, записал в эту область следующее значение, и так далее.

В оперативной памяти вся информация содержится в двоичном виде. Каждая ячейка памяти принимает значение либо ноль, либо единица. Это как с лампочкой — она или горит (единица) или не горит (значит ноль). Восемью лампочками вполне можно закодировать букву. Зажигая лампочки в нужной комбинации по очереди можно смотрящему с улицы в ваше окно передать любой объем текста, если он умеет переводить восьмибитные двоичные значения в буквы. Это совсем не сложно, вот таблица:

Но что будет, если в процессе передачи данных у вас перегорит одна лампочка? Ну, скажем, первая. А будет вот что: вы попробуете передать большую букву А (1100000), а человек на улице увидит, что вы передаете ему символ @ (0100000).

Системный администратор прогядел битую оперативную память на компьютере печатника, и, допустим, в битую область стали записываться буквы, система записывала туда, например, букву В (11000010), но седьмой бит (второй с конца) в этой области памяти оказался мёртвым и всегда возвращал ноль, по этому принтер, читая из этой области очередную букву, видел там букву А (11000000). Алфавит в двоичной системе последователен, и по этому замена седьмого бита с единицы на ноль всегда даёт букву на две позиции раньше нужной, а если в очередной букве на этой позиции и так нужен ноль, то ноль выходил и на принтер, но не потому, что его туда корректно записали и корректно оттуда прочитали, а потому что этот бит мёртвый и всегда выдаёт ноль. Таким образом буквы, у которых в седьмом бите ноль, не менялись, менялись лишь буквы, у которых в седьмом бите единица. В проблемную область памяти писались только заголовки, по этому остальной текст выходил нормальным.

Через неделю проблему заметили, админа от$#^&дили, память поменяли, и «Серп и Молот» снова стал выходить нормально.

22 комментария

  1. Zaiachkovskyi-BS 20 августа, 2015 12:42 пп  Ответить

    Нужно больше загадок!

  2. Олег Никонов 20 августа, 2015 1:36 пп  Ответить

    Интересно. Никогда не думал, что битая оперативная память может так все покосить. Но что еще интереснее — другой текст в газете нормальный. Или я чего-то не понимаю.

    • Alexander Uayld 20 августа, 2015 1:58 пп  Ответить

      Попробуйте с битой планкой памяти упаковать что-либо в архив, а затем извлечь. С высокой долей вероятности файл будет повреждён.

  3. qraizer 20 августа, 2015 1:52 пп  Ответить

    До этой мысли несложно дотумкать. Я вообще поначалу хотел написать, отвалилась нога процессора… как там бишь её… B1, что ли, выдающая бит разрешения байта, которая под вибрацией кулера непредсказуемо замыкает-таки контакт. Но во-первых, это должно было тогда произойти довольно давно (сейчас ни форм-фактор так ногам не позволит себя вести, ни побайтно ни один процессор на шину больше не обращается, разве что кеш запретить), во-вторых, бажить должна вся память. Так что версия с ногой отпала и осталась только с самой памятью.
    Однако эту стройную теорию рушит каст Р→О. Во всех кодировках он не вписывается в общую картину. Например в Юникоде 0x0420 заменяется на 0x41E. Увы.

  4. Alex 20 августа, 2015 2:04 пп  Ответить

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

  5. Roman San 20 августа, 2015 2:28 пп  Ответить

    Никогда бы не подумал на оперативку (разве что только после проверки всего и вся нашло битую планку).
    Очень интересная загадка, ждем ещё!

  6. maisvendoo 20 августа, 2015 3:32 пп  Ответить

    Только это ведь не седьмой, а первый бит — разрядность же справа налево считается вроде

    • Макс 20 августа, 2015 3:42 пп  Ответить

      Двоиный код — да. Справа — налево. Но тут же речь о лампочках:)
      Тоже приметил этот косяк, но решил промолчать. Чего придираться.. К тому же, судя по комментариям к загадке — похоже что немногие об этом знают:)

      • Макс 20 августа, 2015 3:42 пп  Ответить

        *двоичный

      • maisvendoo 20 августа, 2015 5:28 пп  Ответить

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

  7. Макс 20 августа, 2015 4:05 пп  Ответить

    Дим, у меня вопрос по отгадке.
    Далеко ходить не будем — замена Н-Л в слове «Пярлица».
    Л — ob11001011
    H — 0b11001101
    Это если они как заглавные шли. Но, это не важно. Для строчных тоже самое будет.
    Чтобы превратить Н в Л недостаточно иметь битый бит в первом разряде.

    • Макс 20 августа, 2015 4:19 пп  Ответить

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

  8. Макс 20 августа, 2015 4:34 пп  Ответить

    P.S.: посмотрел комментарий выше. Р-О тоже не в тему и затрагивает еще больше бит.

  9. Сергеё 20 августа, 2015 4:58 пп  Ответить

    Вот хотел написать про оперативную память, но думал — как-то это слишком просто. Никто про это не написал, значит и мои догадки не правильны. Оказалось всё проще простого.
    Если будет что-то подобное (надеюсь на это) буду писать, даже если в чём-то будут сомнения.

  10. Сергей 20 августа, 2015 5:04 пп  Ответить

    Скажу честно, где-то об этом читал и что-то в памяти всплыло.

  11. Сергей Пономарёв 20 августа, 2015 5:50 пп  Ответить

    Вот это да.) Классный и ответ, и загадка.) Это же надо, битая оперативка, кто бы мог подумать.) Не стал писать свой вариант ответа, так как и не придумал ничего толкового. Была мысль про шрифты, но была сразу отброшена.

  12. Алексей 20 августа, 2015 6:14 пп  Ответить

    01010100 01101000 01100001
    01101110 01101011 00100000
    01111001
    01101111 01110101

  13. bassq 21 августа, 2015 5:43 дп  Ответить

    Тоже думал на битый бит в памяти, но замена Н->Л отмела эту идею, т.к. там явно вычитание двойки, а не простая смена бита, как в остальных случаях. Может так совпало, что в той ячейке два бита биты?

  14. Максим 22 августа, 2015 10:47 пп  Ответить

    Спасибо Дмитрий.Очень порадовала загадка. Интересно наблюдать как разные люди занимаются одним делом(истину ищут).

Leave a comment

Войти с помощью: 

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.