Løsningsforslag 7
Oppgave 1
def random_series(a):
n = len(a)
series_sum = 0
for i in range(n):
series_sum += a[i] / (i + 1)
return series_sum
Oppgave 2
def sum_of_column(a, col):
total = 0
for row in a:
total += row[col]
return total
# eller, med list comprehension
def sum_of_column(a, col):
return sum([ row[col] for row in a ])
Oppgave 3
def median(a):
sorted_a = sorted(a)
n = len(a)
# finner indeks i midten
mid = n // 2
if n % 2 == 0:
return (sorted_a[mid - 1] + sorted_a[mid]) / 2
else:
return sorted_a[mid]
Oppgave 4
def smallest_absolute_difference(a, b):
min_diff = abs(a[0] - b[0])
for num_a in a:
for num_b in b:
diff = abs(num_a - num_b)
if diff < min_diff:
min_diff = diff
return min_diff
# eller, med list comprehension
def smallest_absolute_difference(a, b):
return min([ abs(num_a - num_b) for num_a in a for num_b in b ])
Oppgave 5
# Oppgave A
def compress(seq):
output = []
count = 1
if seq[0] == "1":
output.append("0")
for i in range(len(seq) - 1):
if seq[i] == seq[i + 1]:
count += 1
else:
output.append(str(count))
count = 1
output.append(str(count))
return ' '.join(output)
# eller, uten range(len())
def compress(seq):
output = []
previous = seq[0]
if previous == "1":
output.append("0")
count = 1
for bit in seq[1:]:
if bit == previous:
count += 1
else:
output.append(str(count))
count = 1
previous = bit
output.append(str(count))
return ' '.join(output)
# Oppgave B
def decompress(seq):
output = []
bit = 0
for num in seq.split(" "):
bits = str(bit) * int(num)
output.append(bits)
bit = int(not bit) # bytter ut 0 med 1 eller 1 med 0
# bit = (bit + 1) % 2 # bytter ut 0 med 1 eller 1 med 0
# bit = (0 if bit == 1 else 1) # bytter ut 0 med 1 eller 1 med 0
return ''.join(output)
Bonus 1
#Skrevet av Viljar Gjerde H22
def find_words_in_character_grid(char_grid, words):
found_words = []
for word in words:
if find_word_in_grid(char_grid,word):
found_words.append(word)
return found_words
def find_word_in_grid(grid,word):
for row in grid:
if find_word_in_lst(row,word):
return True
cols = get_columns(grid)
for col in cols:
if find_word_in_lst(col,word):
return True
return False
def find_word_in_lst(char_lst,word):
return word in "".join(char_lst)
def get_columns(grid):
cols= []
for i in range(len(grid[0])):
col = [row[i] for row in grid]
cols.append(col)
return cols
# Unngå å gjøre .join hver gang i løkken
# ved å lage strengene bare en gang
def find_words_in_character_grid(char_grid, words):
rows = get_rows(char_grid)
cols = get_cols(char_grid)
found_words = []
for word in words:
for line in rows + cols:
if word in line:
found_words.append(word)
# trenger ikke se på de andre linjene etter vi finner ordet
break
return found_words
def get_rows(grid):
return [ "".join(row) for row in grid ]
def get_cols(grid):
N_cols = len(grid[0])
cols= []
for i in range(N_cols):
col = [row[i] for row in grid]
cols.append("".join(col))
return cols