Na początek polecam zaznajomić się z częścią pierwszą i drugą.
Dziś tylko jedno zadanie, za to stanowczo trudniejsze.
Zadanie VII
Na podstawie poprzednich zadań, napisz funkcję zwracającą tablicę z kwadratem magicznym o boku wielkości podzielnej przez cztery.
Na początek, dla niezorientowanych polecam zapoznać się czym jest kwadrat magiczny.
Ok, ponieważ nikt Dijkstrą się nie rodzi, oto algorytm jak taki kwadrat magiczny zrobić. Pochodzi on z książki Lilavati. Algorytm ten pozwala stworzyć kwadraty tylko o boku podzielnym przez 4 (stąd ograniczenie w zadaniu). W książce tej był też algorytm dla kwadratów o boku nieparzystym, niestety moja pamięć jest tu zawodna. Jeśli ktoś przypomni, będę wdzięczny.
Zaczynamy w lewym górnym rogu i przesuwamy się w kierunku prawym, w momencie zakończenia wiersza, przechodzimy do następnej linii. W kolejne komórki tablicy wpisujemy kolejne liczby (startując od 1). Nie wpisujemy ich jednak we wszystkie komórki. Część opuszczamy (ale liczymy), tworząc charakterystyczną, nieco nietypową szachownicę. Oto przykład dla wielkości krawędzi 8:
| 1 | 4 | 5 | 8 | ||||
| 10 | 11 | 14 | 15 | ||||
| 18 | 19 | 22 | 23 | ||||
| 25 | 28 | 29 | 32 | ||||
| 33 | 36 | 37 | 40 | ||||
| 42 | 43 | 46 | 47 | ||||
| 50 | 51 | 54 | 55 | ||||
| 57 | 60 | 61 | 64 |
Czyli 1 wpisujemy, 2 nie wpisujemy, 3 nie wpisujemy, 4 wpisjemy, 5 tak, 6 nie, 7 nie, 8 tak 9 nie 10 tak 11 tak... itd.
W drugim kroku, powtarzamy tę samą operację, lecz zaczynamy od prawego dolnego rogu i poruszamy się lewo/góra. Wpisujemy liczby tylko tam gdzie ich jeszcze nie ma, zaczynamy oczywiście od niewpisania 1:
| 1 | 63 | 62 | 4 | 5 | 59 | 58 | 8 |
| 56 | 10 | 11 | 53 | 52 | 14 | 15 | 49 |
| 48 | 18 | 19 | 45 | 44 | 22 | 23 | 41 |
| 25 | 39 | 38 | 28 | 29 | 35 | 34 | 32 |
| 33 | 31 | 30 | 36 | 37 | 27 | 26 | 40 |
| 24 | 42 | 43 | 21 | 20 | 46 | 47 | 17 |
| 16 | 50 | 51 | 13 | 12 | 54 | 55 | 9 |
| 57 | 7 | 6 | 60 | 61 | 3 | 2 | 64 |
To wszystko na dziś, zapraszamy do następnego odcinka (jutro :))
