# Oppgave: tell hvor mange ganger c opptrer i s
def count_char(c, s):
    '''
    Counts how many occurances of c there are in s.
    '''
    count = 0
    for cs in s:
        if cs == c:
            count += 1
    return count


# Oppgave: finn posisjonen til element c i samlingen s (tidligste posisjon)
def index_of(c, s):
    position = 0
    for cs in s:
        if cs == c:
            return position
        position += 1
    return position

assert 2 == index_of('t', 'Dette er en streng')


# Oppgave: finn posisjonen til n'te gang c opptrer i strengen
def nth_index_of(n, c, s):
    position = 0
    count = 0
    for cs in s:
        if cs == c:
            count += 1
            if count == n:
                return position
        position += 1
    return position

assert 13 == nth_index_of(3, 't', 'Dette er en streng')


## Oppgave: gitt et heltall n, hvor mange siffer er det i n?
def num_of_digits(n):
    count = 0
    # så lenge det finnes siffer igjen i tallet:
    while n >= 1:
        n /= 10 # dele på 10 flytter komma til venstre
        count += 1
    return count

assert 3 == num_of_digits(123)
assert 5 == num_of_digits(54321)

# Bruke en while-løkke for å løse et for-løkke-problem
# FOR -løkke
def for_example():
    s = 'Hello'
    for c in s:
        print(c)

# for_example()

# Det samme med WHILE:
def while_example():
    s = 'Hello'
    i = 0
    while i < len(s):
        c = s[i]
        print(c)
        i += 1

# while_example()

# Evig løkke
def infinite_loop():
    i = 0
    while i < 10:
        print(i)
        i = 1      # skrivefeil, mente egentli +=

# infinite_loop()

# Faktor
## Spørsmål 1: er 4 en faktor i 209414732?
# Bruker modulo-operator for å se rest-verdi ved heltallsdivisjon 209414732/4
# (hvis rest-verdien er 0, er n delbart med 4)
n = 209414732
is_divisible_by_4 = (n % 4) == 0

## Spørsmål 2: hva er største heltallsfaktor i n (f. eks 209414732)?
def largest_factor(n):
    largest_factor_so_far = 1
    # prøv alle mulige faktorer 1... n-1 og husk på den siste av dem
    for potential_factor in range(1, n):
        is_factor = (n % potential_factor) == 0
        if is_factor:
            largest_factor_so_far = potential_factor
    
    return largest_factor_so_far

assert 2 == largest_factor(4)
assert 1 == largest_factor(13)
assert 5 == largest_factor(25)

# Primtall
## Er tallet x et primtall?
def is_prime(x):
    return largest_factor(x) == 1

assert is_prime(5)
assert not is_prime(6)

## Finn det 100'ede primtallet
def nth_prime(n):
    count = 0
    guess = 2 # gjetning øker med 1 hver gang løkken kjøres
    while True:
        if is_prime(guess):
            count += 1
            if count == n:
                return guess
        guess += 1

assert 2 == nth_prime(1)
assert 3 == nth_prime(2)
assert 5 == nth_prime(3)
assert 7 == nth_prime(4)
assert 11 == nth_prime(5)

print(nth_prime(100))

