#
# Eksamen 1997 Juni 3
#
# Tue Apr 13 15:21:32 1999 -- Jens Svalgaard Frederiksen
#

# b)

# Til WhiskyType bruges tupler med:
navn, kar = 0,1
# hvor w[kar] er en liste af {0,1}
# Til KlasseType bruges igen tupler med:
elm, antal, middel = 0,1,2
# og hvor elm implementeres som en liste af WhiskyType,
# mens middel implementeres som en liste af tal

def forening(K,L):
  # jeg forudsætter, at K og L er disjunkte klasser
  ny_elm   = K[elm]   + L[elm]
  ny_antal = K[antal] + L[antal]
  ny_middel = []
  for i in range(68):
    ny_middel.append( (K[antal] * K[middel][i] + L[antal] * L[middel][i])/ \
		             (K[antal] + L[antal]))

  return (ny_elm, ny_antal, ny_middel)

# c)

from math import sqrt

def afstand(K,L):
  sum = 0

  for i in range(68):
    sum = sum + (K[middel][i] - L[middel][i])**2

  return sqrt(sum)

# d)

# Igen kan typen Klassedeling implementeres som en liste af klasseType

def start_inddeling(W):
  si = []
  for w in W:
    si.append(([w],1,w[kar]))
  return s

# f)

def step(W):
  if len(W) > 1:
    w1, w2 = W[0], W[1]

    for i in range(len(W)):
      for j in range(i+1,len(W)):
	if afstand(W[i],W[j]) < afstand(w1,w2):
	  w1,w2 = W[i],W[j]

    W.remove(w1)
    W.remove(w2)
    W.append(forening(w1,w2))

  return W

# g)

def klassifikation(W):
  K = start_inddeling(W)
  
  while len(K) >= 12:
    step(K)
  return K

