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.
| 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:
- 0101010
- 1010101
- 0100101
- 1110000
- 0010111
Gjennomgang 0101010
| 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
| 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:
- 0101010 = ok
- 1010101 = ok
- 0100101 = ok
- 1110000 = ok
- 0010111 = feil
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 |
- 0010 = 2
- 1101 = 13
- 0101 = 5
- 1000 = 8
Summen av disse er 28.
Tussene vil gjerne vite resultatet av å summere data fra alle diskettene i listen under.
Input som string binaryInput 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)