Вы здесь

Тестовые задачи

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

Языковая статистика

Написать скрипт, который подсчитывает статистику длинн слов в тексте. Выдача - таблица из двух колонок: длина слова, число слов с такой длиной, встретившихся в тексте. Границами слов считать любые не буквы.

Три буквы

Взять любой достаточно объёмный текст на русском языке. Написать скрипт, который составит список последовательностей из трёх букв, которые в этом тексте отсутствуют (хзь, ччй...). Дополнительно можно сделать скрипт поиска опечаток, который будет извлекать из текста слова, содержащие "невозможные" буквосочетания.

Скрытый gzip

Формат gzip не предназначен для сохранения независимых файлов в одном архиве. В лучшем случае, он позволяет выполнить конкатенацию файлов при распаковке.

Предлагается "спрятать" gzip файл путём конкатенации с каким-то другим файлом, и написать скрипт, который будет подавать на вход gunzip фрагменты "хитрого" файла со смещением 0, 1, 2 ... байта пока не будет найдено начало сжатого файла.

Создание файла cat sample.jpg my.gz > secret.bin Скрипт должен вывести распакованный файл my.gz

Цвета

В CentOS для выдачи информации об успехе выполнения скрипта явно прописана Esc последовательность echo -en "\033[1;32m" OK Написать цикл, перебирающий разные числовые значения вместо 32m. Попытаться понять принцип формирования цвета.

Календарь

Напечатать календарь на текущий год. В первой строке месяца его название. Далее даты разбитые на строки по 7 дней недели. Первая строка имеет слева отступ, соответствующий дню недели, приходящемуся на 1 число. Субботу и воскресенье можно вывести на экран красным цветом.

2021 сентябрь 1 2 3 4 5 6 7 8 9 10

Игра "угадайка"

Человек задумывает число от 0 до 10. Программа задаёт вопросы на "больше"-"меньше": Это число больше 7? Это число меньше 2? Человек отвечает да или нет, программа должна отгадать число.

Стеммер

Алгоритм нахождения корневых основ русского языка (стемминга) описан по ссылке - http://snowball.tartarus.org/algorithms/russian/stemmer.html Задача — реализовать алгоритм на языке shell

Крестики-нолики

Надо написать программу, с которой можно играть в крестики-нолики. Программа запускается с параметром x или o, который указывает за кого она будет играть. Крестики ходят первыми.

Человек вводит, а скрипт в цикле читает строки с двумя цифрами . Первая цифра означает номер строки, вторая номер колонки. Т.к. это крестики нолики, то возможные цифры от 1 до 3. При неправильном вводе выдаётся ошибка и запрашивается новый ход. При правильном вводе он засчитывается за ход человека, делается ход программы, и рисуется поле 3х3 с текущей позицией. Под полем выдается приглашение на ввод следующего хода..

Алгоритм искусственного интеллекта можно использовать максимально простой — табличный. Все возможные позиции можно хранить в отдельном файле. Команда grep будет извлекать из этого файла оптимальный ход, соответствующий позиции.

Для чтения строк используется команда read, вывод на экран командой echo или printf.Можно стирать экран и рисовать только текущую позицию, а можно печатать очередную позицию после предыдущей, так что на экране останется история ходов.

Скриптовый вирус

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

Вирус должен быть написан на языке shell. Он должен уметь заражать скрипты на языке shell через вставку в них своего кода.

Вирус содержит строки комментарии, обозначающие его начало и конец

#virus begin
virus body
#virus end
  • Вирус должен просмотреть все объекты в каталоге (цикл for).
  • У каждого объекта проверяется тип - является ли он файлом (test -f). Не файлы пропускаются.
  • У каждого файла проверяется доступен ли он на чтение и на запись (test -r, test -w). Недоступные файлы пропускаются.
  • У каждого файла проверяется наличие в первой строке подстроки "#!/bin/bash" (head -n 1, grep). Файлы без такой подстроки пропускаются.
  • В файле ищется сигнатура вируса #virus begin. Если файл уже заражен, то он пропускается.
  • Когда найден файл жертва, то вирус копирует его в каталог /tmp/.
  • Из аргумента $0 вирус узнает имя файла, из которого он был запущен, и копирует свое тело из этого файла в каталог /tmp/.
  • В тело файла жертвы записывается строка #!/bin/bash, затем тело вируса из каталога /tmp, затем оригинальный скрипт без первой строки из копии в каталоге /tmp.
  • Удаляются вспомогательные файлы в каталоге /tmp
  • После заражения одного файла вирус останавливается и передает управление родительскому скрипту.

File commander

Надо написать однопанельный клон нортон коммандера. Т.е. надо выводить на экран часть списка файлов в текущем каталоге. Одну из строк с именем файла помечать цветом или маркером в начале строки как текущую. Стрелками перемещать маркер и прокручивать список. По нажатию на Enter выполнять с текущим файлом некоторое действие в зависимости от его типа.

Предполагаем, что у нас нет имён файлов со спецсимволами (перевод строки, забой и т.п.), но могут быть имена файлов с пробелами.

Для управления вместо стрелок используем буквы. Например j-стрелка вниз, k- вверх, Enter или x - выполнить, q-завершить работу.

  • Определяем размеры экрана, начинаем основной цикл
  • Читаем список файлов и каталогов в текущем каталоге. Файлы, имена, которых начинаются с точки - игнорируем.
  • Имена файлов не вмещающихся в ширину экрана обрезаем
  • Печатаем на экране столько файлов, сколько входит, зарезервировав одену строку на ввод команды. Каталог .. печатаем в первой позиции. Каталог . не печатаем.
  • Перед каждым файлом печатаем два символа. Первый - тип: f-файл, d-каталог, x-исполняемый файл. Второй символ - курсор: обычно пробел, но для текущего файла - '>'
  • При нажатии клавиш вверх и вниз - курсор перемещается. При достижении последней строки, список файлов сдвигается вверх если "за экраном" есть файлы, то же при достижении верхней строки. Список файлов как бы находится за виртуальной прорезью размером с экран.
  • При нажатии на клавишу исполнения: на каталоге - переход в каталог, на исполняемом файле - запуск, на текстовом файле - запуск редактора.
  • Клавиша выхода - очистка экрана и выход.

Для чтения по одной букве используем read -n1. Для определения типа файла - file Определение размеров экрана - stty -a. управление экраном tput. Логика прокрутки списка файлов - самостоятельно.

Яндекс.Метрика