Przegląd
Napisz program, który drukuje proste wzorce fraktalne, biorąc pod uwagę wzorzec bitowy kodujący fraktal, plus współczynnik skali fraktala i liczba pokoleń.
Wyjaśnienie
Oto reprezentacja ASCII pliku dywanu Sierpińskiego :
Generacja 0:
#
Generacja 1:
# # #
# #
# # #
Generacja 2:
# # # # # # # # #
# # # # # #
# # # # # # # # #
# # # # # #
# # # #
# # # # # #
# # # # # # # # #
# # # # # #
# # # # # # # # #
Generacja n + 1 dywanu Sierpińskiego ASCII składa się z siatki 3x3 zawierającej 8 kopii generacji n, bez centralnego elementu siatki.
Ponieważ jest on definiowany za pomocą siatki 3x3 i ma 3 razy większą szerokość i wysokość z każdym pokoleniem, możemy powiedzieć, że ma współczynnik skali 3.
Możemy zdefiniować wzór bitowy dla dywanu Sierpińskiego, numerując elementy w siatce 3x3 od 0 do 8, od góry do dołu, od lewej do prawej i ustawiając odpowiedni bit liczby całkowitej, jeśli generacja n + 1 zawiera kopia generacji n na tej pozycji siatki:
bit: place value: bit pattern: bit value:
0 1 2 1 2 4 1 1 1 1 2 4
3 4 5 8 16 32 1 0 1 8 0 32
6 7 8 64 128 256 1 1 1 64 128 256
integer value = 1 + 2 + 4 + 8 + 32 + 64 + 128 + 256 = 495
Dla współczynnika skali 2 wzór bitów byłby ustawiony następująco:
0 1
2 3
i tak dalej.
Twoim zadaniem jest napisanie programu, który akceptuje wzór bitowy w tej formie, współczynnik skali (np. 3 dla Dywanu Sierpińskiego) oraz numer generacji i generuje fraktal ASCII.
Wkład
Twój program powinien akceptować 3 liczby całkowite w następującej kolejności: wzór bitowy, współczynnik skali (od 2 do 5 włącznie) i liczbę generacji (od 0 do 5 włącznie).
Nie trzeba przeprowadzać żadnej weryfikacji danych wejściowych dla tych wartości i jest całkowicie w porządku, jeśli program działa dla wartości większych niż określone zakresy.
Dane wejściowe można przekazywać w dowolnej formie (krotki, lista rozdzielana przecinkami / spacjami itp.)
Wydajność
Program powinien wypisać fraktal złożony ze #
znaku, po którym następuje spacja w pozycjach, w których fraktal jest zdefiniowany, podwójne spacje tam, gdzie go nie ma, oraz znak nowej linii na końcu każdej linii, drukując je lub zwracając ciąg z funkcji.
Przykłady
Wkład:
495,3,3
Wyjście (Dywan Sierpińskiego 3. generacji):
# # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # #
# # # # # # # # # # # #
# # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # #
# # # # # # # # # # # #
# # # # # # # # # # # # # # # # # #
# # # # # # # # # # # #
# # # # # # # #
# # # # # # # # # # # #
# # # # # # # # # # # # # # # # # #
# # # # # # # # # # # #
# # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # #
# # # # # # # # # # # #
# # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # #
Wkład:
7,2,5
Wyjście ( trójkąt Sierpińskiego ):
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # #
# # # # # # # #
# # # # # # # # # # # # # # # #
# # # # # # # #
# # # # # # # #
# # # #
# # # # # # # # # # # # # # # #
# # # # # # # #
# # # # # # # #
# # # #
# # # # # # # #
# # # #
# # # #
# #
# # # # # # # # # # # # # # # #
# # # # # # # #
# # # # # # # #
# # # #
# # # # # # # #
# # # #
# # # #
# #
# # # # # # # #
# # # #
# # # #
# #
# # # #
# #
# #
#
Wkład:
325,3,3
Wyjście ( kurz Cantor ):
# # # # # # # #
# # # # # # # #
# # # # # # # #
# # # # # # # #
# # # # # # # #
# # # # # # # #
# # # # # # # #
# # # # # # # #
Wkład
186,3,3
Wyjście ( fraktal Vicsek ):
#
# # #
#
# # #
# # # # # # # # #
# # #
#
# # #
#
# # #
# # # # # # # # #
# # #
# # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # #
# # #
# # # # # # # # #
# # #
#
# # #
#
# # #
# # # # # # # # #
# # #
#
# # #
#
Wkład:
279,3,3
Dane wyjściowe (przykład asymetrycznego fraktala):
# # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # #
# # # # # # # # #
# # # # # # # # #
# # #
# # #
# # # # # # # # #
# # #
# # #
# # # # # # # # #
# # #
# # #
# # #
#
#
# # #
#
#
# # # # # # # # #
# # #
# # #
# # #
#
#
# # #
#
#
itp.
Uwagi:
- To jest golf golfowy, więc wygrywa najkrótsza odpowiedź w bajtach
- Twój program może być albo samodzielny, albo funkcją wywoływaną z 3 parametrami wejściowymi i zwracającą (lub drukującą) ciąg znaków
- Generacja 0 jest zdefiniowana jako
#
(#
po której następuje spacja) nawet dla wzorca bitowego 0. - Końcowy znak nowej linii w ostatnim wierszu jest opcjonalny, ale dozwolony, podobnie jak dowolna ilość białych znaków końcowych w każdej linii.
279,3,3
?
"##"
na"# "
. Widzę, że jedna końcowa spacja na końcu wiersza jest uwzględniona w twoich przykładach, czy jest wymagana? . Zgodnie z ostatnią regułą zakładam, że jest opcjonalna, ale fakt, że potrzebujesz miejsca końcowego dla generacji 0, zastanawia mnie. Myślę też, że powinieneś wskazać maksymalną dozwoloną spację i znaki nowej linii (masz liczbę mnogą). Jako skrajny przykład zawsze mogłem zacząć od tablicy 5 ^ 6 = 15625 linii 2 * 5 ^ 6 spacji, a następnie zastąpić#
s. W większości przypadków jest to ogromna ilość nieużywanych białych znaków