This document is also available in English. Dieses Dokument ist auch auf Deutsch erhältlich.

Marko Mäkelä: ohjelmointi: säännölliset sängynpeitteet

Pääsiäisenä 2003, kun vaimoni odotti esikoistamme, hän virkkasi anoppini kanssa kirjavan sängynpeitteen sekalaisista villalangoista. Koska peite tuntui minusta liian satunnaiselta, päätin suunnitella säännöllisiä peittoja mahdollisimman vähistä väreistä.

[6-värinen sängynpeite]Kirjavassa peitteessä oli 3-värisiä neliöitä. Halusin suunnitella peitteen, jossa on kaikki erilaiset jonkin yksinkertaisen säännön mukaiset neliöt. Ensinnäkin kunkin neliön värien on oltava keskenään erilaiset. Koska värien järjestyksellä neliössä on merkitystä, voidaan valita kolme väriä n:stä n×(n-1)×(n-2) eri tavalla. Arvolla n=6 saadaan 120 erilaista neliötä, jotka voidaan asettaa 12×10 neliön muodostelmaan.

[5-värinen sängynpeite]Seuraavaksi oli luonnollista selvittää, voisiko saman määrän neliöitä saada aikaan vähemmillä väreillä. Huomasin, että 120=5×4×3×2×1. Siitä on pääteltävissä, että viisi väriä riittää. Tosiaankin, yhtälöstä on ilmeistä, että viidestä väristä saadaan 120 erilaista 4-väristä (tai 5-väristä) neliötä. Neliöiden järjesteleminen kauniiksi kuvioksi vei jonkin verran aikaa.

[4-värinen tyynynpäällinen]Pääsiäisenä 2008 vaimoni halusi tehdä sängynpeitteistä jääneistä langoista sohvatyynynpäällisiä. Neljästä väristä saa 24=4×3×2×1 erilaista 3-väristä (tai 4-väristä) ruutua eli 4×3 ruutua tyynyn kummallekin puolelle.

Kirjoittamani C-ohjelmat tuottavat kuvat NetPBM-paketin PPM-muodossa. Tutustu vapaasti ohjelmien lähdekoodiin: 6-värisen peiton muodostajaan, 5-värisen peiton muodostajaan ja 4-värisen tyynynpäällisen muodostajaan.