@ -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]) | |||