Искусство программирования на языке сценариев командной оболочки
Шрифт:
5. Индекс сложности текста рассчитывается как сумма двух этих чисел, умноженная на 0.4 и округленная до ближайшего целого.
ИНДЕКС_СЛОЖНОСТИ = int ( 0.4 * ( СРЕДНЕЕ_ЧИСЛО_СЛОВ + ПРОПОРЦИЯ_СЛОЖНЫХ_СЛОВ ) )
4-й пункт -- самый сложный. Существуют различные алгоритмы подсчета слогов в словах. В данном же случае, вы можете ограничиться подсчетом сочетаний "гласный-согласный".
Строго говоря, при расчете индекса сложности не следует считать составные слова и имена собственные как "сложные" слова, но это слишком усложнит сценарий.
Вычисление
В 18 веке, французский математик де Баффон (de Buffon) проделывал эксперимент, который заключался в бросании иглы, длиной "n", на деревянный пол, собраный из длинных и узких досок. Ширина всех досок пола одинакова и равна "d". Оказалось, что отношение общего числа бросков, к числу бросков, когда игла ложилась на щель, кратно числу пи.
Пользуясь Пример 12-35, напишите сценарий, который использовал бы метод Монте Карло для эмуляции "Иглы Баффона". Для простоты примите длину иглы раной ширине досок, n = d.
Подсказка: особое значение здесь имеют переменные, которые будут вычисляться как расстояние от центра иглы до ближайшей щели и величина угла между иглой и щелью. Для выполнения расчетов можно воспользоваться утилитой bc.
Шифрование по алгоритму Playfair
Напишите сценарий, реализующий алгоритм шифрования Playfair (Wheatstone).
В соответствии с этим алгоритмом, текст шифруется путем замены каждой 2-х символьной последовательности -- "диграммы". Традиционно, в качестве ключа, используется матрица символов алфавита 5 x 5.
C O D E S
A B F G H
I K L M N
P Q R T U
V W X Y Z
Матрица содержит все символы алфавита, за исключением символа "J", который представляет символ "I". Первая строка матрицы -- произвольно выбранное слово, в данном случае -- "CODES", далее следуют символы алфавита, исключая те, которые входят в состав первой строки.
Шифрование производится по следующему алгоритму: для начала, текст сообщения разбивается на диграммы (группы по 2 символа). Если в диграмму попадают два одинаковых символа, то второй символ удаляется, и формируется новая диграмма. Если в последней группе остается один символ, то такая "неполная" диграмма дополняется "пустым" символом, обычно "X".
THIS IS A TOP SECRET MESSAGE
TH IS IS AT OP SE CR ET ME SA GE
Каждая диграмма может подпадать под одно из следующих определений:.
1) Оба символа находятся в одной строке ключа. Тогда, каждый из них заменяется символом, стоящим справа в той же строке. Если это последний символ строки ключа, то он заменяется первым символом в той же строке ключа.
2) Оба символа находятся в одном столбце ключа. Тогда каждый из них заменяется на символ, стоящий ниже, в этом же столбце. Если это последний символ в столбце ключа, то он заменяется первым символом в том же столбце ключа.
3) Символы диграммы стоят в вершинах прямоугольника. Тогда
Диграмма "TH" соответствует 3-му определению.
G H
M N
T U (Прямоугольник с вершинами "T" и "H")
T --> U
H --> G
Диграмма "SE" соответствует 1-му определению.
C O D E S (Строка содержит оба символа "S" и "E")
S --> C (замена на первый символ в строке ключа)
E --> S
Дешифрация выполняется обратной процедурой, для случаев 1 и 2 -- замена символом стоящим левее/выше. Для случая 3 -- аналогично шифрации, т.е. заменяется символом из соседнего, по горизонтали, угла. Helen Fouche Gaines, в своей классической работе "Elementary Cryptoanalysis" (1939), приводит подробное описание алгоритма Playfair и методы его реализации.
Этот сценарий должен иметь три основных раздела
I. Генерация "ключевой матрицы", основывающейся на слове, которое вводит пользователь.
II. Шифрование "плоского" текста сообщения.
III. Дешифрование зашифрованного текста.
Широкое применение, в этом сценарии, найдут массивы и функции.
– -
Пожалуйста, не присылайте автору свои варианты решения упражнений. Если вы хотите впечатлить его своим умом и сообразительностью -- присылайте обнаруженные вами ошибки и предложения по улучшению этой книги.
Приложение J. Авторские права
Авторские права на книгу "Advanced Bash-Scripting Guide", принадлежат Менделю Куперу (Mendel Cooper). Этот документ может распространяться исключительно на условиях Open Publication License (версия 1.0 или выше),Соблюдение следующих пунктов лицензии обязательно.
1. Распространение существенно измененных версий этого документа, запрещено без явного разрешения держателя прав.
2. Запрещено распространение твердых (бумажных) копий книги, или ее производных, без явного согласия держателя прав.
Пункт 1, выше, явно запрещает вставлять в текст документа логотипы компаний или навигационные элементы, за исключением
1. Некоммерческих организаций, таких как Linux Documentation Project и Sunsite.
2. Не "запятнавших" себя дистрибутивостроителей Linux, таких как Debian, Red Hat, Mandrake и других.
Практически, вы можете свободно распространять неизмененную электронную версию этой книги. Вы должны получить явное разрешение автора на распространение измененных версий книги или ее производных. Цель этого ограничения состоит в том, чтобы сохранить художественную целостность данного документа и предотвратить появление побочных "ветвей".