Skip to content

Тестовые для отбора на стажировку Kaspersky Safeboard 2021 (Python)

Notifications You must be signed in to change notification settings

demka-test-tasks/SafeBoard2021

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Задача 1 из 3

Дан json cо вложенной структурой. Необходимо убрать вложенность и конвертировать структуру данных в словарь без сложенных структур.

На вход подается строка в формате json. На выходе ожидается полученный словарь. Словарь нужно выводить отсортированным по ключам. Например:

{"list": [1, 2, 3]}
{'list.0': 1, 'list.1': 2, 'list.2': 3}
{"a": {"a1": null,"a2": 2},"b": {"b1": "12","b2": 1.2}}
{'a.a1': None, 'a.a2': 2, 'b.b1': '12', 'b.b2': 1.2}

Если встретился пустой список или словарь, тогда значение сохраняется.

{"empty_dict": {}, "empty_list": []}
{'empty_dict': {}, 'empty_list': []}

Если на вход подается невалидный json, то нужно выдавать пустой словарь {}.

Задачу нужно решать не через рекурсию. Решения через рекурсию засчитываться не будут.

Sample Input:

{"list": [1, 2, 3]}

Sample Output:

{'list.0': 1, 'list.1': 2, 'list.2': 3}

Задача 2 из 3

Дана строка, которая является абсолютным путем к файлу или директории в системе Unix.

Нужно упростить эту строку до каноничного пути.

Каноничный путь - это тот путь, который будет максимально простым и строгим, а именно:

  1. Путь начинается с единичного слеша /
  2. Любые две директории разделяются одиночным слешем
  3. Путь не может оканчиваться на /
  4. Путь может содержать только истинные директории к нужному файлу (то есть в пути не может быть '.' или '..')

На вход подается путь к файлу или директории в системе Unix.
На выходе ожидается каноничный путь.

Пример

абсолютный путь: /home/abc/../abc/file.txt
каноничный путь: /home/abc/file.txt

Программа должна возвращать упрощенный каноничный путь до файла или директории

Sample Input:

/../

Sample Output:

/

Задача 3 из 3

Дан лог сервера, который содержит логи операций с машинами. Для идентификации машин используется IPv4 адреса.

Нужно определить частоту встечаемости IP адресов.

На вход принимается лог.

На выходе ожидается список адресов с количеством упоминаний адреса (список IP-адресов, отсортированных в порядке убывания количества упоминаний). Если несколько IP-адресов имеют одинаковое количество упоминаний, то к ним применяется сортировка строк по убыванию.

Важно:

  • В логе может встречаться текст похожий на IP, но не являющимся им. Например, 0.0.0.1000
  • Также в логах могут встречаться маски подсети, например, 192.168.0.0/16. Их не нужно считать как ip.
  • Строки логов могут быть пустые.
  • Строка лога не обязательно содержит ip, но в логах обязательно содержится хотя бы один ip.

Например, если лог содержит следующие записи:

[2019-08-29 13:00:13] login to 10.64.64.8
[2019-08-29 13:15:35] logout from 95.213.255.16
[2019-08-29 14:14:33] ssh connection to 10.64.64.8
[2019-09-01 14:14:35] request from 35.228.158.140 to 10.64.65.8
[2019-09-01 14:14:35] login to 35.228.158.140
[2019-09-01 15:29:01] login to 35.228.158.140

Программа должна вывести на экран:

35.228.158.140 3
10.64.64.8 2
95.213.255.16 1
10.64.65.8 1

Sample Input:

[2019-08-29 13:00:13] login to 10.64.64.8
[2019-08-29 13:15:35] logout from 95.213.255.16
[2019-08-29 14:14:33] ssh connection to 10.64.64.8
[2019-09-01 14:14:35] request from 35.228.158.140 to 10.64.65.8
[2019-09-01 14:14:35] login to 35.228.158.140
[2019-09-01 15:29:01] login to 35.228.158.140

Sample Output:

35.228.158.140 3
10.64.64.8 2
95.213.255.16 1
10.64.65.8 1

About

Тестовые для отбора на стажировку Kaspersky Safeboard 2021 (Python)

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages