Vertica Dev Xmas 2019-julekalender – låge #4 – sidste opgave

Vi er nu ved at være til vejs ende i vores julekalender. Der er lykkedes flere at løse opgaverne bag låge #2 og #3, og dermed har I fundet frem til, hvor både julemanden samt rensdyrene befinder sig. Det tegner altså til at blive en god jul. Den sidste udfordring gemmer sig bag låge #4 – 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 eller låge 3 og har brug for hjælp til at lokalisere julemanden og/eller julemandens rensdyr, er der rigtig meget hjælp at hente til låge 2 her og tilsvarende hjælp til låge 3 her.

Låge 4

Dine Search-kompetencer har været en afgørende faktor i CSAR’s (Cloud Search And Rescue) opgave i at lokalisere og tilbagebringe julemanden,  samt de 8 rensdyr. Det var på et hængende hår, for julemanden har travlt med de sidste ting, inden han skal ud og aflevere pakker til de mange børn verden over. Og uheld kommer jo, som vi ved, sjældent alene – og nu viser det sig at samtlige ‘til-og-fra’-kort er røget af pakkerne – og dét dur bare ikke. Heldigvis har julemanden stadig børnenes ønskelister – men med den korte tid tilbage, har han brug for hjælp til at sikre at de rigtige gaver havner hos de rigtige børn. Vi kan jo ikke risikere at lille Steffen får en blød gave fra julemanden, når han mest af alt ønsker sig en ny John-Deere traktor. Hjælp derfor julemanden med at at udvikle en effektiv metode, som kan matche børnenes ønsker med de forskellige gaver.

Din opgave

Din opgave er nu at implementere en algoritme, der kan koble listen af legetøj sammen med børnenes ønskelister, og dermed sikre at alle børn får en pakke de har ønsket sig.

Nedenfor vises et eksempel på den data, gemt i XML-format, du har tilgængelig i implementering af din algoritme:

For denne data gælder følgende:

  1. <Toys>-elementet indeholder dét legetøj der er i sækken – i alt 15 stykker legetøj
  2. <Children>-elementet indeholder børnenes ønskeliste (hvert barn med op til 3 ønsker) – i alt er der 15 børn, som legetøjet skal fordeles mellem

I fordelingen af legetøj gælder følgende præmisser:

  1. Julemanden ved at han har mindst én pakke, til hvert barn, som optræder på barnets ønskeliste
  2. Julemanden ved at pakkerne går op, hvis man starter med at dele gaver ud til den eller de børn, som kun har én enkelt ting på deres ønskeliste, som han også har i sin sæk (= legetøjslisten)
  3. Alle pakker er unikke – dvs. der er ikke to pakker med samme navn
  4. Alle børn er også unikke (også i virkeligheden – what!) – men her i konkurrencen er der ikke to børn med samme navn
toydistribution-excel

Eksempel på fordeling af pakker

Du skal derfor:

  • Downloade julemandens data, en XML-fil, som ligger som en Blob i en Azure storage account.
    • Adressen til filen findes i retursvaret fra låge #3: 
      • $response.toyDistributionXmlUrl
  • Udvikle algoritmen der sikrer fordeling af legetøjet til børnene –
    • Se beskrivelsen længere oppe
  • Sende en HTTP forespørgsel til CSAR’s API med resultatet af legetøjsfordelingen
      • Host:
      • Path:
        • /api/toydistribution
      • 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 alle opgaverne.
      • Husk at ID’et skifter hver gang du kalder /api/participate – du har dermed kun ét forsøg pr. ID (ligesom det hele tiden har været). Det betyder at du ikke må hard-code ID’et i din kode.
  • 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 og du har nu gennemført Vertica DEV Xmas 2019 julekalenderen!
    • 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.
    • I svaret fra API’et, når du har gennemført julekalenderen, får du samtidig lidt statistik på din gennemførsel
      • executionTime = dét antal sekunder det tog at gennemføre låge 1 – 4 i dette forsøg
      • totalNumberOfAttempts = samlet antal forsøg du har haft gennem hele julekalenderen

Samlet overblik over julekalenderen

XMAS2019

Julekalenderen fra start til slut

Deadline på låge 4 og afslutning på julekalenderen

Fredag d. 20. december kl. 12:00 slutter julekalenderen. Dette sker ved at API’et lukkes ned. Herefter trækker vi én tilfældig vinder, blandt alle deltagere af låge 4, som vinder biografbilletter. Herefter kigger vi på alt data, og udvælger de resterende vindere i konkurrencen, som får besked på e-mail. Når alle vindere er fundet, annonceres disse i et nyt indlæg på bloggen ca. kl. 13:00 samme dag. Præmier sender vi med posten, når vi er tilbage fra juleferie – dvs. i det nye år.

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

  • XDocument.Load
  • XmlSerializer Deserialize from XDocument CreateReader

Vinder låge 3

Vi har trukket én tilfældig vinder, blandt alle der har deltaget i låge 3. 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

Udfyld dine oplysninger nedenfor eller klik på et ikon for at logge ind:

WordPress.com Logo

Du kommenterer med din WordPress.com konto. Log Out /  Skift )

Google photo

Du kommenterer med din Google konto. Log Out /  Skift )

Twitter picture

Du kommenterer med din Twitter konto. Log Out /  Skift )

Facebook photo

Du kommenterer med din Facebook konto. Log Out /  Skift )

Connecting to %s