Задачи на этой странице имеют различный уровень сложности с точки зрения количества строк кода, которые надо написать, но они не требуют применения каких-либо сложных алгоритмов.
Написать скрипт, который подсчитывает статистику длин слов в тексте. Выдача - таблица из двух колонок: длина слова, число слов с такой длиной, встретившихся в тексте. Границами слов считать любые не буквы.
Взять любой литературный текст из интернета сохранить в однобайтовой кодировке (или перекодировать в такую кодировку командой iconv)
Написать скрипт, подсчитывающий статистику распределения по частоте русских букв (включая пробел). Выдача - таблица из двух колонок: буква, процент появлений данной буквы от общей длины текста.
Найти в литературном произведении наиболее часто встречающееся слово из 5 букв
Написать программу автоматического определения однобайтовой кодировки русских литературных текстов (из набора KOI8, CP1251, CP866).
Для предварительной проверки того, что в файле просто текст можно использовать проверку на максимальную длину слова между пробельными символами (<25). Для проверки кодировки можно построить частотную статистику, а можно попытаться искать вхождение коротких слов типа " и ", " или ", ",а " в разных кодировках. Можно теоретически подобрать слово, а можно проверять кандидатуры на одном достаточно длинном тексте, перекодированном в разные кодировки, исключать тестовые слова, которые вызывают ложные срабатывания.
Взять любой достаточно объёмный текст на русском языке (можно архив lib.ru).
Написать скрипт, который составит список последовательностей из трёх букв, которые в этом тексте отсутствуют (хзь, ччй...). Дополнительно сделать скрипт поиска опечаток, который будет извлекать из текста слова, содержащие "невозможные" буквосочетания.
Если я правильно посчитал, то число сочетаний из трёх букв (включая Ё) равно 333333 т.е приблизительно 33000. Число вполне разумное и вычисление много времени и памяти не займёт.
Почтовая кодировка quoted-printable оставляет латинскую часть кодировки ASCII как есть, а однобайтные русские буквы, знак = и, иногда, пробел представляет в 16-ричном представлении вида =А6. Говорят, что в Ubuntu есть программа qprint для работы с этой кодировкой.
В CentOS такой команды нет, но есть команда xxd, которая конвертирует байты в их 16-ричное представление.
Написать программу, которая будет кодировать смешанный русско-английский текст в quoted-printable. Строго следовать стандарту не обязательно. Так, пробелы можно оставить пробелами, а также считать, что в тексте нет управляющих символов.
Почтовая кодировка quoted-printable оставляет латинскую часть кодировки ASCII как есть, а однобайтные русские буквы, знак = и, иногда, пробел представляет в 16-ричном представлении вида =А6. Говорят, что в Ubuntu есть программа qprint для работы с этой кодировкой.
В CentOS такой команды нет, но есть команда xxd, которая конвертирует байты в их 16-ричное представление.
Написать программу, которая из кодировки quoted-printable восстанавливает однобайтовую кодировку. Т.е. поcледовательность вида =E3 превращает в один байт со значением 0xE3
Для проверки правильности номера банковской карты используется алгоритм Луна (ГОСТ ISO/IEC 7812-1-2014)
Контрольная цифра вычисляется на основе первых 15 цифр и записывается в 16 позицию
Алгоритм описывается так (в стандарте чуть иначе):
Если сумма, полученная на этапе 3, является числом, оканчивающимся на ноль (30, 40 и т. п.), то контрольная цифра равна 0.
Написать скрипт подсчёта контрольной цифры 15-значного номера, полученного как аргумент.
Для проверки правильности номера банковской карты используется алгоритм Луна (ГОСТ ISO/IEC 7812-1-2014)
Контрольная цифра вычисляется на основе первых 15 цифр и записывается в 16 позицию
Реализовать алгоритм проверки:
Написать скрипт проверки правильности номера, полученного как аргумент.
В большом каталоге с подкаталогами хранится архив файлов (например, фотоархив). Есть подозрение, что часть файлов была скопирована под другими именами.
Написать скрипт поиска одинаковых файлов. Критерием одинаковости является контрольная сумма, вычисленая программой sum.
Скрипт получает в качестве параметра имя каталога (или начинает с текущего если нет параметра) и печатает группы имен найденных файлов дубликатов. Группы разделяются пустыми строками.
Напечатать календарь на текущий год. В первой строке месяца его название. Далее даты разбитые на строки по 7 дней недели. Первая строка имеет слева отступ, соответствующий дню недели, приходящемуся на 1 число. Субботу и воскресенье можно вывести на экран красным цветом.
2021 сентябрь 1 2 3 4 5 6 7 8 9 10
Человек задумывает число от 0 до 10. Программа задаёт вопросы на "больше"-"меньше":
Это число больше 7?
[y/n]
Это число меньше 2?
[y/n]
Человек отвечает да или нет, программа должна отгадать число.
Надо написать программу, с которой можно играть в крестики-нолики. Программа запускается с параметром x или o, который указывает за кого она будет играть. Крестики ходят первыми.
Человек вводит, а скрипт в цикле читает строки с двумя цифрами . Первая цифра означает номер строки, вторая номер колонки. Т.к. это крестики нолики, то возможные цифры от 1 до 3. При неправильном вводе выдаётся ошибка и запрашивается новый ход. При правильном вводе он засчитывается за ход человека, делается ход программы, и рисуется поле 3х3 с текущей позицией. Под полем выдается приглашение на ввод следующего хода..
Алгоритм искусственного интеллекта можно использовать максимально простой — табличный. Все возможные позиции можно хранить в отдельном файле. Команда grep
будет извлекать из этого файла оптимальный ход, соответствующий позиции.
Для чтения строк используется команда read
, вывод на экран командой echo
или printf
.Можно стирать экран и рисовать только текущую позицию, а можно печатать очередную позицию после предыдущей, так что на экране останется история ходов.
В одном из заданий в течение семестра была задача на инкрементальное архивирование командой tar. Предположим, что полный архив делается раз в 10 дней, а затем каждый день делается архивирование обновлённых за сутки файлов. В результате, у вас есть архивы с названиями такого вида:
dir-full-20220110.tar, dir-new-20220111.tar, dir-new-20220112.tar... dir-full-20220120.tar
Написать скрипт, который по имени файла (с путём) находит в архивах его самую свежую версию и выдаёт имя архива.
В одном из заданий в течение семестра была задача на инкрементальное архивирование командой tar. Предположим, что полный архив делается раз в 10 дней, а затем каждый день делается архивирование обновлённых за сутки файлов. В результате, у вас есть архивы с названиями такого вида:
dir-full-20220110.tar, dir-new-20220111.tar, dir-new-20220112.tar... dir-full-20220120.tar
Написать скрипт, который по имени файла (с путём) печатает даты его изменений.
Написать оболочку для работы с архивом tar, которая будет имитировать работу с файловой системой.
В задании для примера взят архив arch.tar. Текущий каталог можно хранить в файле archive.cwd (где archive совпадает с именем архива) Пусть скрипт называется fstar. Он должен реализовать следующие команды:
Алгоритм нахождения корневых основ русского языка (стемминга) описан по ссылке - http://snowball.tartarus.org/algorithms/russian/stemmer.html
Задача — реализовать алгоритм на языке shell
Вот готовое описание скриптового вируса. Осталось его реализовать.
Вирус должен быть написан на языке shell. Он должен уметь заражать скрипты на языке shell через вставку в них своего кода.
Вирус содержит строки комментарии, обозначающие его начало и конец
#virus begin
virus body
#virus end
Надо написать однопанельный клон нортон коммандера. Т.е. надо выводить на экран часть списка файлов в текущем каталоге. Одну из строк с именем файла помечать цветом или маркером в начале строки как текущую. Стрелками перемещать маркер и прокручивать список. По нажатию на Enter выполнять с текущим файлом некоторое действие в зависимости от его типа.
Предполагаем, что у нас нет имён файлов со спецсимволами (перевод строки, забой и т.п.), но могут быть имена файлов с пробелами.
Для управления вместо стрелок используем буквы. Например j-стрелка вниз, k- вверх, Enter или x - выполнить, q-завершить работу.
Для чтения по одной букве используем read -n1
. Для определения типа файла - file
Определение размеров экрана - stty -a
. управление экраном tput
. Логика прокрутки списка файлов - самостоятельно.