Eftir að hafa sent inn Forritunar Áskorun #1, þá var ég þar með að segja að ég myndi senda inn fleiri enn eina áskorun inn.

Ég hef verið aðeins of upptekinn upp á síðkastið og ekki haft tíma til að finna eitthvað efni sem hægt væri að senda inn, en ég rakst hins vegar á eina helvíti skemmtilega áskorun á netinu um daginn og ákvað að deila henni með ykkur.

Hún er töluvert skref upp á við miðað við Glaðar/Leiðar tölur, en þetta er ekkert rosalegt, þannig engar áhyggjur.

Þýtt frá ensku, fengið frá osix.net(Enginn höfundarréttur sem ég gat séð þarna):

Mersenne Twister(Héðan í frá MT) er svokallaður “pseudo-random number generator.” Þetta er aðeins “psuedo-random” af því að tölvan getur ekki hugsað sjálf, og tekur alltaf við skipunum og þess vegna er ekki hægt að framleiða 100% random tölur með töluforritum eins og er. Reyndar er þetta mun flókanara, en ég ætla mér ekki að skrifa ritgerð um þetta, þannig kíkið á http://en.wikipedia.org/wiki/Pseudo-random_number_generator ef þið viljið fræðast meira um þetta.

Áskorunin virkar svona:

Tala er tekin og henni er hent í MT fallið, þar sem henni hún er lamin um aðeins. Eftir það er tölunni skilað, tekið mod 6 af henni(þeas. afgangurinn þegar það er deilt með 6.. 13/6 = 2, 1 í afgang) og sú tala geymd. Svo er tölunni hent aftur í og þetta endurtekið 13 sinnum þannig að þú ert með 13 tölur á milli 0 og 6. Ekki henda afgangnum í fallið, heldur tölunni sjálfri.

Verkefnið er að finna þá tölu sem gefur af sér talnarununa 6, 4, 5, 2, 3, 3, 1, 5, 1, 5, 1, 6, 3.

Til að framkvæma þetta þurfið þið MT fallið.

s1 = seed;
s1 ^= (s1 >> 11);
s1 ^= (s1 << 7) & 0x9d2c5680U;
s1 ^= (s1 << 15) & 0xefc60000U;
s1 ^= (s1 >> 18);
return s1;

Það er fleiri en ein tala sem getur framleitt þessa runu.

Áskorunin er séð sem framkvæmd þegar þið sýnið kóða sem mun framleiða allar mögulegar tölur sem framleiða rununa(Ekki hærri en 2^32-1) og svo tölurnar sem þið fenguð úr forritinu ykkar.

Ef enginn kemur með lausn fyrir enda vikunnar mun ég sýna mína lausn.

“Brute-force away!”