Skip to content

Commit

Permalink
Added W03 materials
Browse files Browse the repository at this point in the history
  • Loading branch information
IvanSol committed Oct 21, 2024
1 parent a747384 commit 70f7cb4
Show file tree
Hide file tree
Showing 4 changed files with 161 additions and 3 deletions.
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

[ContestID_W01]: https://contest.yandex.ru/contest/69200/?lang=en
[ContestID_W02]: https://contest.yandex.ru/contest/69506/?lang=en
[ContestID_W03]: https://contest.yandex.ru/contest/<CID>/?lang=en
[ContestID_W03]: https://contest.yandex.ru/contest/69814/?lang=en
[ContestID_W04]: https://contest.yandex.ru/contest/<CID>/?lang=en
[ContestID_W05]: https://contest.yandex.ru/contest/<CID>/?lang=en
[ContestID_W06]: https://contest.yandex.ru/contest/<CID>/?lang=en
Expand All @@ -15,7 +15,7 @@

[WarmUp_test_W01]: https://forms.gle/N7w3ogEbwN1dr1am8
[WarmUp_test_W02]: https://forms.gle/q2ir9uSz9LYg5xWd7
[WarmUp_test_W03]: https://forms.gle/<form_id>
[WarmUp_test_W03]: https://forms.gle/rC7tCz5At9HRvNdg6
[WarmUp_test_W04]: https://forms.gle/<form_id>
[WarmUp_test_W05]: https://forms.gle/<form_id>
[WarmUp_test_W06]: https://forms.gle/<form_id>
Expand All @@ -41,8 +41,8 @@
|:------:|:-----------------------|:--------------------:|:-----------------------:|:------------------------:|:----------------------:|
| 01 | Sorting algorithms | [Slides][Slides_W01] | [Test][WarmUp_test_W01] | [Contest][ContestID_W01] | 14.10.2024 19:00 UTC+3 |
| 02 | Binary search | [Slides][Slides_W02] | [Test][WarmUp_test_W02] | [Contest][ContestID_W02] | 21.10.2024 19:00 UTC+3 |
| 03 | Basic Data sturctures | [Slides][Slides_W03] | [Test][WarmUp_test_W03] | [Contest][ContestID_W03] | 28.10.2024 19:00 UTC+3 |
<!---
| 03 | Basic Data sturctures | [Slides][Slides_W03] | [Test][WarmUp_test_W03] | [Contest][ContestID_W03] | ??.11.2024 19:00 UTC+3 |
| 04 | Dynamic programming | [Slides][Slides_W04] | [Test][WarmUp_test_W04] | [Contest][ContestID_W04] | ??.11.2024 19:00 UTC+3 |
| 05 | Knapsack problem | [Slides][Slides_W05] | [Test][WarmUp_test_W05] | [Contest][ContestID_W05] | ??.11.2024 19:00 UTC+3 |
| 06 | KMP & Heap | [Slides][Slides_W06] | [Test][WarmUp_test_W06] | [Contest][ContestID_W06] | ??.11.2024 19:00 UTC+3 |
Expand Down
Binary file not shown.
33 changes: 33 additions & 0 deletions week03_basic_data_structures/eyequeue_input_template.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# This is input template for W3.C EyeQueue problem.

import sys

if __name__ == '__main__':
# Uncomment these lines to use file input/output:
# sys.stdin = open('input.txt', 'r')
# sys.stdout = open('output.txt', 'r')

N = int(input())

# here comes initialization code if needed

for line in sys.stdin:
cmd = line.split()
c_i = cmd[0]
q_i = int(cmd[1]) if len(cmd) > 1 else None
id_i = int(cmd[2]) if len(cmd) > 2 else None

if c_i == '#':
break
elif c_i == '+':
# Your code goes here
pass
elif c_i == '!':
# Your code goes here
pass
elif c_i == '-':
# Your code goes here
pass
elif c_i == '?':
# Your code goes here
pass
125 changes: 125 additions & 0 deletions week03_basic_data_structures/linked_list.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
class ListNode:
def __init__(self, val, next):
self.val = val
self.next = next


class LinkedList:
def __init__(self):
# creating service node:
self.head = ListNode(None, None)
self.tail = self.head
self.len = 0

def insert(self, previous_node, val):
if not isinstance(previous_node, ListNode):
raise TypeError("Expected previous_node to be"
"ListNode instance")
new_node = ListNode(val, previous_node.next)
previous_node.next = new_node
self.len += 1
if new_node.next is None:
self.tail = new_node
return new_node

def push_front(self, val):
return self.insert(self.head, val)

def push_back(self, val):
return self.insert(self.tail, val)

def remove(self, node):
if not isinstance(node, ListNode):
raise TypeError("Expected node to be"
"ListNode instance")
if self.len < 1:
raise ValueError('Trying to remove item from empty list')
prev_node = self.head
while prev_node is not None and prev_node.next != node:
prev_node = prev_node.next
if prev_node is not None:
prev_node.next = node.next
self.len -= 1
if prev_node.next is None:
self.tail = prev_node
return node.val
else:
raise ValueError('Node provided to remove()'
'was not found in the list')

def pop_back(self):
return self.remove(self.tail)

def pop_front(self):
# self.head.next may be Null. It is checked in self.remove()
return self.remove(self.head.next)

def __len__(self):
# This function is for using len(x).
return self.len

# Following functions are just for easier debugging and testing:

def get_node_by_index(self, i):
# Service node is supposed to be node 0
if i < 0:
i += self.len + 1
if not (0 <= i <= self.len):
raise IndexError('List index out of range')
res = self.head
for i in range(i):
res = res.next
return res

def insert_by_index(self, i, val):
prev_node = self.get_node_by_index(i)
return self.insert(prev_node, val)

def remove_by_index(self, i):
node = self.get_node_by_index(i)
self.remove(node.next)

def __getitem__(self, i):
# This function is for using x[i].
# We add 1 because self.get_node_by_index(0) returns service node
return self.get_node_by_index(i + 1).val

def __repr__(self):
# This function is for visualization.
# It allows to use print() for List
max_show = 10
show_len = min(len(self), max_show)
elements_repr = list(map(str, [self[i] for i in range(show_len)]))
if len(self) > max_show:
elements_repr.append('...')
return f'List({len(self)} elements): [{", ".join(elements_repr)}]'


if __name__ == '__main__':
x = LinkedList()
x.push_front(1)
print(x)
x.push_front(10)
print(x)
x.push_front(100)
print(x)
x.push_front(1000)
print(x)
x.insert_by_index(2, 5)
print(x)
x.insert_by_index(1, 7)
print(x)
x.insert_by_index(-1, 70)
print(x)
x.insert_by_index(-1, 80)
print(x)
x.insert_by_index(-2, 'Text')
print(x)
x.remove_by_index(2)
print(x)
x.pop_front()
print(x)
x.pop_back()
print(x)
x.push_back('Back')
print(x)

0 comments on commit 70f7cb4

Please sign in to comment.