Kuinka monta nelikkoa?

Edellisessä tarinassani loin GeoGebralla sovelluksen, jonka avulla voi tutkia Sagreda Familian seinällä sijaitsevaa Subirachsin taikaneliötä. Kuinka monta sellaista neljän luvun ryhmää luvuista 1,14, 14, 4, 11, 7, 6, 9, 8, 10, 10, 5, 13, 2, 3, 15 saa siten, että niiden summa on 33?

Yritin ensin tuottaa sisäkkäisiä silmukoita GeoGebralla, mutta tässä tapauksessa lauseke menee niin monimutkaiseksi, että minun pääni ei kestä. Niinpä vaihdoin kielen Pythoniin ja kirjoitin koodinpätkän. Sen perusteella neljän luvun ryhmiä on 88.

Ensimmäisellä rivillä ladataan itertools-kirjasto, jotta combinations() saadaan käyttöön. combinations(luvut,4) tuottaa listan, jossa on kaikki luvut-listan neljän mittaiset kombinaatiot. Niitähän on nCr(16,4) = 1820 kappaletta. Loppu koodista lienee ymmärrettävissä; for-silmukassa tutkitaan summia ja lisätään oikeat tulos-listaan. len(tulos) laskee tulos-listan pituuden.

Alla ohjelman tuottama tulos.

[(1, 14, 14, 4), (1, 14, 11, 7), (1, 14, 8, 10), (1, 14, 8, 10), (1, 14, 5, 13), (1, 14, 3, 15), (1, 14, 11, 7), (1, 14, 8, 10), (1, 14, 8, 10), (1, 14, 5, 13), (1, 14, 3, 15), (1, 4, 13, 15), (1, 11, 6, 15), (1, 11, 8, 13), (1, 7, 10, 15), (1, 7, 10, 15), (1, 9, 8, 15), (1, 9, 10, 13), (1, 9, 10, 13), (14, 14, 2, 3), (14, 4, 7, 8), (14, 4, 6, 9), (14, 4, 10, 5), (14, 4, 10, 5), (14, 4, 13, 2), (14, 11, 6, 2), (14, 11, 5, 3), (14, 7, 9, 3), (14, 7, 10, 2), (14, 7, 10, 2), (14, 6, 8, 5), (14, 6, 10, 3), (14, 6, 10, 3), (14, 9, 8, 2), (14, 4, 7, 8), (14, 4, 6, 9), (14, 4, 10, 5), (14, 4, 10, 5), (14, 4, 13, 2), (14, 11, 6, 2), (14, 11, 5, 3), (14, 7, 9, 3), (14, 7, 10, 2), (14, 7, 10, 2), (14, 6, 8, 5), (14, 6, 10, 3), (14, 6, 10, 3), (14, 9, 8, 2), (4, 11, 8, 10), (4, 11, 8, 10), (4, 11, 5, 13), (4, 11, 3, 15), (4, 7, 9, 13), (4, 6, 8, 15), (4, 6, 10, 13), (4, 6, 10, 13), (4, 9, 10, 10), (4, 9, 5, 15), (11, 7, 6, 9), (11, 7, 10, 5), (11, 7, 10, 5), (11, 7, 13, 2), (11, 6, 13, 3), (11, 9, 8, 5), (11, 9, 10, 3), (11, 9, 10, 3), (11, 10, 10, 2), (11, 5, 2, 15), (7, 6, 10, 10), (7, 6, 5, 15), (7, 9, 2, 15), (7, 8, 5, 13), (7, 8, 3, 15), (7, 10, 13, 3), (7, 10, 13, 3), (6, 9, 8, 10), (6, 9, 8, 10), (6, 9, 5, 13), (6, 9, 3, 15), (6, 10, 2, 15), (6, 10, 2, 15), (9, 8, 13, 3), (8, 10, 10, 5), (8, 10, 13, 2), (8, 10, 13, 2), (10, 5, 3, 15), (10, 5, 3, 15), (13, 2, 3, 15)]
nelikkoja on 88

[edit. 1.3.19 lisäsin muutaman virkkeen liittyen Python ohjelmaan. Vaihdoin ohjelmakoodin kuvan parempaan.]

Mainokset

Sagrada Familian taikaneliö ja painikeskriptausta GeoGebralla

Barcelonassa Gaudin Sagrada Familian pääoven vieressä on kuvanveistäjä Josep María Subirachsin patsas, jossa Juudas kavaltaa Jeesuksen. Patsaan vieressä on Subirachsin luoma taikaneliö. 

