| @ -0,0 +1,63 @@ | |||
| #!/usr/bin/env python3 | |||
| ''' PortScan v3 | |||
| ----------- | |||
| This application scans for open ports on the designated system. It uses | |||
| multiprocessing to speed up this process. | |||
| ''' | |||
| import socket | |||
| import subprocess | |||
| import sys | |||
| from datetime import datetime | |||
| from multiprocessing import Pool | |||
| def scan(port): | |||
| try: | |||
| sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) | |||
| result = sock.connect_ex((target_ip, port)) | |||
| if result == 0: | |||
| print("Port {}:\tOpen".format(port)) | |||
| sock.close() | |||
| except socket.gaierror: | |||
| print('Hostname could not be resolved.') | |||
| sys.exit(0) | |||
| except socket.error: | |||
| print("Couldn't connect to server.") | |||
| sys.exit(0) | |||
| except: | |||
| return | |||
| if __name__ == '__main__': | |||
| ports = list(range(1,4096)) | |||
| target = '' | |||
| try: | |||
| target = sys.argv[1] | |||
| except: | |||
| print("\nUsage:\t{} [target]\n\n\tScan for open ports on target machine.\n".format(sys.argv[0])) | |||
| sys.exit(0) | |||
| # Clear the screen | |||
| subprocess.call('clear', shell=True) | |||
| target_ip = socket.gethostbyname(target) | |||
| # Print a nice banner with information on which host we are about to scan | |||
| print("-" * 60) | |||
| print("Please wait, scanning remote host", target_ip) | |||
| print("-" * 60) | |||
| # Check what time the scan started | |||
| t1 = datetime.now() | |||
| with Pool(processes = 8) as p: | |||
| p.map(scan, ports) | |||
| # Checking the time again | |||
| t2 = datetime.now() | |||
| # Calculates the difference of time, to see how long it took to run the script | |||
| total = t2 - t1 | |||
| # Printing the information to screen | |||
| print('Scanning Completed in: ', total) | |||
| @ -0,0 +1,46 @@ | |||
| class Stack: | |||
| def __init__ (self): | |||
| self.items = list() | |||
| def push (self, item): | |||
| self.items.append (item) | |||
| def pop (self): | |||
| if len(self.items) > 0: | |||
| return self.items.pop() | |||
| return ('Stack is empty') | |||
| def isEmpty (self): | |||
| return self.items == list() | |||
| def size (self): | |||
| return len(self.items) | |||
| def peek (self): | |||
| return self.items[0] | |||
| def printStack (self): | |||
| print(self.items) | |||
| if __name__ == '__main__': | |||
| my_stack = Stack() | |||
| my_stack.push(1) | |||
| my_stack.printStack() | |||
| my_stack.push(5) | |||
| my_stack.push(3) | |||
| my_stack.printStack() | |||
| print('Pop {} from stack'.format(my_stack.pop())) | |||
| my_stack.printStack() | |||
| print('Now stack size is {}'.format(my_stack.size())) | |||
| print('First element in stack is {}'.format(my_stack.peek())) | |||
| print('Pop {} from stack'.format(my_stack.pop())) | |||
| my_stack.printStack() | |||
| print('Pop {} from stack'.format(my_stack.pop())) | |||
| my_stack.printStack() | |||
| print('Now stack size is {}'.format(my_stack.size())) | |||
| print(my_stack.pop()) | |||
| @ -0,0 +1,37 @@ | |||
| from collections import defaultdict | |||
| class Graph: | |||
| def __init__(self): | |||
| self.graph = defaultdict(list) | |||
| def addEdge(self,u,v): | |||
| self.graph[u].append(v) | |||
| def DFSUtil(self,v,visited): | |||
| visited[v]= True | |||
| print v, | |||
| for i in self.graph[v]: | |||
| if visited[i] == False: | |||
| self.DFSUtil(i, visited) | |||
| def DFS(self,v): | |||
| visited = [False]*(len(self.graph)) | |||
| self.DFSUtil(v,visited) | |||
| g = Graph() | |||
| edges = input("input the number of edges : ") | |||
| print "enter nodes with zero based indexing : " | |||
| for i in range(edges): | |||
| a, b = map(int, raw_input().split()) | |||
| g.addEdge(a, b) | |||
| check = input("DFS check from node : ") | |||
| g.DFS(check) | |||
| @ -0,0 +1,12 @@ | |||
| def binary_search(arr,element): | |||
| lower = 0 | |||
| upper = len(arr) - 1 | |||
| while(lower < upper): | |||
| mid = (lower + (upper - 1)) // 2 | |||
| if arr[mid] > element: | |||
| upper = mid-1 | |||
| elif arr[mid] < element: | |||
| lower = mid + 1 | |||
| else: | |||
| return True | |||
| return False | |||
| @ -0,0 +1,6 @@ | |||
| def linear_search(arr, element): | |||
| for i in arr: | |||
| if i == element: | |||
| return True | |||
| return False | |||
| @ -0,0 +1,14 @@ | |||
| def combsort(numbers_list): | |||
| ordered = numbers_list.copy() | |||
| gap = len(numbers_list) # initial gap (first and last element) | |||
| swaps = True | |||
| while swaps or gap!=1: | |||
| swaps = False | |||
| for i in range(len(numbers_list)-gap): | |||
| if ordered[i] > ordered[i+gap]: # swaps without extra variable | |||
| ordered[i] = ordered[i+gap] - ordered[i] | |||
| ordered[i+gap] = ordered[i+gap] - ordered[i] | |||
| ordered[i] = ordered[i+gap] + ordered[i] | |||
| swaps = True | |||
| gap = max(gap-1, 1) # update gap, minimum gap is 1 | |||
| return ordered | |||
| @ -0,0 +1,172 @@ | |||
| class Node(): | |||
| def __init__(self,key): | |||
| self.key = key | |||
| self.left = None | |||
| self.right = None | |||
| self.parent = None | |||
| class Tree(): | |||
| def __init__(self): | |||
| self.root = None | |||
| def add_node(self,key,node=None): | |||
| if node is None: | |||
| node = self.root | |||
| if self.root is None: | |||
| self.root = Node(key) | |||
| else: | |||
| if key <= node.key : | |||
| if node.left is None: | |||
| node.left = Node(key) | |||
| node.left.parent = node | |||
| print "left" | |||
| return | |||
| else: | |||
| # return self.add_node(key,node = self.root.left) | |||
| return self.add_node(key,node = node.left) | |||
| else: | |||
| if node.right is None: | |||
| node.right = Node(key) | |||
| node.right.parent = node | |||
| print "right" | |||
| return | |||
| else: | |||
| # return self.add_node(key,node = self.root.right) | |||
| return self.add_node(key,node = node.right) | |||
| def search(self,key,node = None): | |||
| if node is None: | |||
| node = self.root | |||
| if self.root.key == key: | |||
| print "key is at the root" | |||
| return self.root | |||
| else: | |||
| if node.key == key : | |||
| print "key exists" | |||
| return node | |||
| elif key < node.key and node.left is not None: | |||
| print "left" | |||
| return self.search(key,node = node.left) | |||
| elif key > node.key and node.right is not None: | |||
| print "right" | |||
| return self.search(key,node = node.right) | |||
| else: | |||
| print "key does not exist" | |||
| return None | |||
| def delete_node(self,key,node=None): | |||
| #search for the node to be deleted in tree | |||
| if node is None: | |||
| node = self.search(key)#return the node to be deleted | |||
| #root has no parent node | |||
| if self.root.key == node.key: #if it is root | |||
| parent_node = self.root | |||
| else: | |||
| parent_node = node.parent | |||
| '''case 1: The node has no chidren''' | |||
| if node.left is None and node.right is None: | |||
| if key <= parent_node.key: | |||
| parent_node.left = None | |||
| else: | |||
| parent_node.right = None | |||
| return | |||
| '''case 2: The node has children''' | |||
| ''' if it has a single left node''' | |||
| if node.left is not None and node.right is None : | |||
| if node.left.key < parent_node.key : | |||
| parent_node.left = node.left | |||
| else: | |||
| parent_node.right = node.left | |||
| return | |||
| '''if it has a single right node''' | |||
| if node.right is not None and node.left is None: | |||
| if node.key <= parent_node.key: | |||
| parent_node.left = node.right | |||
| else: | |||
| parent_node.right = node.right | |||
| return | |||
| '''if it has two children''' | |||
| '''find the node with the minimum value from the right subtree. | |||
| copy its value to thhe node which needs to be removed. | |||
| right subtree now has a duplicate and so remove it.''' | |||
| if node.left is not None and node.right is not None: | |||
| min_value = self.find_minimum(node) | |||
| node.key = min_value.key | |||
| min_value.parent.left = None | |||
| return | |||
| def find_minimum(self,node = None): | |||
| if node is None: | |||
| node = self.root | |||
| '''find mimimum value from the right subtree''' | |||
| '''case when there is only a root node''' | |||
| if node.right is not None: | |||
| node = node.right | |||
| else: | |||
| return node | |||
| if node.left is not None: | |||
| return self.find_minimum(node = node.left) | |||
| else: | |||
| return node | |||
| def tree_data(self,node=None): | |||
| if node is None: | |||
| node = self.root | |||
| stack = [] | |||
| while stack or node: | |||
| if node is not None: | |||
| stack.append(node) | |||
| node = node.left | |||
| else: | |||
| node = stack.pop() | |||
| yield node.key | |||
| node = node.right | |||
| t=Tree() | |||
| t.add_node(10) | |||
| t.add_node(13) | |||
| t.add_node(14) | |||
| t.add_node(8) | |||
| t.add_node(9) | |||
| t.add_node(7) | |||
| t.add_node(11) | |||
| ''' | |||
| 10---8---7 | |||
| | | | |||
| | ---9 | |||
| ---13---11 | |||
| | | |||
| ---14 | |||
| ''' | |||
| @ -0,0 +1,27 @@ | |||
| def merge_sort(a): | |||
| if len(a) < 2: | |||
| return a | |||
| l = a[0:len(a)//2] | |||
| r = a[len(a)//2:] | |||
| return merge(merge_sort(l), merge_sort(r)) | |||
| def merge(a, b): | |||
| out = [] | |||
| i = 0 | |||
| j = 0 | |||
| while i < len(a) or j < len(b): | |||
| if i >= len(a): | |||
| out.append(b[j]) | |||
| j += 1 | |||
| elif j >= len(b): | |||
| out.append(a[i]) | |||
| i += 1 | |||
| else: | |||
| if a[i] <= b[j]: | |||
| out.append(a[i]) | |||
| i += 1 | |||
| else: | |||
| out.append(b[j]) | |||
| j += 1 | |||
| return out | |||
| @ -0,0 +1,44 @@ | |||
| class Queque: | |||
| def __init__(self): | |||
| self.queque = [] | |||
| def enqueue(self, data): | |||
| if data not in self.queque: | |||
| self.queque.append(data) | |||
| return True | |||
| return False | |||
| def dequeue(self): | |||
| if len(self.queque) > 0: | |||
| return self.queque.pop(0) | |||
| return ('Queque empty') | |||
| def sizeQueque(self): | |||
| return len(self.queque) | |||
| def printQueque(self): | |||
| return self.queque | |||
| if __name__ == '__main__': | |||
| myqueque = Queque() | |||
| data = myqueque.enqueue(5) | |||
| data = myqueque.enqueue(6) | |||
| data = myqueque.enqueue(7) | |||
| data = myqueque.enqueue(10) | |||
| print(myqueque.sizeQueque()) | |||
| print(myqueque.printQueque()) | |||
| dequeue = myqueque.dequeue() # delete 5 | |||
| dequeue = myqueque.dequeue() # delete 6 | |||
| print(myqueque.printQueque()) | |||
| print(myqueque.sizeQueque()) | |||
| @ -0,0 +1,14 @@ | |||
| def radix_sort(lista): | |||
| max_len = max([len(numero) for numero in lista]) | |||
| padded = list([str(num).rjust(max_len, "0") for num in lista]) | |||
| for pos in reversed(range(max_len)): | |||
| buckets = [list() for x in range(0, 10)] | |||
| for num in padded: | |||
| bucket = int(num[pos]) | |||
| buckets[bucket] += [num] | |||
| padded = sum(buckets, []) | |||
| return padded | |||
| if __name__ == "__main__": | |||
| print(radix_sort(["13", "105", "10", "150"])) | |||
| @ -0,0 +1,16 @@ | |||
| #selection sorting | |||
| import sys | |||
| A = [6, 2, 1, 3, 4] | |||
| for i in range(len(A)): | |||
| min_index = i | |||
| for j in range(i+1, len(A)): | |||
| if A[min_index] > A[j]: | |||
| min_index = j | |||
| A[i], A[min_index] = A[min_index], A[i] | |||
| print ("Sorted array") | |||
| for i in range(len(A)): | |||
| print("%d" %A[i]) | |||