Wat is er zo ongebruikelijk aan het getal 313.340.350.000.000.000.499? De Engelse benaming van dit getal
THREE HUNDRED THIRTEEN QUINTILLION THREE HUNDRED FORTY QUADRILLION THREE HUNDRED FIFTY TRILLION FOUR HUNDRED NINETY-NINE
heeft de volgende verdeling van het aantal voorkomens van de letters:
Hierdoor wordt de naam van het getal een perfect voorbeeld van een "sneeuwbal" in de terminologie die gebruikt wordt door fanaten van woordspelletjes. Dit is een verdeling waarbij er één letter is die één keer voorkomt, één letter die twee keer voorkomt, één letter die drie keer voorkomt, enzoverder.
In de november 2012 editie van het tijdschrift Word Ways hebben Eric Harshbarger en Mike Keith dit fenomeen nader onderzocht, en hebben daarbij honderdduizenden voorbeelden gevonden tussen de namen van zeer grote getallen. Over het bovenstaande voorbeeld schrijven ze echter:
It is shockingly small compared to all other known snowball histogram numbers (of any order). It seems very likely that this is the smallest snowball histogram number of any order, but a proof of this fact, even with computer assistance, seems difficult.
In datzelfde artikel vermelden Harshbarger en Keith nog twee andere wetenswaardigheden. Het getal 224.000.000.000.525.535, of in woorden
TWO HUNDRED TWENTY-FOUR QUADRILLION FIVE HUNDRED TWENTY-FIVE THOUSAND FIVE HUNDRED THIRTY-FIVE
resulteert in een "groeiende/smeltende" sneeuwbal:
Het getal 520.636.000.000.757,000, of in woorden
FIVE HUNDRED TWENTY QUADRILLION SIX HUNDRED THIRTY-SIX TRILLION SEVEN HUNDRED FIFTY-SEVEN THOUSAND
heeft een letterverdeling die overeenkomt met de eerste 18 cijfers van het getal $$\pi$$:
Ze sluiten hun artikel af met de volgende bedenking:
This idea can also be applied to arbitrary text, not just number names. Can you find a sentence in Moby Dick or Pride and Prejudice whose letter distribution is a snowball or is interesting in some other way? Such possibilities are left for future consideration.
In deze opgave stellen we de letterverdeling van een gegeven string voor als een dictionary die alle letters die voorkomen in de string afbeeldt op hun aantal voorkomens in de string. Hierbij wordt geen onderscheid gemaakt tussen hoofdletters en kleine letters, en wordt de hoofdlettervariant van de letters gebruikt als sleutel in de dictionary. Letters die niet voorkomen in de string mogen ook niet als sleutel gebruikt worden in de dictionary. De karakters van de string die geen letters zijn, worden genegeerd bij het bepalen van de letterverdeling. Gevraagd wordt:
Schrijf een functie letterverdeling waaraan een string moet doorgegeven worden. De functie moet een dictionary teruggeven die de letterverdeling van de gegeven string voorstelt.
Schrijf een functie sneeuwbal waaraan een string moet doorgegeven worden. De functie moet een Booleaanse waarde teruggeven, die aangeeft of de letterverdeling van de gegeven string overeenkomt met de verdeling van een sneeuwbal.
Schrijf een functie pyramide waaraan een string moet doorgegeven worden. De functie moet een Booleaanse waarde teruggeven, die aangeeft of de letterverdeling van de gegeven string overeenkomt met de verdeling van een "groeiende/smeltende" sneeuwbal.
Als het aantal verschillende letters dat in de string voorkomt even is, dan komen de middelste twee letters van de pyramide even vaak voor. De pyramide heeft dan met andere woorden een afgevlakte top.
Schrijf een functie pi waaraan een string moet doorgegeven worden. De functie moet een Booleaanse waarde teruggeven, die aangeeft of de letterverdeling van de gegeven string overeenkomt met de eerste cijfers van het getal $$\pi$$.
Voor je zelf begint te zoeken naar een accurate voorstelling van het getal $$\pi$$, geven we je alvast de eerste 50 significante cijfers:
3,1415926535897932384626433832795028841971693993751
>>> letterverdeling('THREE HUNDRED THIRTEEN QUINTILLION THREE HUNDRED FORTY QUADRILLION THREE HUNDRED FIFTY TRILLION FOUR HUNDRED NINETY-NINE')
{'U': 7, 'I': 11, 'T': 10, 'L': 6, 'O': 5, 'Q': 2, 'N': 13, 'E': 14, 'D': 9, 'A': 1, 'R': 12, 'F': 4, 'H': 8, 'Y': 3}
>>> letterverdeling('TWO HUNDRED TWENTY-FOUR QUADRILLION FIVE HUNDRED TWENTY-FIVE THOUSAND FIVE HUNDRED THIRTY-FIVE')
{'W': 3, 'V': 4, 'U': 6, 'I': 7, 'T': 8, 'A': 2, 'O': 4, 'Q': 1, 'N': 7, 'E': 9, 'D': 8, 'R': 6, 'S': 1, 'F': 5, 'H': 5, 'Y': 3, 'L': 2}
>>> letterverdeling('FIVE HUNDRED TWENTY QUADRILLION SIX HUNDRED THIRTY-SIX TRILLION SEVEN HUNDRED FIFTY-SEVEN THOUSAND')
{'W': 1, 'X': 2, 'V': 3, 'U': 5, 'I': 9, 'T': 7, 'A': 2, 'O': 3, 'Q': 1, 'N': 9, 'E': 9, 'D': 8, 'R': 6, 'S': 5, 'F': 3, 'H': 5, 'Y': 3, 'L': 4}
>>> sneeuwbal('THREE HUNDRED THIRTEEN QUINTILLION THREE HUNDRED FORTY QUADRILLION THREE HUNDRED FIFTY TRILLION FOUR HUNDRED NINETY-NINE')
True
>>> sneeuwbal('TWO HUNDRED TWENTY-FOUR QUADRILLION FIVE HUNDRED TWENTY-FIVE THOUSAND FIVE HUNDRED THIRTY-FIVE')
False
>>> sneeuwbal('FIVE HUNDRED TWENTY QUADRILLION SIX HUNDRED THIRTY-SIX TRILLION SEVEN HUNDRED FIFTY-SEVEN THOUSAND')
False
>>> pyramide('THREE HUNDRED THIRTEEN QUINTILLION THREE HUNDRED FORTY QUADRILLION THREE HUNDRED FIFTY TRILLION FOUR HUNDRED NINETY-NINE')
False
>>> pyramide('TWO HUNDRED TWENTY-FOUR QUADRILLION FIVE HUNDRED TWENTY-FIVE THOUSAND FIVE HUNDRED THIRTY-FIVE')
True
>>> pyramide('FIVE HUNDRED TWENTY QUADRILLION SIX HUNDRED THIRTY-SIX TRILLION SEVEN HUNDRED FIFTY-SEVEN THOUSAND')
False
>>> pi('THREE HUNDRED THIRTEEN QUINTILLION THREE HUNDRED FORTY QUADRILLION THREE HUNDRED FIFTY TRILLION FOUR HUNDRED NINETY-NINE')
False
>>> pi('TWO HUNDRED TWENTY-FOUR QUADRILLION FIVE HUNDRED TWENTY-FIVE THOUSAND FIVE HUNDRED THIRTY-FIVE')
False
>>> pi('FIVE HUNDRED TWENTY QUADRILLION SIX HUNDRED THIRTY-SIX TRILLION SEVEN HUNDRED FIFTY-SEVEN THOUSAND')
True