Raamatun tietäjät voivat tutkia, miten taikaneliön luvut liittyvät Raamatun jakeisiin. Eri lähteistä löytyy mitä kummallisempia lukumystisiä uskomuksia liittyen tähän taikaneliöön ja taikaneliöihin yleensä. Keskityn tässä taikaneliön maagiseen lukuun 33. No hyvä on, useiden lähteiden mukaan luku liittyy Jeesuksen ikään hänen kuollessaan. Toisaalta Lemmy oli 33 vuotta kun Motörhead nauhoitti Overkill LP:n


Ostin kirkosta matkamuistoksi taikaneliömuistivihkon. Sen kansissa on esitetty eri tapoja saada aikaiseksi tuo maaginen luku. Muistilehtiö on pyörinyt työpöydälläni jo vuosikymmenen. Päätinpä viimein luoda itselleni apuvälineen, jonka avulla taikaneliön summia voi tutkia.

Esitän seuraavassa, miten ideani toteutetaan GeoGebra-sovelmaksi. Tavoitteena on luoda 16 painiketta, joita painamalla näkyviin ilmestyy teksti, joka kertoo painettujen painikkeiden arvojen summan.

Luodaan ensin valittuja lukuja varten tyhjä lista nimeltä valitut. Kirjoitetaan syöttökenttään

valitut= {}

Ohjeet liittyät GeoGebra Classic 6 -versioon, mutta ohje toimii myös GeoGebra 5:ssä. Muutaman kerran painikkeita luotaessa GeoGebra 6:lla piirtoalueelle ilmestyi ylimääräisiä pisteitä ja tekstikenttiä, tätä ominaisuutta en havainnut, kun tein sovelluksen alun perin GeoGebra 5:ssä.

Tässä vaiheessa kannattaa laittaa piirtoalueen asetuksista Aseta pisteen sieppauksen tyyli -> Kiinnitetty koordinaatistoon. Samalla kannattaa miettiä minkä kokoinen taikaneliöstä tulee.

Ensimmäinen painike luodaan Painike-työkalulla.

Oletusarvoisesti (mikäli kieli on Suomi) GeoGebra luo painikkeen nimeltä Painike1. Avautuvan ikkunan Teksti: -kohtaan kirjoitetaan 1 eli taikaneliön vasemman yläkulman luku ja GeoGebra Script:-kohtaan komennot

AsetaArvo(valitut,Liitos(valitut,1))
AsetaVäri(painike1, "Punainen”)

Huom! Lue lopussa [edit 23.2.19.] oleva kommentti liittyen väreihin!!!!

Liitos-komento lisää luvun 1 valitut-listan viimeiseksi jäseneksi eli ensimmäisellä kerralla käytettäessä Liitos tuottaa listan {1}. Aseta arvo-komento asettaa valitut-listan arvoksi {1}. Periaatteessa edellä esitetty komento tarkoittaa samaa kuin valitut = Liitos(valitut,1)]. GeoGebra-ohjeistus kehottaa käyttämään AsetaArvo-komentoa skripteissä, kun muuttujille annataan arvoja, erityisesti silloin kun viitataan muuttujan, jonka arvoa ollaan muuttamassa. Eli GeoGebrassa ei kannata käyttää syntaksia

a = a + 1

vaan 

AsetaArvo(a,a+1)

AsetaVäri muuttaa painikkeen värin punaiseksi. Komentoa voi myös käyttää muodossa AsetaVäri( <Objekti>, <Punainen>, <Vihreä>, <Sininen> ). Tällöin kolme viimeistä muuttujaa kertovat värin RGB-arvon.

Klikataan hiiren oikealla painikkeella luodun painikkeen päälle ja valitaan välilehti Ohjelmointi: Klikattaessa. Kopioidaan luotu skripti.

Seuraava painike syntyy samalla tavalla. Painike työkalun klikkaamisen jälkeen klikataan Piirtoalueella siihen kohtaan, minne painikkeen vasemman yläkulman halutaan sijoittuvan. Teksti kohtaan kirjoitetaan 14 ja skriptun kohdalle liitetään kopioitu koodi ja muutetaan se muotoon 

AsetaArvo[valitut,Liitos(valitut,14)]
AsetaVäri(painike2, "Punainen" )

