Sprawdź się
Zadanie 3
Słowa Fibonacciego to słowa zdefiniowane przez następującą zależność.
Kilka pierwszych słów Fibonacciego wypisano poniżej:
Fraktal Fibonacciego to kształt powstający przez odpowiednią graficzną interpretację słów Fibonacciego, według następujących zasad:
Dla każdego symbolu na pozycji k
(numerujemy od zera):
Rysuj odcinek w obecnym kierunku.
Jeżeli znak na pozycji
k
to 0:skręć w lewo, jeśli
k
jest parzyste,skręć w prawo, jeśli
k
jest nieparzyste.
Rysowanie zaczynamy z dolnego lewego rogu, początkowy kierunek ustawiamy na prawo.
Fraktale Fibonacciego dla kilku pierwszych stopni pokazano poniżej:
Na końcu poziomej kreski znajduje się pionowa kreska.
Na końcu poziomej kreski znajduje się pionowa kreska.
Na końcu kreski pionowej znajduje się pozioma kreska skierowana w lewą stronę.
Napisz program, który dla każdej liczby z tablicy dane
wypisze słowo Fibonacciego stopnia k
. Następnie dla najdłuższego z wypisanych słów utworzy fraktal Fibonacciego.
Przetestuj działanie programu dla tablicy dane
o następującej zawartości:
4
3
12
8
Specyfikacja problemu:
Dane:
n
– liczba naturalna; liczba słów do wygenerowaniadane[0..n - 1]
– tablica zawierającan
liczb, dla których należy wypisać słowo Fibonacciego stopniak
Wynik:
Słowa Fibonacciego oddzielone znakiem nowej linii oraz kształt (utworzony np. graficznie w tabeli lub w konsoli) fraktala Fibonacciego dla najdłuższego wypisanego słowa Fibonacciego.
01001010
01001
01001010010010100101001001010010010100101001001010010100100101001001010010100100101001001010010100100101001010010010100100101001010010010100101001001010010010100101001001010010010100101001001010010100100101001001010010100100101001001010010100100101001010010010100100101001010010010100101001001010010010100101001001010010010100101001001010010100100101001001010010100100101001010
0100101001001010010100100101001001010010100100101001010
Przykłady poprawnie utworzonych fraktali dla powyższego zadania:
Jest on stworzony z jednej linii.
Linia ta tworzy kształt przypominający płatek śniegu..
![Ilustracja przedstawia fraktal Fibonacciego. Jest on stworzony z jednej linii. Linia ta tworzy kształt przypominający płatek śniegu..](https://static.zpe.gov.pl/portal/f/res-minimized/RDKGVUY5xtFdt/1677592802/16rxW44LfqbkmScHSPVk02N5lkraaErw.png)
Jest on stworzony z kwadratów.
kwadraty te tworzą kształt przypominający płatek śniegu.
![Ilustracja przedstawia fraktal Fibonacciego. Jest on stworzony z kwadratów. kwadraty te tworzą kształt przypominający płatek śniegu.](https://static.zpe.gov.pl/portal/f/res-minimized/R1Mk2ZvjdzpAJ/1677592803/27SlrUJQ7eegsxm6VAUGvyKPBf8LGnmT.png)
### ### ### ### ### ### ### ###
# ### # # ### # # ### # # ### #
## ## ## ## ## ## ## ##
# # ### # # # # ### # #
## ### ### ## ## ### ### ##
# ### ### # # ### ### #
### # # ### ### # # ###
## ## ### ### ## ##
# # # ### # # #
## ## ## ## ## ##
### # # ### # # ### # # ###
# ### ### ### ### ### ### #
## ### ### ### ### ##
# # ### # # ### # #
## ## ## ## ## ##
# ### # # # # ### #
### ### ## ## ### ###
### # # ###
# ### ### #
## ##
# #
## ##
# ### ### #
### # # ###
### ### ## ## ### ###
# ### # # # # ### #
## ## ## ## ## ##
# # ### # # ### # #
## ### ### ### ### ##
Chcąc wygenerować fraktal w tabeli lub tekstowo, możesz założyć, że jego rozmiar nie będzie większy niż .
W poniższych programach sprawdzających nie ma możliwości weryfikacji poprawności utworzonej grafiki. Fraktal należy zatem zrealizować w postaci tekstowej w taki sposób, jak powyżej.
JĘZYK C++
Pobierz poniższy plik. W pierwszej linijce zawiera on liczbę testów n
. Każda kolejna linijka zawiera stopień słowa Fibonacciego, które należy wypisać. Napisz program w środowisku programistycznym na swoim komputerze, w którym załadujesz dane z pobranego pliku, wypiszesz odpowiednie słowa Fibonacciego oraz utworzysz fraktal Fibonacciego dla najdłuższego wypisanego słowa Fibonacciego.
Plik tekstowy zawierający wartości liczbowe. Pobierz załącznik
Przykładowe rozwiązanie
#include <iostream>
#include <string>
const int ROZMIAR_MAX = 100;
std::string slowo_fibonacciego(int n) {
if (n == 0) {
return "0";
}
if (n == 1) {
return "01";
}
return slowo_fibonacciego(n - 1) + slowo_fibonacciego(n - 2);
}
void obrot_lewo(int& kierunek) {
kierunek = (kierunek + 3) % 4;
}
void obrot_prawo(int& kierunek) {
kierunek = (kierunek + 1) % 4;
}
void naprzod(int& x, int& y, int kierunek) {
if (kierunek == 0) {
x = x + 1;
}
else if (kierunek == 1) {
y = y - 1;
}
else if (kierunek == 2) {
x = x - 1;
}
else {
y = y + 1;
}
}
int wartosc_mapy_na_pozycji(int x, int y, int mapa2d[ROZMIAR_MAX][ROZMIAR_MAX]) {
return mapa2d[ROZMIAR_MAX - y - 1][x];
}
void rysuj_mape(int mapa2d[ROZMIAR_MAX][ROZMIAR_MAX], int x_rozmiar, int y_rozmiar) {
// rysuj od góry
for (int y = y_rozmiar - 1; y >= 0; --y) {
for (int x = 0; x < x_rozmiar; ++x) {
std::cout << (wartosc_mapy_na_pozycji(x, y, mapa2d) == 1 ? '#' : ' ');
}
std::cout << std::endl;
}
}
void zaznacz_na_mapie(int x, int y, int mapa2d[ROZMIAR_MAX][ROZMIAR_MAX]) {
mapa2d[ROZMIAR_MAX - y - 1][x] = 1;
}
int main() {
int n = 4;
int dane[] = { 4, 3, 12, 8 };
int dane_max = 0;
for (int i = 0; i < n; ++i) {
if (dane[i] > dane_max) {
dane_max = dane[i];
}
std::cout << slowo_fibonacciego(dane[i]) << std::endl;
}
std::string slowo_max = slowo_fibonacciego(dane_max);
// tablica 100x100 wypełniona zerami
int mapa2d[ROZMIAR_MAX][ROZMIAR_MAX];
for (int i = 0; i < ROZMIAR_MAX; ++i) {
for (int j = 0; j < ROZMIAR_MAX; ++j) {
mapa2d[i][j] = 0;
}
}
int x = 0, y = 0;
// 0 - prawo
// 1 - dół
// 2 - lewo
// 3 - góra
int kierunek = 0;
// generuj kształt
for (int i = 0; i < slowo_max.length(); ++i) {
zaznacz_na_mapie(x, y, mapa2d);
naprzod(x, y, kierunek);
if (slowo_max[i] == '0') {
if (i % 2 == 0) {
obrot_lewo(kierunek);
}
else {
obrot_prawo(kierunek);
}
}
}
// znajdź rzeczywisty rozmiar kształtu
int x_max = 0, y_max = 0;
for (int i = 0; i < ROZMIAR_MAX; ++i) {
for (int j = 0; j < ROZMIAR_MAX; ++j) {
if (wartosc_mapy_na_pozycji(j, i, mapa2d) == 1) {
if (j > x_max) {
x_max = j;
}
if (i > y_max) {
y_max = i;
}
}
}
}
int rozmiar_y = y_max + 1, rozmiar_x = x_max + 1;
// rysuj kształt
rysuj_mape(mapa2d, rozmiar_x, rozmiar_y);
}
Dla przykładowych danych zawartych w pliku tekstowym, wynik powinien wynieść:
010
0100101001001
01001010010010100101001001010010010100101001001010010100100101001001010010100100101001001
010010100100101001010010010100100101001010010010100101001001010010010100101001001010010010100101001001010010100100101001001010010100100101001010010010100100101001010010010100100101001010010010100101001001010010010100101001001010010010100101001001010010100100101001001010010100100101001010010010100100101001010010010100100101001010010010100101001001010010010100101001001010010100100101001001010010100100101001001010010100100101001010010010100100101001010010010100100101001010010010100101001001010010010100101001001010010100100101001001010010100100101001001010010100100101001010010010100100101001010010010100100101001010010010100101001001010010010100101001001010010100100101001001010010100100101001001010010100100101001010010010100100101001010010010100101001001010010010100101001001010010010100101001001010010100100101001001010010100100101001001010010100100101001010010010100100101001010010010100101001001010010010100101001001010010010100101001001010010100100101001001010010100100101001010
010010100100101001010010010100100101001010010010100101001001010010010100101001001010010010100101001001010010100100101001001010010100100101001010
0100101001001010010100100101001001010010100100101001010
01001010010010100101001001010010010100101001001010010100100101001001010010100100101001001010010100100101001010010010100100101001010010010100101001001010010010100101001001010010010100101001001010010100100101001001010010100100101001001
01001010
01001010010010100101001001010010010100101001001010010100100101001001010010100100101001001010010100100101001010010010100100101001010010010100101001001010010010100101001001010010010100101001001010010100100101001001010010100100101001001010010100100101001010010010100100101001010010010100101001001010010010100101001001010010010100101001001010010100100101001001010010100100101001010
0100101001001010010100100101001001
01001
0100101001001010010100100101001001010010100100101001010010010100100101001010010010100100101001010010010100101001001010010010100101001001010010100100101001001010010100100101001001010010100100101001010010010100100101001010010010100100101001010010010100101001001010010010100101001001010010100100101001001010010100100101001001010010100100101001010010010100100101001010010010100101001001010010010100101001001010010010100101001001010010100100101001001010010100100101001001010010100100101001010010010100100101001010010010100101001001010010010100101001001010010010100101001001010010100100101001001010010100100101001001
010010100100101001010
### ### ### ### ### #
# ### # # ### # # ###
## ## ## ## ##
# # ### # # #
## ### ### ## ##
# ### ### # # ###
### # # ### ### #
## ## ### ### ##
# # # ### # #
## ## ## ## ##
### # # ### # # ### #
# ### ### ### ### ###
## ### ###
# # ### #
## ## ##
# ### # #
### ### ##
### #
# ###
##
#
##
# ###
### #
### ### ##
# ### # #
## ## ##
# # ### #
## ### ###
# ### ### ### ### ###
### # # ### # # ### #
## ## ## ## ##
# # # ### # #
## ## ### ### ##
### # # ### ### #
# ### ### # # ###
## ### ### ## ##
# # ### # # #
## ## ## ## ##
# ### # # ### # # ###
### ### ### ### ### #
### ### ### ### ### ### ### ### ### ### ##
# ### # # ### # # ### # # ### # # ### # #
## ## ## ## ## ## ## ## ## ## ##
# # ### # # # # ### # # # # ### #
## ### ### ## ## ### ### ## ## ### ###
# ### ### # # ### ### # # ###
### # # ### ### # # ### ### #
## ## ### ### ## ## ##
# # # ### # # # #
## ## ## ## ## ## ##
### # # ### # # ### # # ### ### #
# ### ### ### ### ### ### # # ###
## ### ### ### ### ## ## ### ###
# # ### # # ### # # # # ### #
## ## ## ## ## ## ## ## ##
# ### # # # # ### # # ### # #
### ### ## ## ### ### ### ### ##
### # # ### ### ### ### ### ### #
# ### ### # # ### # # ### # # ###
## ## ## ## ## ## ##
# # # # ### # # #
## ## ## ### ### ## ##
# ### ### # # ### ### # # ###
### # # ### ### # # ### ### #
### ### ## ## ### ### ## ## ### ### ##
# ### # # # # ### # # # # ### # #
## ## ## ## ## ## ## ## ## ## ##
# # ### # # ### # # ### # # ### # # ### #
## ### ### ### ### ### ### ### ### ### ###
JĘZYK JAVA
Pobierz poniższy plik. W pierwszej linijce zawiera on liczbę testów n
. Każda kolejna linijka zawiera stopień słowa Fibonacciego, które należy wypisać. Napisz program w środowisku programistycznym na swoim komputerze, w którym załadujesz dane z pobranego pliku, wypiszesz odpowiednie słowa Fibonacciego oraz utworzysz fraktal Fibonacciego dla najdłuższego wypisanego słowa Fibonacciego.
Plik tekstowy zawierający wartości liczbowe. Pobierz załącznik
Przykładowe rozwiązanie
public class Main {
final static int ROZMIAR_MAX = 100;
static String slowo_fibonacciego(int n) {
if (n == 0) {
return "0";
}
if (n == 1) {
return "01";
}
return slowo_fibonacciego(n - 1) + slowo_fibonacciego(n - 2);
}
static int obrot_lewo(int kierunek) {
return (kierunek + 3) % 4;
}
static int obrot_prawo(int kierunek) {
return (kierunek + 1) % 4;
}
static void naprzod(int[] xy, int kierunek) {
if (kierunek == 0) {
++xy[0];
}
else if (kierunek == 1) {
--xy[1];
}
else if (kierunek == 2) {
--xy[0];
}
else {
++xy[1];
}
}
static int wartosc_mapy_na_pozycji(int x, int y, int[][] mapa2d) {
return mapa2d[ROZMIAR_MAX - y - 1][x];
}
static void rysuj_mape(int[][] mapa2d, int x_rozmiar, int y_rozmiar) {
// rysuj od góry
for (int y = y_rozmiar - 1; y >= 0; --y) {
for (int x = 0; x < x_rozmiar; ++x) {
System.out.print((wartosc_mapy_na_pozycji(x, y, mapa2d) == 1 ? '#' : ' '));
}
System.out.print('\n');
}
}
static void zaznacz_na_mapie(int[] xy, int[][] mapa2d) {
mapa2d[ROZMIAR_MAX - xy[1] - 1][xy[0]] = 1;
}
public static void main(String[] args) {
int n = 4;
int[] dane = { 4, 3, 12, 8 };
int dane_max = 0;
for (int i = 0; i < n; ++i) {
if (dane[i] > dane_max) {
dane_max = dane[i];
}
System.out.println(slowo_fibonacciego(dane[i]));
}
String slowo_max = slowo_fibonacciego(dane_max);
// tablica 100x100 wypełniona zerami
int[][] mapa2d = new int[ROZMIAR_MAX][ROZMIAR_MAX];
int[] xy = { 0, 0 };
// 0 - prawo
// 1 - dół
// 2 - lewo
// 3 - góra
int kierunek = 0;
// generuj kształt
for (int i = 0; i < slowo_max.length(); ++i) {
zaznacz_na_mapie(xy, mapa2d);
naprzod(xy, kierunek);
if (slowo_max.charAt(i) == '0') {
if (i % 2 == 0) {
kierunek = obrot_lewo(kierunek);
}
else {
kierunek = obrot_prawo(kierunek);
}
}
}
// znajdź rzeczywisty rozmiar kształtu
int x_max = 0, y_max = 0;
for (int i = 0; i < ROZMIAR_MAX; ++i) {
for (int j = 0; j < ROZMIAR_MAX; ++j) {
if (wartosc_mapy_na_pozycji(j, i, mapa2d) == 1) {
if (j > x_max) {
x_max = j;
}
if (i > y_max) {
y_max = i;
}
}
}
}
int rozmiar_y = y_max + 1, rozmiar_x = x_max + 1;
// rysuj kształt
rysuj_mape(mapa2d, rozmiar_x, rozmiar_y);
}
}
Dla przykładowych danych zawartych w pliku tekstowym, wynik powinien wynieść:
010
0100101001001
01001010010010100101001001010010010100101001001010010100100101001001010010100100101001001
010010100100101001010010010100100101001010010010100101001001010010010100101001001010010010100101001001010010100100101001001010010100100101001010010010100100101001010010010100100101001010010010100101001001010010010100101001001010010010100101001001010010100100101001001010010100100101001010010010100100101001010010010100100101001010010010100101001001010010010100101001001010010100100101001001010010100100101001001010010100100101001010010010100100101001010010010100100101001010010010100101001001010010010100101001001010010100100101001001010010100100101001001010010100100101001010010010100100101001010010010100100101001010010010100101001001010010010100101001001010010100100101001001010010100100101001001010010100100101001010010010100100101001010010010100101001001010010010100101001001010010010100101001001010010100100101001001010010100100101001001010010100100101001010010010100100101001010010010100101001001010010010100101001001010010010100101001001010010100100101001001010010100100101001010
010010100100101001010010010100100101001010010010100101001001010010010100101001001010010010100101001001010010100100101001001010010100100101001010
0100101001001010010100100101001001010010100100101001010
01001010010010100101001001010010010100101001001010010100100101001001010010100100101001001010010100100101001010010010100100101001010010010100101001001010010010100101001001010010010100101001001010010100100101001001010010100100101001001
01001010
01001010010010100101001001010010010100101001001010010100100101001001010010100100101001001010010100100101001010010010100100101001010010010100101001001010010010100101001001010010010100101001001010010100100101001001010010100100101001001010010100100101001010010010100100101001010010010100101001001010010010100101001001010010010100101001001010010100100101001001010010100100101001010
0100101001001010010100100101001001
01001
0100101001001010010100100101001001010010100100101001010010010100100101001010010010100100101001010010010100101001001010010010100101001001010010100100101001001010010100100101001001010010100100101001010010010100100101001010010010100100101001010010010100101001001010010010100101001001010010100100101001001010010100100101001001010010100100101001010010010100100101001010010010100101001001010010010100101001001010010010100101001001010010100100101001001010010100100101001001010010100100101001010010010100100101001010010010100101001001010010010100101001001010010010100101001001010010100100101001001010010100100101001001
010010100100101001010
### ### ### ### ### #
# ### # # ### # # ###
## ## ## ## ##
# # ### # # #
## ### ### ## ##
# ### ### # # ###
### # # ### ### #
## ## ### ### ##
# # # ### # #
## ## ## ## ##
### # # ### # # ### #
# ### ### ### ### ###
## ### ###
# # ### #
## ## ##
# ### # #
### ### ##
### #
# ###
##
#
##
# ###
### #
### ### ##
# ### # #
## ## ##
# # ### #
## ### ###
# ### ### ### ### ###
### # # ### # # ### #
## ## ## ## ##
# # # ### # #
## ## ### ### ##
### # # ### ### #
# ### ### # # ###
## ### ### ## ##
# # ### # # #
## ## ## ## ##
# ### # # ### # # ###
### ### ### ### ### #
### ### ### ### ### ### ### ### ### ### ##
# ### # # ### # # ### # # ### # # ### # #
## ## ## ## ## ## ## ## ## ## ##
# # ### # # # # ### # # # # ### #
## ### ### ## ## ### ### ## ## ### ###
# ### ### # # ### ### # # ###
### # # ### ### # # ### ### #
## ## ### ### ## ## ##
# # # ### # # # #
## ## ## ## ## ## ##
### # # ### # # ### # # ### ### #
# ### ### ### ### ### ### # # ###
## ### ### ### ### ## ## ### ###
# # ### # # ### # # # # ### #
## ## ## ## ## ## ## ## ##
# ### # # # # ### # # ### # #
### ### ## ## ### ### ### ### ##
### # # ### ### ### ### ### ### #
# ### ### # # ### # # ### # # ###
## ## ## ## ## ## ##
# # # # ### # # #
## ## ## ### ### ## ##
# ### ### # # ### ### # # ###
### # # ### ### # # ### ### #
### ### ## ## ### ### ## ## ### ### ##
# ### # # # # ### # # # # ### # #
## ## ## ## ## ## ## ## ## ## ##
# # ### # # ### # # ### # # ### # # ### #
## ### ### ### ### ### ### ### ### ### ###
JĘZYK PYTHON
Pobierz poniższy plik. W pierwszej linijce zawiera on liczbę testów n
. Każda kolejna linijka zawiera stopień słowa Fibonacciego, które należy wypisać. Napisz program w środowisku programistycznym na swoim komputerze, w którym załadujesz dane z pobranego pliku, wypiszesz odpowiednie słowa Fibonacciego oraz utworzysz fraktal Fibonacciego dla najdłuższego wypisanego słowa Fibonacciego.
Plik tekstowy zawierający wartości liczbowe. Pobierz załącznik
Przykładowe rozwiązanie:
def slowo_fibonacciego(n):
if n == 0:
return "0"
if n == 1:
return "01"
return slowo_fibonacciego(n - 1) + slowo_fibonacciego(n - 2)
def obrot_lewo(kierunek):
return (kierunek + 3) % 4
def obrot_prawo(kierunek):
return (kierunek + 1) % 4
def naprzod(x, y, kierunek):
if kierunek == 0:
return x + 1, y
if kierunek == 1:
return x, y - 1
if kierunek == 2:
return x - 1, y
return x, y + 1
def wartosc_mapy_na_pozycji(x, y, mapa2d):
return mapa2d[- y - 1][x]
def rysuj_mape(mapa2d, x_rozmiar, y_rozmiar):
# rysuj od góry
for y in reversed(range(y_rozmiar)):
for x in range(x_rozmiar):
print("#" if wartosc_mapy_na_pozycji(x, y, mapa2d) == 1 else " ", end="")
print()
def zaznacz_na_mapie(x, y, mapa2d):
mapa2d[- y - 1][x] = 1
n = 4
dane = [4, 3, 12, 8]
dane_max = 0
for k in dane:
if k > dane_max:
dane_max = k
print(slowo_fibonacciego(k))
slowo_max = slowo_fibonacciego(dane_max)
# tablica 100x100 wypełniona zerami
ROZMIAR_MAX = 100
mapa2d = []
for i in range(ROZMIAR_MAX):
mapa2d.append([])
for j in range(ROZMIAR_MAX):
mapa2d[i].append(0)
x, y = 0, 0
# 0 - prawo
# 1 - dół
# 2 - lewo
# 3 - góra
kierunek = 0
# generuj kształt
for i, c in enumerate(slowo_max):
zaznacz_na_mapie(x, y, mapa2d)
x, y = naprzod(x, y, kierunek)
if c == "0":
if i % 2 == 0:
kierunek = obrot_lewo(kierunek)
else:
kierunek = obrot_prawo(kierunek)
# znajdź rzeczywisty rozmiar kształtu
x_max, y_max = 0, 0
for i in range(ROZMIAR_MAX):
for y in range(ROZMIAR_MAX):
if wartosc_mapy_na_pozycji(y, i, mapa2d) == 1:
if y > x_max:
x_max = y
if i > y_max:
y_max = i
rozmiar_y = y_max + 1
rozmiar_x = x_max + 1
# rysuj kształt
rysuj_mape(mapa2d, rozmiar_x, rozmiar_y)
Dla przykładowych danych zawartych w pliku tekstowym, wynik powinien wynieść:
010
0100101001001
01001010010010100101001001010010010100101001001010010100100101001001010010100100101001001
010010100100101001010010010100100101001010010010100101001001010010010100101001001010010010100101001001010010100100101001001010010100100101001010010010100100101001010010010100100101001010010010100101001001010010010100101001001010010010100101001001010010100100101001001010010100100101001010010010100100101001010010010100100101001010010010100101001001010010010100101001001010010100100101001001010010100100101001001010010100100101001010010010100100101001010010010100100101001010010010100101001001010010010100101001001010010100100101001001010010100100101001001010010100100101001010010010100100101001010010010100100101001010010010100101001001010010010100101001001010010100100101001001010010100100101001001010010100100101001010010010100100101001010010010100101001001010010010100101001001010010010100101001001010010100100101001001010010100100101001001010010100100101001010010010100100101001010010010100101001001010010010100101001001010010010100101001001010010100100101001001010010100100101001010
010010100100101001010010010100100101001010010010100101001001010010010100101001001010010010100101001001010010100100101001001010010100100101001010
0100101001001010010100100101001001010010100100101001010
01001010010010100101001001010010010100101001001010010100100101001001010010100100101001001010010100100101001010010010100100101001010010010100101001001010010010100101001001010010010100101001001010010100100101001001010010100100101001001
01001010
01001010010010100101001001010010010100101001001010010100100101001001010010100100101001001010010100100101001010010010100100101001010010010100101001001010010010100101001001010010010100101001001010010100100101001001010010100100101001001010010100100101001010010010100100101001010010010100101001001010010010100101001001010010010100101001001010010100100101001001010010100100101001010
0100101001001010010100100101001001
01001
0100101001001010010100100101001001010010100100101001010010010100100101001010010010100100101001010010010100101001001010010010100101001001010010100100101001001010010100100101001001010010100100101001010010010100100101001010010010100100101001010010010100101001001010010010100101001001010010100100101001001010010100100101001001010010100100101001010010010100100101001010010010100101001001010010010100101001001010010010100101001001010010100100101001001010010100100101001001010010100100101001010010010100100101001010010010100101001001010010010100101001001010010010100101001001010010100100101001001010010100100101001001
010010100100101001010
### ### ### ### ### #
# ### # # ### # # ###
## ## ## ## ##
# # ### # # #
## ### ### ## ##
# ### ### # # ###
### # # ### ### #
## ## ### ### ##
# # # ### # #
## ## ## ## ##
### # # ### # # ### #
# ### ### ### ### ###
## ### ###
# # ### #
## ## ##
# ### # #
### ### ##
### #
# ###
##
#
##
# ###
### #
### ### ##
# ### # #
## ## ##
# # ### #
## ### ###
# ### ### ### ### ###
### # # ### # # ### #
## ## ## ## ##
# # # ### # #
## ## ### ### ##
### # # ### ### #
# ### ### # # ###
## ### ### ## ##
# # ### # # #
## ## ## ## ##
# ### # # ### # # ###
### ### ### ### ### #
### ### ### ### ### ### ### ### ### ### ##
# ### # # ### # # ### # # ### # # ### # #
## ## ## ## ## ## ## ## ## ## ##
# # ### # # # # ### # # # # ### #
## ### ### ## ## ### ### ## ## ### ###
# ### ### # # ### ### # # ###
### # # ### ### # # ### ### #
## ## ### ### ## ## ##
# # # ### # # # #
## ## ## ## ## ## ##
### # # ### # # ### # # ### ### #
# ### ### ### ### ### ### # # ###
## ### ### ### ### ## ## ### ###
# # ### # # ### # # # # ### #
## ## ## ## ## ## ## ## ##
# ### # # # # ### # # ### # #
### ### ## ## ### ### ### ### ##
### # # ### ### ### ### ### ### #
# ### ### # # ### # # ### # # ###
## ## ## ## ## ## ##
# # # # ### # # #
## ## ## ### ### ## ##
# ### ### # # ### ### # # ###
### # # ### ### # # ### ### #
### ### ## ## ### ### ## ## ### ### ##
# ### # # # # ### # # # # ### # #
## ## ## ## ## ## ## ## ## ## ##
# # ### # # ### # # ### # # ### # # ### #
## ### ### ### ### ### ### ### ### ### ###