Add exercise

This commit is contained in:
Oystein Kristoffer Tveit 2020-10-20 22:58:37 +02:00
parent 15fed3634d
commit 1c6bb26ee3
6 changed files with 205 additions and 0 deletions

17
Exercise 7/1.py Normal file
View File

@ -0,0 +1,17 @@
import numpy as np
import matplotlib.pyplot as plt
def areOrthagonal(list1,list2):
vec1 = np.array(list1)
vec2 = np.array(list2)
return np.dot(vec1,vec2) == 0
def createColumnArray():
return np.arange(1,16).reshape(3,5).transpose()
if __name__ == "__main__":
print(areOrthagonal([0,1],[1,0]))
print(areOrthagonal([1,0],[1,0]))
print()
print(createColumnArray())

34
Exercise 7/12.py Normal file
View File

@ -0,0 +1,34 @@
import re
def find_substring_indexes(str1, str2):
matches = re.compile(f'(?=({str1}))', re.IGNORECASE).finditer(str2)
return [match.span()[0] for match in matches]
def sub_string_matches(str1, str2, str3):
matchIndexes = find_substring_indexes(str1, str2)
offset = 0
newString = str2
for i in range(len(matchIndexes)):
realIndex = matchIndexes[i] + offset
try:
if len(str3) - len(str1) - (matchIndexes[i+1] - matchIndexes[i]) > 0:
reverseOffset = len(str3) - len(str1) - (matchIndexes[i+1] - matchIndexes[i])
else:
reverseOffset = 0
except IndexError:
reverseOffset = 0
pass
newString = newString[:realIndex] + str3 + newString[realIndex + len(str1) - reverseOffset:]
offset += len(str3) - len(str1) + reverseOffset
return newString
if __name__ == "__main__":
print(find_substring_indexes('iS', "Is this the real life? Is this just fantasy?"))
print(find_substring_indexes(str1 = "oo", str2 = "Never let you go let me go. Never let me go ooo"))
print(sub_string_matches(str1 = "iS", str2 = "Is this the real life? Is this just fantasy?", str3 = "cool"))
print(sub_string_matches(str1 = "oo", str2 = "Never let you goooo let me goo. Never let me goo oooo", str3 = "cool"))

74
Exercise 7/14.py Normal file
View File

@ -0,0 +1,74 @@
from typing import Union
class Piece:
def __init__(self, char):
self.type = char.lower()
self.isWhite = char.isupper()
def __str__(self):
return self.type.upper() if self.isWhite else self.type
class Board:
def __init__(self, boardString, size=5):
pieces = [Piece(char) if char!='.' else None for char in boardString]
self.rows = [pieces[i:i+size] for i in range(0, len(pieces), size)]
def __str__(self):
return ''.join([''.join([str(piece) if piece!=None else '.' for piece in row])for row in self.rows])
def print(self):
for row in self.rows:
for piece in row:
print(piece if piece!=None else '.', end='')
print()
def getPiece(self, x, y) -> Union[Piece, None]:
x -= 1
y = len(self.rows) - y
return self.rows[y][x]
def getLegalMoves(self, x, y):
try:
piece = self.getPiece(x, y)
assert piece.type == 'p'
frontDirection = 1 if piece.isWhite else -1
def checkIfStartPosition(x,y):
if piece.isWhite and y == 2 and self.getPiece(x,y+2) == None:
return [(x,y+2)]
elif (not piece.isWhite) and y == 4 and self.getPiece(x,y-2) == None:
return [(x,y-2)]
return []
def checkInFrontOf(x, y, frontDirection):
if not self.getPiece(x, y+frontDirection):
return [(x, y+frontDirection)]
return []
def checkDiagonalOf(x, y, frontDirection):
moves = []
for xToCheck in [-1, 1]:
pieceToCheck = self.getPiece(x+xToCheck, y+frontDirection)
if pieceToCheck != None and pieceToCheck.isWhite != piece.isWhite:
moves.append((x+xToCheck, y+frontDirection))
return moves
moves = checkInFrontOf(x,y,frontDirection)
if moves != []:
moves += checkIfStartPosition(x,y)
moves += checkDiagonalOf(x,y,frontDirection)
return moves
except AssertionError:
print('Piece rules not implemented yet')
if __name__ == "__main__":
board = Board('rkn.r.p.....P..PP.PPB.K..')
board.print()
print()
print(board.getPiece(5, 2))
print(board.getPiece(2, 1))
print()
print(board.getLegalMoves(4, 2))
print(board.getLegalMoves(2, 4))

