Skip to content

Commit

Permalink
Add two tasks for practicum backend test work
Browse files Browse the repository at this point in the history
  • Loading branch information
fuodorov committed Jul 3, 2022
1 parent fb02bff commit e160170
Show file tree
Hide file tree
Showing 3 changed files with 73 additions and 8 deletions.
44 changes: 36 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,28 +60,28 @@

</details>

---
------

<details>
<summary>
<b>Ловкость рук (<a href="sprint_1/juggle.py">juggle.py</a></b>)
</summary>

#### Условие
Гоша и Тимофей нашли необычный тренажёр для скоростной печати и хотят освоить его.
Тренажёр представляет собой поле из клавиш 4× 4, в котором на каждом раунде появляется конфигурация цифр и точек.
На клавише написана либо точка, либо цифра от 1 до 9.
В момент времени t игрок должен одновременно нажать на все клавиши, на которых написана цифра t.
Гоша и Тимофей могут нажать в один момент времени на k клавиш каждый.
Гоша и Тимофей нашли необычный тренажёр для скоростной печати и хотят освоить его.
Тренажёр представляет собой поле из клавиш 4× 4, в котором на каждом раунде появляется конфигурация цифр и точек.
На клавише написана либо точка, либо цифра от 1 до 9.
В момент времени t игрок должен одновременно нажать на все клавиши, на которых написана цифра t.
Гоша и Тимофей могут нажать в один момент времени на k клавиш каждый.
Если в момент времени t были нажаты все нужные клавиши, то игроки получают 1 балл.

Найдите число баллов, которое смогут заработать Гоша и Тимофей, если будут нажимать на клавиши вдвоём.

#### Формат ввода
В первой строке дано целое число k (1 ≤ k ≤ 5).

В четырёх следующих строках задан вид тренажёра –— по 4 символа в каждой строке.
Каждый символ —– либо точка, либо цифра от 1 до 9.
В четырёх следующих строках задан вид тренажёра –— по 4 символа в каждой строке.
Каждый символ —– либо точка, либо цифра от 1 до 9.
Символы одной строки идут подряд и не разделены пробелами.

#### Формат вывода
Expand Down Expand Up @@ -112,6 +112,34 @@

---

<details>
<summary>
<b>Разница списков (<a href="sprint_1/find_missing.py">find_missing.py</a></b>)
</summary>

#### Условие
Даны два списка, нужно вернуть элементы, которые есть в 1-ом списке, но нет во 2-ом.
Оценить эффективность своего решения.

</details>

------


<details>
<summary>
<b>Удаляем нули (<a href="sprint_1/delete_zero.py">delete_zero.py</a></b>)
</summary>

#### Условие
Дан массив целых чисел. Нужно удалить из него нули.
Можно использовать только О(1) дополнительной памяти.

</details>

----


## 2. Основные структуры

[contest.yandex.ru](https://contest.yandex.ru/contest/22779/problems/)
Expand Down
21 changes: 21 additions & 0 deletions sprint_1/delete_zero.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
"""
ПРИНЦИП РАБОТЫ
Используем указатель и перезапишем массив, исключая все нули.
ВРЕМЕННАЯ СЛОЖНОСТЬ
O(n), где n - количество элементов в массиве.
ПРОСТРАНСТВЕННАЯ СЛОЖНОСТЬ
O(1)
"""


def delete_zero(arr):
zeros = 0

for item in arr:
if item != 0:
arr[zeros] = item
zeros += 1

return arr[:zeros]
16 changes: 16 additions & 0 deletions sprint_1/find_missing.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
"""
ПРИНЦИП РАБОТЫ
Используем хеш-таблицу. Сохраняем все элементы второго массива в хэш-таблице.
Один за другим проверяем все элементы первого массива и выводим все элементы, которых нет в хэш-таблице.
ВРЕМЕННАЯ СЛОЖНОСТЬ
O(n + m), где n, m - количество элементов в первом и во втором списках соответственно.
ПРОСТРАНСТВЕННАЯ СЛОЖНОСТЬ
O(n + m), где n, m - количество элементов в первом и во втором списках соответственно.
"""


def find_missing(first, second):
hash_table = {item: 1 for item in second}
return [item for item in first if item not in hash_table.keys()]

0 comments on commit e160170

Please sign in to comment.