Puzzels Blokken en Veranderbare Kunst Marc van Kreveld
Puzzels, Blokken en Veranderbare Kunst Marc van Kreveld Instituut voor Informatica en Informatiekunde Universiteit Utrecht http: //www. cs. uu. nl/~marc/composable-art/
Puzzels, Blokken, Veranderbare kunst … en meetkunde, combinatoriek en computerprogramma’s
Overzicht • Voorbeelden veranderbare kunst • Meetkundige puzzels & blokken • Ontwerp van een ‘moeilijkste’ puzzel m. b. v. wiskunde en informatica • Tellen van de mogelijkheden van veranderbare kunst m. b. v. wiskunde en informatica
Veranderbare kunstobjecten • • Meerdere delen Niet ‘gefixeerd’ Veranderbaar Niet: bewegend
Veranderbaar ‘wandkleed’ • Latten (staven) hangen aan elkaar • 54 delen
Veranderbaar schilderij • 6 panelen in een box • Box heeft 4 gleuven • Panelen hebben gaten
Veranderbaar schilderij
Puzzels en blokken • 6 stukken: 2 van 3 soorten • 2 soorten zijn gespiegelden
Variatie: 8 stukken
Een puzzelidee • 8 stukken, 1 voor elk hoekpunt van een kubus • Aangrenzende stukken moeten passen in hun gezamenlijke ribbe • Elk stuk heeft 1 hoek en 3 halve ribben
Eisen aan de puzzel • Alle 8 stukken anders • Geen stukken die - als je ze draait hetzelfde zijn • Zo moeilijk mogelijk (unieke oplossing) Bestaat zo’n puzzel? En hoe vinden we ‘m?
Analyse van de stukken • Hoeveel verschillende stukken zijn er? – Er zijn 4 mogelijkheden voor halve ribben noem ze typen A, B, C, D A B A C D
Analyse van de stukken • Het type van een stuk (BDD): • Kies het alfabetisch gezien kleinste type (dus niet DDB of DBD, maar BDD)
Oefening • Welke stukken zijn dit?
Vraagstuk (2 minuten) • Hoeveel verschillende stukken zijn er? Maximaal 4 x 4 = 64, maar precies? AAA, AAB, AAC, AAD, ABA, … Hint: gelijk – Hoeveel met 3 dezelfde letters? – Hoeveel met 2 dezelfde letters? – Hoeveel met 3 verschillende letters? +
Antwoord • 3 dezelfde letters: 4 • 2 dezelfde letters: 4 keuzen voor dubbele letter, nog 3 over voor enkele letter: 12 • 3 verschillende letters: 4 keuzen welke letter niet, voor elke keuze twee spiegelvarianten (bijv. ABC en ACB): 8 + 24
Welke types passen? • A en D passen altijd; B en C passen altijd • Verder past niets
Extra eis • Elk type halve ribbe - A, B, C en D komt precies 6 keer voor in de puzzel
De stukken • Er zijn 24 verschillende stukken, maar 4 daarvan willen we niet ( ) 20 8 • Er zijn = 124. 970 sets van 8 verschillende stukken. Welke passen op 1 unieke wijze?
Een puzzeloplosprogramma? • Per 8 stukken: Leg eerste stuk vast neer – 2 e stuk: 7 plekken, 3 standen – 3 e stuk: 6 plekken, 3 standen –… • Dus 7! · 37 = 11. 022. 480 manieren om te passen • Alle 125. 970 kandidaat puzzels: 1. 388. 501. 805. 600 manieren testen
Andere aanpak (programma) • Neem een kubus en splits alle 12 ribben op de 4 mogelijke manieren
Andere aanpak (programma) • Als we weten hoe de 12 ribben gesplitst zijn, dan weten we de 8 puzzelstukken; dit geeft de 412 = 16. 777. 216 oplossingen van alle mogelijke kubuspuzzels! – Test elk stuk op: niet AAA, BBB, CCC, DDD – Test elk paar op ongelijkheid – Test of A, B, C en D elk 6 x voorkomen
Andere aanpak • Er blijven 1. 023. 360 oplossingen van puzzels over, volgens het computerprogramma • Laatste eis: Unieke oplosbaarheid Zoek verschillende oplossingen met dezelfde 8 stukken; zulke puzzels zijn niet uniek oplosbaar
Resultaten • De 1. 023. 360 oplossingen zijn van 2290 puzzels die aan 3 eisen voldoen • Het minimum is 24 oplossingen (34 puzzels) • Het maximum is 1656 oplossingen (4 puzzels) 24 oplossingen 1 oplossing
De makkelijkste puzzel • Met 1656 69 oplossingen
Vraagstuk (1 minuut) • Alle 34 moeilijkste puzzels hebben de stukken AAD, ADD, BBC en BCC Is dit logisch? Verklaar N. B. Alle 4 makkelijkste puzzels hebben de stukken AAB, ABB, CCD en CDD, of AAC, ACC, BBD en BDD
Resultaten • 34 verschillende puzzels zijn uniek oplosbaar, bijv. AAB, AAD, ABC, ADD, BBC, BCC, BDC, CDD AAC, AAD, ACB, ADD, BBC, BCD, BDD AAD, ACB, ACD, ADB, ADD, BBC, BCC, BDC + nog 31 puzzels
Resultaten • 34 verschillende puzzels zijn uniek oplosbaar, bijv. AAB, AAD, ABC, ADD, BBC, BCC, BDC, CDD AAC, AAD, ACB, ADD, BBC, BCD, BDD AAD, ACB, ACD, ADB, ADD, BBC, BCC, BDC + nog 31 puzzels B C C B
Resultaten • Er zijn 5 equivalentieklassen in de 34 uniek oplosbare puzzels Maar: is er nog verschil in moeilijkheid?
Naar een definitie van moeilijkheid • Hoe lost een puzzelaar zo’n puzzel op? Waarschijnlijk: beginnen met de onderste 4 stukken = 1 cykel / ondervlak van de kubus
Naar een definitie van moeilijkheid • Nadat je een onderste cykel hebt is het ‘slechts’ een puzzel met 4 stukken Moeilijkheid puzzel = Aantal goede cykels Totaal aantal cykels
Vraagstuk (5 minuten) • Maak een (ruwe) schatting van de moeilijkheid van de moeilijkste puzzels Hint: Wat is het verwachte/ruw geschatte aantal cykels voor een willekeurige puzzel als je weet dat er 6 A’s, 6 B’s, 6 C’s en 6 D’s zijn?
Antwoord • Aantal goede cykels: 6 • Schatting totaal aantal cykels willekeurige puzzel: – – – – Leg 1 stuk neer, zeg, met AB op tafel Er passen 5 à 6 halve ribben aan de A, zeg, 5, 25 Er passen 4 à 5 halve ribben aan de B, zeg, 4, 5 4 e stuk van de cykel moet aan 2 kanten passen: kans 1/16; de 5 resterende stukken hebben 5 x 3 = 15 geordende paren Dit geeft geschat 5, 25 x 4, 5 x 15/16 = 22 cykels Er zijn 8 x 3 = 24 keuzen voor eerste paar Nu tellen we elke cykel 4 x Dus geschat 22 x 24/4 = 132 cykels in een puzzel Moeilijkheid moeilijkste 132/6 22
Berekenen van moeilijkheid • Met een computerprogramma: de 5 echt verschillende puzzels (andere equivalentieklasse) hebben 107, 116, 118 en 122 cykels Moeilijkheid moeilijkste puzzel = Aantal goede cykels 6 = Totaal aantal cykels 122 • Makkelijkste puzzels & maximum: 230 cykels
Nog meer puzzels
Een persoonlijke puzzel
Scharnierende puzzel
Poortjespuzzel
… tot zover de puzzels
Veranderbare kunst • Vraag uit nieuwsgierigheid: hoeveel verschillende composities zijn er? • Kunnen we een willekeurige compositie laten genereren door een computer? • Toekomst: automatisch evalueren van ‘mooie’ composities kunst + software
Mogelijkheden tellen • Fibonacci reeks: 1, 1, 2, 3, 5, 8, 13, … • F(0) = 1, F(1) = 1, F(n) = F(n-1) + F(n-2) als n 2 Er zijn twee manieren om het 100 ste Fibonacci getal met de computer te berekenen
int Fib(n) { Recursief if ((n==0) or (n==1)) then return 1; else return ( Fib(n-1) + Fib(n-2) ); } int Fib(n) { int A[] = new int[n+1]; A[0] = 1; A[1] = 1; for (i=2; i <= n; i++) A[i] = A[i-1] + A[i-2]; return A[n]; } Met array
Efficiëntie • Aantal optellingen voor eerste manier is Fib(n) -1 > 1, 618 n ( Fib(100) is getal met 21 cijfers) • Aantal optellingen tweede manier is n -1 Tussenoplossingen die vaker nodig zijn opslaan in een array (tabel): Dynamisch Programmeren
Veranderbaar Wandkleed • 3 x 3 latten van 125 cm (4 haakjes); 3 x 3 latten van 85 cm; 3 x 3 latten van 45 cm • 3 x 9 latten van 5 cm (1 haakje) • Aluminium & vierkant, hout & rond, zwart & vierkant op punt
Wandkleed composities tellen • Alleen rechthoekig, vier-breed, geen brede gaten • Tel kleurtoewijzingen en silhouetten apart
Kleurtoewijzingen tellen • Voor elk willekeurig silhouet zijn er ( ) [( ) ( )] 27 9 • 18 9 • 9 3 kleurtoewijzingen • 6 3 3
Silhouetten tellen • We hebben rijen, kolommen en latten in verschillende lengten • Met een recurrente betrekking?
Silhouetten tellen • Elke laag bestaat uit: – één 125 cm lat, of – één 85 cm lat en één 5 cm lat, of – twee 45 cm latten, of – één 45 cm lat en twee 5 cm latten, of – vier 5 cm latten (1) (2) (1) (3) (1)
Silhouetten tellen • Laat A(j, k, m, n) het aantal silhouetten zijn voor – – j 125 cm latten, k 85 cm latten, m 45 cm latten, n 5 cm latten A(j, k, m, n) = A(j-1, k, m, n) + 2 A(j, k-1, m, n-1) + A(j, k, m-2, n) + 3 A(j, k, m-1, n-2) + A(j, k, m, n-4)
Silhouetten tellen A(j, k, m, n) = A(j-1, k, m, n) + 2 A(j, k-1, m, n-1) + A(j, k, m-2, n) + 3 A(j, k, m-1, n-2) + A(j, k, m, n-4) A(0, 0, 0, 0) = 1 A(. , . , . ) = 0 als een argument negatief is B(j, k, m, n) = B(j-1, k, m, n) + B(j, k-1, m, n-1) + B(j, k, m-2, n) + B(j, k, m-1, n-2) + B(j, k, m, n-4) #recursieve aanroepen voor A(9, 9, 9, 27) is B(9, 9, 9, 27)= 7 • 1014
Silhouetten tellen A[j, k, m, n] = A[j-1, k, m, n] + 2 A[j, k-1, m, n-1] + A[j, k, m-2, n] + 3 A[j, k, m-1, n-2] + A[j, k, m, n-4] A[0, 0, 0, 0] = 1 A(. , . , . ) = 0 als een argument negatief is Dynamisch programmeren: 4 -dimensionale tabel met 28, 000 waarden om A[9, 9, 9, 27] te verkrijgen
Silhouetten tellen • • • A(1, 1, 1, 3) = 36 A(2, 2, 2, 6) = 3960 A(3, 3, 3, 9) = 604. 800 A(4, 4, 4, 12) = 1, 1 • 108 A(5, 5, 5, 15) = 2, 1 • 1010 A(6, 6, 6, 18) = 4, 4 • 1012 A(7, 7, 7, 21) = 9, 4 • 1014 A(8, 8, 8, 24) = 2, 1 • 1017 A(9, 9, 9, 27) = 4, 8 • 1019
Diago • 20 latten; 4 x 5 lengten • Blokhut principe • 9 uitsteeksels in achterplaat
Diago • We draaien over 45 en doen alsof de achterplaat vierkant is
Diago tellen • Op hoeveel manieren kunnen we 20 latten met lengten 2, 3, 4, 5 en 6 op een 10 x 10 grid leggen?
Diago tellen • Veronderstel eerst dat alle latten horizontaal zijn • Laat de grid grootte Z x Z zijn • Welke recurrente betrekking? Laat A(i, j, k, m, n, r, c) = # manieren om i, j, k, m en n latten met lengten 2, 3, 4, 5 en 6 te plaatsen, beginnend bij r en kolom c, op een grid [0. . Z-1] x [0. . Z-1]
Diago tellen (0, 0) r c Z-1 3 -lat A(i, j, k, m, n, r, c) = A(i, j-1, k, m, n, r, c+3) of A(i, j-1, k, m, n, r+1, 0) (of 1 of 0)
Diago tellen #manieren met een 2 -lat op (r, c) #manieren met een 3 -lat op (r, c) A(i, j, k, m, n, r, c) = #manieren met een 4 -lat op (r, c) #manieren met een 5 -lat op (r, c) #manieren met een 6 -lat op (r, c) #manieren met géén lat op (r, c) Als j > 0 en c Z-4, dan A(i, j-1, k, m, n, r, c+3), etc.
Diago tellen • De definitie van A(i, j, k, l, m, n, r, c), met alle bijbehorende voorwaarden, gaat in een 7 -dimensionale tabel die door een programma wordt gevuld
Diago tellen • Horizontal en vertikaal: – Neem alle 55 = 3125 manieren om een deelverzameling horizontalen te kiezen uit de 4+4+4 latten; rest is vertikaal #Comp = A(i, j, k, m, n, 0, 0) • A(4 -i, 4 -j, 4 -k, 4 -m, 4 -n, 0, 0) 0 i, j, k, m, n 4
Tellingen voor Diago • • 6 x 6 grid: 0 7 x 7 grid: 2, 1 • 1016 8 x 8 grid: 6, 5 • 1023 9 x 9 grid: 3, 1 • 1028 10 x 10 grid: 9, 9 • 1031 11 x 11 grid: 6, 7 • 1034 12 x 12 grid: 1, 6 • 1037
Willekeurig één genereren • Hoe kunnen we random en uniform één van de 9. 9 • 1031 composities genereren? Neem het dynamisch programmeren proces achterstevoren: We weten hoe A[4, 4, 4, 0, 0] is opgebouwd uit deelcomposities
Willekeurig één genereren A[4, 4, 4, 0, 0] = A[3, 4, 4, 0, 2] A[4, 3, 4, 4, 4, 0, 3] A[4, 4, 3, 4, 4, 0, 4] A[4, 4, 4, 3, 4, 0, 5] A[4, 4, 3, 0, 6] A[4, 4, 4, 0, 1] Dit geeft een kansverdeling van de deelcomposities
Willekeurig genereren • Werkt voor Diago en het Veranderbare Wandkleed • Werkt ook voor de Veranderbare Toren en Façade
Diago II
Geo. Mecca
Matisse’s leaves
Hexagonen
Geneste vierkanten
De toekomst • Ideeën voor nieuwe puzzels • Ideeën voor veranderbare kunst • Automatisch evalueren hoe ‘mooi’ een compositie is 24 verschillende stukjes
- Slides: 82