Skip to content

Äärelliset kätköt / Finite caches Mystery Cache

This cache has been archived.

ranto: Purkin paikalle on astunut juuri voimaan uusi asemakaava, joten vuoden parin sisään paikka myllätään joka tapauksessa. Vaikka kansansivistystyön nimissä onkin kiva pakottaa ihmisiä laskemaan äärellisillä kunnilla, täytyy osata luovuttaa aikanaan. En ole enää vuosiin uskaltanut itse huoltaa kätköä eikä tähdityksiä parane mennä rukkaamaan alaspäin - siitä tulee sanomista. Aika aikaansa kutakin sanoi pässi, kun päätä leikattiin.

Kiitos kaikille kävijöille ja avuliaille huoltajille. Joitakin harrastajia varten purkit pitäisi tehdä pomminkestäviksi, kun selväsanaisiakaan ohjeita ei noudateta.

More
Hidden : 12/27/2010
Difficulty:
4.5 out of 5
Terrain:
5 out of 5

Size: Size:   small (small)

Join now to view geocache location details. It's free!

Watch

How Geocaching Works

Please note Use of geocaching.com services is subject to the terms and conditions in our disclaimer.

Geocache Description:

Tämä on aiempien mysteerieni bonuskätkö. Purkin loggaus vaatinee:
  • 10 aiemman ranto-mysteerin loppukoordinaattien tietämystä
  • hieman äärellisten kuntien laskentaa, jonka voi hoitaa weppi-laskurilla
  • pientä yritystä myös purkin noutoon
  • ONKIMINEN EI ENÄÄ ONNISTU

To log this cache you probably need to solve all 10 previous ranto mysteries and a bit more. If you are still interested, please contact me for an English translation.


Äärelliset kunnat

Murto- tai reaaliluvuilla laskiessamme laskemme tietämättämme algebrallisessa struktuurissa, jolle on annettu nimeksi kunta. Nämä "normaalit" lukukunnat ovat äärettömiä - niissä on siis äärettämön monta lukua. Jos onnistumme rakentamaan äärellisen "lukujoukon" sopivilla neljällä peruslaskutoimituksella, niin kyseessä on äärellinen kunta. Tutustuimme äärellisiin kuntiin jo kätkön Elliptiset kätköt 2 kuvauksessa. Siinä esitettiin ns. alkukunnan muodostaminen jakojäännöksin laskien modulo jokin alkuluku p. Muutaman vuoden yliopisto-opintojen jälkeen voit todistaa, että on olemassa äärellisiä kuntia, joissa on pm alkiota - ja siinä ne kaikki sitten olivatkin.

16 alkion kunta

Tarkastelemme esimerkkinä 16 alkion kuntaa, koska sitä käytetään lopulta kätkön koordinaattien laskemiseen. Siinä on siis 24 "lukua" eli se saadaan 2 alkion kunnasta 4-asteisena laajennuksena. Meillä on siis 2 alkion alkukunta {0,1}, jossa lasketaan modulo 2. Lisäksi otamme alkion a, joka toteuttaa 4-asteisen polynomiyhtälön a4+a+1=0. Koska kaikki "normaalit" laskusäännöt ovat voimassa, nämä ehdot määräävätkin tämän kunnan yksikäsitteisesti.

Kunnan alkiot voidaan esittää a:n potensseina: 0, 1, a, a2, ..., a14. Koska kunta on äärellinen, niin myös potenssit toistavat kehää: a15 = a0 =1. Potenssiesitys on hyvä kertolaskuissa, koska esimerkiksi a6 * a14 = a20 = a5. Samalla tulee hoidettua myös jakolaskut: koska ai * a15-i = 1, niin 1/ai = a15-i.

Yhteenlaskuissa edullisempi esitys on sellainen, jossa a:n korkeammat potenssit esitetään alle neliasteisina polynomeina: esimerkiksi a4 = -(a+1) = a+1, koska modulo 2 miinusmerkit voidaan unohtaa -1=1. Samalla tavalla voidaan listata muutkin potenssit:

