Хорошо, первый пост..
Итак, у меня есть это задание расшифровать криптограммы вручную, но я также хотел немного автоматизировать процесс, если не все, по крайней мере несколько частей, поэтому я просмотрел и нашел несколько вкладышей sed и awk one, чтобы сделать некоторые вещи, которые я хотел сделать, но не все, что я хотел/нужно.
Есть несколько веб-сайтов, которые делают то, что я хочу, но я действительно хочу просто сделать это в bash по какой-то причине, просто потому, что хочу лучше понять это и тому подобное :)
Сценарий будет принимать имя файла в качестве параметра и выводить другой файл, например solution$1
, когда закончит.
if [ -e "$PWD/$1" ]; then
echo "$1 exists"
else
echo "$1 doesnt exists"
fi
Запустит скрипт, чтобы увидеть, существует ли файл в параметре.
Затем я нашел этот лайнер
sed -e "s/./\0\n/g" $1 | while read c;do echo -n "$c" ; done
Что отлично работает, но мне нужно было бы иметь количество вхождений на букву, я действительно не понимаю, как это сделать.
Вот чего я пытаюсь достичь более или менее http://25yearsofprogramming.com/fun/ciphers.htm для подсчета уникальных вхождений букв и тому подобного.
Затем мне нужно поместить все буквы в нижний регистр.
После этого я вижу, как скрипт делает следующие вещи.. -индекс, который сканирует файл словаря на наличие определенного шаблона и размера слов, чем больше слова, тем лучше. Например: скажем, решение — это слово «одежда», а зашифрованное слово — «zxxzgvk». Существует ли способ регулярного выражения для выражения шаблона, который сравнивает эти два слова и перечисляет слово «одежда» в файле словаря, потому что «аппа» и "zxxz" - похожие шаблоны, а "zxxzgvk" имеет одинаковую длину с "одеждой".
Можно ли это сделать частично, и реально ли рассматривать проблему таким образом, или это просто надумано?
- Another subscript who takes the found letters from the previous output word and that swap letters in the cryptogram.
Поменявшиеся местами буквы будут в верхнем регистре, чтобы различать их с течением времени.
Затем мне нужно будет выяснить, как приступить к повторному сканированию новых найденных слов, чтобы увидеть, частично или полностью они найдены в файле словаря, а затем поменять местами больше букв или нет.
Кто-нибудь видел эту проблему в прошлом и пытался решить ее с помощью шаблонов словами, как я это описал, или это слишком сложно?
Должен ли я регистрировать какие-либо свопы?
Может быть, просто просмотрите все зашифрованные слова и поменяйте местами по мере продвижения, а затем выполните еще одну проверку с ограничением for в первой проверке, чтобы не менять буквы в верхнем регистре (на самом деле, чтобы использовать их как более точные шаблоны ..!)
Кто-нибудь делал подобный скрипт/программу на другом языке? Если да, то какой? Может быть, я могу как-то относиться :)
Может быть, мы сможем использовать ваше понимание того, как вы придумали свой код.
Я с радостью включу криптограммы, которые я расшифровал, и ту, которую мне еще предстоит расшифровать :)
Опять же, цель моего задания не в том, чтобы сделать этот скрипт, а просто в том, чтобы разрешить криптограммы. Но создание сценариев или, по крайней мере, попытка увидеть, как я буду делать этот сценарий, помогает мне немного лучше понять, как думать в терминах кода. Не стесняйтесь указывать мне в правильном направлении!
Сама криптограмма основана на простой алфавитной замене.
Я сделал здесь pastebin с кодом, который будет :) http://pastebin.com/UEQDsbPk
В псевдокоде, как я это вижу:
- вызов программы с именем входного файла в параметре и, необязательно, вторым именем файла (словарь)
- убедитесь, что входной файл существует и не пуст
- прочитать содержимое файла и вывести его на экран
- преобразовать в нижний регистр
- просканируйте текст и подсчитайте количество каждой буквы, чтобы провести частотный анализ
- спросить пользователя, на каком языке должен быть текст (английский по умолчанию)
- используйте ответ, чтобы указать, какие частоты букв использовать в качестве базовой линии
- поменять местами буквы, соответствующие частотному анализу, в верхнем регистре.
- распечатать измененный документ на экране
- попросить пользователя поменять местами буквы в зашифрованном тексте
- если пользователь указал файл словаря в качестве второго аргумента
- затем просканируйте шифр на наличие слов и найдите более крупные слова
- найти слова с похожим рисунком (некоторые буквы повторяются) в файле словаря
- вывести на экран результаты, если таковые имеются
- предложить поменять местами буквы, соответствующие в шифре
- вывести измененный шифр на экран
- попросите еще раз поменять местами буквы или найти больше похожих слов
Примерно так я вижу структуру сценария.
- Вы видите что-нибудь, что я должен добавить, я что-то пропустил?
Я надеюсь, что эта исправленная версия станет более понятной для всех!