Datadegradering

Del 1

En tusse har funnet noen gamle disketter fra før de gikk over til standardisert 8-bit bytes. De vil gjerne at du hjelper dem med å hente ut data fra disse diskettene. Diskettene er gamle og klarer bare å lagre syv(7) bits per diskett. Tussen finner en morken bok med dokumentasjon om hvordan man skal lese dataen fra disse.

Dokumentasjonen starter ved å hylle tussenes genistrek ved å tenke på at fysisk media kan bli skadet. Utifra boken ser det ut som om tussene har valgt å bruke paritetsbits for å se om data på disketten er skadet. Tussene valgte å gå for ikke bare ett (1), men hele tre (3) per syv (7) bits. Det å bruke 3 bits av 7 til å finne ut om disketten er skadet slår deg som ueffektivt. Heldigvis er instruksene på hvordan dataen skal tolkes fortsatt i lesbar tilstand.

Parites bit blir videre referert til som P{1,2,3} og data som D{1,2,3,4}.
Rekkefølgen på disse er: P1, P2, D1, P3, D2, D3, D4.

= paritet, = data
P1 P2 D1 P3 D2 D3 D4
1 1 0 1 0 0 1

Et paritets bit passer på at tilhørende data er korrekt. Måten dette gjøres på er at hvis du teller opp antall 1'er bits i paritets posisjonen og tilhørende data skal det bli et partall eller null(0).

P1 har ansvar for d1, d2, d4.
P2 har ansvar for d1, d3, d4.
P3 har ansvar for d2, d3, d4.

Eksempel

Fem (5) tilfeldige disketter kan se slik ut:

Gjennomgang 0101010

= paritet, = data
P1 P2 D1 P3 D2 D3 D4 Antall 1'ere Ok/Feil
P1 0 1 0 1 0 1 0 0
P2 0 1 0 1 0 1 0 2
P3 0 1 0 1 0 1 0 2

Gjennomgang 0010111

= paritet, = data
P1 P2 D1 P3 D2 D3 D4 Antall 1'ere Ok/Feil
P1 0 0 1 0 1 1 1 3
P2 0 0 1 0 1 1 1 3
P3 0 1 0 0 1 1 1 3

Hvis vi sjekker alle diskettene ser vi at:

Etter det skal man plassere data fra de gode diskettene inn i 4 bits og lese dem som et tall:

1 1 0 1 0 0 1
0 0 0 1

Summen av disse er 28.

Tussene vil gjerne vite resultatet av å summere data fra alle diskettene i listen under.

Input som string binary
Input som int

Del 2

Tussen finner en delvis ødelagt side i boken. Det ser ut som den tilhører diskettene. Det står noe om at selv om det er feil, så kan de rettes ved å sjekke paritetsbits opp mot data. Desverre mangler instruksene om nøyaktig hvordan dette skal gjøres.

Tussen bare ser opp på deg og sier: "Sikkert ingen måte å få dette til uten instrukser. La oss heller gå og spise noen lapper (sveler) etter godt arbeid. Vi har noen veldig gode her, noen kaller dem til og med overlapper".

Fiks de dårlige diskettene og regn ut svaret på nytt.

Hvis du fikser eksempelet blir svaret 42

(del 2 bruker samme data som del 1)