Om in het Japanse thema te blijven: toen mijn stage bij Das Mag afgelopen was kreeg ik het Japan-nummer van Granta en een boekje met Japanse puzzels. Combineer dat met mijn nieuwe Japanse lamp en je zou bijna denken dat ik er heen wil.
Japanse puzzels hebben volgens mij niet zo veel met Japan te maken, maar ik ben ze nu toch nu en dan aan het maken. Zoals je misschien wel weet begin je bij een Japanse puzzel altijd met het zoeken van een volledig gevulde rij. Als er geen volledig gevulde rijen zijn, moet je zoeken naar een rij die samen met de witte vakjes vol zal zitten. Als de puzzel 10 vakjes breed is, kan je een rij met '1 2 3 1' gewoon invullen: 1 + 2 + 3 + 1, plus 3 witte hokjes, is 10.
Maar dat optellen van die vakjes vind ik eigenlijk nog best lastig. Ik vergeet steeds die witte hokjes mee te rekenen. Omdat ik lui en cijferblind ben, heb ik er een Python-functie voor geschreven.
def teller(numbers):
total = numbers.count(' ')
numbers = numbers.split(' ')
for number in numbers:
total += int(number)
return total
Gooi er een string met door spaties gescheiden getallen in en hij geeft je de lengte van de rij.
>>> teller('1 2 3 1')
10
>>> teller('1 2 3 2 3')
15
Misschien moet ik nu verder gaan en een programma schrijven voor de rest van de puzzel. Volgens Wikipedia circuleren dergelijke programma's al en kunnen ze een Japanse puzzel in enkele seconden oplossen. Dit maakt de Japanse puzzel onbruikbaar als prijspuzzel. Het is maar dat je het weet.
2014-04-25 12:22
Zoals altijd: het kan efficiƫnter. Deze kreeg ik via de mail:
>>> c = lambda x: len(x) + sum(x) - 1
>>> c([1,2,3,1])
10
>>> c([1,2,3,2,3])
15