Compare commits
13 Commits
Author | SHA1 | Date |
---|---|---|
Oystein Kristoffer Tveit | 744d91aa49 | |
Oystein Kristoffer Tveit | 1bd7fa4e0e | |
Oystein Kristoffer Tveit | 23adf99347 | |
Oystein Kristoffer Tveit | d630115cce | |
Oystein Kristoffer Tveit | 4335edea97 | |
Oystein Kristoffer Tveit | 1c10a0fd83 | |
Oystein Kristoffer Tveit | e1125351f7 | |
Oystein Kristoffer Tveit | 1c6bb26ee3 | |
Oystein Kristoffer Tveit | 15fed3634d | |
Oystein Kristoffer Tveit | a2ea83fcbb | |
Oystein Kristoffer Tveit | 0c07bfaf9d | |
Oystein Kristoffer Tveit | 72478e8199 | |
Oystein Kristoffer Tveit | d9c5d7d400 |
|
@ -1,3 +1,4 @@
|
||||||
__pycache__
|
__pycache__
|
||||||
|
|
||||||
.vscode
|
.vscode
|
||||||
|
.vim
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
from math import floor
|
||||||
|
|
||||||
|
recursive_sum = lambda n: 1 if n == 1 else n + recursive_sum(n - 1)
|
||||||
|
|
||||||
|
merge_sum = lambda lst: lst[0] if len(lst) == 1 else merge_sum(lst[0:floor(len(
|
||||||
|
lst) / 2)]) + merge_sum(lst[floor(len(lst) / 2):len(lst)])
|
||||||
|
|
||||||
|
|
||||||
|
def find_smallest_element(lst):
|
||||||
|
if len(lst) == 1: return lst[0]
|
||||||
|
smallest_element = find_smallest_element(lst[1:])
|
||||||
|
return lst[0] if lst[0] < smallest_element else smallest_element
|
||||||
|
|
||||||
|
|
||||||
|
def binary_search(numbers, element):
|
||||||
|
|
||||||
|
return -float('inf')
|
|
@ -0,0 +1,7 @@
|
||||||
|
from math import sin
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
|
||||||
|
x_verdier = [x/10 for x in range(301)]
|
||||||
|
y_verdier = [sin(x) for x in x_verdier]
|
||||||
|
plt.plot(x_verdier, y_verdier, c='r')
|
||||||
|
plt.show()
|
|
@ -0,0 +1,309 @@
|
||||||
|
from typing import Callable, Iterable, Union
|
||||||
|
from os import system
|
||||||
|
from shutil import get_terminal_size as getTerminalSize
|
||||||
|
|
||||||
|
from piece import Piece
|
||||||
|
|
||||||
|
|
||||||
|
def centerText(text):
|
||||||
|
terminalWidth = getTerminalSize((60, 0))[0] # Column size 60 as fallback
|
||||||
|
return "\n".join(line.center(terminalWidth) for line in text.split('\n'))
|
||||||
|
|
||||||
|
|
||||||
|
def centerBlockText(text):
|
||||||
|
terminalWidth = getTerminalSize((60, 0))[0] # Column size 60 as fallback
|
||||||
|
textArray = text.split('\n')
|
||||||
|
offset = int((terminalWidth - len(textArray[0])) / 2)
|
||||||
|
return "\n".join(offset * ' ' + line for line in textArray)
|
||||||
|
|
||||||
|
|
||||||
|
def determineMove(key, x, y, maxmin) -> tuple:
|
||||||
|
if key in ['s', 'j'] and y != maxmin[1]: return (0, 1)
|
||||||
|
elif key in ['w', 'k'] and y != maxmin[0]: return (0, -1)
|
||||||
|
elif key in ['d', 'l'] and x != maxmin[1]: return (1, 0)
|
||||||
|
elif key in ['a', 'h'] and x != maxmin[0]: return (-1, 0)
|
||||||
|
else: return False
|
||||||
|
|
||||||
|
|
||||||
|
class Board:
|
||||||
|
|
||||||
|
def __init__(self, boardState=None):
|
||||||
|
"""Create a standard board if nothing else is defined in boardState"""
|
||||||
|
self.boardArray = [
|
||||||
|
[Piece(type, 'black') for type in ['r', 'n', 'b', 'q', 'k', 'b', 'n', 'r']],
|
||||||
|
[Piece('p', 'black') for _ in range(8)],
|
||||||
|
*[[None for _ in range(8)] for _ in range(4)],
|
||||||
|
[Piece('p', 'white') for _ in range(8)],
|
||||||
|
[Piece(type, 'white') for type in ['r', 'n', 'b', 'q', 'k', 'b', 'n', 'r']],
|
||||||
|
] if boardState == None else boardState
|
||||||
|
|
||||||
|
def draw(self, config={}) -> str:
|
||||||
|
"""Returns a string representing the board
|
||||||
|
|
||||||
|
config options:
|
||||||
|
highlightedContent: [(x,y)] - Pieces to color
|
||||||
|
highlightEscapeCodes: (str, str) - Terminal escape codes to color highlightedContent with
|
||||||
|
highlightedBoxes: [(x,y)] - Boxes to make bold
|
||||||
|
"""
|
||||||
|
|
||||||
|
# Fill default values in config dict
|
||||||
|
def fillConfigDefaultValue(key, defaultValue):
|
||||||
|
if key not in config:
|
||||||
|
config[key] = defaultValue
|
||||||
|
|
||||||
|
fillConfigDefaultValue('highlightedContent', [])
|
||||||
|
fillConfigDefaultValue('highlightedBoxes', [])
|
||||||
|
fillConfigDefaultValue('highlightEscapeCodes', ('\033[32;5;7m', '\033[0m'))
|
||||||
|
|
||||||
|
# Draw general outline with ┼ as all corners
|
||||||
|
stringArray = [list('┼' + '───┼' * 8)] + [[None] for _ in range(8 * 2)]
|
||||||
|
for y, row in enumerate(self.boardArray):
|
||||||
|
for x, _ in enumerate(row):
|
||||||
|
stringArray[2 * y + 1][4 * x] = '│'
|
||||||
|
stringArray[2 * y + 2][4 * x] = '┼'
|
||||||
|
|
||||||
|
symbol = str(self.boardArray[y][x]) if self.boardArray[y][x] != None else ' '
|
||||||
|
stringArray[2 * y + 1] += list(' {} │'.format(symbol))
|
||||||
|
stringArray[2 * y + 2] += list('───┼')
|
||||||
|
|
||||||
|
# Overwrite corners
|
||||||
|
stringArray[0][0] = '╭'
|
||||||
|
stringArray[0][-1] = '╮'
|
||||||
|
stringArray[-1][0] = '╰'
|
||||||
|
stringArray[-1][-1] = '╯'
|
||||||
|
|
||||||
|
# Overwrite T-junctions
|
||||||
|
for i in range(int(len(stringArray[0]) / 4) - 1): # Loop row
|
||||||
|
stringArray[0][i * 4 + 4] = '┬'
|
||||||
|
stringArray[-1][i * 4 + 4] = '┴'
|
||||||
|
for i in range(int(len(stringArray) / 2) - 1): # Loop column
|
||||||
|
stringArray[i * 2 + 2][0] = '├'
|
||||||
|
stringArray[i * 2 + 2][-1] = '┤'
|
||||||
|
|
||||||
|
def highlightContent(x, y, modifiers=config['highlightEscapeCodes']):
|
||||||
|
"""highlight inner part of a box with xterm-256colors modifiers"""
|
||||||
|
stringArray[y * 2 + 1][x * 4 + 1] = \
|
||||||
|
modifiers[0] + stringArray[y * 2 + 1][x * 4 + 1]
|
||||||
|
stringArray[y * 2 + 1][x * 4 + 3] += modifiers[1]
|
||||||
|
|
||||||
|
def highlightBox(x, y):
|
||||||
|
"""Make box around a position bold"""
|
||||||
|
|
||||||
|
boldBoxChars = {
|
||||||
|
'─': '═',
|
||||||
|
'│': '║',
|
||||||
|
'┼': '╬',
|
||||||
|
'╰': '╚',
|
||||||
|
'╯': '╝',
|
||||||
|
'╭': '╔',
|
||||||
|
'╮': '╗',
|
||||||
|
'├': '╠',
|
||||||
|
'┴': '╩',
|
||||||
|
'┤': '╣',
|
||||||
|
'┬': '╦',
|
||||||
|
}
|
||||||
|
|
||||||
|
pointsToChange = \
|
||||||
|
[(x * 4 + 0, y * 2 + i) for i in range(3)] + \
|
||||||
|
[(x * 4 + 4, y * 2 + i) for i in range(3)] + \
|
||||||
|
[(x * 4 + i, y * 2 + 0) for i in range(1,4)] + \
|
||||||
|
[(x * 4 + i, y * 2 + 2) for i in range(1,4)]
|
||||||
|
|
||||||
|
# This has to doublecheck that the character exists, because if neighbour
|
||||||
|
# boxes are to be highlighed, it will try to overwrite already bold borders
|
||||||
|
for x, y in pointsToChange:
|
||||||
|
symbolExists = stringArray[y][x] in boldBoxChars
|
||||||
|
stringArray[y][x] = boldBoxChars[stringArray[y][x]] if symbolExists else stringArray[y][x]
|
||||||
|
|
||||||
|
# Color white pieces
|
||||||
|
for piece in self.getPositionsWhere(lambda piece: piece.color == 'white'):
|
||||||
|
highlightContent(*piece, ('\033[7m', '\033[0m'))
|
||||||
|
|
||||||
|
for box in config['highlightedBoxes']:
|
||||||
|
highlightBox(*box)
|
||||||
|
|
||||||
|
for piece in config['highlightedContent']:
|
||||||
|
highlightContent(*piece)
|
||||||
|
|
||||||
|
return '\n'.join([''.join(line) for line in stringArray])
|
||||||
|
|
||||||
|
def selectPiece(self, player, x=0, y=0, centering=True) -> tuple:
|
||||||
|
"""Lets the user select a piece"""
|
||||||
|
|
||||||
|
while True:
|
||||||
|
system('clear')
|
||||||
|
playerString = '\n' + player.name + '\n'
|
||||||
|
checkString = f"\033[41m{'CHECK' if self.checkCheck(player.color) else ''}\033[0m" + '\n'
|
||||||
|
|
||||||
|
hoveringPiece = self.getPieceAt(x, y)
|
||||||
|
pieceIsOwnColor = hoveringPiece != None and hoveringPiece.color == player.color
|
||||||
|
|
||||||
|
menuString = self.draw({
|
||||||
|
'highlightedBoxes': [(x, y)],
|
||||||
|
'highlightedContent': Piece.possibleMoves(x, y, self) if pieceIsOwnColor else []
|
||||||
|
}) + '\n'
|
||||||
|
inputString = f" W E\nA S D <- Enter : "
|
||||||
|
|
||||||
|
if centering:
|
||||||
|
playerString = centerText(playerString)
|
||||||
|
checkString = centerText(checkString)
|
||||||
|
menuString = centerBlockText(menuString)
|
||||||
|
inputString = centerBlockText(inputString)
|
||||||
|
|
||||||
|
print(playerString)
|
||||||
|
print(checkString)
|
||||||
|
print(menuString)
|
||||||
|
|
||||||
|
try:
|
||||||
|
key = input(inputString)[0]
|
||||||
|
except IndexError: # Input was empty
|
||||||
|
key = ''
|
||||||
|
|
||||||
|
try:
|
||||||
|
if move := determineMove(key, x, y, (0, 7)):
|
||||||
|
x += move[0]
|
||||||
|
y += move[1]
|
||||||
|
elif key == 'e' \
|
||||||
|
and hoveringPiece.color == player.color \
|
||||||
|
and Piece.possibleMoves(x, y, self) != []:
|
||||||
|
return (x, y)
|
||||||
|
except AttributeError: # Chosen tile contains no piece
|
||||||
|
pass
|
||||||
|
|
||||||
|
def selectMove(self, player, x, y, legalMoves, centering=True) -> Union[tuple, bool]:
|
||||||
|
"""Lets the user select a move to make from a graphic board"""
|
||||||
|
|
||||||
|
while True:
|
||||||
|
system('clear')
|
||||||
|
playerString = '\n' + player.name + '\n'
|
||||||
|
checkString = f"\033[41m{'CHECK' if self.checkCheck(player.color) else ''}\033[0m" + '\n'
|
||||||
|
menuString = self.draw({
|
||||||
|
'highlightedBoxes': [(x, y)],
|
||||||
|
'highlightedContent': legalMoves
|
||||||
|
}) + '\n'
|
||||||
|
inputString = f"Q W E\nA S D <- Enter : "
|
||||||
|
|
||||||
|
if centering:
|
||||||
|
playerString = centerText(playerString)
|
||||||
|
checkString = centerText(checkString) #TODO: Doesn't center because of escape chars
|
||||||
|
menuString = centerBlockText(menuString)
|
||||||
|
inputString = centerBlockText(inputString)
|
||||||
|
|
||||||
|
print(playerString)
|
||||||
|
print(checkString)
|
||||||
|
print(menuString)
|
||||||
|
|
||||||
|
try:
|
||||||
|
key = input(inputString)[0]
|
||||||
|
except IndexError: # Input was empty
|
||||||
|
key = ''
|
||||||
|
|
||||||
|
if move := determineMove(key, x, y, (0, 7)):
|
||||||
|
x += move[0]
|
||||||
|
y += move[1]
|
||||||
|
elif key == 'q':
|
||||||
|
return False
|
||||||
|
elif key == 'e' and (x, y) in legalMoves:
|
||||||
|
return (x, y)
|
||||||
|
|
||||||
|
def getPieceAt(self, x, y) -> Union[Piece, None]:
|
||||||
|
"""Gets a piece at a certain position"""
|
||||||
|
try:
|
||||||
|
return self.boardArray[y][x]
|
||||||
|
except IndexError: # Outside board
|
||||||
|
return None
|
||||||
|
|
||||||
|
def getPositionsWhere(self, condition: Callable[[Piece], bool]) -> Iterable[tuple]:
|
||||||
|
"""Returns a list of xy pairs of the pieces where a condition is met """
|
||||||
|
|
||||||
|
result = []
|
||||||
|
for y, row in enumerate(self.boardArray):
|
||||||
|
for x, piece in enumerate(row):
|
||||||
|
try:
|
||||||
|
if condition(piece):
|
||||||
|
result.append((x, y))
|
||||||
|
except AttributeError: # Position is None
|
||||||
|
pass
|
||||||
|
return result
|
||||||
|
|
||||||
|
def checkCheck(self, color, simulation=False) -> bool:
|
||||||
|
"""Check whether a team is caught in check. The color is the color of the team to check"""
|
||||||
|
king = self.getPositionsWhere(lambda piece: piece.type == 'k' and piece.color == color)[0]
|
||||||
|
piecesToCheck = self.getPositionsWhere(lambda piece: piece.color != color)
|
||||||
|
# Resend simulation status into possibleMoves in order to avoid indefinite recursion
|
||||||
|
return any(
|
||||||
|
king in Piece.possibleMoves(*piece, self, simulation=simulation) for piece in piecesToCheck)
|
||||||
|
|
||||||
|
def getPositionsToProtectKing(self, color) -> Iterable[tuple]:
|
||||||
|
"""Get a list of the positions to protect in order to protect the king when in check. The color is the color of the team who's in check"""
|
||||||
|
king = self.getPositionsWhere(lambda piece: piece.type == 'k' and piece.color == color)[0]
|
||||||
|
piecesToCheck = self.getPositionsWhere(lambda piece: piece.color != color)
|
||||||
|
|
||||||
|
# Get all pieces that threaten the king
|
||||||
|
piecesToCheck = [piece for piece in piecesToCheck if king in Piece.possibleMoves(*piece, self)]
|
||||||
|
|
||||||
|
# Add only self if piece is pawn, knight or king
|
||||||
|
result = []
|
||||||
|
for piece in piecesToCheck:
|
||||||
|
result.append([piece])
|
||||||
|
if self.getPieceAt(*piece).type not in ['p', 'n', 'k']:
|
||||||
|
|
||||||
|
def getDirection(fromPosition, toPosition) -> tuple:
|
||||||
|
"""Get the direction as a tuple from the threatening piece to the king"""
|
||||||
|
x = -1 if toPosition[0] > fromPosition[0] else \
|
||||||
|
0 if toPosition[0] == fromPosition[0] else 1
|
||||||
|
y = -1 if toPosition[1] > fromPosition[1] else \
|
||||||
|
0 if toPosition[1] == fromPosition[1] else 1
|
||||||
|
return (x, y)
|
||||||
|
|
||||||
|
def getPositionsUntilKing(x, y, direction) -> Iterable[tuple]:
|
||||||
|
"""Return a list of every position until the king"""
|
||||||
|
result = []
|
||||||
|
x += direction[0]
|
||||||
|
y += direction[1]
|
||||||
|
while self.getPieceAt(x, y) == None:
|
||||||
|
result.append((x, y))
|
||||||
|
x += direction[0]
|
||||||
|
y += direction[1]
|
||||||
|
return result
|
||||||
|
|
||||||
|
direction = getDirection(piece, king)
|
||||||
|
result[-1] += getPositionsUntilKing(*king, direction)
|
||||||
|
|
||||||
|
def getCommonValues(lst: Iterable[Iterable[tuple]]):
|
||||||
|
"""Combine lists so that only tuples in all the lists of threatening pieces are valid"""
|
||||||
|
result = set(lst[0])
|
||||||
|
for sublst in lst[1:]:
|
||||||
|
result.intersection_update(sublst)
|
||||||
|
return result
|
||||||
|
|
||||||
|
return getCommonValues(result)
|
||||||
|
|
||||||
|
def playerHasLegalMoves(self, color) -> bool:
|
||||||
|
""" returns whether or not a player has any legal moves left"""
|
||||||
|
enemyPieces = self.getPositionsWhere(lambda piece: piece.color == color)
|
||||||
|
if self.checkCheck(color):
|
||||||
|
getLegalMoves = lambda piece: Piece.possibleMoves(
|
||||||
|
*piece, self, legalMoves=self.getPositionsToProtectKing(color))
|
||||||
|
else:
|
||||||
|
getLegalMoves = lambda piece: Piece.possibleMoves(*piece, self)
|
||||||
|
|
||||||
|
return any(getLegalMoves(piece) != [] for piece in enemyPieces)
|
||||||
|
|
||||||
|
def checkStaleMate(self, color) -> bool:
|
||||||
|
"""Check whether a team is caught in stalemate. The color is the color of the team to check"""
|
||||||
|
return (not self.checkCheck(color)) and not self.playerHasLegalMoves(color)
|
||||||
|
|
||||||
|
def checkCheckMate(self, color) -> bool:
|
||||||
|
"""Check whether a team is caught in checkmate. The color is the color of the team to check"""
|
||||||
|
return self.checkCheck(color) and not self.playerHasLegalMoves(color)
|
||||||
|
|
||||||
|
def movePiece(self, position, toPosition, piecesToRemove=[]):
|
||||||
|
""" Move a piece from position to toPosition. In case of extra pieces to be removes, add them to the list piecesToRemove"""
|
||||||
|
x, y = position
|
||||||
|
toX, toY = toPosition
|
||||||
|
self.boardArray[toY][toX] = self.boardArray[y][x]
|
||||||
|
self.boardArray[y][x] = None
|
||||||
|
|
||||||
|
for x, y in piecesToRemove:
|
||||||
|
self.boardArray[y][x] = None
|
|
@ -0,0 +1,96 @@
|
||||||
|
#!/bin/python3
|
||||||
|
|
||||||
|
from os import system
|
||||||
|
from dataclasses import dataclass
|
||||||
|
|
||||||
|
from board import Board
|
||||||
|
from piece import Piece
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Player:
|
||||||
|
name: str
|
||||||
|
color: str
|
||||||
|
|
||||||
|
|
||||||
|
class Chess:
|
||||||
|
|
||||||
|
def __init__(self, players):
|
||||||
|
self.players = players
|
||||||
|
self.board = Board()
|
||||||
|
|
||||||
|
def win(self, player):
|
||||||
|
if player.color == 'white':
|
||||||
|
print('''
|
||||||
|
░█░█░█░█░▀█▀░▀█▀░█▀▀░░░█░█░▀█▀░█▀█
|
||||||
|
░█▄█░█▀█░░█░░░█░░█▀▀░░░█▄█░░█░░█░█
|
||||||
|
░▀░▀░▀░▀░▀▀▀░░▀░░▀▀▀░░░▀░▀░▀▀▀░▀░▀
|
||||||
|
''')
|
||||||
|
else:
|
||||||
|
print('''
|
||||||
|
░█▀▄░█░░░█▀█░█▀▀░█░█░░░█░█░▀█▀░█▀█
|
||||||
|
░█▀▄░█░░░█▀█░█░░░█▀▄░░░█▄█░░█░░█░█
|
||||||
|
░▀▀░░▀▀▀░▀░▀░▀▀▀░▀░▀░░░▀░▀░▀▀▀░▀░▀
|
||||||
|
''')
|
||||||
|
input('Press any button to exit...')
|
||||||
|
exit(0)
|
||||||
|
|
||||||
|
def tie(self):
|
||||||
|
print('''
|
||||||
|
░█▀▀░▀█▀░█▀█░█░░░█▀▀░█▄█░█▀█░▀█▀░█▀▀
|
||||||
|
░▀▀█░░█░░█▀█░█░░░█▀▀░█░█░█▀█░░█░░█▀▀
|
||||||
|
░▀▀▀░░▀░░▀░▀░▀▀▀░▀▀▀░▀░▀░▀░▀░░▀░░▀▀▀
|
||||||
|
''')
|
||||||
|
input('Press any button to exit...')
|
||||||
|
exit(0)
|
||||||
|
|
||||||
|
def promoteIfPossible(self, player, position):
|
||||||
|
promoteY = 0 if player.color == 'white' else 7
|
||||||
|
if (piece := self.board.getPieceAt(*position)).type == 'p' and position[1] == promoteY:
|
||||||
|
while True:
|
||||||
|
answer = input('What would you like your pawn to become? (q,b,r or n) ')
|
||||||
|
if answer in 'qbrn' and len(answer) == 1:
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
print('\nCouldn\'t parse input. Try again')
|
||||||
|
|
||||||
|
piece.type = answer
|
||||||
|
|
||||||
|
|
||||||
|
def makeMove(self, player):
|
||||||
|
# Get the first piece belonging to the player
|
||||||
|
currentPlayersPiece = lambda piece: piece.color == player.color
|
||||||
|
chosenTile = self.board.getPositionsWhere(currentPlayersPiece)[0]
|
||||||
|
while True:
|
||||||
|
piece = self.board.selectPiece(player, *chosenTile)
|
||||||
|
chosenTile = piece
|
||||||
|
possibleMoves = Piece.possibleMoves(*piece, self.board)
|
||||||
|
if move := self.board.selectMove(player, *piece, possibleMoves):
|
||||||
|
break
|
||||||
|
self.board.movePiece(piece, move)
|
||||||
|
self.promoteIfPossible(player, move)
|
||||||
|
|
||||||
|
def turn(self, playerNum):
|
||||||
|
system('clear')
|
||||||
|
self.makeMove(players[playerNum])
|
||||||
|
# 1 - 1 = 0 and 1 - 0 = 1
|
||||||
|
if self.board.checkCheckMate(players[1 - playerNum].color):
|
||||||
|
self.win(players[playerNum])
|
||||||
|
elif self.board.checkStaleMate(players[1 - playerNum].color):
|
||||||
|
self.tie()
|
||||||
|
|
||||||
|
def loop(self):
|
||||||
|
while True:
|
||||||
|
self.turn(0)
|
||||||
|
self.turn(1)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
|
||||||
|
players = (
|
||||||
|
Player('Spiller 1', 'white'),
|
||||||
|
Player('Spiller 2', 'black'),
|
||||||
|
)
|
||||||
|
|
||||||
|
game = Chess(('Spiller 1', 'Spiller 2'))
|
||||||
|
game.loop()
|
|
@ -0,0 +1,140 @@
|
||||||
|
from typing import Iterable, Callable
|
||||||
|
from itertools import product
|
||||||
|
from copy import deepcopy
|
||||||
|
|
||||||
|
|
||||||
|
class Piece:
|
||||||
|
|
||||||
|
def __init__(self, type, color):
|
||||||
|
self.type = type
|
||||||
|
self.color = color
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return self.type.upper() if self.color == 'white' else self.type
|
||||||
|
|
||||||
|
# Unused code. I'm missing the font for my terminal, but go ahead and use piece.symbol instead of str(symbol) in board.draw if you'd like
|
||||||
|
@property
|
||||||
|
def symbol(self):
|
||||||
|
symbols = [{
|
||||||
|
'p': '♙',
|
||||||
|
'r': '♖',
|
||||||
|
'n': '♘',
|
||||||
|
'b': '♗',
|
||||||
|
'q': '♕',
|
||||||
|
'k': '♔',
|
||||||
|
}, {
|
||||||
|
'p': '♟︎',
|
||||||
|
'r': '♜',
|
||||||
|
'n': '♞',
|
||||||
|
'b': '♝',
|
||||||
|
'q': '♛',
|
||||||
|
'k': '♚',
|
||||||
|
}]
|
||||||
|
return symbols[0 if self.color == 'white' else 1][self.type]
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def possibleMoves(
|
||||||
|
x,
|
||||||
|
y,
|
||||||
|
board,
|
||||||
|
legalMoves=None,
|
||||||
|
simulation=False,
|
||||||
|
) -> Callable[[int, int], Iterable[tuple]]:
|
||||||
|
"""
|
||||||
|
Calculate all possible moves for a piece at (x, y) given a board in a certain state.
|
||||||
|
|
||||||
|
If there is restrictions for where the piece can go, the legal moves can be set to these.
|
||||||
|
If the function is part of a simulation, simulation needs to be set to True so that it doesn't keep on recursing simulation indefinetely.
|
||||||
|
"""
|
||||||
|
|
||||||
|
piece = board.getPieceAt(x, y)
|
||||||
|
moves = []
|
||||||
|
|
||||||
|
pieceIsEnemyColor = lambda pieceToCheck: pieceToCheck != None and pieceToCheck.color != piece.color
|
||||||
|
pieceIsEmpty = lambda pieceToCheck: pieceToCheck == None
|
||||||
|
pieceIsEmptyOrEnemyColor = lambda pieceToCheck: pieceToCheck == None or pieceToCheck.color != piece.color
|
||||||
|
positionInsideBounds = lambda x, y: x in range(8) and y in range(8)
|
||||||
|
|
||||||
|
def addMoveIfTrue(xOffset, yOffset, condition: Callable[[Piece], bool]) -> bool:
|
||||||
|
"""Tests a condition against a position away from self. Adds move if condition returns true. Returns condition result"""
|
||||||
|
if condition(board.getPieceAt(x + xOffset, y + yOffset)):
|
||||||
|
moves.append((x + xOffset, y + yOffset))
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
def assertNotCheck(newX, newY) -> bool:
|
||||||
|
"""Simulate a move and return whether or not the move will result in check"""
|
||||||
|
testBoard = deepcopy(board)
|
||||||
|
testBoard.movePiece((x, y), (newX, newY))
|
||||||
|
return not testBoard.checkCheck(piece.color, simulation=True)
|
||||||
|
|
||||||
|
def addWhileInsideBoard(direction: tuple):
|
||||||
|
"""Adds moves in direction until it either hits a piece or the edge"""
|
||||||
|
localX, localY = x, y
|
||||||
|
while positionInsideBounds(localX, localY):
|
||||||
|
localX += direction[0]
|
||||||
|
localY += direction[1]
|
||||||
|
currentPiece = board.getPieceAt(localX, localY)
|
||||||
|
if pieceIsEmpty(currentPiece):
|
||||||
|
moves.append((localX, localY))
|
||||||
|
else:
|
||||||
|
if pieceIsEnemyColor(currentPiece):
|
||||||
|
moves.append((localX, localY))
|
||||||
|
return
|
||||||
|
|
||||||
|
if piece.type == 'p':
|
||||||
|
localY = 1 if piece.color == 'black' else -1
|
||||||
|
startPosition = 1 if piece.color == 'black' else 6
|
||||||
|
pieceAtStartPosition = lambda pieceToCheck: pieceToCheck == None and y == startPosition
|
||||||
|
|
||||||
|
addMoveIfTrue(1, localY, pieceIsEnemyColor)
|
||||||
|
addMoveIfTrue(-1, localY, pieceIsEnemyColor)
|
||||||
|
if addMoveIfTrue(0, localY, pieceIsEmpty):
|
||||||
|
addMoveIfTrue(0, localY * 2, pieceAtStartPosition)
|
||||||
|
|
||||||
|
elif piece.type == 'n':
|
||||||
|
positions = [
|
||||||
|
(-2, -1),
|
||||||
|
(-2, 1),
|
||||||
|
(-1, -2),
|
||||||
|
(-1, 2),
|
||||||
|
(1, -2),
|
||||||
|
(1, 2),
|
||||||
|
(2, -1),
|
||||||
|
(2, 1),
|
||||||
|
]
|
||||||
|
for position in positions:
|
||||||
|
addMoveIfTrue(*position, pieceIsEmptyOrEnemyColor)
|
||||||
|
|
||||||
|
elif piece.type == 'k':
|
||||||
|
positions = list(product([-1, 0, 1], repeat=2))
|
||||||
|
positions.remove((0, 0))
|
||||||
|
for position in positions:
|
||||||
|
addMoveIfTrue(*position, pieceIsEmptyOrEnemyColor)
|
||||||
|
|
||||||
|
elif piece.type == 'r':
|
||||||
|
for direction in [(1, 0), (-1, 0), (0, 1), (0, -1)]:
|
||||||
|
addWhileInsideBoard(direction)
|
||||||
|
|
||||||
|
elif piece.type == 'b':
|
||||||
|
for direction in product([-1, 1], repeat=2):
|
||||||
|
addWhileInsideBoard(direction)
|
||||||
|
|
||||||
|
elif piece.type == 'q':
|
||||||
|
directions = list(product([-1, 0, 1], repeat=2))
|
||||||
|
directions.remove((0, 0))
|
||||||
|
for direction in directions:
|
||||||
|
addWhileInsideBoard(direction)
|
||||||
|
|
||||||
|
# Remove moves that will lead the piece out of the board
|
||||||
|
moves = [move for move in moves if positionInsideBounds(*move)]
|
||||||
|
|
||||||
|
# Remove moves that is not included in the legal moves (moves to block check)
|
||||||
|
if legalMoves != None and piece.type != 'k':
|
||||||
|
moves = [move for move in moves if move in legalMoves]
|
||||||
|
|
||||||
|
# Remove moves that will put the king in check
|
||||||
|
if not simulation:
|
||||||
|
moves = [position for position in moves if assertNotCheck(*position)]
|
||||||
|
|
||||||
|
return moves
|
|
@ -0,0 +1,15 @@
|
||||||
|
def f(tol):
|
||||||
|
g = lambda k: 1 + 1/k**2
|
||||||
|
iterationCount = 2
|
||||||
|
result = 2
|
||||||
|
|
||||||
|
while True:
|
||||||
|
prevResult = result
|
||||||
|
result *= g(iterationCount)
|
||||||
|
if result - prevResult < tol:
|
||||||
|
return (result, iterationCount)
|
||||||
|
iterationCount += 1
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
result, iterationCount = f(0.01)
|
||||||
|
print(f'Produktet ble {"{:.2f}".format(result)} etter {iterationCount} iterasjoner.')
|
|
@ -0,0 +1,14 @@
|
||||||
|
def f(tol, count=0):
|
||||||
|
g = lambda x: 1 + 1/x**2
|
||||||
|
product = g(count+1)
|
||||||
|
|
||||||
|
# Base case
|
||||||
|
if product < 1 + tol:
|
||||||
|
return (product, count)
|
||||||
|
|
||||||
|
newProd, newCount = f(tol, count + 1)
|
||||||
|
return (product * newProd, newCount) # Nest in the last count value without modification
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
result, recursionCount = f(0.01)
|
||||||
|
print(f'Rekursjonsdybden er {recursionCount}\nProduktet ble {"{:.2f}".format(result)}')
|
|
@ -0,0 +1,9 @@
|
||||||
|
from local import is_leap_year
|
||||||
|
|
||||||
|
def weekday_newyear(year):
|
||||||
|
daySum = sum([366 if is_leap_year(year) else 365 for year in range(year)])
|
||||||
|
return (daySum - 2) % 7
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
days = ['man', 'tir', 'ons', 'tor', 'fre', 'lor', 'son']
|
||||||
|
_ = [ print(f'{year} {days[weekday_newyear(year)]}') for year in range(1900, 1920) ]
|
|
@ -0,0 +1,2 @@
|
||||||
|
def is_workday(day):
|
||||||
|
return day < 5
|
|
@ -0,0 +1,15 @@
|
||||||
|
from itertools import islice, cycle
|
||||||
|
|
||||||
|
from local import is_leap_year
|
||||||
|
from a import weekday_newyear
|
||||||
|
from b import is_workday
|
||||||
|
|
||||||
|
def workdays_in_year(year):
|
||||||
|
firstDay = weekday_newyear(year)
|
||||||
|
cycler = islice( cycle(range(7)), firstDay, None)
|
||||||
|
days = [next(cycler) for day in range((366 if is_leap_year(year) else 365))]
|
||||||
|
workdays = [day for day in days if day < 5]
|
||||||
|
return len(workdays)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
_ = [print(f'{year} har {workdays_in_year(year)} arbeidsdager') for year in range(1900, 1920)]
|
|
@ -0,0 +1,8 @@
|
||||||
|
def is_leap_year ( year ):
|
||||||
|
if year % 400 == 0:
|
||||||
|
return True
|
||||||
|
elif year % 100 == 0:
|
||||||
|
return False
|
||||||
|
elif year % 4 == 0:
|
||||||
|
return True
|
||||||
|
return False
|
|
@ -1,4 +1,4 @@
|
||||||
# from common.inputChecking.choiceInput import choiceInput
|
from common.inputChecking.boolInput import boolInput
|
||||||
|
|
||||||
from os import get_terminal_size, system
|
from os import get_terminal_size, system
|
||||||
from math import ceil
|
from math import ceil
|
||||||
|
@ -37,12 +37,23 @@ class Card:
|
||||||
│ {' ' if self.id != 10 else ''}{self.num}│
|
│ {' ' if self.id != 10 else ''}{self.num}│
|
||||||
└─────────┘"""
|
└─────────┘"""
|
||||||
|
|
||||||
def emptyCard():
|
def value(self, aceValue):
|
||||||
result = Card(1,'spade')
|
cardValues = {
|
||||||
result.num = '?'
|
'A': aceValue,
|
||||||
result.sym = '?'
|
'2': 2,
|
||||||
return result
|
'3': 3,
|
||||||
|
'4': 4,
|
||||||
|
'5': 5,
|
||||||
|
'6': 6,
|
||||||
|
'7': 7,
|
||||||
|
'8': 8,
|
||||||
|
'9': 9,
|
||||||
|
'10': 10,
|
||||||
|
'J': 10,
|
||||||
|
'Q': 10,
|
||||||
|
'K': 10
|
||||||
|
}
|
||||||
|
return cardValues[self.num]
|
||||||
|
|
||||||
class CardHandler:
|
class CardHandler:
|
||||||
def __init__(self, cards, printSep=5, aceValue = 1):
|
def __init__(self, cards, printSep=5, aceValue = 1):
|
||||||
|
@ -53,6 +64,11 @@ class CardHandler:
|
||||||
def addCard(self, card):
|
def addCard(self, card):
|
||||||
self.cards.append(card)
|
self.cards.append(card)
|
||||||
|
|
||||||
|
def generateNewCard(self):
|
||||||
|
cardTypes = range(1,14)
|
||||||
|
cardColors = ['spade', 'heart', 'diamond', 'club']
|
||||||
|
self.addCard(Card(random.choice(cardTypes), random.choice(cardColors)))
|
||||||
|
|
||||||
def _concatenateCards(self, cards):
|
def _concatenateCards(self, cards):
|
||||||
"""
|
"""
|
||||||
Concatenate several card objects into an list of sublists
|
Concatenate several card objects into an list of sublists
|
||||||
|
@ -71,7 +87,7 @@ class CardHandler:
|
||||||
|
|
||||||
def printCards(self, cardsPerLine):
|
def printCards(self, cardsPerLine):
|
||||||
"""
|
"""
|
||||||
Print cardsPerLine cards per line, horizontally aligned
|
Print <cardsPerLine> cards per line, horizontally aligned
|
||||||
"""
|
"""
|
||||||
|
|
||||||
splitCards =[[] for _ in range(ceil(len(self.cards)/cardsPerLine))]
|
splitCards =[[] for _ in range(ceil(len(self.cards)/cardsPerLine))]
|
||||||
|
@ -100,61 +116,24 @@ class CardHandler:
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def cardSum(self):
|
def cardSum(self):
|
||||||
values = {
|
|
||||||
'A': self.aceValue,
|
|
||||||
'2': 2,
|
|
||||||
'3': 3,
|
|
||||||
'4': 4,
|
|
||||||
'5': 5,
|
|
||||||
'6': 6,
|
|
||||||
'7': 7,
|
|
||||||
'8': 8,
|
|
||||||
'9': 9,
|
|
||||||
'10': 10,
|
|
||||||
'J': 10,
|
|
||||||
'Q': 10,
|
|
||||||
'K': 10
|
|
||||||
}
|
|
||||||
return sum([values[card.num] for card in self.cards])
|
|
||||||
|
|
||||||
def animator(self):
|
return sum([card.value(aceValue=self.aceValue) for card in self.cards])
|
||||||
while True:
|
|
||||||
frame = 1
|
|
||||||
yield frame
|
|
||||||
|
|
||||||
#
|
@property
|
||||||
# ┌─────────┐
|
def containsAce(self):
|
||||||
# │? │
|
return any([True for card in self.cards if card.id == 1])
|
||||||
# │ │
|
|
||||||
# │ │
|
@property
|
||||||
# │ ? │
|
def containsBlackJack(self):
|
||||||
# │ │
|
return any([True for card in self.cards if card.num == 'A']) \
|
||||||
# │ │
|
and any([True for card in self.cards if card.value(self.aceValue) == 10])
|
||||||
# │ ?│
|
|
||||||
# └─────────┘
|
|
||||||
#
|
def emptyCard():
|
||||||
#
|
result = Card(1,'spade')
|
||||||
# ┌────────┐
|
result.num = '?'
|
||||||
# │? │
|
result.sym = '?'
|
||||||
# │ │
|
return result
|
||||||
# │ │
|
|
||||||
# │ ? │
|
|
||||||
# │ │
|
|
||||||
# │ │
|
|
||||||
# │ ?│
|
|
||||||
# └────────┘
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# ┌───────┐
|
|
||||||
# │? │
|
|
||||||
# │ │
|
|
||||||
# │ │
|
|
||||||
# │ ? │
|
|
||||||
# │ │
|
|
||||||
# │ │
|
|
||||||
# │ ?│
|
|
||||||
# └───────┘
|
|
||||||
#
|
|
||||||
|
|
||||||
|
|
||||||
class Blackjack:
|
class Blackjack:
|
||||||
|
@ -162,31 +141,98 @@ class Blackjack:
|
||||||
self.handler = CardHandler([])
|
self.handler = CardHandler([])
|
||||||
self.emptyHandler = CardHandler([emptyCard(), emptyCard()])
|
self.emptyHandler = CardHandler([emptyCard(), emptyCard()])
|
||||||
self.dealerHandler = CardHandler([])
|
self.dealerHandler = CardHandler([])
|
||||||
|
self.gameResults = [0,0]
|
||||||
self.reset()
|
self.reset()
|
||||||
|
|
||||||
def generateNewCard(self):
|
|
||||||
cardTypes = range(1,14)
|
|
||||||
cardColors = ['spade', 'heart', 'diamond', 'club']
|
|
||||||
return Card(random.choice(cardTypes), random.choice(cardColors))
|
|
||||||
|
|
||||||
def generateNewCards(self):
|
def generateNewCards(self):
|
||||||
self.dealerHandler.cards = [ self.generateNewCard() for _ in range(2) ]
|
self.dealerHandler.cards = []
|
||||||
self.handler.cards = [ self.generateNewCard() for _ in range(2) ]
|
self.handler.cards = []
|
||||||
|
for _ in range(2):
|
||||||
|
self.dealerHandler.generateNewCard()
|
||||||
|
self.handler.generateNewCard()
|
||||||
|
self.emptyHandler.cards[0] = self.dealerHandler.cards[0]
|
||||||
|
|
||||||
def determineAceValue(self):
|
def determineAceValue(self):
|
||||||
if self.dealerHandler.cardSum <= 9:
|
if self.handler.cardSum < 11 and self.handler.containsAce: # 11 + 1 = 12, 11 + 11 = 22
|
||||||
self.handler.aceValue = 13
|
self.handler.aceValue = self.dealerHandler.aceValue = 11
|
||||||
|
else:
|
||||||
|
self.handler.aceValue = self.dealerHandler.aceValue = 1
|
||||||
|
|
||||||
def reset(self):
|
def reset(self):
|
||||||
self.generateNewCards()
|
self.generateNewCards()
|
||||||
self.determineAceValue()
|
self.determineAceValue()
|
||||||
|
|
||||||
def printCards(self):
|
def youWin(self):
|
||||||
|
self.gameResults[0] += 1
|
||||||
|
print("""
|
||||||
|
__ __
|
||||||
|
/\ \ /\ \ __
|
||||||
|
\ `\`\\\\/'/ ___ __ __ __ __ __/\_\ ___
|
||||||
|
`\ `\ /' / __`\/\ \/\ \ /\ \/\ \/\ \/\ \ /' _ `\
|
||||||
|
`\ \ \/\ \L\ \ \ \_\ \\ \\ \ \_/ \_/ \ \ \/\ \/\ \
|
||||||
|
\ \_\ \____/\ \____/ \ \___x___/'\ \_\ \_\ \_\\
|
||||||
|
\/_/\/___/ \/___/ \/__//__/ \/_/\/_/\/_/
|
||||||
|
""")
|
||||||
|
|
||||||
|
def youLose(self):
|
||||||
|
self.gameResults[1] += 1
|
||||||
|
print("""
|
||||||
|
__ __ ___
|
||||||
|
/\ \ /\ \ /\_ \
|
||||||
|
\ `\`\\\\/'/ ___ __ __ \//\ \ ___ ____ __
|
||||||
|
`\ `\ /' / __`\/\ \/\ \ \ \ \ / __`\ /',__\ /'__`\
|
||||||
|
`\ \ \/\ \L\ \ \ \_\ \ \_\ \_/\ \L\ \/\__, `\/\ __/
|
||||||
|
\ \_\ \____/\ \____/ /\____\ \____/\/\____/\ \____\\
|
||||||
|
\/_/\/___/ \/___/ \/____/\/___/ \/___/ \/____/
|
||||||
|
""")
|
||||||
|
|
||||||
|
def gameOver(self, gameWon):
|
||||||
|
system('clear')
|
||||||
|
|
||||||
|
print('\nDEALERS CARDS\n')
|
||||||
|
self.dealerHandler.safePrintCards()
|
||||||
|
print('\nYOUR CARDS\n')
|
||||||
self.handler.safePrintCards()
|
self.handler.safePrintCards()
|
||||||
|
print()
|
||||||
|
print('Ace value is', self.handler.aceValue)
|
||||||
|
|
||||||
|
if gameWon:
|
||||||
|
self.youWin()
|
||||||
|
else:
|
||||||
|
self.youLose()
|
||||||
|
print()
|
||||||
|
|
||||||
|
print(f'Wins: {self.gameResults[0]} Losses: {self.gameResults[1]}')
|
||||||
|
if boolInput(
|
||||||
|
'Do you want to play again? [y/n]: ',
|
||||||
|
yesNoLetters=['y','n'],
|
||||||
|
error=''
|
||||||
|
):
|
||||||
|
self.reset()
|
||||||
|
else:
|
||||||
|
exit(0)
|
||||||
|
|
||||||
|
def checkIfLost(self):
|
||||||
|
|
||||||
|
winningConditions = [
|
||||||
|
self.handler.containsBlackJack and not self.dealerHandler.containsBlackJack,
|
||||||
|
self.dealerHandler.cardSum > 21
|
||||||
|
]
|
||||||
|
|
||||||
|
losingConditions = [
|
||||||
|
self.handler.cardSum > 21
|
||||||
|
]
|
||||||
|
|
||||||
|
if any(losingConditions):
|
||||||
|
self.gameOver(gameWon=False)
|
||||||
|
return True
|
||||||
|
elif any(winningConditions):
|
||||||
|
self.gameOver(gameWon=True)
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
def update(self):
|
def update(self):
|
||||||
|
|
||||||
system('clear')
|
system('clear')
|
||||||
|
|
||||||
print('\nDEALERS CARDS\n')
|
print('\nDEALERS CARDS\n')
|
||||||
|
@ -194,9 +240,15 @@ class Blackjack:
|
||||||
print('\nYOUR CARDS\n')
|
print('\nYOUR CARDS\n')
|
||||||
self.handler.safePrintCards()
|
self.handler.safePrintCards()
|
||||||
print()
|
print()
|
||||||
|
print('Ace value is', self.handler.aceValue)
|
||||||
|
print()
|
||||||
|
|
||||||
input('Continue?')
|
if not self.checkIfLost():
|
||||||
self.handler.addCard(self.generateNewCard())
|
if not boolInput('Continue? [y/n]: ', yesNoLetters=('y','n')):
|
||||||
|
gameWon = self.dealerHandler.cardSum < self.handler.cardSum
|
||||||
|
self.gameOver(gameWon=gameWon)
|
||||||
|
return
|
||||||
|
self.handler.generateNewCard()
|
||||||
|
|
||||||
def loop(self):
|
def loop(self):
|
||||||
while True:
|
while True:
|
|
@ -0,0 +1,131 @@
|
||||||
|
from common.inputChecking.typeCheck import validateInput as validateTypeInput
|
||||||
|
from common.inputChecking.boolInput import validateInput as validateBoolInput
|
||||||
|
|
||||||
|
from json import dumps as serialize
|
||||||
|
from json import loads as unserialize
|
||||||
|
from os.path import isfile
|
||||||
|
|
||||||
|
class ExitError(Exception):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def boolInput(question, yesNoLetters=('j','n'), exitKeyword='hade'):
|
||||||
|
yesLetters = [yesNoLetters[0], yesNoLetters[0].capitalize()]
|
||||||
|
while True:
|
||||||
|
answer = input(question)
|
||||||
|
if answer == exitKeyword:
|
||||||
|
raise ExitError
|
||||||
|
if validateBoolInput(answer, yesNoLetters):
|
||||||
|
return answer in yesLetters
|
||||||
|
|
||||||
|
def inputTypeCheck(question, type, exitKeyword='hade'):
|
||||||
|
while True:
|
||||||
|
userInput = input(question)
|
||||||
|
if userInput == exitKeyword:
|
||||||
|
raise ExitError
|
||||||
|
if validateTypeInput(userInput, type):
|
||||||
|
return userInput
|
||||||
|
|
||||||
|
class DataSchema:
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
genderIsMale = None,
|
||||||
|
age = None,
|
||||||
|
hasMultipleSubjects = None,
|
||||||
|
hasITGK = None,
|
||||||
|
avgStudyTime = None
|
||||||
|
):
|
||||||
|
self.genderIsMale = genderIsMale
|
||||||
|
self.age = age
|
||||||
|
self.hasMultipleSubjects = hasMultipleSubjects
|
||||||
|
self.hasITGK = hasITGK
|
||||||
|
self.avgStudyTime = avgStudyTime
|
||||||
|
|
||||||
|
|
||||||
|
class Survey:
|
||||||
|
def __init__(self, savePath='./results.json', resultsPath=''):
|
||||||
|
self.savePath = savePath
|
||||||
|
if resultsPath != '':
|
||||||
|
self.resultsPath = resultsPath
|
||||||
|
self.loadResults()
|
||||||
|
|
||||||
|
results = []
|
||||||
|
|
||||||
|
def loadResults(self):
|
||||||
|
try:
|
||||||
|
file = open(self.resultsPath, 'r')
|
||||||
|
dicts = unserialize(file.read())
|
||||||
|
self.results = [DataSchema(**dict) for dict in dicts]
|
||||||
|
except FileNotFoundError:
|
||||||
|
print('Fant ikke undersøkelsesdata ved', self.resultsPath)
|
||||||
|
except Exception as e:
|
||||||
|
print('Noe gikk galt under lasting av undersøkelsesdata')
|
||||||
|
print(e)
|
||||||
|
|
||||||
|
def printStats(self):
|
||||||
|
print('Resultat av undersøkelse!')
|
||||||
|
men = women = multipleChoice = itgk = studyHours = 0
|
||||||
|
for result in self.results:
|
||||||
|
if result.genderIsMale:
|
||||||
|
men += 1
|
||||||
|
else:
|
||||||
|
women += 1
|
||||||
|
multipleChoice += 1 if result.hasMultipleSubjects else 0
|
||||||
|
itgk += 1 if result.hasITGK else 0
|
||||||
|
studyHours += int(result.avgStudyTime)
|
||||||
|
print("Antall kvinner:", women)
|
||||||
|
print("Antall menn:", men)
|
||||||
|
print("Antall personer som tar fag:", multipleChoice)
|
||||||
|
print("Antall personer som tar ITGK:", itgk)
|
||||||
|
print("Antall timer i snitt brukt på lekser:", studyHours/len(self.results))
|
||||||
|
|
||||||
|
def saveResults(self):
|
||||||
|
serializedResults = serialize([result.__dict__ for result in self.results])
|
||||||
|
|
||||||
|
# Check whether file exists
|
||||||
|
try:
|
||||||
|
assert not isfile(self.savePath)
|
||||||
|
except:
|
||||||
|
if not boolInput(f'Det eksisterer allerede en fil ved {self.savePath}\nVil du overskrive filen? [j/n]: '):
|
||||||
|
return
|
||||||
|
|
||||||
|
# Try to write data to file.
|
||||||
|
try:
|
||||||
|
file = open(self.savePath, "w")
|
||||||
|
file.write(serializedResults)
|
||||||
|
file.close()
|
||||||
|
except:
|
||||||
|
if boolInput('Noe gikk galt under lagring av data. Vil du prøve igjen? [j/n]: '):
|
||||||
|
self.saveResults()
|
||||||
|
|
||||||
|
def end(self):
|
||||||
|
if len(self.results) > 0:
|
||||||
|
self.printStats()
|
||||||
|
self.saveResults()
|
||||||
|
exit(0)
|
||||||
|
|
||||||
|
def update(self):
|
||||||
|
schema = DataSchema()
|
||||||
|
|
||||||
|
print('Velkommen til spørreundersøkelsen!\n')
|
||||||
|
|
||||||
|
try:
|
||||||
|
schema.genderIsMale = boolInput('Hvilket kjønn er du? [f/m]: ', yesNoLetters=('m','f'))
|
||||||
|
schema.age = inputTypeCheck('Hvor gammel er du?: ', int)
|
||||||
|
schema.hasMultipleSubjects = boolInput('Tar du et eller flere fag? [j/n]: ')
|
||||||
|
|
||||||
|
hasITGKQuestion = 'Tar du ITGK? [j/n]: ' if int(schema.age) < 22 else 'Tar du virkelig ITGK? [j/n]: '
|
||||||
|
schema.hasITGK = boolInput(hasITGKQuestion)
|
||||||
|
schema.avgStudyTime = inputTypeCheck('Hvor mange timer bruker du daglig (i snitt) på lekser?: ', float)
|
||||||
|
self.results.append(schema)
|
||||||
|
except ExitError:
|
||||||
|
self.end()
|
||||||
|
print()
|
||||||
|
|
||||||
|
def loop(self):
|
||||||
|
while True:
|
||||||
|
self.update()
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
survey = Survey(resultsPath='./results.json')
|
||||||
|
survey.loop()
|
|
@ -0,0 +1,32 @@
|
||||||
|
from random import randint
|
||||||
|
|
||||||
|
def random_matrise(x, y):
|
||||||
|
return [[randint(0, 9) for _ in range(x)] for _ in range(y)]
|
||||||
|
|
||||||
|
def print_matrise(matrix, title):
|
||||||
|
print(f'{title}=[')
|
||||||
|
for row in matrix:
|
||||||
|
print('\t', row)
|
||||||
|
print(']')
|
||||||
|
|
||||||
|
def matrise_addisjon(A, B):
|
||||||
|
try:
|
||||||
|
assert len(A) == len(B) and len(A[0]) == len(B[0])
|
||||||
|
newMatrix = [[A[x][y] + B[x][y] for y in range(len(A[0]))] for x in range(len(A))]
|
||||||
|
return newMatrix
|
||||||
|
except:
|
||||||
|
print('Matrisene er ikke av samme dimensjon')
|
||||||
|
|
||||||
|
def main():
|
||||||
|
A = random_matrise(4,3)
|
||||||
|
print_matrise(A, 'A')
|
||||||
|
B = random_matrise(3,4)
|
||||||
|
print_matrise(B, 'B')
|
||||||
|
C = random_matrise(3,4)
|
||||||
|
print_matrise(C, 'C')
|
||||||
|
D = matrise_addisjon(A,B)
|
||||||
|
E = matrise_addisjon(B,C)
|
||||||
|
print_matrise(E, 'B+C' )
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
|
@ -0,0 +1,11 @@
|
||||||
|
def separate(numbers, threshold):
|
||||||
|
return(
|
||||||
|
[num for num in numbers if num < threshold],
|
||||||
|
[num for num in numbers if num >= threshold],
|
||||||
|
)
|
||||||
|
|
||||||
|
def multiplication_table(n):
|
||||||
|
return [[(x+1)*(y+1) for x in range(n)] for y in range(n)]
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
print(multiplication_table(4))
|
|
@ -0,0 +1,60 @@
|
||||||
|
from random import sample
|
||||||
|
import threading
|
||||||
|
|
||||||
|
|
||||||
|
def guessInput(amount):
|
||||||
|
while True:
|
||||||
|
try:
|
||||||
|
answer = input(f'Gjett {amount} tall\n').split(' ')
|
||||||
|
assert len(answer) == amount
|
||||||
|
return [int(num) for num in answer]
|
||||||
|
except:
|
||||||
|
print(f'Er du sikker på at du har skrevet inn {amount} tall? Prøv igjen.')
|
||||||
|
|
||||||
|
drawNumber = lambda numList, amount: sample(numList, amount)
|
||||||
|
compList = lambda list1, list2: len([1 for elem in list1 if elem in list2])
|
||||||
|
|
||||||
|
def Winnings(rightNums, rightExtraNums):
|
||||||
|
isBiggerThan = lambda rn, ren: rightNums >= rn and rightExtraNums >= ren
|
||||||
|
if isBiggerThan(7,0): return 2749455
|
||||||
|
elif isBiggerThan(6,1): return 102110
|
||||||
|
elif isBiggerThan(6,0): return 3385
|
||||||
|
elif isBiggerThan(5,0): return 95
|
||||||
|
elif isBiggerThan(4,1): return 45
|
||||||
|
else: return 0
|
||||||
|
|
||||||
|
numbers = list(range(1,35))
|
||||||
|
calculateRightNumbers = lambda list: compList(list, drawNumber(numbers, len(list)))
|
||||||
|
combinedRightNumbers = lambda list1, list2: Winnings(calculateRightNumbers(list1), calculateRightNumbers(list2))
|
||||||
|
|
||||||
|
def main():
|
||||||
|
myGuess = guessInput(7)
|
||||||
|
print('Nå skal du gjette ekstra-tall')
|
||||||
|
myExtraGuess = guessInput(3)
|
||||||
|
|
||||||
|
print('Du vant {} kroner'.format(combinedRightNumbers(myGuess, myExtraGuess) - 5))
|
||||||
|
|
||||||
|
# g)
|
||||||
|
|
||||||
|
def calculateMillionSum(threadNum):
|
||||||
|
timesPerTread = int(1000000/threadNum)
|
||||||
|
results = []
|
||||||
|
|
||||||
|
def threadTarget():
|
||||||
|
partialSum = sum([combinedRightNumbers(sample(numbers, 7), sample(numbers, 3)) - 5 for _ in range(timesPerTread)])
|
||||||
|
results.append(partialSum)
|
||||||
|
|
||||||
|
threads = [threading.Thread(target=threadTarget) for _ in range(threadNum)]
|
||||||
|
|
||||||
|
for thread in threads:
|
||||||
|
thread.start()
|
||||||
|
for thread in threads:
|
||||||
|
thread.join()
|
||||||
|
|
||||||
|
return sum(results)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
# main()
|
||||||
|
result = calculateMillionSum(64)
|
||||||
|
print(result)
|
|
@ -0,0 +1,18 @@
|
||||||
|
def tooth(g):
|
||||||
|
result = []
|
||||||
|
coins = [20, 10, 5, 1]
|
||||||
|
|
||||||
|
def findCoinAmount(gramsLeft, coinIndex):
|
||||||
|
result.append(gramsLeft//coins[coinIndex])
|
||||||
|
if coinIndex != len(coins) - 1:
|
||||||
|
findCoinAmount(gramsLeft%coins[coinIndex], coinIndex+1)
|
||||||
|
|
||||||
|
findCoinAmount(g, 0)
|
||||||
|
|
||||||
|
return result
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
teeth = [95,103,71,99,114,64,95,53,97,114,109,11,2,21,45,2,26,81,54,14,118,108,117,27,115,43,70,58,107]
|
||||||
|
prettyPrint = lambda tooth: print(f'20: {tooth[0]}, 10: {tooth[1]}, 5: {tooth[2]}, 1: {tooth[3]}')
|
||||||
|
for grams in teeth:
|
||||||
|
prettyPrint(tooth(grams))
|
|
@ -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())
|
|
@ -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"))
|
|
@ -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))
|
|
@ -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()
|
|
@ -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,0 +1,51 @@
|
||||||
|
from random import randrange
|
||||||
|
|
||||||
|
songs = [("You hear the door slam. And realize there's nowhere left to", "run"),
|
||||||
|
("Oh, I wanna dance with somebody. I wanna feel the", "heat"),
|
||||||
|
("There's a fire starting in my heart. Reaching a fever", "pitch"),
|
||||||
|
("Hey, I just met you and this is crazy. But here's my", "number"),
|
||||||
|
("'Cause baby, you're a firework. Come on, show 'em what you're", "worth")]
|
||||||
|
|
||||||
|
# Om jeg tar inn songs som parameter vil ikke pop_random_songs kunne fjerne noe fra lista.
|
||||||
|
# Her velger jeg aktivt å ikke ta et argument inn med tanke på oppgave B
|
||||||
|
def pop_random_songs():
|
||||||
|
songIndex = randrange(len(songs))
|
||||||
|
song = songs[songIndex]
|
||||||
|
del songs[songIndex]
|
||||||
|
return song
|
||||||
|
|
||||||
|
def continueGuessing():
|
||||||
|
while True:
|
||||||
|
try:
|
||||||
|
answer = input('Do you want to go again? [y/n] ')
|
||||||
|
assert answer in ['y', 'Y', 'n', 'N']
|
||||||
|
return answer in ['y', 'Y']
|
||||||
|
except AssertionError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
def song_contest():
|
||||||
|
currentSong = pop_random_songs()
|
||||||
|
while True:
|
||||||
|
|
||||||
|
print('The lyrics are:')
|
||||||
|
print(currentSong[0])
|
||||||
|
answer = input('What\'s the next word? ')
|
||||||
|
|
||||||
|
if answer.lower() == currentSong[1].lower():
|
||||||
|
print(f'Correct!')
|
||||||
|
if len(songs) == 0:
|
||||||
|
print('You did it! You remembered all the objects')
|
||||||
|
exit(0)
|
||||||
|
elif continueGuessing():
|
||||||
|
currentSong = pop_random_songs()
|
||||||
|
else:
|
||||||
|
print('Welcome back later :D')
|
||||||
|
exit(0)
|
||||||
|
|
||||||
|
else:
|
||||||
|
print('Wrong guess. Try again.')
|
||||||
|
|
||||||
|
|
||||||
|
song_contest()
|
||||||
|
# for _ in range(5):
|
||||||
|
# print(pop_random_songs())
|
|
@ -0,0 +1,33 @@
|
||||||
|
def smallify_words(objects):
|
||||||
|
return [string.lower() for string in objects]
|
||||||
|
|
||||||
|
def get_5_objects():
|
||||||
|
while True:
|
||||||
|
try:
|
||||||
|
answer = input('Enter five objects separated by \';\': ').split(';')
|
||||||
|
assert len(answer) == 5
|
||||||
|
return answer
|
||||||
|
except AssertionError:
|
||||||
|
print(f'You were supposed to enter five objects, not {len(answer)}. Try again.')
|
||||||
|
|
||||||
|
def play_game():
|
||||||
|
objects = get_5_objects()
|
||||||
|
answer = input('What is your guess? ')
|
||||||
|
while True:
|
||||||
|
if answer == 'quit':
|
||||||
|
exit(0)
|
||||||
|
|
||||||
|
if answer in smallify_words(objects):
|
||||||
|
print(f'Congratulations! You remembered {answer}')
|
||||||
|
objects.remove(answer)
|
||||||
|
else:
|
||||||
|
print('Sorry, that was not one of the words')
|
||||||
|
|
||||||
|
if len(objects) == 0:
|
||||||
|
print('You did it! You remembered all the objects')
|
||||||
|
exit(0)
|
||||||
|
|
||||||
|
answer = input('What is your next guess? ').lower()
|
||||||
|
play_game()
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
def derivate(x, function):
|
||||||
|
h = 1e-8
|
||||||
|
return (function(x+h) - function(x)) / h
|
||||||
|
|
||||||
|
print(derivate(3, lambda x: x**2 + 2*x + 13))
|
|
@ -0,0 +1,7 @@
|
||||||
|
def input_strings():
|
||||||
|
return [input('Skriv inn en streng: ') for _ in range(4) ]
|
||||||
|
|
||||||
|
def acronym():
|
||||||
|
return "".join([string[0].upper() for string in input_strings()])
|
||||||
|
|
||||||
|
print(acronym())
|
|
@ -0,0 +1,25 @@
|
||||||
|
def customInput(msg, interval):
|
||||||
|
while True:
|
||||||
|
try:
|
||||||
|
answer = int(input(msg))
|
||||||
|
assert answer in range(*interval)
|
||||||
|
return answer
|
||||||
|
except (AssertionError, ValueError):
|
||||||
|
print('You have to gie a value in the interval [1,10]. Try again')
|
||||||
|
|
||||||
|
def do_user_like(items):
|
||||||
|
print('On a scale of 1 to 10 where 10 is the highest, how much do you like:')
|
||||||
|
return [(item, customInput(f'{item}? ', (1,11))) for item in items]
|
||||||
|
|
||||||
|
|
||||||
|
def get_prioritized_list(lst):
|
||||||
|
return sorted(lst, key=lambda tuple: (tuple[1], tuple[0]), reverse=True)
|
||||||
|
|
||||||
|
def what_user_likes_best(items, num):
|
||||||
|
sortedList = get_prioritized_list(do_user_like(items))
|
||||||
|
print(f'Your top {num} are')
|
||||||
|
for i in range(num):
|
||||||
|
print(f'{i+1}. {sortedList[i][0]}')
|
||||||
|
|
||||||
|
|
||||||
|
x = what_user_likes_best(['dof', 'fas', 'be', 'aa'], 2)
|
|
@ -0,0 +1,153 @@
|
||||||
|
from os import system
|
||||||
|
|
||||||
|
class TicTacToe:
|
||||||
|
def __init__(self, playerSymbols=['0', 'X']):
|
||||||
|
self.board = [0 for _ in range(9)]
|
||||||
|
name1, name2 = self.getUsernames()
|
||||||
|
self.players = [
|
||||||
|
{
|
||||||
|
'name': name1,
|
||||||
|
'sym': playerSymbols[0],
|
||||||
|
'num': 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': name2,
|
||||||
|
'sym': playerSymbols[1],
|
||||||
|
'num': 4
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def getUsernames(self):
|
||||||
|
return [input(f'Spiller {i+1} sitt navn: ') for i in range(2)]
|
||||||
|
|
||||||
|
|
||||||
|
def toPieceArray(self): return \
|
||||||
|
[ self.players[0]['sym'] if i==self.players[0]['num'] else \
|
||||||
|
self.players[1]['sym'] if i==self.players[1]['num'] else \
|
||||||
|
' ' for i in self.board ]
|
||||||
|
|
||||||
|
|
||||||
|
def pieceExistAt(self, pos):
|
||||||
|
return self.board[pos] == self.players[0]['num'] or self.board[pos] == self.players[1]['num']
|
||||||
|
|
||||||
|
|
||||||
|
def hasWon(self, userId):
|
||||||
|
getPiecesFromIndexes = lambda indexes: [self.board[i] for i in indexes]
|
||||||
|
indexesList = [[0,4,8], [1,4,7], [2,4,6], [3,4,5], [0,3,6], [0,1,2], [2,5,8], [6,7,8]]
|
||||||
|
winningSum = self.players[userId]['num'] * 3
|
||||||
|
return any([sum(getPiecesFromIndexes(indexes)) == winningSum for indexes in indexesList])
|
||||||
|
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
pieces = self.toPieceArray()
|
||||||
|
return """╭───┬───┬───╮
|
||||||
|
│ {} │ {} │ {} │
|
||||||
|
├───┼───┼───┤
|
||||||
|
│ {} │ {} │ {} │
|
||||||
|
├───┼───┼───┤
|
||||||
|
│ {} │ {} │ {} │
|
||||||
|
╰───┴───┴───╯""".format(*pieces)
|
||||||
|
|
||||||
|
|
||||||
|
def selectedBoardAt(self, x, y) -> str:
|
||||||
|
|
||||||
|
characterMap = {
|
||||||
|
'─': '═',
|
||||||
|
'│': '║',
|
||||||
|
'┼': '╬',
|
||||||
|
'╰': '╚',
|
||||||
|
'╯': '╝',
|
||||||
|
'╭': '╔',
|
||||||
|
'╮': '╗',
|
||||||
|
'├': '╠',
|
||||||
|
'┴': '╩',
|
||||||
|
'┤': '╣',
|
||||||
|
'┬': '╦',
|
||||||
|
}
|
||||||
|
|
||||||
|
pointsToChange = \
|
||||||
|
[(0 + x * 4, i + y * 2) for i in range(3)] + \
|
||||||
|
[(4 + x * 4, i + y * 2) for i in range(3)] + \
|
||||||
|
[(i + x * 4, 0 + y * 2) for i in range(1,4)] + \
|
||||||
|
[(i + x * 4, 2 + y * 2) for i in range(1,4)]
|
||||||
|
|
||||||
|
board = [list(line) for line in str(self).split('\n')]
|
||||||
|
for x,y in pointsToChange:
|
||||||
|
board[y][x] = characterMap[board[y][x]]
|
||||||
|
return '\n'.join([''.join(line) for line in board])
|
||||||
|
|
||||||
|
def drawBoard(self, userId, x=-1, y=-1):
|
||||||
|
system('clear')
|
||||||
|
|
||||||
|
print(f'({self.players[userId]["sym"]}) - {self.players[userId]["name"].upper()}\'S TURN\n')
|
||||||
|
print(self.selectedBoardAt(x,y) if (x,y) != (-1,-1) else str(self))
|
||||||
|
|
||||||
|
|
||||||
|
def selectPiece(self, userId) -> int:
|
||||||
|
x, y = 0, 0
|
||||||
|
while True:
|
||||||
|
self.drawBoard(userId, x,y)
|
||||||
|
|
||||||
|
key = input(f" W E\n A S D <- Enter : ")[0]
|
||||||
|
if key in ['s', 'j'] and y!=2: y+=1
|
||||||
|
elif key in ['w', 'k'] and y!=0: y-=1
|
||||||
|
elif key in ['d', 'l'] and x!=2: x+=1
|
||||||
|
elif key in ['a', 'h'] and x!=0: x-=1
|
||||||
|
elif key == 'e' and not self.pieceExistAt(3*y + x): return 3*y + x
|
||||||
|
|
||||||
|
|
||||||
|
def youWinTheGameItsHalloweenBois(self, userId):
|
||||||
|
print(f"""
|
||||||
|
▓██ ██▓ ▒█████ █ ██ █ █░ ██▓ ███▄ █
|
||||||
|
▒██ ██▒▒██▒ ██▒ ██ ▓██▒ ▓█░ █ ░█░▓██▒ ██ ▀█ █
|
||||||
|
▒██ ██░▒██░ ██▒▓██ ▒██░ ▒█░ █ ░█ ▒██▒▓██ ▀█ ██▒
|
||||||
|
░ ▐██▓░▒██ ██░▓▓█ ░██░ ░█░ █ ░█ ░██░▓██▒ ▐▌██▒
|
||||||
|
░ ██▒▓░░ ████▓▒░▒▒█████▓ ░░██▒██▓ ░██░▒██░ ▓██░
|
||||||
|
██▒▒▒ ░ ▒░▒░▒░ ░▒▓▒ ▒ ▒ ░ ▓░▒ ▒ ░▓ ░ ▒░ ▒ ▒
|
||||||
|
▓██ ░▒░ ░ ▒ ▒░ ░░▒░ ░ ░ ▒ ░ ░ ▒ ░░ ░░ ░ ▒░
|
||||||
|
▒ ▒ ░░ ░ ░ ░ ▒ ░░░ ░ ░ ░ ░ ▒ ░ ░ ░ ░
|
||||||
|
░ ░ ░ ░ ░ ░ ░ ░
|
||||||
|
░ ░ {self.players[userId]['name']}
|
||||||
|
""")
|
||||||
|
|
||||||
|
def spookyTie(self):
|
||||||
|
print("""
|
||||||
|
███▄ █ ▒█████ ▄▄▄▄ ▒█████ ▓█████▄▓██ ██▓ █ █░ ██▓ ███▄ █ ██████
|
||||||
|
██ ▀█ █ ▒██▒ ██▒▓█████▄ ▒██▒ ██▒▒██▀ ██▌▒██ ██▒ ▓█░ █ ░█░▓██▒ ██ ▀█ █ ▒██ ▒
|
||||||
|
▓██ ▀█ ██▒▒██░ ██▒▒██▒ ▄██▒██░ ██▒░██ █▌ ▒██ ██░ ▒█░ █ ░█ ▒██▒▓██ ▀█ ██▒░ ▓██▄
|
||||||
|
▓██▒ ▐▌██▒▒██ ██░▒██░█▀ ▒██ ██░░▓█▄ ▌ ░ ▐██▓░ ░█░ █ ░█ ░██░▓██▒ ▐▌██▒ ▒ ██▒
|
||||||
|
▒██░ ▓██░░ ████▓▒░░▓█ ▀█▓░ ████▓▒░░▒████▓ ░ ██▒▓░ ░░██▒██▓ ░██░▒██░ ▓██░▒██████▒▒
|
||||||
|
░ ▒░ ▒ ▒ ░ ▒░▒░▒░ ░▒▓███▀▒░ ▒░▒░▒░ ▒▒▓ ▒ ██▒▒▒ ░ ▓░▒ ▒ ░▓ ░ ▒░ ▒ ▒ ▒ ▒▓▒ ▒ ░
|
||||||
|
░ ░░ ░ ▒░ ░ ▒ ▒░ ▒░▒ ░ ░ ▒ ▒░ ░ ▒ ▒ ▓██ ░▒░ ▒ ░ ░ ▒ ░░ ░░ ░ ▒░░ ░▒ ░ ░
|
||||||
|
░ ░ ░ ░ ░ ░ ▒ ░ ░ ░ ░ ░ ▒ ░ ░ ░ ▒ ▒ ░░ ░ ░ ▒ ░ ░ ░ ░ ░ ░ ░
|
||||||
|
░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░
|
||||||
|
░ ░ ░ ░
|
||||||
|
""")
|
||||||
|
|
||||||
|
def checkGameStatus(self,userId):
|
||||||
|
if self.hasWon(userId):
|
||||||
|
self.drawBoard(userId)
|
||||||
|
# print(self.players[userId]['name'], 'has won!')
|
||||||
|
self.youWinTheGameItsHalloweenBois(userId)
|
||||||
|
exit(0)
|
||||||
|
elif not 0 in self.board:
|
||||||
|
self.drawBoard(userId)
|
||||||
|
self.spookyTie()
|
||||||
|
exit(0)
|
||||||
|
|
||||||
|
|
||||||
|
def loop(self):
|
||||||
|
while True:
|
||||||
|
piece = self.selectPiece(0)
|
||||||
|
self.board[piece] = self.players[0]['num']
|
||||||
|
self.checkGameStatus(0)
|
||||||
|
piece = self.selectPiece(1)
|
||||||
|
self.board[piece] = self.players[1]['num']
|
||||||
|
self.checkGameStatus(1)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
game = TicTacToe()
|
||||||
|
game.loop()
|
||||||
|
print(game)
|
|
@ -0,0 +1,16 @@
|
||||||
|
number_of_lines = lambda filename: len(open(filename, 'r').readlines())
|
||||||
|
|
||||||
|
|
||||||
|
def number_frequency(filename):
|
||||||
|
result = {}
|
||||||
|
for number in open(filename, 'r').read().splitlines():
|
||||||
|
if not number in result: result[number] = 0
|
||||||
|
result[number] += 1
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
print(number_of_lines('numbers.txt'))
|
||||||
|
frequencies = number_frequency('numbers.txt')
|
||||||
|
for key in frequencies:
|
||||||
|
print(f'{key}: {frequencies[key]}')
|
|
@ -0,0 +1,49 @@
|
||||||
|
from csv import reader
|
||||||
|
from operator import attrgetter
|
||||||
|
|
||||||
|
|
||||||
|
class Subject:
|
||||||
|
def __init__(self, subjectString, criteria):
|
||||||
|
splitString = subjectString.split(" ")
|
||||||
|
self.faculty = splitString[0]
|
||||||
|
self.code = splitString[1]
|
||||||
|
self.name = " ".join(splitString[2:])
|
||||||
|
self.criteria = criteria
|
||||||
|
|
||||||
|
|
||||||
|
def subjectsWithoutLimit(subjectList):
|
||||||
|
return len([subject for subject in subjectList if subject.criteria == 'Alle'])
|
||||||
|
|
||||||
|
|
||||||
|
def averageLimit(subjectList):
|
||||||
|
subjectsWithLimits = [subject for subject in subjectList if subject.criteria != 'Alle']
|
||||||
|
return sum([float(subject.criteria) for subject in subjectsWithLimits]) / len(subjectsWithLimits)
|
||||||
|
|
||||||
|
|
||||||
|
def minLimit(subjectList):
|
||||||
|
subjectsWithLimits = [subject for subject in subjectList if subject.criteria != 'Alle']
|
||||||
|
for subject in subjectsWithLimits:
|
||||||
|
subject.criteria = float(subject.criteria)
|
||||||
|
return min(subjectsWithLimits, key=attrgetter('criteria'))
|
||||||
|
|
||||||
|
|
||||||
|
def getFacultySubjects(subjectList):
|
||||||
|
toDict = lambda subject: {subject.name: subject.criteria}
|
||||||
|
result = {}
|
||||||
|
for subject in subjectList:
|
||||||
|
if not subject.faculty in result: result[subject.faculty] = []
|
||||||
|
result[subject.faculty].append(toDict(subject))
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
with open('poenggrenser_2011.csv' ,'r') as file:
|
||||||
|
Subjects = [Subject(*i) for i in reader(file)]
|
||||||
|
|
||||||
|
print('Antall studier hvor alle kom inn:', subjectsWithoutLimit(Subjects))
|
||||||
|
print('Gjennomsnittlig opptaksgrense for NTNU var:', averageLimit(Subjects))
|
||||||
|
|
||||||
|
formatSubject = lambda subject: f'{subject.faculty} {subject.code} {subject.name}'
|
||||||
|
print('Studiet som hadde den laveste opptaksgrensen var:', formatSubject(minLimit(Subjects)))
|
||||||
|
|
||||||
|
print(getFacultySubjects(Subjects))
|
|
@ -0,0 +1,29 @@
|
||||||
|
from re import sub, split
|
||||||
|
|
||||||
|
|
||||||
|
def read_from_file(path):
|
||||||
|
with open(path, 'r') as file:
|
||||||
|
return file.read()
|
||||||
|
|
||||||
|
|
||||||
|
def remove_symbols(string):
|
||||||
|
return sub(r'[^A-Za-z ]', '', string).lower()
|
||||||
|
|
||||||
|
|
||||||
|
def count_words(path):
|
||||||
|
with open(path, 'r') as file:
|
||||||
|
words = split('\s+', remove_symbols(file.read()))
|
||||||
|
if words[0] == '': words = words[1:]
|
||||||
|
if words[-1] == '': words = words[:-1]
|
||||||
|
|
||||||
|
word_counts = {}
|
||||||
|
for word in words:
|
||||||
|
if not word in word_counts: word_counts[word] = 0
|
||||||
|
word_counts[word] += 1
|
||||||
|
return word_counts
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
alice_dict = count_words('alice_in_wonderland.txt')
|
||||||
|
for word, value in alice_dict.items():
|
||||||
|
print(word, value)
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,36 @@
|
||||||
|
7
|
||||||
|
4
|
||||||
|
9
|
||||||
|
4
|
||||||
|
1
|
||||||
|
4
|
||||||
|
4
|
||||||
|
3
|
||||||
|
1
|
||||||
|
5
|
||||||
|
3
|
||||||
|
5
|
||||||
|
5
|
||||||
|
7
|
||||||
|
9
|
||||||
|
3
|
||||||
|
2
|
||||||
|
9
|
||||||
|
7
|
||||||
|
3
|
||||||
|
5
|
||||||
|
2
|
||||||
|
5
|
||||||
|
4
|
||||||
|
2
|
||||||
|
6
|
||||||
|
5
|
||||||
|
2
|
||||||
|
3
|
||||||
|
8
|
||||||
|
1
|
||||||
|
4
|
||||||
|
5
|
||||||
|
7
|
||||||
|
9
|
||||||
|
4
|
|
@ -0,0 +1,925 @@
|
||||||
|
"ATH 255196 Kristendom religion og livssyn årsstudium","Alle"
|
||||||
|
"ATH 255418 Interkulturell forståelse årsstudium","Alle"
|
||||||
|
"ATH 255437 Musikk","Alle"
|
||||||
|
"ATH 255480 Teologi","Alle"
|
||||||
|
"ATH 255482 Kristendom religion og livssyn","Alle"
|
||||||
|
"ATH 255752 Psykologi årsstudium","Alle"
|
||||||
|
"ATH 255777 Musikk årsstudium","Alle"
|
||||||
|
"ATH 255869 Interkulturell forståelse","Alle"
|
||||||
|
"ATH 255876 Psykologi med religion og helse","Alle"
|
||||||
|
"ATH 255936 Praktisk teologi","Alle"
|
||||||
|
"AHO 189030 Arkitekt",12.3
|
||||||
|
"AHO 189343 Industridesign",11.7
|
||||||
|
"BDH 250050 Sykepleierutdanning",45.5
|
||||||
|
"MF 190196 Kristendom/RLE","Alle"
|
||||||
|
"MF 190242 Samfunnsfag","Alle"
|
||||||
|
"MF 190418 Interkulturell kommunikasjon","Alle"
|
||||||
|
"MF 190480 Teologi profesjonsstudium","Alle"
|
||||||
|
"MF 190482 Religion kultur og samfunn","Alle"
|
||||||
|
"MF 190927 Ungdom kultur og tro","Alle"
|
||||||
|
"MF 190934 Lektor- og adjunktprogram","Alle"
|
||||||
|
"MF 190936 Teologi","Alle"
|
||||||
|
"DHS 251050 Sykepleierutdanning Oslo",48.3
|
||||||
|
"DHS 251060 Vernepleierutdanning Rogaland",41.8
|
||||||
|
"DHS 251080 Sosialt arbeid Oslo",49.1
|
||||||
|
"DHS 251081 Sosialt arbeid deltid Oslo",42.4
|
||||||
|
"DHS 251700 Ergoterapeututdanning Rogaland",32.6
|
||||||
|
"DMMH 253130 Førskolelærerutdanning",36.3
|
||||||
|
"DMMH 253131 Førskolelærer estetisk linje",39.1
|
||||||
|
"DMMH 253132 Førskolelærer natur- og friluftslinje.",44
|
||||||
|
"DMMH 253133 Førskolelærer deltid",46.2
|
||||||
|
"DMMH 253529 Førskolelærer interkulturell linje","Alle"
|
||||||
|
"FIH 258480 Teologi og misjon","Alle"
|
||||||
|
"FIH 258626 Kristendom religion- og livssynskunnskap","Alle"
|
||||||
|
"FIH 258777 Musikk","Alle"
|
||||||
|
"HDH 252050 Sykepleierutdanning",46.1
|
||||||
|
"HIAK 202050 Sykepleierutdanning",45.3
|
||||||
|
"HIAK 202060 Vernepleierutdanning",47.4
|
||||||
|
"HIAK 202061 Vernepleierutdanning deltid",39.3
|
||||||
|
"HIAK 202063 Vernepleierutdanning deltid Bærum",39.9
|
||||||
|
"HIAK 202082 Yrkesfaglærerutd. i medier og kommunikasjon","Alle"
|
||||||
|
"HIAK 202105 Yrkesfaglærerutd. i service og samferdsel","Alle"
|
||||||
|
"HIAK 202106 Yrkesfaglærerutd. i helse- og sosialfag deltid","Alle"
|
||||||
|
"HIAK 202108 Yrkesfaglærerutd. i design-og håndverksfag deltid","Alle"
|
||||||
|
"HIAK 202109 Yrkesfaglærerutd. i bygg og anleggsteknikk","Alle"
|
||||||
|
"HIAK 202123 Yrkesfaglærerutd. i helse- og sosialfag","Alle"
|
||||||
|
"HIAK 202124 Yrkesfaglærerutd. i restaurant- og matfag","Alle"
|
||||||
|
"HIAK 202126 Yrkesfaglærerutd. i design-og håndverksfag","Alle"
|
||||||
|
"HIAK 202127 Yrkesfaglærerutd. i elektrofag","Alle"
|
||||||
|
"HIAK 202129 Yrkesfaglærerutd. i teknikk og industriell prod.","Alle"
|
||||||
|
"HIAK 202405 Produktdesign","Alle"
|
||||||
|
"HIAK 202408 Samfunnsernæring",49.7
|
||||||
|
"HIAK 202696 Trafikklærerutdanning","Alle"
|
||||||
|
"HIAK 202876 Læringspsykologi med vekt på adferdsanalyse",48.4
|
||||||
|
"HIAK 202896 Husøkonomi og serviceledelse","Alle"
|
||||||
|
"HIAK 202897 Kostøkonomi ernæring og ledelse","Alle"
|
||||||
|
"HIB 203003 Ingeniør bygg","Alle"
|
||||||
|
"HIB 203004 Ingeniør data","Alle"
|
||||||
|
"HIB 203006 Ingeniør elkraftteknikk","Alle"
|
||||||
|
"HIB 203009 Ingeniør kjemi","Alle"
|
||||||
|
"HIB 203011 Ingeniør marinteknikk",43.8
|
||||||
|
"HIB 203012 Ingeniør maskinteknikk",39.8
|
||||||
|
"HIB 203017 Ingeniør automatisering","Alle"
|
||||||
|
"HIB 203024 Ingeniør elektronikk","Alle"
|
||||||
|
"HIB 203028 Ingeniør kommunikasjonssystemer","Alle"
|
||||||
|
"HIB 203045 Ingeniør produksjonsteknikk","Alle"
|
||||||
|
"HIB 203050 Sykepleierutdanning",41.2
|
||||||
|
"HIB 203060 Vernepleierutdanning",38.2
|
||||||
|
"HIB 203080 Sosialt arbeid",45.8
|
||||||
|
"HIB 203096 Ingeniør undervannsteknologi",44.8
|
||||||
|
"HIB 203130 Førskolelærerutdanning","Alle"
|
||||||
|
"HIB 203132 Førskolelærerutd. med vekt på kunstfag","Alle"
|
||||||
|
"HIB 203133 Førskolelærerutd m/vekt på natur og friluftsliv",34.8
|
||||||
|
"HIB 203203 Folkehelsearbeid",45.5
|
||||||
|
"HIB 203369 Økonomi og administrasjon",46.6
|
||||||
|
"HIB 203395 Informasjonsteknologi","Alle"
|
||||||
|
"HIB 203440 Idrett faglærerutdanning",44.7
|
||||||
|
"HIB 203466 Tegnspråk og tolking","Alle"
|
||||||
|
"HIB 203547 Grunnskolelærer 1.-7. trinn m/kroppsøving",40.5
|
||||||
|
"HIB 203548 Grunnskolelærer 1.-7. trinn med musikk","Alle"
|
||||||
|
"HIB 203550 Grunnskolelærer 1.-7. trinn m/samfunnsfag","Alle"
|
||||||
|
"HIB 203551 Grunnskolelærer 1.-7. trinn med engelsk","Alle"
|
||||||
|
"HIB 203557 Grunnskolelærer 1.-7. trinn m/naturfag","Alle"
|
||||||
|
"HIB 203559 Grunnskolelærer 1.-7. trinn med RLE","Alle"
|
||||||
|
"HIB 203599 Grunnskolelærer 1.-7. trinn med mat og helse",44.3
|
||||||
|
"HIB 203618 Drama",39.2
|
||||||
|
"HIB 203655 Grunnskolelærer 5.-10. trinn med matematikk",43.8
|
||||||
|
"HIB 203657 Grunnskolelærer 5.-10. trinn med samfunnsfag",44.7
|
||||||
|
"HIB 203658 Grunnskolelærer 5.-10. trinn med norsk",40.4
|
||||||
|
"HIB 203659 Grunnskolelærer 5.-10. trinn med mat og helse",43.5
|
||||||
|
"HIB 203660 Grunnskolelærer 5.-10. trinn med musikk","Alle"
|
||||||
|
"HIB 203667 Musikk",46.3
|
||||||
|
"HIB 203700 Ergoterapeututdanning",42.5
|
||||||
|
"HIB 203701 Radiografutdanning",36.2
|
||||||
|
"HIB 203702 Bioingeniørutdanning",42.3
|
||||||
|
"HIB 203703 Fysioterapeututdanning",49.7
|
||||||
|
"HIB 203753 Landmåling og eiendomsdesign",35.6
|
||||||
|
"HIB 203822 Ingeniør energiteknologi",45.5
|
||||||
|
"HIBU 205004 Ingeniør data Kongsberg","Alle"
|
||||||
|
"HIBU 205005 Ingeniør elektro Kongsberg","Alle"
|
||||||
|
"HIBU 205012 Ingeniør maskin Kongsberg","Alle"
|
||||||
|
"HIBU 205050 Sykepleier Drammen",30.4
|
||||||
|
"HIBU 205155 Lysdesign Drammen","Alle"
|
||||||
|
"HIBU 205160 Økonomi og administrasjon1-årig Kongsberg","Alle"
|
||||||
|
"HIBU 205162 Økonomi og administrasjon 1-årig Hønefoss.","Alle"
|
||||||
|
"HIBU 205246 Juss årsstudium Hønefoss",43.8
|
||||||
|
"HIBU 205251 Visuell kommunikasjon Drammen",43.8
|
||||||
|
"HIBU 205291 Økonomi og ledelse - siviløkonom Kongsberg","Alle"
|
||||||
|
"HIBU 205317 Reiselivsledelse Hønefoss","Alle"
|
||||||
|
"HIBU 205345 Økonomi og ledelse - siviløkonom Hønefoss","Alle"
|
||||||
|
"HIBU 205370 Dynamisk webdesign Hønefoss","Alle"
|
||||||
|
"HIBU 205395 IT og informasjonssystemer Hønefoss","Alle"
|
||||||
|
"HIBU 205404 Økonomi og administrasjon Kongsberg",29.1
|
||||||
|
"HIBU 205414 Økonomi og administrasjon Hønefoss","Alle"
|
||||||
|
"HIBU 205526 Juss Hønefoss",45.2
|
||||||
|
"HIBU 205547 Grunnskolelærer 1.-7. trinn Drammen","Alle"
|
||||||
|
"HIBU 205620 IT og informasjonssystemer 1-årig Hønefoss","Alle"
|
||||||
|
"HIBU 205623 Engelsk Hønefoss","Alle"
|
||||||
|
"HIBU 205651 Grunnskolelærer 5.-10. trinn med språkfag Drammen","Alle"
|
||||||
|
"HIBU 205655 Grunnskolelærer 5.-10. trinn med realfag Drammen","Alle"
|
||||||
|
"HIBU 205657 Grunnskolelærer 5.-10. trinn med samfunnsfag Dr.","Alle"
|
||||||
|
"HIBU 205672 Norsk Hønefoss","Alle"
|
||||||
|
"HIBU 205701 Radiograf Drammen",30.8
|
||||||
|
"HIBU 205867 Juss og ledelse Hønefoss",41.8
|
||||||
|
"HIBU 205881 Statsvitenskap Drammen",36.5
|
||||||
|
"HIBU 205894 Optometri Kongsberg","Alle"
|
||||||
|
"HIG 207003 Ingeniør bygg","Alle"
|
||||||
|
"HIG 207004 Ingeniør data","Alle"
|
||||||
|
"HIG 207005 Ingeniør elektro","Alle"
|
||||||
|
"HIG 207012 Ingeniør maskin","Alle"
|
||||||
|
"HIG 207046 Medieteknologi","Alle"
|
||||||
|
"HIG 207050 Sykepleierutdanning",30.7
|
||||||
|
"HIG 207051 Sykepleierutdanning deltid","Alle"
|
||||||
|
"HIG 207052 Sykepleierutdanning deltid Gudbrandsdal","Alle"
|
||||||
|
"HIG 207053 Sykepleierutdanning deltid Valdres","Alle"
|
||||||
|
"HIG 207054 Sykepleierutdanning deltid Hadeland","Alle"
|
||||||
|
"HIG 207098 Teknologidesign årsstudium deltid","Alle"
|
||||||
|
"HIG 207099 Landmåling årsstudium fleksibel","Alle"
|
||||||
|
"HIG 207102 Geografiske informasjonssystemer (GIS) års fleks","Alle"
|
||||||
|
"HIG 207136 Mediemanagement årsstudium","Alle"
|
||||||
|
"HIG 207149 Mediedesign",42
|
||||||
|
"HIG 207160 Økonomi og ledelse årsstudium","Alle"
|
||||||
|
"HIG 207188 Medie- og informasjonsteknologi årsstudium","Alle"
|
||||||
|
"HIG 207248 Landmåling årsstudium","Alle"
|
||||||
|
"HIG 207264 Medieproduksjon","Alle"
|
||||||
|
"HIG 207369 Økonomi og ledelse","Alle"
|
||||||
|
"HIG 207374 Drift av nettverk og datasystemer","Alle"
|
||||||
|
"HIG 207395 Programvareutvikling","Alle"
|
||||||
|
"HIG 207396 Geografiske informasjonssystemer (GIS) årsstudium","Alle"
|
||||||
|
"HIG 207404 Økonomi og ledelse fleksibel","Alle"
|
||||||
|
"HIG 207406 Geomatikk","Alle"
|
||||||
|
"HIG 207429 Informasjonssikkerhet","Alle"
|
||||||
|
"HIG 207602 Teknologidesign årsstudium","Alle"
|
||||||
|
"HIG 207604 Medieproduksjon årsstudium","Alle"
|
||||||
|
"HIG 207673 Spillprogrammering","Alle"
|
||||||
|
"HIG 207701 Radiografutdanning","Alle"
|
||||||
|
"HIG 207824 Teknologidesign og ledelse","Alle"
|
||||||
|
"HIG 207838 Mediemanagement","Alle"
|
||||||
|
"HIH 208035 Økonomi og ledelse","Alle"
|
||||||
|
"HIH 208050 Sykepleierutdanning",38.2
|
||||||
|
"HIH 208051 Sykepleierutdanning deltid","Alle"
|
||||||
|
"HIH 208060 Vernepleierutdanning","Alle"
|
||||||
|
"HIH 208070 Barnevernspedagogutdanning",35.2
|
||||||
|
"HIH 208071 Barnevernspedagogutdanning deltid - Tromsø",40.7
|
||||||
|
"HIH 208164 Økonomi og ledelse årsstudium","Alle"
|
||||||
|
"HIH 208318 Regnskap og revisjon","Alle"
|
||||||
|
"HIH 208350 Handel service og logistikk","Alle"
|
||||||
|
"HIM 211050 Sykepleierutdanning studiegruppe Molde",30.3
|
||||||
|
"HIM 211056 Sykepleierutdanning studiegruppe Kristiansund","Alle"
|
||||||
|
"HIM 211060 Vernepleierutdanning",42.4
|
||||||
|
"HIM 211164 Bedriftsøkonomi","Alle"
|
||||||
|
"HIM 211185 Idrett",39.6
|
||||||
|
"HIM 211189 Informasjonsbehandling","Alle"
|
||||||
|
"HIM 211238 Statsvitenskap","Alle"
|
||||||
|
"HIM 211246 Jus",39.1
|
||||||
|
"HIM 211292 Logistikk og Supply Chain Management","Alle"
|
||||||
|
"HIM 211318 Revisjon","Alle"
|
||||||
|
"HIM 211369 Økonomi og administrasjon","Alle"
|
||||||
|
"HIM 211370 IT og logistikk","Alle"
|
||||||
|
"HIM 211404 Siviløkonom 1. avdeling",41
|
||||||
|
"HIM 211432 Internasjonal logistikk Ålesund","Alle"
|
||||||
|
"HIM 211488 Sport Management idrettsledelse",39.4
|
||||||
|
"HIM 211627 Petroleumslogistikk deltid","Alle"
|
||||||
|
"HIM 211841 Jus og administrasjon","Alle"
|
||||||
|
"HIM 211866 Petroleumslogistikk Kristiansund",44.9
|
||||||
|
"HIN 212003 Ingeniør Bygg","Alle"
|
||||||
|
"HIN 212004 Ingeniør Datateknikk","Alle"
|
||||||
|
"HIN 212005 Ingeniør Industriell Elektronikk","Alle"
|
||||||
|
"HIN 212006 Ingeniør Elkraftteknikk","Alle"
|
||||||
|
"HIN 212018 Ingeniør Prosessteknologi","Alle"
|
||||||
|
"HIN 212027 Ingeniør Satelitteknologi","Alle"
|
||||||
|
"HIN 212034 Ingeniør Industriteknikk","Alle"
|
||||||
|
"HIN 212040 Ingeniør første studieår Alta","Alle"
|
||||||
|
"HIN 212050 Sykepleierutdanning","Alle"
|
||||||
|
"HIN 212075 Ingeniør Bygg nettbasert","Alle"
|
||||||
|
"HIN 212076 Ingeniør Industriteknikk nettbasert","Alle"
|
||||||
|
"HIN 212077 Ingeniør Prosessteknologi nettbasert","Alle"
|
||||||
|
"HIN 212078 Ingeniør Datateknikk nettbasert","Alle"
|
||||||
|
"HIN 212079 Ingeniør Elektro første år nettbasert","Alle"
|
||||||
|
"HIN 212410 Økonomi og administrasjon","Alle"
|
||||||
|
"HIN 212761 Elektroteknikk","Alle"
|
||||||
|
"HIN 212804 Data/IT","Alle"
|
||||||
|
"HIN 212805 Ingeniørdesign","Alle"
|
||||||
|
"HIN 212806 Integrert bygningsteknologi","Alle"
|
||||||
|
"HIN 212811 Industriell teknologi","Alle"
|
||||||
|
"HIN 212814 Satelitteknologi","Alle"
|
||||||
|
"HIN 212872 Internasjonal beredskap","Alle"
|
||||||
|
"HINE 213130 Førskolelærer","Alle"
|
||||||
|
"HINE 213131 Førskolelærerutdanning deltid samlingsbasert","Alle"
|
||||||
|
"HINE 213170 Engelsk årsstudium 5-10","Alle"
|
||||||
|
"HINE 213505 Kunst og håndverk 1-7","Alle"
|
||||||
|
"HINE 213547 Grunnskolelærer 1-7","Alle"
|
||||||
|
"HINE 213602 Design og bruk av digitale medier årsstudium Mo","Alle"
|
||||||
|
"HINE 213620 Informasjonsteknologi årsstudium Mo i Rana","Alle"
|
||||||
|
"HINE 213623 Engelsk årsstudium 1-7","Alle"
|
||||||
|
"HINE 213642 Kunst og håndverk 5-10","Alle"
|
||||||
|
"HINE 213651 Grunnskolelærer 5-10","Alle"
|
||||||
|
"HINE 213655 Grunnskolelærer 5-10 Narvik","Alle"
|
||||||
|
"HINE 213666 Naturfag samlingsbasert 5-10","Alle"
|
||||||
|
"HINE 213667 Kreativt musikkarbeid årsstudium 5-10","Alle"
|
||||||
|
"HINE 213680 Samfunnsfag samlingsbasert 5-10","Alle"
|
||||||
|
"HINE 213777 Kreativt musikkarbeid årsstudium 1-7","Alle"
|
||||||
|
"HINE 213796 Drama og teater årsstudium","Alle"
|
||||||
|
"HINT 214050 Sykepleierutdanning Levanger",40.9
|
||||||
|
"HINT 214058 Sykepleierutdanning Namsos","Alle"
|
||||||
|
"HINT 214060 Vernepleierutdanning Namsos","Alle"
|
||||||
|
"HINT 214130 Førskolelærerutdanning Levanger","Alle"
|
||||||
|
"HINT 214185 Idrett Levanger",41.8
|
||||||
|
"HINT 214240 Sosiologi Steinkjer","Alle"
|
||||||
|
"HINT 214318 Revisjon Steinkjer","Alle"
|
||||||
|
"HINT 214321 Husdyrfag velferd og produksjon Steinkjer","Alle"
|
||||||
|
"HINT 214323 Utmarksforvaltning Steinkjer","Alle"
|
||||||
|
"HINT 214369 Økonomi og administrasjon Steinkjer","Alle"
|
||||||
|
"HINT 214388 Naturforvaltning Steinkjer","Alle"
|
||||||
|
"HINT 214396 Geografi nettbasert Steinkjer","Alle"
|
||||||
|
"HINT 214419 Kommunal økonomi og ledelse Steinkjer","Alle"
|
||||||
|
"HINT 214421 Husdyrvelferd Steinkjer årsstudium","Alle"
|
||||||
|
"HINT 214430 Multimedieteknologi Steinkjer","Alle"
|
||||||
|
"HINT 214440 Kroppsøving og idrettsfag faglærerut. Levanger",45
|
||||||
|
"HINT 214468 Grønn næringsutvikling Steinkjer","Alle"
|
||||||
|
"HINT 214516 Regnskap Steinkjer","Alle"
|
||||||
|
"HINT 214547 Grunnskolelærerutdanning 1.-7. trinn Levanger","Alle"
|
||||||
|
"HINT 214605 Friluftsliv Levanger","Alle"
|
||||||
|
"HINT 214623 Engelsk Levanger","Alle"
|
||||||
|
"HINT 214639 Faglærerutd i musikk - rytmisk profil Levanger","Alle"
|
||||||
|
"HINT 214642 Kunst og håndverk Levanger","Alle"
|
||||||
|
"HINT 214649 Kroppsøving Levanger","Alle"
|
||||||
|
"HINT 214651 Grunnskolelærerutdanning 5.-10. trinn Levanger","Alle"
|
||||||
|
"HINT 214667 Musikk Levanger","Alle"
|
||||||
|
"HINT 214673 Spill- og opplevelsesteknologi Steinkjer","Alle"
|
||||||
|
"HINT 214680 Samfunnsfag Levanger","Alle"
|
||||||
|
"HINT 214696 Trafikklærerutdanning Stjørdal",42.1
|
||||||
|
"HINT 214749 Farmasiutdanning Namsos","Alle"
|
||||||
|
"HSF 216005 Ingeniør elektro Førde","Alle"
|
||||||
|
"HSF 216050 Sykepleierutdanning Førde start høst","Alle"
|
||||||
|
"HSF 216052 Sykepleierutdanning Førde start vår","Alle"
|
||||||
|
"HSF 216053 Sykepleierutdanning samlingsbasert deltid Førde","Alle"
|
||||||
|
"HSF 216060 Vernepleierutdanning","Alle"
|
||||||
|
"HSF 216070 Barnevernspedagogutdanning","Alle"
|
||||||
|
"HSF 216080 Sosialt arbeid",32.2
|
||||||
|
"HSF 216130 Førskolelærerutdanning","Alle"
|
||||||
|
"HSF 216131 Førskolelærerutdanning samlingsbasert deltid","Alle"
|
||||||
|
"HSF 216164 Bedriftsøkonomi","Alle"
|
||||||
|
"HSF 216170 Engelsk","Alle"
|
||||||
|
"HSF 216185 Idrett",38.2
|
||||||
|
"HSF 216242 Samfunnsfag","Alle"
|
||||||
|
"HSF 216246 Jus",34.6
|
||||||
|
"HSF 216302 Friluftsliv","Alle"
|
||||||
|
"HSF 216310 Landskapsplanlegging med landskapsarkitektur","Alle"
|
||||||
|
"HSF 216330 Reiselivsledelse","Alle"
|
||||||
|
"HSF 216351 Ungdomssosiologi","Alle"
|
||||||
|
"HSF 216368 Eiendomsmegling","Alle"
|
||||||
|
"HSF 216369 Økonomi og administrasjon","Alle"
|
||||||
|
"HSF 216373 Naturfag","Alle"
|
||||||
|
"HSF 216440 Idrett fysisk aktivitet og helse",40.7
|
||||||
|
"HSF 216469 Geologi og geofare","Alle"
|
||||||
|
"HSF 216481 Historie","Alle"
|
||||||
|
"HSF 216485 Idrett og kroppsøving",32.1
|
||||||
|
"HSF 216547 Grunnskulelærarutdanning 1.-7. trinn","Alle"
|
||||||
|
"HSF 216548 Grunnskulelærarutdanning 1.-7. trinn saml/deltid","Alle"
|
||||||
|
"HSF 216651 Grunnskulelærarutdanning 5.-10. trinn","Alle"
|
||||||
|
"HSF 216754 Reiseliv","Alle"
|
||||||
|
"HSF 216835 Fornybar energi","Alle"
|
||||||
|
"HSF 216927 Sosiologi - ungdomssosiologi","Alle"
|
||||||
|
"STAF 234196 Kristendom årsstudium","Alle"
|
||||||
|
"STAF 234437 Musikk menighet og ledelse","Alle"
|
||||||
|
"STAF 234480 Teologi og ledelse","Alle"
|
||||||
|
"HSH 218002 Ingeniør brannsikkerhet Haugesund","Alle"
|
||||||
|
"HSH 218012 Ingeniør maskin Haugesund","Alle"
|
||||||
|
"HSH 218047 Ingeniør kvalitet HMS Haugesund","Alle"
|
||||||
|
"HSH 218050 Sykepleierutdanning Stord",31.3
|
||||||
|
"HSH 218056 Sykepleierutdanning Haugesund",31.5
|
||||||
|
"HSH 218130 Førskolelærerutd. ordinær linje Stord","Alle"
|
||||||
|
"HSH 218134 Førskolelærerutd. natur og friluftslinje Stord","Alle"
|
||||||
|
"HSH 218157 Faglærerutdanning i musikk Stord","Alle"
|
||||||
|
"HSH 218353 Maritim utdanning nautikk Haugesund",37.3
|
||||||
|
"HSH 218369 Økonomi og administrasjon Haugesund","Alle"
|
||||||
|
"HSH 218505 Kunst og håndverk Stord","Alle"
|
||||||
|
"HSH 218547 Grunnskolelærerutdanning 1.-7. trinn","Alle"
|
||||||
|
"HSH 218623 Engelsk Stord","Alle"
|
||||||
|
"HSH 218649 Idrett/Kroppsøving Stord",34.4
|
||||||
|
"HSH 218651 Grunnskolelærerutdanning 5.-10. trinn","Alle"
|
||||||
|
"HSH 218680 Samfunnsfag Stord","Alle"
|
||||||
|
"HIT 220003 Ingeniør bygg","Alle"
|
||||||
|
"HIT 220006 Ingeniør elkraft","Alle"
|
||||||
|
"HIT 220012 Ingeniør maskin","Alle"
|
||||||
|
"HIT 220035 Økonomi og administrasjon 2 år Bø","Alle"
|
||||||
|
"HIT 220050 Sykepleierutdanning",32.2
|
||||||
|
"HIT 220051 Sykepleierutdanning deltid 4 år","Alle"
|
||||||
|
"HIT 220060 Vernepleierutdanning",32.1
|
||||||
|
"HIT 220061 Vernepleierutdanning deltid","Alle"
|
||||||
|
"HIT 220070 Barnevern i et flerkulturelt samfunn",32.8
|
||||||
|
"HIT 220090 Ingeniør informatikk og automatisering","Alle"
|
||||||
|
"HIT 220130 Førskolelærerutdanning Notodden","Alle"
|
||||||
|
"HIT 220131 Førskolelærer deltid - samlingsbasert Notodden","Alle"
|
||||||
|
"HIT 220132 Førskolelærerutdanning Drammen","Alle"
|
||||||
|
"HIT 220133 Førskolelærerutdanning Porsgrunn","Alle"
|
||||||
|
"HIT 220140 Faglærer i kroppsøving og idrettsfag Notodden","Alle"
|
||||||
|
"HIT 220150 Faglærer i formgiving kunst og håndv. Notodden","Alle"
|
||||||
|
"HIT 220164 Bedriftsøkonomi årsstudium Bø","Alle"
|
||||||
|
"HIT 220167 Bedriftsøkonomi Porsgrunn",33.6
|
||||||
|
"HIT 220170 Engelsk årsstudium Bø","Alle"
|
||||||
|
"HIT 220172 Friluftsliv kultur og naturveiledning årsstud Bø","Alle"
|
||||||
|
"HIT 220179 Historie årsstudium Bø","Alle"
|
||||||
|
"HIT 220185 Idrett årsstudium Bø",34.3
|
||||||
|
"HIT 220187 Informasjonsbehandling årsstudium Bø","Alle"
|
||||||
|
"HIT 220188 Informasjonsbehandling årsstudium Porsgrunn","Alle"
|
||||||
|
"HIT 220210 Norsk årsstudium Bø","Alle"
|
||||||
|
"HIT 220273 Kultur-arrangering formidling og forv. 2-årig","Alle"
|
||||||
|
"HIT 220302 Friluftsliv kultur- og naturveiledning Bø","Alle"
|
||||||
|
"HIT 220308 Kultur-arrangering formidling og forvaltning Bø","Alle"
|
||||||
|
"HIT 220317 Reiseliv Bø","Alle"
|
||||||
|
"HIT 220318 Revisjon Bø","Alle"
|
||||||
|
"HIT 220359 Internasjonal markedsføring Bø","Alle"
|
||||||
|
"HIT 220368 Eiendomsmegling Bø",37.3
|
||||||
|
"HIT 220369 Økonomi og administrasjon Bø","Alle"
|
||||||
|
"HIT 220388 Økologi og naturressurser Bø","Alle"
|
||||||
|
"HIT 220395 Informatikk Bø","Alle"
|
||||||
|
"HIT 220400 Idéhistorie Bø","Alle"
|
||||||
|
"HIT 220440 Idrettsvitenskap Bø","Alle"
|
||||||
|
"HIT 220441 Visuelle kunstfag og design Notodden","Alle"
|
||||||
|
"HIT 220442 Folkekunst Rauland","Alle"
|
||||||
|
"HIT 220443 Folkemusikk Rauland","Alle"
|
||||||
|
"HIT 220447 Natur og friluftsliv Bø","Alle"
|
||||||
|
"HIT 220448 Forurensing og miljø Bø","Alle"
|
||||||
|
"HIT 220449 Informasjonssystemer Bø","Alle"
|
||||||
|
"HIT 220463 Humanistiske fag Bø","Alle"
|
||||||
|
"HIT 220505 Leire – kunst og design 1 Notodden","Alle"
|
||||||
|
"HIT 220532 Form og design Notodden","Alle"
|
||||||
|
"HIT 220547 Grunnskolelærer 1.-7. trinn Notodden","Alle"
|
||||||
|
"HIT 220548 Grunnskolelærer 1.-7. trinn Porsgrunn","Alle"
|
||||||
|
"HIT 220550 Grunnskolelærer 1.-7. trinn nettbasert","Alle"
|
||||||
|
"HIT 220551 Grunnskolelærer 1.-7. trinn desentralisert","Alle"
|
||||||
|
"HIT 220602 Digital mediedesign Notodden","Alle"
|
||||||
|
"HIT 220605 Natur og friluftsliv årsstudium Bø","Alle"
|
||||||
|
"HIT 220613 Historie deltid nett- og samlingsbasert","Alle"
|
||||||
|
"HIT 220628 Folkekunst årsstudium Rauland","Alle"
|
||||||
|
"HIT 220629 Folkemusikk årsstudium Rauland","Alle"
|
||||||
|
"HIT 220630 Kunst og håndverk årsstudium Notodden","Alle"
|
||||||
|
"HIT 220637 Tegning - bilde årsstudium Notodden","Alle"
|
||||||
|
"HIT 220649 Kroppsøving og idrettsfag årsstudium Notodden","Alle"
|
||||||
|
"HIT 220651 Grunnskolelærer 5.-10. trinn Porsgrunn","Alle"
|
||||||
|
"HIT 220655 Grunnskolelærer 5.-10. Notodden og desentralisert","Alle"
|
||||||
|
"HIT 220657 Grunnskolelærer 5.-10. trinn nettbasert","Alle"
|
||||||
|
"HIT 220672 Norsk deltid nett og samlingsbasert Bø","Alle"
|
||||||
|
"HIT 220688 Ingeniør gass- og energiteknologi","Alle"
|
||||||
|
"HIT 220895 Innovasjon og entreprenørskap Bø","Alle"
|
||||||
|
"HIT 220912 Spansk Bø","Alle"
|
||||||
|
"HIVE 222004 Ingeniør datateknikk","Alle"
|
||||||
|
"HIVE 222005 Ingeniør elektronikk","Alle"
|
||||||
|
"HIVE 222012 Ingeniør produktdesign","Alle"
|
||||||
|
"HIVE 222017 Ingeniør elektro-automasjon","Alle"
|
||||||
|
"HIVE 222044 Skipsfart og logistikk","Alle"
|
||||||
|
"HIVE 222050 Sykepleierutdanning",33.5
|
||||||
|
"HIVE 222130 Førskolelærerutdanning","Alle"
|
||||||
|
"HIVE 222131 Førskolelærerutdanning deltid","Alle"
|
||||||
|
"HIVE 222164 Bedriftsøkonomi",33.8
|
||||||
|
"HIVE 222170 Engelsk","Alle"
|
||||||
|
"HIVE 222179 Historie årsstudium","Alle"
|
||||||
|
"HIVE 222205 Matematikk","Alle"
|
||||||
|
"HIVE 222240 Sosiologi årsstudium",35.6
|
||||||
|
"HIVE 222242 Samfunnsfag","Alle"
|
||||||
|
"HIVE 222318 Revisjon","Alle"
|
||||||
|
"HIVE 222351 Ungdomskunnskap","Alle"
|
||||||
|
"HIVE 222352 Maritim teknisk driftsledelse","Alle"
|
||||||
|
"HIVE 222353 Nautikk","Alle"
|
||||||
|
"HIVE 222369 Økonomi og administrasjon",36.7
|
||||||
|
"HIVE 222412 Informasjonssystemer","Alle"
|
||||||
|
"HIVE 222418 Internasjonal forståelse og samarbeid","Alle"
|
||||||
|
"HIVE 222440 Idrett ernæring og helse",39.6
|
||||||
|
"HIVE 222446 Mat og helse","Alle"
|
||||||
|
"HIVE 222453 Informasjonssystemer og IT-ledelse","Alle"
|
||||||
|
"HIVE 222481 Historie","Alle"
|
||||||
|
"HIVE 222547 Grunnskolelærerutdanning 1.-7. trinn","Alle"
|
||||||
|
"HIVE 222548 Grunnskolelærerutdanning 1.- 7. trinn trainee","Alle"
|
||||||
|
"HIVE 222620 IKT i læring","Alle"
|
||||||
|
"HIVE 222626 Religion livssyn og etikk","Alle"
|
||||||
|
"HIVE 222642 Kunst og håndverk","Alle"
|
||||||
|
"HIVE 222649 Idrett årsstudium",40.8
|
||||||
|
"HIVE 222651 Grunnskolelærerutdanning 5.-10. trinn","Alle"
|
||||||
|
"HIVE 222666 Naturfag","Alle"
|
||||||
|
"HIVE 222667 Musikk","Alle"
|
||||||
|
"HIVE 222672 Norsk","Alle"
|
||||||
|
"HIVE 222796 Teater for barn og unge","Alle"
|
||||||
|
"HIVE 222823 Ingeniør mikro- og nanoteknologi","Alle"
|
||||||
|
"HIVE 222880 Sosiologi","Alle"
|
||||||
|
"HIVE 222912 Spansk","Alle"
|
||||||
|
"HIØ 224003 Ingeniør bygg Fredrikstad","Alle"
|
||||||
|
"HIØ 224004 Ingeniør data Halden","Alle"
|
||||||
|
"HIØ 224005 Ingeniør elektro Fredrikstad","Alle"
|
||||||
|
"HIØ 224012 Ingeniør maskin Fredrikstad","Alle"
|
||||||
|
"HIØ 224035 Økonomi og administrasjon Halden","Alle"
|
||||||
|
"HIØ 224050 Sykepleierutdanning Fredrikstad",32.9
|
||||||
|
"HIØ 224051 Sykepleierutdanning deltid Fredrikstad","Alle"
|
||||||
|
"HIØ 224060 Vernepleierutdanning Fredrikstad",31.5
|
||||||
|
"HIØ 224061 Vernepleierutdanning deltid Fredrikstad","Alle"
|
||||||
|
"HIØ 224070 Barnevern Fredrikstad",37.9
|
||||||
|
"HIØ 224080 Sosialt arbeid Fredrikstad",39.3
|
||||||
|
"HIØ 224130 Førskolelærerutdanning Halden","Alle"
|
||||||
|
"HIØ 224131 Førskolelærerutdanning deltid Halden","Alle"
|
||||||
|
"HIØ 224170 Engelsk Halden","Alle"
|
||||||
|
"HIØ 224210 Norsk Halden","Alle"
|
||||||
|
"HIØ 224238 Statsvitenskap Halden","Alle"
|
||||||
|
"HIØ 224244 Tysk Halden","Alle"
|
||||||
|
"HIØ 224270 Informatikk -design/utvikl. av IT-systemer Halden","Alle"
|
||||||
|
"HIØ 224318 Revisjon Halden","Alle"
|
||||||
|
"HIØ 224398 Bedriftsøkonomi Halden","Alle"
|
||||||
|
"HIØ 224453 Informasjonssystemer Halden","Alle"
|
||||||
|
"HIØ 224455 Internasjonal kommunikasjon Halden","Alle"
|
||||||
|
"HIØ 224474 Samfunn språk og kultur Halden","Alle"
|
||||||
|
"HIØ 224505 Kunst og håndverk Halden","Alle"
|
||||||
|
"HIØ 224547 Grunnskolelærerutdanning 1.-7. trinn Halden","Alle"
|
||||||
|
"HIØ 224610 Fransk Halden","Alle"
|
||||||
|
"HIØ 224620 Informasjonsteknologi Halden","Alle"
|
||||||
|
"HIØ 224626 Religion livssyn og etikk Halden","Alle"
|
||||||
|
"HIØ 224649 Kroppsøving og idrett Halden",33.5
|
||||||
|
"HIØ 224651 Grunnskolelærerutdanning 5.-10. trinn Halden","Alle"
|
||||||
|
"HIØ 224661 Matematikk Halden","Alle"
|
||||||
|
"HIØ 224666 Naturfag Halden","Alle"
|
||||||
|
"HIØ 224667 Musikk Halden","Alle"
|
||||||
|
"HIØ 224680 Samfunnsfag Halden","Alle"
|
||||||
|
"HIØ 224702 Bioingeniørutdanning Fredrikstad","Alle"
|
||||||
|
"HIØ 224824 Ingeniør industriell design Fredrikstad","Alle"
|
||||||
|
"HIØ 224845 Digital medieproduksjon Halden","Alle"
|
||||||
|
"HIØ 224895 Innovasjon og prosjektledelse Fredrikstad",32.4
|
||||||
|
"HIØ 224900 Arbeids- og velferdsfag Fredrikstad","Alle"
|
||||||
|
"HIØ 224912 Spansk Halden","Alle"
|
||||||
|
"HIÅ 225003 Ingeniør bygg","Alle"
|
||||||
|
"HIÅ 225004 Ingeniør data","Alle"
|
||||||
|
"HIÅ 225017 Ingeniør automatiseringsteknikk","Alle"
|
||||||
|
"HIÅ 225045 Ingeniør produkt- og systemdesign","Alle"
|
||||||
|
"HIÅ 225050 Sykepleierutdanning",29.1
|
||||||
|
"HIÅ 225160 Shipping og økonomi","Alle"
|
||||||
|
"HIÅ 225162 Økonomi og ledelse",36.5
|
||||||
|
"HIÅ 225184 Medisinsk og marint årsstudium","Alle"
|
||||||
|
"HIÅ 225299 Bachelor i Marine- og biologiske fag","Alle"
|
||||||
|
"HIÅ 225353 Maritim utdanning nautikk",43.2
|
||||||
|
"HIÅ 225369 Økonomi og administrasjon",39.1
|
||||||
|
"HIÅ 225410 Handels- og Serviceledelse",34.1
|
||||||
|
"HIÅ 225432 Shipping og logistikk",35.8
|
||||||
|
"HIÅ 225473 Eksportmarkedsføring",35.5
|
||||||
|
"HIÅ 225699 Ingeniør skipsdesign","Alle"
|
||||||
|
"HIÅ 225702 Bioingeniør","Alle"
|
||||||
|
"HIÅ 225895 Innovasjonsledelse og entreprenørskap",37.4
|
||||||
|
"HD 232050 Sykepleierutdanning",42.7
|
||||||
|
"LDH 230050 Sykepleierutdanning",43
|
||||||
|
"MHS 256196 Kristendomskunnskap/RLE","Alle"
|
||||||
|
"MHS 256418 Interkult. kommunikasjon og globalt samarb.","Alle"
|
||||||
|
"MHS 256480 Teologi","Alle"
|
||||||
|
"MHS 256482 Religion og interkulturell kommunikasjon","Alle"
|
||||||
|
"MHS 256680 Samfunnsfag","Alle"
|
||||||
|
"MHS 256771 Teologi profesjonsstudium","Alle"
|
||||||
|
"NHH 191345 Siviløkonomutdanningen",55.2
|
||||||
|
"NTNU 194104 Afrikastudier årsstudium",33.8
|
||||||
|
"NTNU 194109 Yrkesfaglærerutd. bygg- og anleggsteknikk","Alle"
|
||||||
|
"NTNU 194123 Yrkesfaglærerutdanning helse- og sosialfag","Alle"
|
||||||
|
"NTNU 194129 Yrkesfaglærerutdanning teknikk og industriell prod","Alle"
|
||||||
|
"NTNU 194170 Engelsk årsstudium",42.9
|
||||||
|
"NTNU 194171 Rådgiving og voksnes læring","Alle"
|
||||||
|
"NTNU 194174 Fransk årsstudium","Alle"
|
||||||
|
"NTNU 194179 Historie årsstudium",40
|
||||||
|
"NTNU 194184 Biologi og kjemi årsstudium",51.1
|
||||||
|
"NTNU 194188 Informatikk årsstudium","Alle"
|
||||||
|
"NTNU 194200 Kunsthistorie","Alle"
|
||||||
|
"NTNU 194205 Matematikk og statistikk årsstudium",47.6
|
||||||
|
"NTNU 194210 Nordisk årsstudium","Alle"
|
||||||
|
"NTNU 194220 Pedagogikk årsstudium",39.2
|
||||||
|
"NTNU 194238 Statsvitenskap årsstudium",46.1
|
||||||
|
"NTNU 194239 Samfunnsøkonomi årsstudium",45
|
||||||
|
"NTNU 194240 Sosiologi årsstudium",44.1
|
||||||
|
"NTNU 194242 Studier av kunnskap teknologi og samfunn (STS)",41.8
|
||||||
|
"NTNU 194244 Tysk årsstudium","Alle"
|
||||||
|
"NTNU 194272 Kunsthistorie årsstudium","Alle"
|
||||||
|
"NTNU 194284 Geografi årsstudium",39.9
|
||||||
|
"NTNU 194285 Samfunnskunnskap årsstudium",42.2
|
||||||
|
"NTNU 194294 Latin","Alle"
|
||||||
|
"NTNU 194324 Emnestudier samfunnsvitenskap",41.1
|
||||||
|
"NTNU 194327 Biologi",49.4
|
||||||
|
"NTNU 194366 Filosofi årsstudium",41.9
|
||||||
|
"NTNU 194367 Sosialantropologi årsstudium",43
|
||||||
|
"NTNU 194395 Informatikk",44.3
|
||||||
|
"NTNU 194437 Musikkvitenskap","Alle"
|
||||||
|
"NTNU 194438 Geografi",30
|
||||||
|
"NTNU 194439 Drama og teater",41.2
|
||||||
|
"NTNU 194440 Bevegelsesvitenskap",44.7
|
||||||
|
"NTNU 194456 Allmenn litteraturvitenskap","Alle"
|
||||||
|
"NTNU 194457 Lingvistikk","Alle"
|
||||||
|
"NTNU 194459 Antikkens kultur","Alle"
|
||||||
|
"NTNU 194476 Musikkteknologi",45.6
|
||||||
|
"NTNU 194478 Arkeologi",39.1
|
||||||
|
"NTNU 194479 Filosofi",34.8
|
||||||
|
"NTNU 194481 Historie",33.5
|
||||||
|
"NTNU 194486 Samfunns- og idrettsvitenskap",42.4
|
||||||
|
"NTNU 194615 Allmenn litteraturvitenskap årsstudium","Alle"
|
||||||
|
"NTNU 194626 Kristendomsk. med religions- og livssynsk.","Alle"
|
||||||
|
"NTNU 194646 Film- og videoproduksjon",46.6
|
||||||
|
"NTNU 194649 Kroppsøving og idrett årsstudium",51.8
|
||||||
|
"NTNU 194684 Lektorutdanning i historie",49.5
|
||||||
|
"NTNU 194685 Lektorutdanning språkfag/engelsk",44.3
|
||||||
|
"NTNU 194686 Lektorutdanning språkfag/fransk","Alle"
|
||||||
|
"NTNU 194687 Lektorutdanning språkfag/nordisk",45.8
|
||||||
|
"NTNU 194689 Lektorutdanning språkfag/tysk","Alle"
|
||||||
|
"NTNU 194715 Emnestudier humaniora årsstudium","Alle"
|
||||||
|
"NTNU 194740 Medisin",58.4
|
||||||
|
"NTNU 194752 Psykologi årsstudium",48
|
||||||
|
"NTNU 194755 Materialteknologi",51.9
|
||||||
|
"NTNU 194756 Arkitekt",52.7
|
||||||
|
"NTNU 194757 Petroleumsfag",51.9
|
||||||
|
"NTNU 194759 Bygg- og miljøteknikk",51.9
|
||||||
|
"NTNU 194760 Datateknikk",50.9
|
||||||
|
"NTNU 194761 Elektronikk",47.8
|
||||||
|
"NTNU 194763 Fysikk og matematikk",56.5
|
||||||
|
"NTNU 194764 Industriell kjemi og bioteknologi",52.6
|
||||||
|
"NTNU 194765 Marin teknikk",53.1
|
||||||
|
"NTNU 194766 Produktutvikling og produksjon",52.8
|
||||||
|
"NTNU 194767 Industriell økonomi og teknologiledelse",58.9
|
||||||
|
"NTNU 194768 Industriell design",54.4
|
||||||
|
"NTNU 194769 Energi og miljø",54.6
|
||||||
|
"NTNU 194770 Kommunikasjonsteknologi",49.6
|
||||||
|
"NTNU 194786 Europastudier med fremmedspråk spansk","Alle"
|
||||||
|
"NTNU 194793 Europastudier med fremmedspråk fransk","Alle"
|
||||||
|
"NTNU 194795 Europastudier med fremmedspråk tysk","Alle"
|
||||||
|
"NTNU 194798 Teknisk kybernetikk",51.5
|
||||||
|
"NTNU 194818 Samfunnsøkonomi master",46.6
|
||||||
|
"NTNU 194843 Lektorutdanning i realfag",48.6
|
||||||
|
"NTNU 194847 Filmvitenskap","Alle"
|
||||||
|
"NTNU 194851 Medievitenskap",38.5
|
||||||
|
"NTNU 194852 Pedagogikk",35
|
||||||
|
"NTNU 194855 Bioteknologi master",52.6
|
||||||
|
"NTNU 194857 Fysikk",52.7
|
||||||
|
"NTNU 194859 Geologi",47.2
|
||||||
|
"NTNU 194860 Kjemi",49.2
|
||||||
|
"NTNU 194862 Matematiske fag",49.8
|
||||||
|
"NTNU 194868 Afrikastudier","Alle"
|
||||||
|
"NTNU 194870 Europastudier med fremmedspråk engelsk",42.4
|
||||||
|
"NTNU 194875 Politisk økonomi",44.4
|
||||||
|
"NTNU 194876 Psykologi",46.7
|
||||||
|
"NTNU 194879 Sosialantropologi",37.5
|
||||||
|
"NTNU 194880 Sosiologi",39.3
|
||||||
|
"NTNU 194881 Statsvitenskap",44.6
|
||||||
|
"NTNU 194887 Engelsk",35.6
|
||||||
|
"NTNU 194888 Fransk","Alle"
|
||||||
|
"NTNU 194889 Nordisk","Alle"
|
||||||
|
"NTNU 194890 Tysk","Alle"
|
||||||
|
"NTNU 194898 Samfunnsøkonomi",43.9
|
||||||
|
"NTNU 194901 Språklig kommunikasjon","Alle"
|
||||||
|
"NTNU 194904 Kulturminneforvaltning","Alle"
|
||||||
|
"NTNU 194905 Ingeniørvitenskap og IKT",52
|
||||||
|
"NTNU 194910 Religionsvitenskap årsstudium","Alle"
|
||||||
|
"NTNU 194912 Spansk årsstudium",36.9
|
||||||
|
"NTNU 194929 Religionsvitenskap","Alle"
|
||||||
|
"NTNU 194930 Fonetikk","Alle"
|
||||||
|
"NTNU 194932 Klassisk språk og litteratur","Alle"
|
||||||
|
"NTNU 194934 Lektorutdanning i geografi",46.3
|
||||||
|
"NTNU 194937 Nanoteknologi",61.9
|
||||||
|
"NTNU 194941 Psykologi profesjonsstudiet",55.2
|
||||||
|
"NTNU 194945 Lektorutdanning i samfunnsfag",48.4
|
||||||
|
"NTNU 194946 Tekniske geofag",51.5
|
||||||
|
"NLA 254130 Førskolelærerutdanning","Alle"
|
||||||
|
"NLA 254182 Menighetspedagogikk","Alle"
|
||||||
|
"NLA 254196 KRLE årsstudium","Alle"
|
||||||
|
"NLA 254220 Pedagogikk årsstudium",34.6
|
||||||
|
"NLA 254418 Interkulturell forståelse vekt på Sør-Amerika",36.3
|
||||||
|
"NLA 254480 Teologi","Alle"
|
||||||
|
"NLA 254482 Kristendomskunnskap","Alle"
|
||||||
|
"NLA 254485 Kristendom og idrett","Alle"
|
||||||
|
"NLA 254547 Grunnskolelærerutdanning 1.-7. trinn","Alle"
|
||||||
|
"NLA 254651 Grunnskolelærerutdanning 5.-10. trinn","Alle"
|
||||||
|
"NLA 254717 Interkulturell forståelse vekt på Norge","Alle"
|
||||||
|
"NLA 254791 Interkulturell forståelse vekt på Øst-Asia","Alle"
|
||||||
|
"NLA 254852 Pedagogikk",43.3
|
||||||
|
"NLA 254902 Interkulturell forståelse vekt på Øst-Afrika","Alle"
|
||||||
|
"NLA 254929 Religion og kultur","Alle"
|
||||||
|
"SA/SH 231064 Samisk språk og litteratur","Alle"
|
||||||
|
"SA/SH 231065 Duodji (samisk håndverk)","Alle"
|
||||||
|
"SA/SH 231066 Reindriftsstudier","Alle"
|
||||||
|
"SA/SH 231135 Samisk førskolelærerutdanning","Alle"
|
||||||
|
"SA/SH 231557 Samisk grunnskolelærer 1-7","Alle"
|
||||||
|
"SA/SH 231651 Samisk grunnskolelærerutdanning 5.-10. trinn","Alle"
|
||||||
|
"UIA 201003 Ingeniør byggdesign Grimstad","Alle"
|
||||||
|
"UIA 201004 Ingeniør data Grimstad","Alle"
|
||||||
|
"UIA 201006 Ingeniør fornybar energi Grimstad","Alle"
|
||||||
|
"UIA 201007 Ingeniør flyteknikk Grimstad","Alle"
|
||||||
|
"UIA 201012 Ingeniør maskin Grimstad","Alle"
|
||||||
|
"UIA 201050 Sykepleierutdanning Kr.sand",40.1
|
||||||
|
"UIA 201052 Sykepleierutdanning Grimstad",37.5
|
||||||
|
"UIA 201060 Vernepleierutdanning Grimstad",37.1
|
||||||
|
"UIA 201080 Sosionomutdanning",41.8
|
||||||
|
"UIA 201083 Grunnskolelærerutdanning 5.-10. trinn master","Alle"
|
||||||
|
"UIA 201084 Grunnskolelærerutdanning 1.-7. trinn master","Alle"
|
||||||
|
"UIA 201130 Førskolelærerutd. Kr.sand.","Alle"
|
||||||
|
"UIA 201132 Førskolelærerutd. Grimstad","Alle"
|
||||||
|
"UIA 201149 Multimedieteknologi og -design Grimstad","Alle"
|
||||||
|
"UIA 201157 Faglærerutdanning i drama","Alle"
|
||||||
|
"UIA 201170 Engelsk årsstudium","Alle"
|
||||||
|
"UIA 201172 Friluftsliv og naturguiding årsstudium","Alle"
|
||||||
|
"UIA 201174 Fransk årsstudium","Alle"
|
||||||
|
"UIA 201179 Historie årsstudium","Alle"
|
||||||
|
"UIA 201184 Biologi årsstudium","Alle"
|
||||||
|
"UIA 201189 IT og informasjonssystemer årsstudium","Alle"
|
||||||
|
"UIA 201200 Kunstfag med fordypning i kunst og håndverk","Alle"
|
||||||
|
"UIA 201203 Folkehelsearbeid",40.5
|
||||||
|
"UIA 201205 Matematikk årsstudium","Alle"
|
||||||
|
"UIA 201210 Nordisk språk og litteratur årsstudium","Alle"
|
||||||
|
"UIA 201238 Statsvitenskap årsstudium",36.9
|
||||||
|
"UIA 201242 Samfunnsfag årsstudium",35
|
||||||
|
"UIA 201247 Utviklingsstudiet årsstudium",41.8
|
||||||
|
"UIA 201260 IT og informasjonssystemer",33
|
||||||
|
"UIA 201301 Matematisk finans","Alle"
|
||||||
|
"UIA 201303 Oversetting og interkulturell kom. engelsk","Alle"
|
||||||
|
"UIA 201317 Opplevelsesbasert reiseliv",36.6
|
||||||
|
"UIA 201318 Revisjon",39.7
|
||||||
|
"UIA 201327 Biologi","Alle"
|
||||||
|
"UIA 201336 Skolebibliotekkunnskap deltid","Alle"
|
||||||
|
"UIA 201345 Økonomi og administrasjon - siviløkonom",45.8
|
||||||
|
"UIA 201366 Filosofi årsstudium","Alle"
|
||||||
|
"UIA 201369 Økonomi og administrasjon Kr.sand",42.7
|
||||||
|
"UIA 201404 Økonomi og administrasjon Grimstad",40.1
|
||||||
|
"UIA 201437 Kunstfag med fordypning i musikk","Alle"
|
||||||
|
"UIA 201440 Idrett",42.9
|
||||||
|
"UIA 201456 Litteratur film og teater","Alle"
|
||||||
|
"UIA 201474 Samfunnsendring og kommunikasjon","Alle"
|
||||||
|
"UIA 201481 Historie","Alle"
|
||||||
|
"UIA 201482 Religion etikk og kultur","Alle"
|
||||||
|
"UIA 201484 Utviklingsstudier",39.3
|
||||||
|
"UIA 201547 Grunnskolelærerutdanning 1.-7. trinn Kristiansand","Alle"
|
||||||
|
"UIA 201548 Grunnskolelærerutdanning 1.-7. trinn Grimstad","Alle"
|
||||||
|
"UIA 201618 Drama årsstudium","Alle"
|
||||||
|
"UIA 201642 Kunst og håndverk årsstudium","Alle"
|
||||||
|
"UIA 201646 Ernæring mat og kultur årsstudium",40.5
|
||||||
|
"UIA 201649 Idrett årsstudium",43.5
|
||||||
|
"UIA 201651 Grunnskolelærerutdanning 5.-10. trinn Kr. sand",38.7
|
||||||
|
"UIA 201652 Religion og etikk årsstudium","Alle"
|
||||||
|
"UIA 201661 Fysikk årsstudium","Alle"
|
||||||
|
"UIA 201663 Mediefag årsstudium",36.9
|
||||||
|
"UIA 201667 Musikk årsstudium",42.9
|
||||||
|
"UIA 201676 Pedagogikk årsstudium",37.3
|
||||||
|
"UIA 201690 Tysk årsstudium","Alle"
|
||||||
|
"UIA 201702 Bioingeniør",41.5
|
||||||
|
"UIA 201767 Industriell økonomi og tekn.ledelse Grimstad",48.1
|
||||||
|
"UIA 201794 Kommunikasjon årsstudium","Alle"
|
||||||
|
"UIA 201803 Ingeniør elektronikk Grimstad","Alle"
|
||||||
|
"UIA 201807 Informasjons- og kom.teknologi Grimstad","Alle"
|
||||||
|
"UIA 201828 Lektorutdanning i realfag","Alle"
|
||||||
|
"UIA 201850 Kommunikasjon",40
|
||||||
|
"UIA 201852 Pedagogikk",31.3
|
||||||
|
"UIA 201862 Matematikk og fysikk","Alle"
|
||||||
|
"UIA 201864 Ernæring mat og kultur",46.8
|
||||||
|
"UIA 201881 Statsvitenskap",40
|
||||||
|
"UIA 201887 Engelsk","Alle"
|
||||||
|
"UIA 201889 Nordisk språk og litteratur","Alle"
|
||||||
|
"UIA 201900 Arbeids- og velferdssosiologi","Alle"
|
||||||
|
"UIA 201912 Spansk årsstudium","Alle"
|
||||||
|
"UIA 201922 Litteratur film og teater årsstudium","Alle"
|
||||||
|
"UMB 192199 Grunnstudium",53.3
|
||||||
|
"UMB 192230 Eiendomsfag",44.8
|
||||||
|
"UMB 192233 Frie realfag","Alle"
|
||||||
|
"UMB 192299 Bioteknologi",47.7
|
||||||
|
"UMB 192310 Landskapsingeniør",48
|
||||||
|
"UMB 192321 Husdyrvitenskap","Alle"
|
||||||
|
"UMB 192322 Skogfag","Alle"
|
||||||
|
"UMB 192327 Biologi",44.1
|
||||||
|
"UMB 192332 Kjemi","Alle"
|
||||||
|
"UMB 192369 Økonomi og administrasjon",47.2
|
||||||
|
"UMB 192377 Miljø og naturressurser","Alle"
|
||||||
|
"UMB 192388 Økologi og naturforvaltning","Alle"
|
||||||
|
"UMB 192406 Geomatikk: kart satellitter og 3D-modellering","Alle"
|
||||||
|
"UMB 192468 Samfunnsøkonomi",46.2
|
||||||
|
"UMB 192484 Internasjonale miljø- og utviklingsstudier",48.4
|
||||||
|
"UMB 192544 Hestefag","Alle"
|
||||||
|
"UMB 192732 Landskapsarkitektur",54.7
|
||||||
|
"UMB 192759 Byggeteknikk og arkitektur",49.8
|
||||||
|
"UMB 192766 Maskin- prosess- og produktutvikling",43.2
|
||||||
|
"UMB 192767 Industriell økonomi",52.3
|
||||||
|
"UMB 192783 Kjemi og bioteknologi","Alle"
|
||||||
|
"UMB 192784 Miljøfysikk og fornybar energi",49.2
|
||||||
|
"UMB 192809 Vann- og miljøteknikk","Alle"
|
||||||
|
"UMB 192813 Geomatikk: kart satellitter og 3D-mod. master","Alle"
|
||||||
|
"UMB 192835 Fornybar energi",51.5
|
||||||
|
"UMB 192842 Plantevitenskap","Alle"
|
||||||
|
"UMB 192843 Lektorutdanning i realfag","Alle"
|
||||||
|
"UMB 192857 Energi- og miljøfysikk",42.9
|
||||||
|
"UMB 192864 Matvitenskap","Alle"
|
||||||
|
"UMB 192949 By- og regionplanlegging",47.7
|
||||||
|
"UIO 185170 Engelsk årsstudium",58.7
|
||||||
|
"UIO 185174 Fransk årsstudium",55.9
|
||||||
|
"UIO 185179 Historie årsstudium",57.1
|
||||||
|
"UIO 185211 Nordisk særlig norsk språk og litteratur års",57.8
|
||||||
|
"UIO 185212 Norsk som andrespråk årsstudium",51.2
|
||||||
|
"UIO 185221 Tegnspråk årsstudium","Alle"
|
||||||
|
"UIO 185222 Tverrfaglige kjønnsstudier årsstudium",53.8
|
||||||
|
"UIO 185233 Realfag årsstudium","Alle"
|
||||||
|
"UIO 185272 Kunsthistorie årsstudium",56.7
|
||||||
|
"UIO 185306 Matematikk informatikk og teknologi","Alle"
|
||||||
|
"UIO 185308 Kultur og kommunikasjon",53
|
||||||
|
"UIO 185327 Biologi",44.4
|
||||||
|
"UIO 185437 Musikkvitenskap","Alle"
|
||||||
|
"UIO 185438 Samfunnsgeografi",52.5
|
||||||
|
"UIO 185439 Estetiske studier",50.6
|
||||||
|
"UIO 185452 Offentlig administrasjon og ledelse",54.2
|
||||||
|
"UIO 185455 Portugisisk",42.4
|
||||||
|
"UIO 185459 Antikk kultur og klassiske språk",46.8
|
||||||
|
"UIO 185461 Midtøstenstudier med tyrkisk","Alle"
|
||||||
|
"UIO 185462 Kunsthistorie",49
|
||||||
|
"UIO 185464 Informatikk: tekniske og naturvitenskaplige anv.","Alle"
|
||||||
|
"UIO 185465 Helseledelse og helseøkonomi",53.5
|
||||||
|
"UIO 185466 Tegnspråk og tolking","Alle"
|
||||||
|
"UIO 185478 Arkeologi",48.5
|
||||||
|
"UIO 185479 Filosofi og idéhistorie",48.4
|
||||||
|
"UIO 185480 Teologi og kristendom","Alle"
|
||||||
|
"UIO 185481 Historie",48.3
|
||||||
|
"UIO 185482 Religion og samfunn",45
|
||||||
|
"UIO 185483 Russisk",38
|
||||||
|
"UIO 185565 Italiensk",41.3
|
||||||
|
"UIO 185582 Japansk med Japan-studier",49.7
|
||||||
|
"UIO 185592 Kinesisk med Kina-studier",52.4
|
||||||
|
"UIO 185601 Arkivkunnskap årsstudium",53.9
|
||||||
|
"UIO 185604 Medievitenskap årsstudium",56.3
|
||||||
|
"UIO 185615 Allmenn litteraturvitenskap årsstudium",56.7
|
||||||
|
"UIO 185626 Kristendom årsstudium",47.8
|
||||||
|
"UIO 185690 Tysk årsstudium",51.8
|
||||||
|
"UIO 185698 Samfunnsøkonomisk analyse 5-årig",55
|
||||||
|
"UIO 185707 Farmasi",50.4
|
||||||
|
"UIO 185708 Master i klinisk ernæring start høst","Alle"
|
||||||
|
"UIO 185713 Master i klinisk ernæring start vår",63
|
||||||
|
"UIO 185724 Rettsvitenskap (jus) start høst",58.1
|
||||||
|
"UIO 185725 Rettsvitenskap (jus) start vår",55.7
|
||||||
|
"UIO 185740 Medisin start høst",68
|
||||||
|
"UIO 185742 Odontologi start høst",63.9
|
||||||
|
"UIO 185745 Medisin start vår",66.1
|
||||||
|
"UIO 185748 Odontologi start vår","Alle"
|
||||||
|
"UIO 185752 Psykologi årsstudium",57
|
||||||
|
"UIO 185771 Teologi profesjonsstudium","Alle"
|
||||||
|
"UIO 185786 Nederlandsk","Alle"
|
||||||
|
"UIO 185793 Fransk",40.4
|
||||||
|
"UIO 185795 Tysk","Alle"
|
||||||
|
"UIO 185817 Lektorprogrammet nordisk","Alle"
|
||||||
|
"UIO 185829 Informatikk: programmering og nettverk","Alle"
|
||||||
|
"UIO 185830 Informatikk: design bruk og interaksjon",46
|
||||||
|
"UIO 185832 Informatikk: nanoelektronikk og robotikk",38.8
|
||||||
|
"UIO 185837 Informatikk: språk og kommunikasjon",45.5
|
||||||
|
"UIO 185841 Demokrati og rettigheter i informasjonssamfunnet",50
|
||||||
|
"UIO 185843 Lektorprogrammet realfag","Alle"
|
||||||
|
"UIO 185844 Lektorprogrammet kultur og samfunnsfag",49.3
|
||||||
|
"UIO 185851 Medievitenskap",50.2
|
||||||
|
"UIO 185852 Pedagogikk",46.5
|
||||||
|
"UIO 185853 Spesialpedagogikk",46.4
|
||||||
|
"UIO 185856 Elektronikk og datateknologi","Alle"
|
||||||
|
"UIO 185857 Fysikk astronomi og meteorologi",40.9
|
||||||
|
"UIO 185858 Geofag: geologi geofysikk og geografi",43.8
|
||||||
|
"UIO 185860 Kjemi","Alle"
|
||||||
|
"UIO 185862 Matematikk og økonomi",51.8
|
||||||
|
"UIO 185863 Materialer energi og nanoteknologi","Alle"
|
||||||
|
"UIO 185865 Molekylærbiologi og biologisk kjemi",41.7
|
||||||
|
"UIO 185868 India områdestudier",48
|
||||||
|
"UIO 185870 Europastudier (EU)",51.8
|
||||||
|
"UIO 185872 Internasjonale studier",58.1
|
||||||
|
"UIO 185873 Tverrfaglige kjønnsstudier",47.6
|
||||||
|
"UIO 185874 Kriminologi",53.3
|
||||||
|
"UIO 185876 Psykologi",55.9
|
||||||
|
"UIO 185879 Sosialantropologi",50.2
|
||||||
|
"UIO 185880 Sosiologi",50.4
|
||||||
|
"UIO 185881 Statsvitenskap",54.2
|
||||||
|
"UIO 185883 Utviklingsstudier",51.7
|
||||||
|
"UIO 185889 Nordiske studier",46.9
|
||||||
|
"UIO 185893 Lingvistikk",55.7
|
||||||
|
"UIO 185898 Samfunnsøkonomi",55.5
|
||||||
|
"UIO 185899 Tannpleie",54.2
|
||||||
|
"UIO 185904 Kulturarv og bevaringskunnskap",49.8
|
||||||
|
"UIO 185912 Spansk årsstudium",60.2
|
||||||
|
"UIO 185918 Latin-Amerika-studier",45.5
|
||||||
|
"UIO 185919 Nord-Amerika-studier",44.8
|
||||||
|
"UIO 185920 Engelsk",51.6
|
||||||
|
"UIO 185922 Allmenn litteraturvitenskap",50.9
|
||||||
|
"UIO 185923 Midtøsten-studier med arabisk",52
|
||||||
|
"UIO 185924 Spansk",52.8
|
||||||
|
"UIO 185929 Religionshistorie og kulturhistorie",42
|
||||||
|
"UIO 185935 Lektorprogrammet fremmedspråk","Alle"
|
||||||
|
"UIO 185941 Psykologi profesjon start høst",64.9
|
||||||
|
"UIO 185942 Psykologi profesjon start vår",63
|
||||||
|
"UIS 217003 Bygg",40.7
|
||||||
|
"UIS 217004 Data","Alle"
|
||||||
|
"UIS 217005 Elektro","Alle"
|
||||||
|
"UIS 217009 Kjemi og miljø","Alle"
|
||||||
|
"UIS 217012 Maskin","Alle"
|
||||||
|
"UIS 217015 Petroleumsteknologi",44
|
||||||
|
"UIS 217046 Fjernsyns- og multimedieproduksjon",45.8
|
||||||
|
"UIS 217050 Sykepleierutdanning",36.3
|
||||||
|
"UIS 217070 Barnevern",37.1
|
||||||
|
"UIS 217080 Sosialt arbeid",39.8
|
||||||
|
"UIS 217130 Førskolelærerutdanning","Alle"
|
||||||
|
"UIS 217170 Engelsk årsstudium",32.3
|
||||||
|
"UIS 217179 Historie årsstudium","Alle"
|
||||||
|
"UIS 217196 Religionsstudier","Alle"
|
||||||
|
"UIS 217200 Kunst- og kulturstudier","Alle"
|
||||||
|
"UIS 217205 Matematikk årsstudium","Alle"
|
||||||
|
"UIS 217211 Nordisk årsstudium","Alle"
|
||||||
|
"UIS 217240 Sosiologi årsstudium",35.9
|
||||||
|
"UIS 217255 Hotelledelse","Alle"
|
||||||
|
"UIS 217317 Reiselivsledelse","Alle"
|
||||||
|
"UIS 217318 Regnskap og revisjon",39.2
|
||||||
|
"UIS 217345 Økonomi og administrasjon - siviløkonom master",46.7
|
||||||
|
"UIS 217369 Økonomi og administrasjon",43.9
|
||||||
|
"UIS 217440 Kroppsøving/idrett",38.9
|
||||||
|
"UIS 217454 Journalistikk",48.4
|
||||||
|
"UIS 217481 Historie","Alle"
|
||||||
|
"UIS 217505 Kunst og håndtverk",43
|
||||||
|
"UIS 217547 Grunnskolelærerutdanning 1.-7. trinn","Alle"
|
||||||
|
"UIS 217618 Drama","Alle"
|
||||||
|
"UIS 217649 Kroppsøving/idrett årsstudium",42.2
|
||||||
|
"UIS 217651 Grunnskolelærerutdanning 5.-10. trinn","Alle"
|
||||||
|
"UIS 217755 Konstruksjoner og materialer",38.7
|
||||||
|
"UIS 217800 Industriell økonomi",49.9
|
||||||
|
"UIS 217801 Petroleumsteknologi master",46.8
|
||||||
|
"UIS 217802 Offshoreteknologi",45.7
|
||||||
|
"UIS 217803 Informasjonsteknologi",41.5
|
||||||
|
"UIS 217844 Adjunkt- og lektorprogram i humanistiske fag","Alle"
|
||||||
|
"UIS 217857 Matematikk og fysikk","Alle"
|
||||||
|
"UIS 217860 Biologisk kjemi","Alle"
|
||||||
|
"UIS 217880 Sosiologi",32.9
|
||||||
|
"UIS 217881 Statsvitenskap",41.7
|
||||||
|
"UIS 217887 Engelsk språk og litteratur","Alle"
|
||||||
|
"UIS 217889 Nordisk språk og litteratur","Alle"
|
||||||
|
"UIS 217938 Byutvikling og urban design","Alle"
|
||||||
|
"UIS 217947 Petroleumsgeologi",41.4
|
||||||
|
"UIT 186002 Ingeniør Sikkerhet og miljø","Alle"
|
||||||
|
"UIT 186017 Ingeniør Automatiseringsteknikk","Alle"
|
||||||
|
"UIT 186018 Ingeniør Prosess/gassteknologi","Alle"
|
||||||
|
"UIT 186049 Ingeniør Nautikk","Alle"
|
||||||
|
"UIT 186050 Sykepleierutdanning",43.8
|
||||||
|
"UIT 186083 Lærerutdanning 5.-10. trinn integrert master","Alle"
|
||||||
|
"UIT 186084 Lærerutdanning 1.-7. trinn integrert master","Alle"
|
||||||
|
"UIT 186130 Førskolelærerutdanning","Alle"
|
||||||
|
"UIT 186132 Førskolelærerutdanning samlingsbasert","Alle"
|
||||||
|
"UIT 186137 Allmenn litteraturvitenskap oppstart vår","Alle"
|
||||||
|
"UIT 186164 Bedriftsøkonomi",38.6
|
||||||
|
"UIT 186170 Engelsk oppstart høst","Alle"
|
||||||
|
"UIT 186174 Fransk oppstart vår","Alle"
|
||||||
|
"UIT 186179 Historie oppstart høst","Alle"
|
||||||
|
"UIT 186205 Matematikk","Alle"
|
||||||
|
"UIT 186211 Nordisk oppstart høst","Alle"
|
||||||
|
"UIT 186222 Kjønnsstudier","Alle"
|
||||||
|
"UIT 186235 Nordsamisk som morsmål oppstart vår","Alle"
|
||||||
|
"UIT 186299 Bioteknologi","Alle"
|
||||||
|
"UIT 186306 Datasikkerhet","Alle"
|
||||||
|
"UIT 186327 Biologi klima og miljø","Alle"
|
||||||
|
"UIT 186331 Fiskeri- og havbruksvitenskap","Alle"
|
||||||
|
"UIT 186369 Økonomi og administrasjon",38.6
|
||||||
|
"UIT 186395 Informatikk","Alle"
|
||||||
|
"UIT 186427 Biomedisin","Alle"
|
||||||
|
"UIT 186474 Samfunnsplanlegging og kulturforståelse","Alle"
|
||||||
|
"UIT 186475 Kunstvitenskap","Alle"
|
||||||
|
"UIT 186478 Arkeologi","Alle"
|
||||||
|
"UIT 186479 Filosofi","Alle"
|
||||||
|
"UIT 186481 Historie","Alle"
|
||||||
|
"UIT 186482 Religionsvitenskap","Alle"
|
||||||
|
"UIT 186483 Russlandsstudier","Alle"
|
||||||
|
"UIT 186609 Antikkens kultur oppstart høst","Alle"
|
||||||
|
"UIT 186613 Historie oppstart vår","Alle"
|
||||||
|
"UIT 186615 Allmenn litteraturvitenskap oppstart høst","Alle"
|
||||||
|
"UIT 186616 Allmenn språkvitenskap oppstart høst","Alle"
|
||||||
|
"UIT 186623 Engelsk oppstart vår","Alle"
|
||||||
|
"UIT 186626 Religionsvitenskap oppstart vår","Alle"
|
||||||
|
"UIT 186644 Luftfartsfag","Alle"
|
||||||
|
"UIT 186677 Allmenn språkvitenskap oppstart vår","Alle"
|
||||||
|
"UIT 186692 Drama og teater","Alle"
|
||||||
|
"UIT 186700 Ergoterapeututdanning",41.4
|
||||||
|
"UIT 186701 Radiografutdanning",40
|
||||||
|
"UIT 186702 Bioingeniørutdanning","Alle"
|
||||||
|
"UIT 186703 Fysioterapeututdanning",53.6
|
||||||
|
"UIT 186707 Farmasi","Alle"
|
||||||
|
"UIT 186709 Fiskehelse","Alle"
|
||||||
|
"UIT 186712 Russisk oppstart vår","Alle"
|
||||||
|
"UIT 186724 Rettsvitenskap",47.3
|
||||||
|
"UIT 186739 Medisinske fag","Alle"
|
||||||
|
"UIT 186740 Medisin",61.2
|
||||||
|
"UIT 186742 Odontologi",58.8
|
||||||
|
"UIT 186743 Tannpleierutdanning",49.9
|
||||||
|
"UIT 186752 Psykologi årsstudium",42.6
|
||||||
|
"UIT 186769 Energi og miljø i nord","Alle"
|
||||||
|
"UIT 186770 Dataanalyse og sensorteknologi","Alle"
|
||||||
|
"UIT 186785 Informatikk master","Alle"
|
||||||
|
"UIT 186789 Antikkens kultur oppstart vår","Alle"
|
||||||
|
"UIT 186813 Industriell matematikk","Alle"
|
||||||
|
"UIT 186814 Romfysikk","Alle"
|
||||||
|
"UIT 186843 Lektorutdanning i realfag","Alle"
|
||||||
|
"UIT 186844 Lektorutdanning i språk og samfunnsfag","Alle"
|
||||||
|
"UIT 186846 Dokumentasjonsvitenskap","Alle"
|
||||||
|
"UIT 186852 Pedagogikk","Alle"
|
||||||
|
"UIT 186857 Fysikk","Alle"
|
||||||
|
"UIT 186859 Geologi","Alle"
|
||||||
|
"UIT 186860 Kjemi","Alle"
|
||||||
|
"UIT 186862 Matematikk og statistikk","Alle"
|
||||||
|
"UIT 186867 Ledelse innovasjon og marked",38.7
|
||||||
|
"UIT 186876 Psykologi",41.6
|
||||||
|
"UIT 186877 Samfunnssikkerhet og miljø","Alle"
|
||||||
|
"UIT 186878 Politikk økonomi og filosofi","Alle"
|
||||||
|
"UIT 186879 Sosialantropologi","Alle"
|
||||||
|
"UIT 186880 Sosiologi","Alle"
|
||||||
|
"UIT 186881 Statsvitenskap","Alle"
|
||||||
|
"UIT 186891 Språk og litteratur","Alle"
|
||||||
|
"UIT 186892 Språk og økonomi","Alle"
|
||||||
|
"UIT 186898 Samfunnsøkonomi","Alle"
|
||||||
|
"UIT 186910 Religionsvitenskap oppstart høst","Alle"
|
||||||
|
"UIT 186912 Spansk oppstart vår","Alle"
|
||||||
|
"UIT 186950 Nordisk oppstart vår","Alle"
|
|
|
@ -6,7 +6,7 @@ Dette er en [git-repo][git-repo] hvor jeg samler opp alle øvingene for TDT4109.
|
||||||
|
|
||||||
Flere av skriptene deler funksjoner fra mappen `common`. For at disse skal kjøre på en korrekt måte, må de kjøres som moduler og ikke alenestående skript.
|
Flere av skriptene deler funksjoner fra mappen `common`. For at disse skal kjøre på en korrekt måte, må de kjøres som moduler og ikke alenestående skript.
|
||||||
|
|
||||||
Eksempel på hvordan man skal kjøre en fil:
|
Eksempel på hvordan man skal kjøre en fil (OBS: Legg merke til forskjell på . og /):
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
python3 -m "Exercise 3.11 - Doble lokker.11a"
|
python3 -m "Exercise 3.11 - Doble lokker.11a"
|
||||||
|
|
|
@ -8,11 +8,21 @@ def boolInput(question, error='Skriv in J eller N\n', yesNoLetters=('j', 'n')):
|
||||||
yesNoLetters? ((str,str)): The letters to be used for representing yes and no in lower caps
|
yesNoLetters? ((str,str)): The letters to be used for representing yes and no in lower caps
|
||||||
"""
|
"""
|
||||||
yesLetters = [yesNoLetters[0], yesNoLetters[0].capitalize()]
|
yesLetters = [yesNoLetters[0], yesNoLetters[0].capitalize()]
|
||||||
noLetters = [yesNoLetters[1], yesNoLetters[1].capitalize()]
|
|
||||||
while True:
|
while True:
|
||||||
try:
|
try:
|
||||||
choice = input(question)
|
choice = input(question)
|
||||||
assert choice in yesLetters + noLetters
|
assert validateInput(choice, yesNoLetters)
|
||||||
return choice in yesLetters
|
return choice in yesLetters
|
||||||
except AssertionError:
|
except:
|
||||||
print(error)
|
print(error)
|
||||||
|
|
||||||
|
|
||||||
|
def validateInput(input, yesNoLetters):
|
||||||
|
yesLetters = [yesNoLetters[0], yesNoLetters[0].capitalize()]
|
||||||
|
noLetters = [yesNoLetters[1], yesNoLetters[1].capitalize()]
|
||||||
|
|
||||||
|
try:
|
||||||
|
assert input in yesLetters + noLetters
|
||||||
|
return True
|
||||||
|
except:
|
||||||
|
return False
|
|
@ -14,6 +14,14 @@ def inputTypeCheck(
|
||||||
while True:
|
while True:
|
||||||
inputValue = input(prompt)
|
inputValue = input(prompt)
|
||||||
try:
|
try:
|
||||||
|
assert validateInput(inputValue, type)
|
||||||
return type(inputValue)
|
return type(inputValue)
|
||||||
except ValueError:
|
except AssertionError:
|
||||||
print(error)
|
print(error)
|
||||||
|
|
||||||
|
def validateInput(input, type):
|
||||||
|
try:
|
||||||
|
_ = type(input)
|
||||||
|
return True
|
||||||
|
except:
|
||||||
|
return False
|
Loading…
Reference in New Issue