Welkom bij de eerste editie van de Java Magazine Code Challenge! In deze rubriek vind je uitdagende problemen, die er gewoon om vragen opgelost te worden met een elegant stukje code.
In deze eerste puzzel mag je gaan husselen in ons alfabet. We nemen als uitgangspunt een lijst van Engelse woorden. Gegeven die lijst kun je bepalen hoeveel van die woorden enkel letters in oplopende volgorde van het alfabet hebben. Een voorbeeld van zo’n woord is “ANNO" en een tegenvoorbeeld is "ADMIN". Tot zover niets bijzonders, maar waarom zouden we het bij ons traditionele alfabet houden? Voor deze puzzel gaan we op zoek naar een permutatie van ons alfabet, waarbij het grootste aantal woorden ontstaat met letters in oplopende volgorde van dit 'nieuwe alfabet'.
De woordenlijst waar je je programmeerkunsten op kunt botvieren is een standaardlijst met meer dan 67.000 Engelse woorden, die ook op Scrabble-toernooien gebruikt wordt als referentie. Dit verklaart ook direct waarom het om maximaal 15-letterige woorden gaat: groter is een Scrabblebord namelijk niet.
Je kunt de lijst downloaden via bit.ly/alfabetsoep. Merk op dat de lijst al vast opgeschoond is: geen enkel woord bevat herhaalde letters op verschillende (niet opeenvolgende) posities. Het woord "ALPHABET" bijvoorbeeld zal onder geen enkele gekozen volgorde voldoen aan onze eis dat alle letters oplopend zijn. Omdat er tweemaal een “A" in voorkomt zonder dat deze naast elkaar staan, zou de “A" zowel voor de “L" als na de “L" moeten komen in het gekozen alfabet. Ter controle: met het standaard “ABC…" bevat deze lijst 860 oplopende woorden. Als we alleen de “A" en “B" omwisselen (dus "BACDEFG…") hebben we al 921 woorden in oplopende volgorde.
De opdracht is dus om een alfabet te vinden dat het aantal woorden maximaliseert met alleen oplopende letters. Hoe je dit doet is volledig vrij, hoewel het waarschijnlijk af te raden valt alle mogelijke permutaties af te gaan… Het eindresultaat moet in ieder geval een geldige permutatie van de 26 letters uit ons alfabet zijn.
Mail je alfabet met het meeste oplopende woorden (inclusief de code waarmee je de oplossing gevonden hebt) naar codechallenge@nljug.org De beste oplossingen zullen naast een eervolle vermelding op onze site www.nljug.org ook een Raspberry Pi ontvangen.
Succes!