Bij spoorhekcodering (of zigzagcodering) worden de letters van een gegeven tekst eerst diagonaal naar beneden uitgeschreven op opeenvolgende "sporen" van een denkbeeldig hek. Nadat het onderste spoor bereikt wordt, gaat het uitschrijven van de letters diagonaal naar boven verder. De tekst wordt opnieuw diagonaal naar beneden uitgeschreven van zodra het bovenste spoor bereikt wordt. Deze procedure herhaalt zich totdat alle letters van de tekst uitgeschreven zijn.
Als we bijvoorbeeld op vier sporen de tekst
And now for something completely different.
uitschrijven, dan krijgen we
A#####w#####s#####i#####m#####l#####f#####.
#n###o# ### #o###h#n###o#p###e#y###f#e###t#
##d#n###f#r###m#t###g#c###l#t### #i###r#n##
### #####o#####e##### #####e#####d#####e###
De gecodeerde tekst wordt gevormd door de letters per spoor van links naar rechts achter elkaar te zetten, en dit vanaf het bovenste spoor tot het onderste spoor. De gecodeerde boodschap voor de bovenstaande voorbeeldtekst leest dan als
Awsimlf.no ohnopeyfetdnfrmtgclt irn oe ede
Schrijf een functie codeer waaraan twee argumenten moeten doorgegeven worden: i) een bericht $$p$$ (str) en ii) een aantal sporen $$n$$ (int). De functie moet de gecodeerde versie (str) van bericht $$p$$ teruggeven volgens de spoorhekcodering met $$n$$ sporen.
Schrijf een functie decodeer waaraan twee argumenten moeten doorgegeven worden: i) een bericht $$c$$ (str) dat gecodeerd werd volgens de spoorhekcodering, en ii) het aantal sporen $$n$$ (int) dat daarbij gebruikt werd. De functie moet het originele bericht (str) teruggeven.
>>> codeer('And now for something completely different.', 1)
'And now for something completely different.'
>>> codeer('And now for something completely different.', 2)
'Adnwfrsmtigcmltl ifrn.n o o oehn opeeydfeet'
>>> codeer('And now for something completely different.', 3)
'Anfstgmt fnn o o oehn opeeydfeetdwrmicllir.'
>>> codeer('And now for something completely different.', 4)
'Awsimlf.no ohnopeyfetdnfrmtgclt irn oe ede'
>>> codeer('And now for something completely different.', 5)
'Aftm nn oehopydetdwrmicllir. o on eefensgtf'
>>> decodeer('And now for something completely different.', 1)
'And now for something completely different.'
>>> decodeer('Adnwfrsmtigcmltl ifrn.n o o oehn opeeydfeet', 2)
'And now for something completely different.'
>>> decodeer('Anfstgmt fnn o o oehn opeeydfeetdwrmicllir.', 3)
'And now for something completely different.'
>>> decodeer('Awsimlf.no ohnopeyfetdnfrmtgclt irn oe ede', 4)
'And now for something completely different.'
>>> decodeer('Aftm nn oehopydetdwrmicllir. o on eefensgtf', 5)
'And now for something completely different.'