0 1 a a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14
0 1 a a2 a3 a+1 a2+a a3+a2 a3+a+1 a2+1 a3+a a2+a+1 a3+a2+a a3+a2+a+1 a3+a2+1 a3+1
Voit itse tarkistaa samaan tyyliin, että a15 on todella yhtä suuri kuin 1. Yhteenlaskut menevät nyt esimerkiksi näin: a9 + a12 = (a3+a) + (a3+a2+a+1) = a2 + 1 = a8.

Tästä kunnasta käytetään monesti merkintää GF(16) (Galois Field) suuren matemaatikon Évariste Galois'n muistoksi, jolle nämä kunnat tulivat ensimmäisenä mieleen.

Virheitä korjaavat koodit

Jos olet ihmetellyt, kuinka naarmuinen cd-levysi soi napsumatta tai digi-tv kuva on niin selvä (paitsi pikselöityessään), niin syynä on ns. virheitä korjaavat koodit (error correcting codes), joita nykyään löytyy lähes kaikista digitaalisista tiedonsiirtojärjestelmistä (GSM, 3G, LTE, DVB-T/C/S, jne.). Suuri osa virheitä korjaavista koodeista on suunniteltu käyttäen äärellisiä kuntia - erityisesti 2m alkion kuntia, koska tietokoneet esittävät tiedon binäärilukuina. Nythän esimerkiksi 8 bitin tavu (byte) voi saada 28=256 eri arvoa ja ne voidaan helposti ajatella kunnan GF(256) alkioina.

Virheitä korjaavien koodien toiminta perustuu ylimääräiseen toistoon: jos vain data lähetetään ilman toistoa, ei voida päätellä, menikö tiedonsiirrossa joku bitti väärin. Esimerkiksi bittijono 11101 voidaan lähetetään muodossa 11101 101, jossa 101 ovat tarkistusbittejä. Toisinpäin voidaan ajatella, että kaikki 8-bittiset sanat eivät ole oikeita koodisanoja, vaan ainoastaan jokin sovittu osajoukko.

Reedin-Salomonin koodit

Cd-levyissä käytetään virheen korjaukseen Reedin ja Salomonin kehittämää RS-koodia. Cd-levyissä käytetään RS-koodia kunnassa GF(256), mutta tässä kätkökuvauksessa käytämme yksinkertaisuuden vuoksi kuntaa GF(16). Koodisanojen osajoukko valitaan valitsemalla polynomien osajoukko kaikkien polynomien joukosta.

Otetaan esimerkiksi alle 8-asteiset polynomit kunnassa GF(16). Ne voidaan esittää muodossa

p(x) = b*x7 + c*x6 + d*x5 + e*x4 + f*x3 + g*x2 + h*x + i .

Jokainen 8 kertoimesta b-i voidaan valita 16 eri tavalla kunnasta GF(16). Nyt jokainen tuollainen polynomi p(x) vastaa yhtä sallittua koodisanaa, joka saadaan laskemalla polynomin arvo jokaisella kunnan alkiolla
( p(0), p(1), p(a), p(a2), p(a3), ..., p(a13), p(a14) ) .

Näin saadaan 168 sallittua 16-pitkää koodisanaa kaikkiaan 1616 sanan joukosta.

Kun data koodataan ylläesitetyllä tavalla sallituiksi koodisanoiksi lisäämällä 8 datasymboliin 8 tarkistussymbolia, saadaan korjattua 3 virheellistä symbolia mistä paikasta tahansa Berlekampin ja Masseyn algoritmilla. Tämä paljon käytetty algoritmi on kuitenkin sen verran hankala, etten viitsi sitä tässä esitellä. Tiedonjanoiset löytävät kyllä kuvauksia netistä.

Jossain tilanteissa virheellisten symbolien paikat tiedetään ja silloin homma muuttuu selkeämmäksi ja yllämainitulla koodilla pystytään korjaamaan jopa 8 virheellistä symbolia. Silloin 8 polynomin arvoa laskettuna tiedetyillä kunnan alkioilla on oikein ja saadaan 8 lineaarista yhtälöä ja 8 muuttujaa ja tämä lasku on ratkaistavissa. Kyseessä on lineaarisen yhtälöryhmän ratkaiseminen ihan samoin kuin reaaliluvuilla tai muissa "normaaleissa" lukukunnissa. Ne, jotka ovat pyöritelleet matriiseja, huomaavat, että kyseessä on 8*8-matriisin kääntäminen.

