Hier is iets fantastisch — een machine gemaakt van breuken: \[ \frac{17}{91}, \frac{78}{85}, \frac{19}{51}, \frac{23}{38}, \frac{29}{33}, \frac{77}{29}, \frac{95}{23}, \frac{77}{19}, \frac{1}{17}, \frac{11}{13}, \frac{13}{11}, \frac{15}{14}, \frac{15}{2}, \frac{55}{1} \] Begin met het getal 2 als seed. Vermenigvuldig de seed telkens met de volgende breuk, todat het product een geheel getal is (in dit geval is dit bij vermenigvuldiging met de breuk $$\frac{15}{2}$$). Neem nu dit geheel getal (15) als de nieuwe seed, en vermenigvuldig die seed opnieuw met elk van de breuken, totdat je opnieuw een geheel getal bekomt. Blijf deze procedure herhalen, en houd bij wanneer de seed een macht van twee is.
stap | seed | $$\log_{2}(\text{seed})$$ |
---|---|---|
19 | 4 | 2 |
69 | 8 | 3 |
280 | 32 | 5 |
707 | 128 | 7 |
2363 | 2048 | 11 |
3876 | 8192 | 13 |
8068 | 131072 | 17 |
11319 | 524288 | 19 |
19201 | 8388608 | 23 |
36866 | 536870912 | 29 |
45551 | 2147483648 | 31 |
75224 | 137438953472 | 37 |
101112 | 2199023255552 | 41 |
117831 | 8796093022208 | 43 |
152025 | 140737488355328 | 47 |
215384 | 9007199254740992 | 53 |
293375 | 576460752303423488 | 59 |
327020 | 2305843009213693952 | 61 |
428553 | 147573952589676412928 | 67 |
507519 | 2361183241434822606848 | 71 |
555694 | 9444732965739290427392 | 73 |
700063 | 604462909807314587353088 | 79 |
808331 | 9671406556917033397649408 | 83 |
989526 | 618970019642690137449562112 | 89 |
1273490 | 158456325028528675187087900672 | 97 |
1434366 | 2535301200456458802993406410752 | 101 |
1530213 | 10141204801825835211973625643008 | 103 |
1710923 | 162259276829213363391578010288128 | 107 |
1818254 | 649037107316853453566312041152512 | 109 |
2019962 | 10384593717069655257060992658440192 | 113 |
2833089 | 170141183460469231731687303715884105728 | 127 |
De eerste tweede macht ($$2^2 = 4$$) verschijnt na 19 stappen. Vijftig stappen later duikt $$2^3 = 8$$ op. Daarna verschijnt $$2^5 = 32$$ ongeveer 200 stappen verderop. Er ontstaat een patroon: de exponenten zijn 2, 3, 5, 7, 11, 13, …
Zo blijkt dat "alleen al deze veertien breuken een oneindig aantal priemgetallen bevatten, zelfs die waar nog niemand iets van afweet" schrijft Dominic Olivastro. "Er is iets enorm magisch aan." Deze PRIMEGAME techniek is gebaseerd op een Turing-complete esotherische programmeertaal genaamd FRACTRAN1, die bedacht werd door John Horton Conway2.
Elke regel van het tekstbestand fractions.txt3 bestaat uit een patroon $$p \in \mathcal{P}$$, gevolgd door een spatie en een woord $$w \in \mathcal{W}$$. De verzameling $$\mathcal{P}$$ bevat alle mogelijke reeksen van breuken. Een breuk wordt voorgesteld als twee natuurlijke getallen die van elkaar worden gescheiden door een slash (/). De getallen voor en na de slash worden respectievelijk de teller en de noemer van de breuk genoemd. In een reeks breuken worden de voorstellingen van de individuele breuken van elkaar gescheiden door één enkele spatie. De verzameling $$\mathcal{W}$$ bevat alle woorden die enkel bestaan uit kleine letters. Gevraagd wordt:
Bepaal zo kort mogelijke reguliere expressies voor de volgende deelverzamelingen van $$\mathcal{P}$$:
$$\mathcal{P}_1 = \{\,p \in \mathcal{P}\,|\,p\ $$bestaat uit exact 7 breuken$$\,\}$$
voorbeeld: | |
$$\mathcal{P}_2 = \{\,p \in \mathcal{P}\,|\,$$de noemers van alle breuken in $$p$$ zijn even$$\,\}$$
voorbeeld: | |
$$\mathcal{P}_3 = \{\,p \in \mathcal{P}\,|\,p\ $$bevat minstens één breuk waarvan teller en noemer uit exact twee cijfers bestaan$$\,\}$$
voorbeeld: | |
$$\mathcal{P}_4 = \{\,p \in \mathcal{P}\,|\,$$in alle breuken van $$p$$ is het eerste cijfer van de teller gelijk aan het laatste cijfer van de noemer$$\,\}$$
voorbeeld: | |
Geef telkens een Unix commando waarin de reguliere expressie gebruikt wordt door een commando uit de grep familie om enkel de regels van het tekstbestand naar stdout te schrijven waarvan het patroon $$p$$ behoort tot $$\mathcal{P}_i\ (i = 1, 2, 3, 4)$$.
Bepaal als volgt de woorden $$w_1\ w_2\ w_3\ w_4$$ van een geheime boodschap:
het woord $$w_1$$ staat op de unieke regel waarvan $$p$$ behoort tot $$\mathcal{P}_1 \cap \mathcal{P}_2$$
het woord $$w_2$$ staat op de unieke regel waarvan $$p$$ behoort tot $$ \mathcal{P}_2 \cap \mathcal{P}_3$$
het woord $$w_3$$ staat op de unieke regel waarvan $$p$$ behoort tot $$\mathcal{P}_3 \cap \mathcal{P}_4$$
het woord $$w_4$$ staat op de unieke regel waarvan $$p$$ behoort tot $$\mathcal{P}_4 \cap \mathcal{P}_1$$
Geef telkens een Unix commando waarin de reguliere expressies voor de verzamelingen $$\mathcal{P}_i\ (i = 1, 2, 3, 4)$$ gebruikt worden door commando's uit de grep familie om het woord $$w_j\ (j = 1, 2, 3, 4)$$ op te zoeken in het tekstbestand en uit te schrijven naar stdout. Hierbij is het niet toegelaten om het woord $$w_j$$ letterlijk uit te schrijven (bv. echo $$w_j$$).