Skip to content

Latest commit

 

History

History
122 lines (87 loc) · 5.64 KB

README.md

File metadata and controls

122 lines (87 loc) · 5.64 KB

BSUIR Courses

Домашка 1

Необходимо написать некоторое подобие утилиты sl. Для того чтобы иметь представление что делает данная утилита, для ubuntu можно поставить ее через sudo apt-get install sl и после завершения установки написать в терминале sl. Если вы упали со стула потому что на вас поехал паровоз - вы на правильном пути.

В данном домашнем задании мы не ограничиваем вас только поездом, в общем случае это должна быть какая-то ASCII-картинка которая будет как-то дергаться.

Домашка 2-1

Необходимо написать утилиту gemfiler, которая будет показывать отфильтрованные версии гемов.

Входные параметры:

  • Имя gem'а
  • Указание версий в формате, совместимом с Gemfile

Вывод на консоль:

  • Все версии данной библиотеки, при этом красным цветом подсвечиваются отфильтрованные версии.

Требования:

  • Утилита должна парсить входные параметры с использованием существующих библиотек.
  • Все версии gem'ов должны браться путем парсинга страницы или через взаимодействите с rubygems API
  • Утилита должна быть поделена на независимые модули, каждый должен быть представлен отдельным классом.
  • Правильная обработка потока ошибок.

Примеры:

./gemfiler devise '~> 2.1.3'
./gemfiler rails '>= 3.1'
./gemfiler rails '>= 3.1' '< 4.0'

Домашка 2-2

Создаем убийцу grep. Для тех кто не знает что это такое - советую пойти поиграться в консоль с этой утилитой. Если кратко - то это утилита для поиска строк, содержащих текст в файлах. Атомарной единицей для этой утилиты является строка. То есть при поиске если вы находите в строке искомый текст - она выдает вам обратно в STDOUT строку.

Если вы зайдете в мануал то увидите что формат команды примерно такой:

	grep [options] PATTERN [FILE...]
	grep [options] [-e PATTERN | -f FILE] [FILE...]

Первый формат означает что в команду сперва передаются опции, затем какой-то текст для поиска в файле и затем 1 или несколько файлов. Второй формат примерное такой же, но использует регулярные выражения для поиска по файлам.

Требования

В результате домашнего задания вам нужно написать утилиту grep с несколько ограниченным функционалом. Необходимые опции которые вам надо реализовать:

  • -A - опция которая выводит количество строк до и после найденной строки
  • -e - опция которая позволяет вводить регулярные выражения вместо просто части строки
  • -R - опция которая говорит искать строку не в одном файле, а рекурсивно во всех файлах в папке
  • -z - опция указывающая что файлик является сжатым и сначала его надо разжать и только потом искать по нему.

Немного примеров

Для примера будем использовать файлик 1.txt со следующим содержанием:

aa
bb
cc
abc
bcd
cde
ggg

Результаты выполнения:

grep a 1.txt 
=> aa
=> abc
grep -A 1 ab 1.txt 
=> cc
=> abc
=> bcd
grep -A 1 b 1.txt 
=> aa
=> bb
=> cc
=> cc
=> abc
=> bcd
=> abc
=> bcd
=> cde
grep -e "a[^b]" 1.txt 
=> aa

Этапы

Для того чтобы вы сразу не писали огромную утилиту разобьем ее имплементацию на несколько этапов:

  • Сделайте утилиту которая просто без опций находит строки в файле.
  • Добавьте возможность искать по нескольким файлам, aka grep a 1.txt 2.txt
  • Добавьте опцию -A которая выводит соседние строки.
  • Добавьте опцию -e которая ищет по регуляркам
  • Добавьте опцию -R которая будет искать по всем файлам в папке
  • Добавьте опцию -z которая будет искать по сжатому через gzip файлу

Проверка

Задания принимаются только ввиде ссылки на гитхаб.