Varsinaisen tehtävän helpottamiseksi kuvailen, minkämuotoisia lausekkeita polynomeista saadaan. Esimerkiksi yllämainitun polynomin p(x) arvot kunnan alkioilla 0, 1 ja ai ovat

p(0) = b*07 + c*06 + d*05 + e*04 + f*03 + g*02 + h*0 + i = i
p(1) = b*17 + c*16 + d*15 + e*14 + f*13 + g*12 + h*1 + i = b + c + d + e + f + g + h + i
p(ai) = b*a7i + c*a6i + d*a5i + e*a4i + f*a3i + g*a2i + h*ai + i .

Kätkön koordinaattien laskeminen

Varmista ensin, että sinulla on tsekkerin hyväksymät tai ehdottamat koordinaatit kaikilta aiemmilta ranto-mysteerikätköiltä, joissa tsekkeri on. Laske pohjoisten minuuttien desimaalit xxx yhteen kaikilta 10 kätköltä: olkoon tuo luku JKLM. Laske itäisten minuuttien desimaalit yyy yhteen kaikilta 10 kätköltä: olkoon tuo luku RSTU. Käytetään seuraavaa vastaavuutta numeroiden 0-9 ja kunnan GF(16) alkioiden välillä:

0 1 2 3 4 5 6 7 8 9
0 a1 a2 a3 a4 a5 a6 a7 a8 a9

Etsi sitten sellainen alle 8-asteinen GF(16)-kertoiminen polynomi p(x), joka toteuttaa yhtälön

( p(0), p(a), p(a2), p(a3), p(a4), p(a5), p(a6), p(a7) ) = JKLMRSTU .

Eli meidän "cd-levyllämme" on 8 oikeaksi tiedettyä symbolia ja 8 naarmuuntunutta symbolia, joiden paikat tiedetään. Tehtävänä on selvittää nuo naarmuuntuneet symbolit.

Purkin löydät koordinaateista:

N60° 2 p(a9) . p(a14) p(1) p(a6)
E22° 1 p(a13) . p(a11) p(a10) p(a7)

Magma-laskin avuksi

En ole niin julma, että pistäisin ketään kääntämään 8*8-matriisia kunnassa GF(16) kynällä ja paperilla, vaan siihen löytyy työkalu wepistä. MAGMA on kaupallinen algebran laskentaan tarkoitettu ohjelmisto, mutta sen kevyt-versio Magma Calculator on ilmaiseksi käytettävissä. Tässä esimerkkinä koodinpätkä, joka hakee polynomin, joka saa arvot 23456789 pisteissä 0, 1, a, a2, a3, a4, a5, a6.


F<a>:=GF(2^4);
M := Matrix(F, 8, [1,   0,   0,    0,    0,    0,    0,    0,
                   1,   1,   1,    1,    1,    1,    1,    1, 
                   1,   a,   a^2,  a^3,  a^4,  a^5,  a^6,  a^7,
                   1,   a^2, a^4,  a^6,  a^8,  a^10, a^12, a^14,
                   1,   a^3, a^6,  a^9,  a^12, a^15, a^18, a^21, 
                   1,   a^4, a^8,  a^12, a^16, a^20, a^24, a^28,
                   1,   a^5, a^10, a^15, a^20, a^25, a^30, a^35,
                   1,   a^6, a^12, a^18, a^24, a^30, a^36, a^42 ]);
b := Matrix(F, 1, [a^2, a^3, a^4,  a^5,  a^6,  a^7,  a^8,  a^9 ]);
c := M^-1*b;
f := Polynomial(F, [c[1,1], c[2,1], c[3,1], c[4,1], c[5,1], c[6,1], c[7,1], c[8,1]]);
for d in F do
  [d, Evaluate(f,d)];
end for;

En ole myöskään niin kiltti, että tuolla ohjelmanpätkällä saisi suoraan oikeat naatit, vaan sitä pitää pikkaisen muokata kysyttyyn tilanteeseen. Happy hunting.

Additional Hints (Decrypt)

Chexvyyr cvgää zraaä. Äyxää baxvxb.

Decryption Key

A|B|C|D|E|F|G|H|I|J|K|L|M
-------------------------
N|O|P|Q|R|S|T|U|V|W|X|Y|Z

(letter above equals below, and vice versa)