Code Challenge

Op huizenjacht

Stel, je woont in een straat waar de huizen in één lange rij staan. Ze hebben allemaal aaneengesloten, oplopende huisnummers. Beginnend bij het eerste huis met nummer 1, dan nummer 2, loopt dit zo op tot het laatste huis. Je besluit een wandeling te gaan maken vanuit jouw huis (ergens in die rij met huizen) richting het eerste huis met nummer 1. Ondertussen tel je de huisnummers van de huizen die je ziet bij elkaar op, zonder je eigen huisnummer mee te tellen.

De volgende dag doe je hetzelfde, maar nu richting het laatste huis in de straat. Opnieuw wandel je langs de huizen en tel je de huisnummers die je ziet bij elkaar op. En warempel: het resultaat is hetzelfde als de optelsom van gister! Dat kan geen toeval zijn. Meteen besluit je dat al jouw toekomstige huizen aan dezelfde conditie moeten voldoen als je huidige huis. Dat betekent natuurlijk wel dat je voor iedere verhuizing goed moet uitkijken. Op welk huisnummer moet je dan gaan wonen? En welk nummer moet het laatste huis in de straat hebben, zodat het aan het bovenstaande scenario voldoet?

Dat is de uitdaging die je mag gaan uitwerken in deze Code Challenge. Je algoritme moet minimaal de eerste twintig paren van eigen huisnummer/laatste huisnummer in de straat genereren. De triviale situatie waarin een straat maar één huis heeft, laten we sowieso buiten beschouwing. De volgende twee oplossingen krijg je alvast cadeau:

6 8 (want 1 + 2 + 3 + 4 + 5 = 7 + 8)
35 49

Een brute-force oplossing is zo te formuleren, maar we zijn natuurlijk op zoek naar iets meer vernuft. Wellicht kan een slimmigheidje uit de 18e eeuw van de wiskundige Gauss, omtrent het sommeren van reeksen, helpen om richting een elegantere oplossing te komen.

Inzending voor deze challenge is je code inclusief de eerste 20 oplossingen, waarbij een oplossing dus een combinatie eigen huisnummer/laatste huisnummer is. Succes! En als het genereren van de eerste 20 oplossingen niet uitdagend genoeg is, mag je ook op zoek gaan naar de grootste straat die voldoet…

 

Oplossingen moeten uiterlijk drie weken na het verschijnen van Java Magazine ingeleverd zijn. Stuur een link naar een publieke (GitHub/Bitbucket) repo met jouw antwoord naar codechallenge@nljug.org.

Je mag oplossingen in iedere JVM taal insturen. Zorg wel voor een goede beschrijving hoe de code gebouwd en gedraaid kan worden. Doe dit het liefste zonder al te veel handmatige dependencies, zodat anderen er ook makkelijk mee aan de slag kunnen.

Niet alleen het antwoord telt, maar zeker ook hoe je er toe gekomen bent. Na ongeveer vier weken zal er een blogpost op www.nljug.org geplaatst worden met de resultaten. Wie wint wordt bepaald door verschillende aspecten. Denk bijvoorbeeld aan beste antwoord, snelste inzending, meest elegante oplossing, best beschreven oplossing et cetera. De winnaar ontvangt een Raspberry Pi.