Dive into Code

Discover code snippets, tutorials, and programming insights

Python

Breadth-first search python

Breadth-first search python

python
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
def bfs(graph, vertex):
    stack = []
    distances = {}
    distance = 0
    if isinstance(graph, dict):
        visited = {key: False for key in graph.keys()}
        children = graph[vertex].keys()
    if isinstance(graph, list):
        visited = [False] * len(graph)
        children = graph[vertex]
    for child in children:
        distances[child] = {
                'distance': distance + 1,
                'predecessor': vertex
            }
        stack.append(child)
    while stack:
        vertex = stack.pop()
         if not visited[vertex]:
            visited[vertex] = True
            if isinstance(graph, dict):
                children = graph[vertex].keys()
            if isinstance(graph, list):
                children = graph[vertex]
            for child in children:
                if not visited[child]:
                    distance = distances[vertex]['distance'] + 1
                    distances[child] = {
                        'distance': distance,
                        'predecessor': vertex
                    }
                    stack.append(child)
    return distances
Python

Linked List

Linked list

python
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
class Node:
    def __init__(self, data, next=None):
        self.data = data
        self.next = next

    def __str__(self):
        return str(self.data)

    def get_data(self):
        return self.data


class LinkedList:
    def __init__(self, head=None, counter=0):
        self.head = head
        self.counter = counter

    def prepend_node(self, data):
        node = Node(data=data)
        if not self.head:
            self.head = node
        else:
            current = self.head
            self.head = node
            self.head.next = current
        self.counter += 1

    def append_node(self, data):
        node = Node(data=data)
        if not self.head:
            self.head = node
        else:
            self.head.next = node
        self.counter += 1

    def remove_node(self, data):
        current = self.head
        while current:
            if current.data == data:
                if not current.next:
                    self.head.next = None
                else:
                    self.head = current.next
                self.counter -= 1
                return True
            current = current.next
        print('data not found')
        return False

    def traverse(self):
        current = self.head
        while current:
            yield current
            current = current.next


if __name__ == '__main__':
    linked = LinkedList()
    linked.append_node(1)
    linked.append_node(2)
    linked.prepend_node(5)
    linked.remove_node(5)
    for node in linked.traverse():
        if node:
            print(node.data)
Python

Binary search tree

Binary search tree

python
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
class Node:
    def __init__(self, data=None, right=None, left=None):
        self.data = data
        self.right = right
        self.left = left

    def __str__(self):
        return str(self.data)

    def insert_data(self, value):
        if value < self.data:
            if self.left is None:
                self.left = Node(data=value)
            else:
                self.left.insert_data(value)
        else:
            if self.right is None:
                self.right = Node(data=value)
            else:
                self.right.insert_data(value)

    def contains(self, value):
        if value == self.data:
            return True
        else:
            if value < self.data:
                if self.left is None:
                    return False
                else:
                    return self.left.contains(value)
            else:
                if self.right is None:
                    return False
                else:
                    return self.right.contains(value)

    def in_order(self):
        if self.left:
            self.left.in_order()
        print(self.data)
        if self.right:
            self.right.in_order()

    def pre_order(self):
        print(self.data)
        if self.left:
            self.left.pre_order()
        if self.right:
            self.right.pre_order()

    def post_order(self):
        if self.left:
            self.left.post_order()
        if self.right:
            self.right.post_order()
        print(self.data)



if __name__ == '__main__':
    a = Node()
    a.data = 10
    a.insert_data(15)
    a.insert_data(5)
    a.insert_data(8)
    a.in_order()
    print('\n')
    a.pre_order()
    print('\n')
    a.post_order()
    print(a.contains(8))
Django

Add multiple content to static page

Add multiple content to static page

python
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import os
import datetime
from django.db import models


class Timestamped(models.Model):
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        abstract = True


class UUSlugged(models.Model):
    slug = models.SlugField()

    class Meta:
        abstract = True


class Published(models.Model):
    is_published = models.BooleanField(default=False)

    class Meta:
        abstract = True


class Page(Timestamped, Published, UUSlugged):
    name = models.CharField(max_length=100)

    class Meta:
        default_related_name = 'pages'
        verbose_name = 'page'
        verbose_name_plural = 'pages'

    def __str__(self):
        return self.name


class Content(Timestamped, Published):
    page = models.ForeignKey(Page)
    name = models.CharField(max_length=100)
    content = models.TextField(blank=True)

    class Meta:
        default_related_name = 'content'
        verbose_name = 'content'
        verbose_name_plural = 'content'

    def __str__(self):
        return self.name


def get_upload_path(instance, filename):
    return os.path.join('{}/{}/{}/{}'.format(
        datetime.datetime.now().day,
        datetime.datetime.now().month,
        datetime.datetime.now().year, filename))


class ContentImage(Timestamped, Published):
    content = models.ForeignKey(Content)
    image = models.ImageField(
        upload_to=get_upload_path, null=True, blank=True)

    class Meta:
        default_related_name = 'contentimages'
        verbose_name = 'content image'
        verbose_name_plural = 'content images'