Taas uusi pieni lukuihin ja numeroihin liittyvä pähkinä purtavaksi. Tutkitaan kymmenjärjestelmän numeroiden 0, 1,…, 8, 9 lukumääriä lukujonossa (0, 1, 2, … , 99…999)? Viimeisessä luvussa on monta yhdeksikköä.
Tämän artikkelin myötä pidän pientä taukoa kirjoittamisessa. Minulla on muita hommia jonkin aikaa.
Kun itse aloin ratkoa tätä ongelmaa, niin kirjoitin ensin numeroita peräkkäin ja laskin merkkijonossa esiintyvien numeroiden määriä. Lopulta ymmärsin, miten laskea numeroiden lukumääriä.
koodi GeoGebralla
GeoGebralla sain tuotettua numerot peräkkäin Syöttökentän komennolla
numerot=Summa(Jono(Teksti(n),n,0,99))
numerot = "0123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899"
Edellisessä komennossa Teksti(n) tuottaa luvun merkkijonona (tekstinä), Jono tekee numeromerkkijonoista listan {”0”, ”1”,… ,”99″} ja Summa liittää listan yhdeksi merkkijonoksi.
Kirjaimien lukumäärä saadaan Pituus-komennolla. Ykkösten ja nollien lukumäärän laskeminen vaatii hieman kikkailua unicode-koodin avulla.
numeroita=Pituus(numerot)
numeroita=190
Ykkösten ja nollien lukumäärän laskeminen vaatii hieman kikkailua unicode-koodin avulla. Numeron nolla unicode-koodi on 48, … ja yhdeksän koodi on 57.
koodi=UnicodeTekstistä(numerot)
koodi = {48, 49, ..., 56, 57, 57}
nollat=LaskeJos(x==48, koodi)
nollat=10
ykkoset=LaskeJos(x==49, koodi)
ykkoset=20
Ja sama englannikielisille lukijoille.

Taulukkolaskennassa noiden komentojen avulla saanee nätin taulukon. Jätän sen tuottamisen lukijalle.
koodi pythonilla
Tehdään pieni koodinpätkä, jolla numeroiden laskeminen saadaan aikaiseksi Pythonilla. Koodissa on esitetty kolme eri tapaa tuottaa merkkijono ”0123…99899”. Lähteet-luvussa on linkkejä, joiden avulla voi ymmärtää paremmin, miten ne toimivat.
Riveillä 1-5 käytetään perinteistä for-silmukkaa merkkijonolistan [”0”, ”1”, …, ”999”] tuottamiseksi. Rivillä 5 join()-metodi liittää listan merkkijonoksi ”0123…999”.
Rivillä 7 käytetään yhden rivin for silmukka -menetelmää ja rivillä 8 käytetään map-funktiota.

ongelmia
Merkitään lukujen lukumäärää N:llä, tällöin viimeinen luku on 10N-1. Oheisessa taulukossa on kymmenjärjestelmän lukujonon (0, 1, 2, …, 10N – 1) nollien, ykkösten, kaikkien numeroiden lukumäärä ja nollien ja ykkösten lukumäärien suhde.

Ongelma 1. Kirjoita lauseke , jonka avulla voi laskea ykkösten lukumäärä, kun muuttujana on N.
Ongelma 2. Kirjoita lauseke , jonka avulla voi laskea nollien lukumäärä, kun muuttujana on N.
Ongelma 3. Osoita, että (nollien lukumäärä) / (ykkösten lukumäärä) lähestyy arvoa 1, kun N kasvaa rajatta. Tai toisin sanoin. Osoita, että nollien ja ykkösten suhteellinen lukumäärä lähestyy arvoa 1/10 kun N lähestyy ääretöntä.
Ongelma 4. Millä N:n (N>1) arvolla (nollien lukumäärä) / (ykkösten lukumäärä) on suurempi kuin 0,99?
Taulukossa näkyy sellainen hauska ominaisuus, että nollien sarakkeessa on samat luvut kuin kaikkien numeroiden sarakkeessa. Mieti miksi?
liitteet
Merkkijonometodit esimerkeillä
https://mikkorahikka.blog/2023/01/06/merkkijonometodit-esimerkeilla/
Jono GeoGebrassa
https://mikkorahikka.blog/2018/10/26/jono-geogebrassa/
GeoGebraohje Sum Command
https://wiki.geogebra.org/en/Sum_Command
GeoGebraohje TextToUnicode Command
https://wiki.geogebra.org/en/TextToUnicode_Command
GeoGebraohje CountIf Command
https://wiki.geogebra.org/en/CountIf_Command
Treehouse blogiartikkeli Python One Line for Loops [Tutorial]
https://blog.teamtreehouse.com/python-single-line-loops
W3schools-sivu Python map() Function
https://www.w3schools.com/python/ref_func_map.asp
OEIS A033714
https://oeis.org/A033714

Jätä kommentti