Napisać program lub funkcję, która przyjmuje w dwóch dodatnich liczb całkowitych, szerokości i wysokości, a Rysuje sztuki ASCII houndstooth wzór siatki z tych wymiarów za pomocą tej siatki 25 x 26 tekstową jako komórki bazowej:
.......#.....#####.......
.......##.....#####......
.......###.....#####.....
.......####.....####.....
.......#####.....###.....
.......######.....##.....
.......#######.....#.....
.......########..........
####################.....
.####################....
..####################...
...####################..
....####################.
.....####################
#.....##############.####
##.....#############..###
###....#############...##
####...#############....#
#####..#############.....
.#####.#############.....
..##################.....
........#####............
.........#####...........
..........#####..........
...........#####.........
............#####........
Więc jeśli dane wejściowe 2,1
byłyby dane wyjściowe to:
.......#.....#####..............#.....#####.......
.......##.....#####.............##.....#####......
.......###.....#####............###.....#####.....
.......####.....####............####.....####.....
.......#####.....###............#####.....###.....
.......######.....##............######.....##.....
.......#######.....#............#######.....#.....
.......########.................########..........
####################.....####################.....
.####################.....####################....
..####################.....####################...
...####################.....####################..
....####################.....####################.
.....####################.....####################
#.....##############.#####.....##############.####
##.....#############..#####.....#############..###
###....#############...#####....#############...##
####...#############....#####...#############....#
#####..#############.....#####..#############.....
.#####.#############......#####.#############.....
..##################.......##################.....
........#####....................#####............
.........#####....................#####...........
..........#####....................#####..........
...........#####....................#####.........
............#####....................#####........
A jeśli dane wejściowe 5,4
byłyby dane wyjściowe to:
.......#.....#####..............#.....#####..............#.....#####..............#.....#####..............#.....#####.......
.......##.....#####.............##.....#####.............##.....#####.............##.....#####.............##.....#####......
.......###.....#####............###.....#####............###.....#####............###.....#####............###.....#####.....
.......####.....####............####.....####............####.....####............####.....####............####.....####.....
.......#####.....###............#####.....###............#####.....###............#####.....###............#####.....###.....
.......######.....##............######.....##............######.....##............######.....##............######.....##.....
.......#######.....#............#######.....#............#######.....#............#######.....#............#######.....#.....
.......########.................########.................########.................########.................########..........
####################.....####################.....####################.....####################.....####################.....
.####################.....####################.....####################.....####################.....####################....
..####################.....####################.....####################.....####################.....####################...
...####################.....####################.....####################.....####################.....####################..
....####################.....####################.....####################.....####################.....####################.
.....####################.....####################.....####################.....####################.....####################
#.....##############.#####.....##############.#####.....##############.#####.....##############.#####.....##############.####
##.....#############..#####.....#############..#####.....#############..#####.....#############..#####.....#############..###
###....#############...#####....#############...#####....#############...#####....#############...#####....#############...##
####...#############....#####...#############....#####...#############....#####...#############....#####...#############....#
#####..#############.....#####..#############.....#####..#############.....#####..#############.....#####..#############.....
.#####.#############......#####.#############......#####.#############......#####.#############......#####.#############.....
..##################.......##################.......##################.......##################.......##################.....
........#####....................#####....................#####....................#####....................#####............
.........#####....................#####....................#####....................#####....................#####...........
..........#####....................#####....................#####....................#####....................#####..........
...........#####....................#####....................#####....................#####....................#####.........
............#####....................#####....................#####....................#####....................#####........
.......#.....#####..............#.....#####..............#.....#####..............#.....#####..............#.....#####.......
.......##.....#####.............##.....#####.............##.....#####.............##.....#####.............##.....#####......
.......###.....#####............###.....#####............###.....#####............###.....#####............###.....#####.....
.......####.....####............####.....####............####.....####............####.....####............####.....####.....
.......#####.....###............#####.....###............#####.....###............#####.....###............#####.....###.....
.......######.....##............######.....##............######.....##............######.....##............######.....##.....
.......#######.....#............#######.....#............#######.....#............#######.....#............#######.....#.....
.......########.................########.................########.................########.................########..........
####################.....####################.....####################.....####################.....####################.....
.####################.....####################.....####################.....####################.....####################....
..####################.....####################.....####################.....####################.....####################...
...####################.....####################.....####################.....####################.....####################..
....####################.....####################.....####################.....####################.....####################.
.....####################.....####################.....####################.....####################.....####################
#.....##############.#####.....##############.#####.....##############.#####.....##############.#####.....##############.####
##.....#############..#####.....#############..#####.....#############..#####.....#############..#####.....#############..###
###....#############...#####....#############...#####....#############...#####....#############...#####....#############...##
####...#############....#####...#############....#####...#############....#####...#############....#####...#############....#
#####..#############.....#####..#############.....#####..#############.....#####..#############.....#####..#############.....
.#####.#############......#####.#############......#####.#############......#####.#############......#####.#############.....
..##################.......##################.......##################.......##################.......##################.....
........#####....................#####....................#####....................#####....................#####............
.........#####....................#####....................#####....................#####....................#####...........
..........#####....................#####....................#####....................#####....................#####..........
...........#####....................#####....................#####....................#####....................#####.........
............#####....................#####....................#####....................#####....................#####........
.......#.....#####..............#.....#####..............#.....#####..............#.....#####..............#.....#####.......
.......##.....#####.............##.....#####.............##.....#####.............##.....#####.............##.....#####......
.......###.....#####............###.....#####............###.....#####............###.....#####............###.....#####.....
.......####.....####............####.....####............####.....####............####.....####............####.....####.....
.......#####.....###............#####.....###............#####.....###............#####.....###............#####.....###.....
.......######.....##............######.....##............######.....##............######.....##............######.....##.....
.......#######.....#............#######.....#............#######.....#............#######.....#............#######.....#.....
.......########.................########.................########.................########.................########..........
####################.....####################.....####################.....####################.....####################.....
.####################.....####################.....####################.....####################.....####################....
..####################.....####################.....####################.....####################.....####################...
...####################.....####################.....####################.....####################.....####################..
....####################.....####################.....####################.....####################.....####################.
.....####################.....####################.....####################.....####################.....####################
#.....##############.#####.....##############.#####.....##############.#####.....##############.#####.....##############.####
##.....#############..#####.....#############..#####.....#############..#####.....#############..#####.....#############..###
###....#############...#####....#############...#####....#############...#####....#############...#####....#############...##
####...#############....#####...#############....#####...#############....#####...#############....#####...#############....#
#####..#############.....#####..#############.....#####..#############.....#####..#############.....#####..#############.....
.#####.#############......#####.#############......#####.#############......#####.#############......#####.#############.....
..##################.......##################.......##################.......##################.......##################.....
........#####....................#####....................#####....................#####....................#####............
.........#####....................#####....................#####....................#####....................#####...........
..........#####....................#####....................#####....................#####....................#####..........
...........#####....................#####....................#####....................#####....................#####.........
............#####....................#####....................#####....................#####....................#####........
.......#.....#####..............#.....#####..............#.....#####..............#.....#####..............#.....#####.......
.......##.....#####.............##.....#####.............##.....#####.............##.....#####.............##.....#####......
.......###.....#####............###.....#####............###.....#####............###.....#####............###.....#####.....
.......####.....####............####.....####............####.....####............####.....####............####.....####.....
.......#####.....###............#####.....###............#####.....###............#####.....###............#####.....###.....
.......######.....##............######.....##............######.....##............######.....##............######.....##.....
.......#######.....#............#######.....#............#######.....#............#######.....#............#######.....#.....
.......########.................########.................########.................########.................########..........
####################.....####################.....####################.....####################.....####################.....
.####################.....####################.....####################.....####################.....####################....
..####################.....####################.....####################.....####################.....####################...
...####################.....####################.....####################.....####################.....####################..
....####################.....####################.....####################.....####################.....####################.
.....####################.....####################.....####################.....####################.....####################
#.....##############.#####.....##############.#####.....##############.#####.....##############.#####.....##############.####
##.....#############..#####.....#############..#####.....#############..#####.....#############..#####.....#############..###
###....#############...#####....#############...#####....#############...#####....#############...#####....#############...##
####...#############....#####...#############....#####...#############....#####...#############....#####...#############....#
#####..#############.....#####..#############.....#####..#############.....#####..#############.....#####..#############.....
.#####.#############......#####.#############......#####.#############......#####.#############......#####.#############.....
..##################.......##################.......##################.......##################.......##################.....
........#####....................#####....................#####....................#####....................#####............
.........#####....................#####....................#####....................#####....................#####...........
..........#####....................#####....................#####....................#####....................#####..........
...........#####....................#####....................#####....................#####....................#####.........
............#####....................#####....................#####....................#####....................#####........
- Argument szerokości musi być na pierwszym miejscu. Każdy rozsądny format wejściowy (np
w,h
,w h
,(w, h)
) jest w porządku. - Wydrukuj lub zwróć wynik z opcjonalnym końcowym znakiem nowej linii.
- Możesz użyć dowolnych dwóch różnych drukowalnych znaków ASCII zamiast
.
i#
. - Możesz przetłumaczyć komórkę podstawową pionowo lub poziomo, tak jakby miała okresowe warunki brzegowe . Zatem lewy górny róg wyjścia niekoniecznie musi być prostokątem 7 × 8
.
. ( Nowa zasada! )
Najkrótszy kod w bajtach wygrywa.
Jako bonus wygeneruj obraz, w którym każdy .
jest pikselem jednego koloru, a każdy #
pikselem innego koloru.
code-golf
ascii-art
kolmogorov-complexity
Hobby Calvina
źródło
źródło
Odpowiedzi:
Pyth,
61605549 bajtówWypróbuj online: demonstracja
edycja 1: Połącz dwie instrukcje generujące pasmo i trójkąt (patrz poniżej)
edycja 2: Nie widziałem, że możemy używać jakichkolwiek symboli. Zapisano 5 bajtów edycji
edycja 3: @ Hobby Calvina pozwoliło na przetłumaczenie obrazu podstawowego. Ponieważ moje podejście opierało się na tym pomyśle, bardzo mi to pomogło. -6 bajtów
A dla bonusu Cookie :
Jest to tylko 2 bajty dłużej (51 bajtów) i generuje plik
o.png
. Dla danych wejściowych5\n4
generuje następujący obraz:Wyjaśnienie:
Wzór Houndstooth wygląda naprawdę dość nieregularnie. Ale jeśli przeniesiemy lewe 7 kolumn po prawej stronie, a górne 5 rzędów do dolnego, otrzymamy znacznie ładniejszy wzór:
Najpierw produkuję lewy górny blok 13x13:
Istnieją 2 proste nierówności, które opisują dwa
#
obszary. Pasmo można opisać za pomocą,y + 1 <= x <= y + 5
a trójkąt można opisać za pomocąx <= y - 5
. Połączyłem te dwa warunki:Następnie
+Rm012
dodaje 12 zer na końcu każdego wiersza, aby uzyskać górny blok 25x13.Dolny blok 25x13 jest teraz bardzo prosty:
Pozostało już tylko powtórzyć wzór i wydrukować go
Różnica w stosunku do kodu bonusowego Cookie :
255
zamiast1
mjk*Qd
używam*RQ
, ponieważ nie chcę łańcucha.w
zapisuje tę tablicę 2D do pliku (niejawnie konwertuje ją na png)źródło
CJam,
1067371 bajtówDrukuje
1
i0
zamiast.
i#
. Wypróbuj online w interpretatorze CJam .Jak to działa
Bonus cookie
drukuje Portable BitMap zamiast grafiki ASCII.
Poniżej przedstawiono dane wyjściowe
24 13
przekonwertowane na format PNG:źródło
Befunge-93 ,
21201967 bajtówOto kilka wysokiej jakości befunge, z obsługą wyjątków do debugowania!
(Oczywiście, nadal jest to bardzo gra w golfa. Chciałem tylko znaleźć odpowiedź tutaj)
To składa się z różnych części.
To tylko inicjator, pobiera wartości i przechowuje je
Ta sekcja resetuje liczbę wierszy, dzięki czemu możemy wydrukować kolejne (szerokość) zdjęcia obok siebie.
94+2*
oblicza 26, liczbę rzędów. Ponadto, jeśli wysokość wynosi zero, program zostanie zakończony.Pobiera szerokość stosu, dzięki czemu wiemy, ile wydrukować
Dodaje to dwie wartości pozorne do stosu, aby poinformować, kiedy zakończyliśmy operację, a także o tym, w jakim wierszu (n) jesteśmy. To dodaje następnie n wartości do stosu
Jest to sekcja kontrolna, która przejdzie do wiersza (26-n). To jest najprostszy sposób, w jaki mogę to zrobić.
To, oczywiście, jest czytane i wyskakuje niezależnie od tego, jaki wiersz zostanie odczytany na stosie do tyłu. Oznacza to, że kiedy go zdejmujemy, wydrukuje się poprawnie.
To będzie drukowane, aż stos osiągnie wartość 0, którą pozostawiliśmy wcześniej.
To usuwa 1 z numeru określonego wiersza do wydrukowania, a następnie sprawdza, czy jest zero, czy nie. Jeśli jest niezerowa, wracamy do czwartego bloku kodu.
Odejmuje to 1 od wiersza (n), drukuje nową linię i wraca do bloku 3
Po wydrukowaniu wszystkich rzędów odejmuje jeden od początkowej wysokości i wraca do bloku 2.
Cała reszta kodu to sterowanie przepływem lub zarządzanie stosami. Pisanie tej masy bardziej, niż się spodziewałem, ale jestem zadowolony z tego, jak to wygląda. Gra jest znacznie bardziej golfowa i prawdopodobnie pozostanie projektem na kolejny dzień.
2120 -> 1967 : przycięto niektóre linie z dużą ilością zmarnowanych miejsc
źródło
Perl, 243
(Dodano jeden bajt dla
-n
przełącznika, aby pobrać dane wejściowe ze standardowego wejścia.)Jest to dość proste - wystarczy przekonwertować tablicę 26 liczb szesnastkowych na binarne i wydrukować je wymaganą liczbę razy.
Przykład:
Wkład:
Wydajność:
źródło
Rev 1, C,
118115 bajtów9 bajtów zapisanych dzięki nowej regule umożliwiającej translację komórki. 3 bajty zapisane przy użyciu
w*=25
. Reszta postu pozostaje niezmieniona.Rev 0, C, 127 bajtów
Przechodzi przez znaki, drukując je jeden po drugim.
i%(25*w)||puts("")
wstawia nowy wiersz na końcu każdej linii.Mój sposób wyświetlania projektu jest podobny do projektu Jakube, ale umieszczam górne 8 wierszy na dole i 5 prawych kolumn na lewo, aby uzyskać następujący widok. W programie tego kroku jest „odwrócony” przez
+20
i+8
w wyrażeniach dla X i Y.Oprócz „odwrócenia kolorów” może to wyglądać bardzo podobnie, ale jest ważna różnica: pasują do siebie ukośne paski. (zwróć uwagę, że oryginalny projekt nie ma przekątnej symetrii, ponieważ mierzy 25 x 26).
Wyrażenie
((y>x^y>x+5^x>y+4)^y/13)+34
powoduje, że różne operatory porównania wytwarzają paski,^y/13
generują „odwrócenie koloru” w połowie wysokości, a następnie+34
przyjmują wynikową liczbę0,1
i zwiększają ją do zakresu ASCII34,35
.Termin ma
&y/13==x/13
wartość false = 0 w prawym górnym i lewym dolnym kwartale, tworząc kwadratową część wzoru, jak pokazano wcześniej. Zauważ, że ponieważ program zlicza mniej, początek x = y = 0 znajduje się w prawym dolnym rogu. Jest to przydatne, ponieważ kwadrat#
ma szerokość 13 znaków, podczas gdy kwadrat"
ma tylko 12 znaków.źródło
Befunge -93, 968 bajtów
Tak to prawda! Konkurencyjna odpowiedź Befunge!
Wyjaśnienie jutro, łóżko teraz. Powiem jednak, że robię sprytne rzeczy, przesuwając kilka strzałek przekierowania i dość często używam właściwości zawijania. Przetestuj to w tym internetowym tłumaczu .
źródło