Voor (de meeste van) ons op de afdeling duurt het nog heel wat jaren, maar voor onze collega Jan is het eindelijk zo ver: hij gaat met pensioen!
Sinds iets meer dan een jaar is hij ook bezig met geocachen en inmiddels heeft onze hele afdeling al de nodige geocaches in Amserfoort bezocht met Jan voorop! Nu is het tijd dat hij zijn (voorlopig?) laatste geocache in Amersfoort gaat zoeken die ter ere van zijn afscheid is neergelegd.
Deze cache is een combinatie van een mystery en een korte multi-cache en laat andere cachers een heel klein beetje kennismaken met het werk waar Jan de laatste jaren mee bezig geweest is, wat zijn favoriete plek in Amsersfoort was en wat één van zijn hobby's is waar hij hopelijk (naast het geocachen natuurlijk) weer tijd voor krijgt.
Over de cache: uiteraard ligt de cache niet op het opgegeven coordinaat. Hier vind je alleen de plek op het perron waar Jan jarenlang 's middags stond te wachten op de trein naar huis. Je moet vooraf een puzzel oplossen om de coordinaten van het start punt te bepalen. Vanaf dit punt bezoek je 2 punten en daarna de eind-cache. Onderweg heb je een smartphone met Barcode/QR reader nodig.
De puzzel
Jan heeft in de loop der jaren heel wat SQL queries geschreven op onze databases, dus het oplossen van deze puzzel moet voor hem geen probleem zijn toch? Gelukkig is dit een heel kleine set met data die hij zelfs zonder database kan oplossen...
De SQL statement om de tabel aan te maken:
CREATE TABLE jan_met_pensioen (sort NUMBER, latitude NUMBER, longitude NUMBER, description VARCHAR2(100));
En wat insert statement om de dataset te laden:
INSERT INTO jan_met_pensioen (sort, latitude, longitude, description) VALUES (502, 5, 5,'JANGAATVISSENOPSNOEKBAARS');
INSERT INTO jan_met_pensioen (sort, latitude, longitude, description) VALUES (67, 2, 2,'JAN GAAT DE HELE DAG GEOCACHE MET ZIJN ZUS');
INSERT INTO jan_met_pensioen (sort, latitude, longitude, description) VALUES (232, 2, 6,'JANMETP3NS10EN');
INSERT INTO jan_met_pensioen (sort, latitude, longitude, description) VALUES (4, 4, 4,'JAN MET PENSIEN');
INSERT INTO jan_met_pensioen (sort, latitude, longitude, description) VALUES (210, 5, 9,'J@NGA@TVISENOPSNO3K');
INSERT INTO jan_met_pensioen (sort, latitude, longitude, description) VALUES (3, 0, 2,'JAJANGAATVISENOPSNOEKBAARS');
INSERT INTO jan_met_pensioen (sort, latitude, longitude, description) VALUES (110, 2, 4,'JANGAATPOSTZEGELEN');
INSERT INTO jan_met_pensioen (sort, latitude, longitude, description) VALUES (33, 5, 0,'JANGAAVISSENOPSNOEKBAARS');
INSERT INTO jan_met_pensioen (sort, latitude, longitude, description) VALUES (500, 3, 4,'NETFLIXENNAZIJNPENSIOEN');
INSERT INTO jan_met_pensioen (sort, latitude, longitude, description) VALUES (343, 1, 0,'JANACHTERDEGERANIUMS');
INSERT INTO jan_met_pensioen (sort, latitude, longitude, description) VALUES (126, 9, 8,'JANVISTOPSNOEKBAARS');
INSERT INTO jan_met_pensioen (sort, latitude, longitude, description) VALUES (1, 4, 2,'GRIEKSETENMETJANINAMERSFOORT');
INSERT INTO jan_met_pensioen (sort, latitude, longitude, description) VALUES (5, 0, 9,'JAMGAATVISSENOPSNOEKBAARS');
INSERT INTO jan_met_pensioen (sort, latitude, longitude, description) VALUES (67, 7, 1,'GEOCACHENDEJANGAATHEELGOUDADOOR');
INSERT INTO jan_met_pensioen (sort, latitude, longitude, description) VALUES (18, 0, 0,'JANGAATVISSENOPSNOEKBAARS');
INSERT INTO jan_met_pensioen (sort, latitude, longitude, description) VALUES (34, 2, 5,'JAN GAAT DE HELE DAG VISSEN');
INSERT INTO jan_met_pensioen (sort, latitude, longitude, description) VALUES (0, 0, 0,'JANZNPENSIOEMETHOBBIES');
INSERT INTO jan_met_pensioen (sort, latitude, longitude, description) VALUES (231, 3, 4,'JAN GAAT VISSEN OP SNOEKBAARS');
INSERT INTO jan_met_pensioen (sort, latitude, longitude, description) VALUES (111, 9, 2,'WELKECHALLENGESGAATJANHALENMETGEOCACHEN');
INSERT INTO jan_met_pensioen (sort, latitude, longitude, description) VALUES (51, 0, 2,'DEZUSVANJANGAATDEHELEDAGGEOCACHENMETHEM');
INSERT INTO jan_met_pensioen (sort, latitude, longitude, description) VALUES (342, 2, 7,'HETPENSIOENVANJAN');
INSERT INTO jan_met_pensioen (sort, latitude, longitude, description) VALUES (111, 8, 2,'JEZALMAARMET PENSIOEN KUNNENNETALSJAN');
INSERT INTO jan_met_pensioen (sort, latitude, longitude, description) VALUES (499, 1, 6,'PFFFF PENSIOEN VOOR JAN NA AL DIE JAREN');
INSERT INTO jan_met_pensioen (sort, latitude, longitude, description) VALUES (79, 5, 0,'GENIET VAN JE PENSIOEN JAN');
INSERT INTO jan_met_pensioen (sort, latitude, longitude, description) VALUES (23, 3, 9,'JAN, GENIET VAN JE PENSIOE');
Nou vooruit, omdat hij met pensioen gaat zullen we hem ook maar deze simpele SQL query geven die hem de start-coordinaten voor de korte multi geven:
SELECT * FROM (
SELECT * FROM jan_met_pensioen WHERE REGEXP_LIKE (description, '.*J[A@]N.*P[E3]NS[I1][O0][E3]N.*')
UNION
SELECT * FROM jan_met_pensioen WHERE REGEXP_LIKE (description, '.*J[A@]N.*GE[O0]C[A@]CH[E3]N.*')
UNION
SELECT * FROM jan_met_pensioen WHERE REGEXP_LIKE (description, '.*J[A@]N.*V[I1]SS[E3]N.*')
) ORDER BY sort;
Zo, dat is kat in het bakkie... op naar de start (die noemen we WP1).
Oh ja, voordat ik het vergeet: voor de letters A en N heb je op WP3 nog 2 getallen nodig. Om de getallen voor deze 2 letters te vinden, moet je je een heel klein beetje verdiepen in één van de hobby's van Jan.
A = latijnse naam voor "snoek" volgens wikipedia (som van de letter-waardes)
N = latijnse naam voor "snoekbaars" volgens wikipedia (som van de letter-waardes)
Misschien komen deze latijnse namen Jan ook wel van pas als hij straks weer alle tijd heeft om te vissen. Dan kan hij ook op "niveau" praten met zijn viscollega's.
Op de eindlocatie (WP4) kan Jan alvast een start gaan maken met het oppakken van zijn hobby en daarna heerlijk genieten van z'n kopje koffie achter de geraniums.