Vertica Dev Xmas 2019-julekalender – låge #3

Det er nu lykkedes flere at løse opgaven bag låge #2, og dermed har I fundet frem til, hvor julemanden befinder sig. Det betyder også, at vi er kommet lidt tættere på at redde julen. Næste udfordring gemmer sig bag låge #3 – og den afslører vi lige her.

Er du først lige kommet med i konkurrencen, så fortvivl ej – du kan stadig nå at være med, og du kan også stadig nå at vinde præmier. Du skal starte ved låge 1 og løse opgaverne i kronologisk rækkefølge. Hvis du er gået i stå ved låge 2 og har brug for hjælp til at lokalisere julemanden, er der rigtig meget hjælp at hente her.

Låge 3

Som Search-ekspert har du nu udviklet en algoritme, der effektivt kan spore julemandens position, hvilket har gjort det muligt for CSARET (Cloud Search And Rescue Extraction Team) at bringe julemanden tilbage til kanen og dermed i sikkerhed. Uheldigvis står kanen uden rensdyr! Det er dog ikke første gang, det er sket, så heldigvis har julemanden sørget for at udstyre samtlige rensdyr med en iBeacon, som gør det muligt at spore sig ind på en radius af hvert enkelt rensdyr. I alt har julemanden otte rensdyr, nemlig: Dasher, Dancer, Prancer, Vixen, Comet, Cupid, Donner og Blitzen.

Herunder er vist et eksempel på to af julemandens rensdyr, Vixen, som befinder sig i Viborg og Dasher, som befinder sig i Paris:

Af ovenstående billede, som viser et udsnit af Europa, kan man se, at rensdyrene kan befinde sig overalt. Hver zone består desuden af en række andre objekter, som også opfanges af julemandens iBeacon sensor. I alt er der 1.273.831 objekter fordelt på lidt over 11.000 zoner over hele jordkloden.

Din opgave

Din opgave er nu at lokalisere alle otte af julemandens rensdyr. Denne gang får du dog meget mere hjælp, fordi CSAR (Cloud Search And Rescue) har været ude at investere i ny Cloud teknologi, i form af en Azure CosmosDB, som bl.a. gør det meget let at lave forespørgsler på data med geospatial information. Med andre ord slipper du denne gang for at lave beregninger.

Da du kom i mål med låge 2, fik du i retursvaret fra API’et, en liste (zones) indeholdende 8 zoner, hver med følgende information:

  • Navn på rensdyret (reindeer)
  • Landekode på zonen (countryCode)
  • Navn på byen (cityName)
  • Længde/breddegrad på julemandens iBeacon sensor  (center)
  • Radius på zonen, hvori rensdyret befinder sig inden for (radius)
    • En enhed på ovenstående radius (unit [kilometer|foot|meter)]
    • En værdi på enheden (value)

Derudover har API’et returneret en token-property, som er din adgangsnøgle til CSAR’s Azure CosmosDB.

Du skal derfor:

    • Hvor PartitionKey er sat til countryCode
    • Dvs. du skal lige nøjagtig finde dét dokument, hvor
      • location er i en radius af x-meter (zone.radius) fra zonens center (zone.center) og hvor name er lig med rensdyrets (zone.reindeer) navn du søger efter
  • Sende en HTTP forespørgsel til CSAR’s API med placeringen af de 8 rensdyr
      • Host:
      • Path:
        • /api/reindeerrescue
      • Http method (verb):
        • POST
      • Content-Type:
        • application/json
      • Body:
    • Hvor id skal være lig med dét unikke ID du fik i svaret fra låge 1, og som har været anvendt gennem opgaverne bl.a. til at få fat i Elasticsearch dokumentet indeholdende julemandens bevægelser.
    • Bemærk: det er vigtigt at API’et modtager rensdyrene i samme rækkefølge som de kommer i svaret fra låge 2.
  • Kontrollere at CSAR’s API svarer følgende tilbage:
    • HTTP status code:
      • 200 OK
  • Når du har fået ovenstående svar retur er du i mål med opgaven 
    • Får du et andet svar, f.eks. Http status code: 400 Bad Request, har du en fejl i din forespørgsel. Kig efter valideringsbeskeder i requestet og gå din JSON igennem en ekstra gang.
      • Bemærk: du skal starte forfra, hvis du får en valideringsfejl, dvs. du skal kalde /api/participate endpointet forfra, da julemandens rensdyr jo hele tiden flytter sig 🙂

Næste låge

Mandag d. 16. december kl. 8:30, vil vi annoncere næste opgave i julekalenderen og samtidig trække en tilfældig vinder blandt alle deltagere af låge 3.

Inspiration til Google søgeord for tips & tricks til at løse opgaven:

  • microsoft azure documentdb nuget
  • azure documentdb search distance
  • documentdb partitionkey feedoptions

Vinder låge 2

Vi har trukket én tilfældig vinder, blandt alle der har deltaget i låge 2. Vinderen er netop blevet kontaktet pr. e-mail, og når vi har fået svar fra vedkommende, bliver navnet annonceret. Hvis vi ikke får svar inden konkurrencen er slut, trækker vi selvfølgelig en ny vinder.

Vinderen får biografbilletter, som vi sender med posten, når konkurrencen er slut.

Skriv et svar