52
Exercise 7/1c.py Normal file
View File

@ -0,0 +1,52 @@
import numpy as np
import matplotlib.pyplot as plt
def EulerCromer( tmax, x0, y0, v0, u0, m, tau):
# tmax er tiden jorden bruker rundt solen
# x0 og y0 er startbetingelser for jordens posisjon
# v0 og u0 er starbetingelser for farten til jorden
# m er massen til jorden og tau er steglengden.
N = int(round(tmax/tau)) #np.zeros(N) lager en liste bestående av bare 0ere av lengde N
x = np.zeros(N)
y = np.zeros(N)
u = np.zeros(N)
v = np.zeros(N)
radiuser = np.zeros(N)
# startbetingelser
u[0] = u0
v[0] = v0
x[0] = x0
y[0] = y0
radiuser[0] = np.sqrt((x[0]) ** 2 + (y[0]) ** 2)
for n in range(1, N):
u[n] = u[n - 1] - 4 * np.pi ** 2 * x[n - 1] * tau / (radiuser[n - 1] ** 3)
v[n] = v[n - 1] - 4 * np.pi ** 2 * y[n - 1] * tau / (radiuser[n - 1] ** 3)
x[n] = x[n - 1] + u[n] * tau
y[n] = y[n - 1] + v[n] * tau
radiuser[n] = np.sqrt((x[n]) ** 2 + (y[n]) ** 2)
return x, y # posisjons- og farts-lister
# startbetingelser:
x0 = 1 # Tenk deg at solen er i origo og at jorden starter i posisjon(1,0)
y0 = 0
u0 = 0 # startfarten i x-retning er 0
v0 = 2*3.1415623 # startfarten i y-retning er 2*pi
m = 1 / 333480 # dette er massen til Jorden i forhold til massen til Solen
tmax = 1 # Omløpstiden rundt Solen er 1(år)
tau = 0.01 # denne skrittlengden er såpass liten at plottet blir fint nok
x1, y1 = EulerCromer(tmax, x0, y0, v0, u0, m, tau)
# Plotter banen til planeten rundt sola
plt.figure()
plt.plot(x1, y1)
circle = plt.Circle((0, 0), radius=0.06, fc='yellow')
plt.gca().add_patch(circle)
plt.xlabel(r'x [AU]')
plt.ylabel(r'y [AU]')
plt.show()

28
Exercise 7/5.py Normal file
View File

@ -0,0 +1,28 @@
from re import search
def check_equal(str1, str2):
for char in range(len(str1)):
if str1[char] != str2[char]: return False
return True
def reversed_word(word):
return ''.join([word[len(word) - 1 - i] for i in range(len(word))])
def check_palindrome(string):
return string == reversed_word(string)
def contains_string(str1, str2):
match = search(pattern=str2, string=str1)
return match.span()[0] if match != None else -1
if __name__ == "__main__":
print(check_equal('hei', 'hello'))
print(check_equal('hello', 'hello'))
print()
print(reversed_word('star desserts'))
print()
print(check_palindrome('agnes i senga'))
print(check_palindrome('hello'))
print()
print(contains_string('pepperkake', 'per'))
print(contains_string('pepperkake', 'ola'))

0
Exercise 7/__init__.py Normal file
View File