Tässä vaiheessa toivoisi, että tämän asian saisi tuotettua ohjelmallisesti. Jätetään aiheen tutkiminen tulevaisuuteen. Tätä kirjoitettaessa tuli mieleen myös, että painikkeiden tilalla olisi voinut käyttää neliöitä. Ne olisi ollut helppo laittaa paikoilleen Jono-komennon avulla.

Edellä mainitulla menetelmällä tuotetaan painikkeet omille paikoilleen.

Alla skriptit kaikissa painikkeissa

AsetaArvo[valitut,Liitos(valitut,1)]
AsetaVäri(painike1, "Punainen" )

AsetaArvo[valitut,Liitos(valitut,14)]
AsetaVäri(painike2, "Punainen" )

AsetaArvo[valitut,Liitos(valitut,14)]
AsetaVäri(painike3, "Punainen" )

AsetaArvo[valitut,Liitos(valitut,15)]
AsetaVäri(painike16, "Punainen" )

Kun painikkeet on luotu skripteineen, niiden koko ei ole sama. Valitaan Algebra-ikkunan asetukset ja sieltä laitetaan ruksi kohtaa apuobjektit. Näin saadaan painikkeet näkyville Algebra-ikkunaan. Valitaan kaikki 16 painiketta Vaihto-näppäimen avulla ja valitaan Objektin tyyli-kohdasta ruksi Kiinnitetty-kohtaan ja painikkeen leveydeksi 47. Kun klikkaa hiirellä Paikka-välilehteen muutos tulee näkyviin. En ymmärrä, miksi molempia leveyttä ja korkeutta ei saa säädettyä samanaikaisesti.

Mikäli painikkeita haluaa siirrellä, niin se onnistuu Ctrl-näppäimen avulla.

Tässä vaiheessa voi kokeilla, muuttuuko valitut-lista ja painikkeen väri, kun painiketta klikataan. Ai niin, meinasi unohtua skriptin asetusikkuna ei saa olla auki, kun skriptejä suoritetaan!

Seuraavaksi luodaan nollauspainike. Klikataan Painike työkalua ja kirjoitetaan Teksti: nollaa summa, Skript:

AsetaArvo[valitut,{}]
AsetaVäri(painike1, "Musta" )
AsetaVäri(painike2, "Musta" )
AsetaVäri(painike3, "Musta" )
AsetaVäri(painike4, "Musta" )
AsetaVäri(painike5, "Musta" )
AsetaVäri(painike6, "Musta" )
AsetaVäri(painike7, "Musta" )
AsetaVäri(painike8, "Musta" )
AsetaVäri(painike9, "Musta" )
AsetaVäri(painike10, "Musta" )
AsetaVäri(painike11, "Musta" )
AsetaVäri(painike12, "Musta" )
AsetaVäri(painike13, "Musta" )
AsetaVäri(painike14, "Musta" )
AsetaVäri(painike15, "Musta" )
AsetaVäri(painike16, "Musta" )

Valittujen lukujen summaa varten luodaan muuttuja yhteensä kirjoittamalla 

yhteensä = summa(valitut)

Summa saadaan näkyviin Tekstikenttätyökalulla. Käännetään Lisäasetukset auki ja kirjoitetaan ”Lukujen valitut summa on yhteensä.”, missä muuttujien valitut –ja yhteensä arvotvalitaan Lisäasetukset –ikkunan GeoGebra-välilehdeltä.

Nyt sovellus on valmis. Ei muuta kuin tutkimaan, millaisilla eri tavoilla maaginen luku 33 esiintyy taikaneliössä.


Tutkittavaa

  • Taikaneliö GeoGebra Materiaaleissa: https://ggbm.at/jyf5qnru
  • Martin Gardner, Time Travel and …, 1988, luku 17, Magic Squares and Cubes
  • Martin Gardner, Älyniekka, 1965, 1. luku, Taikaneliöistä puhelinnumeroihin
  • J.A.H. Hunter, Joshep S. Madachy, Mathematical Diversions, 1974, luku 3, Mystic Arrays
  • Boris A. Kordemsky, The Moscow Puzzles, 1972, s. 146, Magic Squares

[edit 23.2.19. Kun kokeilin julkaisemaani sovellusta, niin havaitsin, että se tuotti virheilmoituksia iPhonella selaimessa. Kun muutin sanat ”Musta” -> ”Black” ja ”Punainen” -> ”Red”, niin eri versiot toiminevat paremmin. ]

[edit 24.2.19. Lisäsin kirjallisia lähteitä, tutkittaavaa lista.]