Compare commits
No commits in common. '32489330809d21e5c1ddc948fb3010aeea5e7247' and 'main' have entirely different histories.
3248933080
...
main
@ -1,134 +1,2 @@ |
|||||||
## Домашнее задание 1 |
Хогвардса не будет! |
||||||
|
Магии в программировании нет! |
||||||
### Сетка дедлайнов: |
|
||||||
|
|
||||||
| дурацкое название | дата | штраф |
|
||||||
| ---------------- | ---------------- | ------------------------------------------------------------------- | |
|
||||||
| основной | 06 ноября 23:59 | без штрафа, до этого момента получаем полный балл | |
|
||||||
| 1 промежуточный | 13 ноября 23:59 | все баллы за решения, сданные с этого момента домножаются на 0.7 | |
|
||||||
| 2 промежуточный | 20 ноября 23:59 | все баллы за решения, сданные с этого момента домножаются на 0.5 | |
|
||||||
| 3 промежуточный | 27 ноября 23:59 | все баллы за решения, сданные с этого момента домножаются на 0.3 | |
|
||||||
| фатальный | 04 декабря 23:59 | с этого момента, увы, не имеет смысла сдавать решения, совсем | |
|
||||||
|
|
||||||
### 1. Rand (2 балл) |
|
||||||
|
|
||||||
Написать команду, которая будет создавать файл rnd.txt в текущем каталоге. |
|
||||||
|
|
||||||
Размер файла rnd.txt -- случайное число байт. |
|
||||||
|
|
||||||
Файл должен быть полностью заполнен случайными байтами. |
|
||||||
|
|
||||||
Размер можно вычислять заранее, запоминая результат в переменной. |
|
||||||
|
|
||||||
Используйте `dd`, переменную окружения `RANDOM` (`echo $RANDOM`, и см. `bash(1)`), |
|
||||||
а также `/dev/urandom`. |
|
||||||
|
|
||||||
### 2. Сумма (1 балл) |
|
||||||
|
|
||||||
Посчитайте сумму значений в третьем столбце файла `digits.txt`. |
|
||||||
|
|
||||||
Используйте `paste`, чтобы сформировать выражение и `bc`, чтобы его вычислить. |
|
||||||
Не забывайте про process subsctitution `$()` |
|
||||||
|
|
||||||
### 3. Посчитаемся (1 балл) |
|
||||||
|
|
||||||
Посчитайте количество регулярных файлов в текущем каталоге, |
|
||||||
измененных больше 30 минут и меньше суток назад и имеющих расширение `.txt`. |
|
||||||
|
|
||||||
Для решения используйте `find` и `wc`. |
|
||||||
|
|
||||||
### 4. ping (1 балл) |
|
||||||
|
|
||||||
В файле `ips.txt` записаны IP-адреса (по одному на каждой строчке). |
|
||||||
|
|
||||||
Написать скрипт, считывающий IP-адреса из этого файла, пингует (команда `ping`) |
|
||||||
их и записывает результат в `res.txt`, а ошибки -- в `err.txt`. |
|
||||||
|
|
||||||
Подсказка: |
|
||||||
```bash |
|
||||||
while IFS= read -r line; do |
|
||||||
echo "Text read from file: $line" |
|
||||||
done < my_filename.txt |
|
||||||
``` |
|
||||||
|
|
||||||
### 5. Четное-нечетное (1 балл) |
|
||||||
Введите целое число и проверьте, является ли оно чётным или нечётным. |
|
||||||
Скрипт должен запрашивать число, и выводить **EVEN** или **ODD** соответственно. |
|
||||||
|
|
||||||
### 6. Палиндром (1 балл) |
|
||||||
Написать скрипт, который проверяет, является ли введенная строка палиндромом. |
|
||||||
Скрипт должен запрашивать строку, и выводить **YES** или **NO** соответственно. |
|
||||||
|
|
||||||
### 7. factor (1 балл) |
|
||||||
|
|
||||||
Написать скрипт, который раскладывает на простые множители все числа из |
|
||||||
заданного в первом параметре скрипта файла и записывает результат в другой файл, |
|
||||||
заданный во втором параметре. Каждое число из разложения необходимо вывести |
|
||||||
столько раз, сколько оно там встречается (см. пример для числа 1236). |
|
||||||
|
|
||||||
Пример входных данных: |
|
||||||
|
|
||||||
123 |
|
||||||
15123 |
|
||||||
1236 |
|
||||||
97 |
|
||||||
|
|
||||||
Пример выходных данных: |
|
||||||
|
|
||||||
123: 3 41 |
|
||||||
15123: 3 71 71 |
|
||||||
1236: 2 2 3 103 |
|
||||||
97: 97 |
|
||||||
|
|
||||||
### 8. find (1 балл) |
|
||||||
|
|
||||||
Переименовать все файлы в текущем каталоге (с учетом всех подкаталогов рекурсивно), |
|
||||||
имеющие расширение не .sh и измененные не более двух суток назад и не менее суток |
|
||||||
назад, добавив в начало имени файла символ '\_'. |
|
||||||
|
|
||||||
Подсказка: |
|
||||||
|
|
||||||
``` |
|
||||||
find . -print0 | |
|
||||||
while IFS= read -r -d '' line |
|
||||||
do |
|
||||||
echo $line |
|
||||||
done |
|
||||||
``` |
|
||||||
|
|
||||||
|
|
||||||
### 9. cal (задача с маленькой звездочкой, 2 балла) |
|
||||||
|
|
||||||
С помощью команд `cal`, `cat` и `grep` вывести текущее число. Выводить месяц и |
|
||||||
год необязательно, но можно. |
|
||||||
|
|
||||||
Выводить весь календарь и утверждать, что условие задания выполнено запрещается. |
|
||||||
|
|
||||||
### 10. Зоопарк (1 балл) |
|
||||||
|
|
||||||
Имеется файл, содержащий сведения о животных в зоопарке: |
|
||||||
|
|
||||||
id;name;h;strike;color |
|
||||||
1;Chicken;12;0.38;Yellow |
|
||||||
2;Goose;18;0.11;Green |
|
||||||
3;Orca;8;0.81;Yellow |
|
||||||
4;Porcupine;19;0.74;Yellow |
|
||||||
5;Bear;23;0.14;Green |
|
||||||
6;Turtle;4;0.08;Black |
|
||||||
|
|
||||||
Требуется организовать неэтичные бои без правил. Для этого нужно вывести имя |
|
||||||
животного (`name`) и тангенс его ударной силы (`strike`) |
|
||||||
(именно тангенс, не синус и косинус). |
|
||||||
|
|
||||||
При этом интересуют нас только те животные, |
|
||||||
которые не выбыли из турнира, то есть те, перед которыми в списке было нечетное число животных того |
|
||||||
же цвета (`color`); |
|
||||||
|
|
||||||
Пример вывода: |
|
||||||
|
|
||||||
Orca 1.0505 |
|
||||||
Bear 0.1409 |
|
||||||
|
|
||||||
Примечания: |
|
||||||
* Разрешено использовать только `awk`. |
|
||||||
* Тангенс нужно выводить с точностью в четыре знака после запятой. |
|
||||||
|
@ -1,94 +0,0 @@ |
|||||||
## Процесс сдачи |
|
||||||
|
|
||||||
Для сдачи домашнего задания Вам необходимо |
|
||||||
|
|
||||||
0. В идеале, сгенерировать ssh-ключ и добавить его : [инструкция](https://docs.gitlab.com/ee/ssh/#generate-an-ssh-key-pair) и добавить его в свой аккаунт на gitlab: [инструкция](https://docs.gitlab.com/ee/ssh/#add-an-ssh-key-to-your-gitlab-account). |
|
||||||
|
|
||||||
|
|
||||||
1. Первым делом нужно сделать **приватный** форк данного репозитория |
|
||||||
(кнопочка Fork вверху репозитрория) и добавить в него меня: |
|
||||||
|
|
||||||
- Алексей Зубаков: @ottergottaott |
|
||||||
|
|
||||||
2. Склонировать форк к себе на компьютер: |
|
||||||
``` |
|
||||||
$ git clone git_url_of_your_repo |
|
||||||
``` |
|
||||||
где `git_url_of_your_repo` -- url к вашему репозиторию. |
|
||||||
|
|
||||||
3. Добавить url основного репозитория к своему в качестве remote. |
|
||||||
|
|
||||||
``` |
|
||||||
$ git add upstream ... |
|
||||||
``` |
|
||||||
|
|
||||||
Посмотреть уже существующие remote можно следующей командой: |
|
||||||
``` |
|
||||||
$ git remote -v |
|
||||||
origin git@gitlab.com:aleks.zubakov/unix.git (fetch) |
|
||||||
origin git@gitlab.com:aleks.zubakov/unix.git (push) |
|
||||||
upstream git@gitlab.com:sl/unix-22.git (fetch) |
|
||||||
upstream git@gitlab.com:sl/unix-22.git (push) |
|
||||||
``` |
|
||||||
`origin` -- Ваш fork. |
|
||||||
|
|
||||||
4. Выгрузить новые ветки из общего оригинального репозитория, |
|
||||||
добавленные преподавателем: |
|
||||||
``` |
|
||||||
$ git fetch upstream |
|
||||||
``` |
|
||||||
Новые ветки будут видны в списке всех веток: |
|
||||||
``` |
|
||||||
$ git branch -a |
|
||||||
* master |
|
||||||
remotes/origin/HEAD -> origin/master |
|
||||||
remotes/origin/hw3 |
|
||||||
remotes/origin/master |
|
||||||
remotes/upstream/hw3 |
|
||||||
remotes/upstream/master |
|
||||||
``` |
|
||||||
|
|
||||||
В данном случае это `remotes/upstream/master` и `remotes/upstream/hw3`. |
|
||||||
|
|
||||||
Домашки будут выкладываться в ветки вида `hwN`, где `N` -- номер |
|
||||||
дз. (_Для магистров Вышки домашнее заданее будет одно, позже дополнительное_). |
|
||||||
|
|
||||||
Далее Вам необходимо перейти на только что выгруженную ветку и запушить |
|
||||||
("отправить") ее в свой форк: |
|
||||||
``` |
|
||||||
$ git checkout upstream/hw3 |
|
||||||
$ git push origin hw3 |
|
||||||
``` |
|
||||||
|
|
||||||
**Никаких изменений в эту ветку вносить не нужно, Вы будете работать с другой веткой!** |
|
||||||
|
|
||||||
5. Создать ветку вида `hwN-dev`, в которой будет Ваше решение |
|
||||||
``` |
|
||||||
$ git checkout -b hw3-dev |
|
||||||
``` |
|
||||||
git автоматически переведет Вас в ветку `hw1-dev`, если нужно перейти в какую-то |
|
||||||
другую (в данном случае в main): |
|
||||||
``` |
|
||||||
$ git checkout main |
|
||||||
``` |
|
||||||
|
|
||||||
6. Внести свои изменения, с помощью команд `git add`, `git commit` сформировать |
|
||||||
коммиты с решениями задач (структура комитов остается на Ваше усмотрение). |
|
||||||
|
|
||||||
7. При готовности запушить рабочую ветку (`hw3-dev`) в Ваш форк: |
|
||||||
``` |
|
||||||
$ git push origin hw3-dev |
|
||||||
``` |
|
||||||
|
|
||||||
и создать Pull Request. |
|
||||||
|
|
||||||
Требования к Pull Reguest, где N -- номер домашнего задания: |
|
||||||
|
|
||||||
- MR должен создаваться из ветки `hwN-dev` в ветку `hwN` Вашего |
|
||||||
**приватного** форка; |
|
||||||
- MR должен быть назван следующим образом: **Unix. ДЗ N, <Фамилия> <Имя>**; |
|
||||||
- В PR нужно добавить меня в качестве Assignee; |
|
||||||
|
|
||||||
8. Исправления добавляются в ту же ветку в тот же самый PR (новый PR |
|
||||||
создавать не нужно) также, как и перед отправкой. Для этого достаточно запушить |
|
||||||
изменения в ветку `hwN-dev` и переоткрыть старый PR. |
|
Loading…
Reference in new issue