In deze opdracht coderen we strings bestaande uit 1'en en 0'en in langere versies van die strings. Die langere versies zijn dan bestand tegen fouten (bv. bij versturen over een netwerk), en afhankelijk van het soort code kan een fout niet alleen gedetecteerd maar ook gecorrigeerd worden. In deze oefening bouwen we twee klassen, namelijk Code en PariteitsCode. Elke code zet een string van $$a$$ karakters (enkel 1'en en 0'en) om naar een string van $$b$$ karakters (opnieuw enkel 1'en en 0'en), met $$b > a$$. Vervolgens programmeren we een klasse Bericht die in staat is om een string van willekeurige lengte te coderen en te decoderen.

Klasse Code

In deze code wordt een string met lengte $$a$$ gecodeerd als een aantal keer $$n$$ deze string na elkaar. Progammeer in deze klasse:

Voorbeeld

code = Code(4, 2)
str(code)						#'Code(4,8)'
te_coderen = ['1001', '1011']
gecodeerd = [code.codeer(i) for i in te_coderen]  #['10011001', '10111011']
te_decoderen = ['10011001', '10011011', '10111011', '10011011', '1001001']
gedecodeerd = [code.decodeer(i) for i in te_decoderen] #['1001', '10?1', '1011', '10?1', '????']

Klasse PariteitsCode

Deze klasse erft over van de klasse Code. De codering bestaat erin dat per groep van $$a$$ karakters (allen '0' of '1') precies 1 karakter toegevoegd wordt, zodat de gecodeerde versie uit $$b = a+1$$ karakters bestaat. Programmeer in deze klasse:

Voorbeeld

code = PariteitsCode(4)
str(code)											#'Code(4,5)'
te_coderen = ['1001', '1011']
gecodeerd = [code.codeer(i) for i in te_coderen]	#['10010', '10111']
te_decoderen = ['10010', '10011', '10111', '10010', '1001']
gedecodeerd = [code.decodeer(i) for i in te_decoderen] #['1001', '????', '1011', '1001', '????']

Klasse Bericht

Voorgaande klassen zijn in staat om strings van vooropgegeven lengte te coderen en te decoderen. In de klasse Bericht is het de bedoeling om strings van willekeurige lengte (bestaande uit louter 1'en en 0'en) te coderen en te decoderen. Programmeer in deze klasse:

Voorbeeld

bericht = Bericht('100101')
code = Code(4, 2)
pariteit = PariteitsCode(4)
c_code = bericht.codeer(code)   	#'1001100101000100'
p_code = bericht.codeer(pariteit) 	#'1001001001'
bericht_c = Bericht(c_code)
bericht_c.decodeer(code)			# '10010100'
bericht_p = Bericht(p_code)
bericht_p.decodeer(pariteit)		# '10010100'
b1 = Bericht('1001100101000100')
b1.decodeer(code)					# '10010100'
b2 = Bericht('1001001001')
b2.decodeer(pariteit)				# '10010100'