Każdy regularny sześciokąt może być wyłożony diamentami, na przykład tak:
______
/_/_/\_\
/_/\_\/\_\
/\_\/_/\/_/\
\/_/\_\/_/\/
\_\/_/\_\/
\_\_\/_/
Rozważymy powyższe kafelki wielkości 1
(ponieważ boki diamentów są wykonane z jednego /
lub \
każdego). Ten sam kafelek wielkości 2
wyglądałby tak:
____________
/ / /\ \
/___/___/ \___\
/ /\ \ /\ \
/___/ \___\/ \___\
/\ \ / /\ / /\
/ \___\/___/ \/___/ \
\ / /\ \ / /\ /
\/___/ \___\/___/ \/
\ \ / /\ \ /
\___\/___/ \___\/
\ \ \ / /
\___\___\/___/
Twoim zadaniem jest otrzymanie takiego kafelka grafiki ASCII (wielkości 1
) jako danych wejściowych, wraz z dodatnią liczbą całkowitą N
(w postaci dziesiętnej lub jednostkowej), określającą rozmiar pożądanego wyniku. Następnie powinieneś wypisać skalowaną wersję tego samego kafelka.
Zauważ, że sześciokąt może mieć dowolny rozmiar i tak mały jak 1x1x1 (zawierający trzy diamenty).
Ani dane wejściowe, ani wyjściowe nie mogą zawierać spacji końcowych ani więcej spacji wiodących niż jest to konieczne do wyrównania kształtu sześciokąta. Zarówno wejście, jak i wyjście mogą opcjonalnie zawierać jedną końcową linię nowego wiersza (ten wybór nie musi być taki sam dla wejścia i wyjścia).
Możesz napisać program lub funkcję, pobierając dane wejściowe przez STDIN (lub najbliższą alternatywę), argument wiersza poleceń lub argument funkcji i wypisując wynik przez STDOUT (lub najbliższą alternatywę), wartość zwracaną funkcji lub parametr funkcji (wyjściowej).
To jest kod golfowy, więc wygrywa najkrótsza odpowiedź (w bajtach).
Przykładowe tilings
Oto garść nachyleń wejściowych, których możesz użyć do przetestowania swojego zgłoszenia.
__
/_/\
\_\/
____
/_/\_\
/\_\/_/\
\/_/\_\/
\_\/_/
______
/_/_/\_\
/_/\_\/\_\
/\_\/_/\/_/\
\/_/\_\/_/\/
\_\/_/\_\/
\_\_\/_/
________
/_/\_\_\_\
/\_\/\_\_\_\
/\/_/\/_/_/\_\
/\/\_\/_/_/\/\_\
\/\/_/\_\_\/\/_/
\/\_\/_/\_\/_/
\/\_\_\/_/_/
\/_/_/_/_/
Poniższy fragment kodu zawiera odpowiednie dane wyjściowe dla danych wejściowych N = 1
przez N = 6
.
__
/_/\
\_\/
____
/ /\
/___/ \
\ \ /
\___\/
______
/ /\
/ / \
/_____/ \
\ \ /
\ \ /
\_____\/
________
/ /\
/ / \
/ / \
/_______/ \
\ \ /
\ \ /
\ \ /
\_______\/
__________
/ /\
/ / \
/ / \
/ / \
/_________/ \
\ \ /
\ \ /
\ \ /
\ \ /
\_________\/
____________
/ /\
/ / \
/ / \
/ / \
/ / \
/___________/ \
\ \ /
\ \ /
\ \ /
\ \ /
\ \ /
\___________\/
____
/_/\_\
/\_\/_/\
\/_/\_\/
\_\/_/
________
/ /\ \
/___/ \___\
/\ \ / /\
/ \___\/___/ \
\ / /\ \ /
\/___/ \___\/
\ \ / /
\___\/___/
____________
/ /\ \
/ / \ \
/_____/ \_____\
/\ \ / /\
/ \ \ / / \
/ \_____\/_____/ \
\ / /\ \ /
\ / / \ \ /
\/_____/ \_____\/
\ \ / /
\ \ / /
\_____\/_____/
________________
/ /\ \
/ / \ \
/ / \ \
/_______/ \_______\
/\ \ / /\
/ \ \ / / \
/ \ \ / / \
/ \_______\/_______/ \
\ / /\ \ /
\ / / \ \ /
\ / / \ \ /
\/_______/ \_______\/
\ \ / /
\ \ / /
\ \ / /
\_______\/_______/
____________________
/ /\ \
/ / \ \
/ / \ \
/ / \ \
/_________/ \_________\
/\ \ / /\
/ \ \ / / \
/ \ \ / / \
/ \ \ / / \
/ \_________\/_________/ \
\ / /\ \ /
\ / / \ \ /
\ / / \ \ /
\ / / \ \ /
\/_________/ \_________\/
\ \ / /
\ \ / /
\ \ / /
\ \ / /
\_________\/_________/
________________________
/ /\ \
/ / \ \
/ / \ \
/ / \ \
/ / \ \
/___________/ \___________\
/\ \ / /\
/ \ \ / / \
/ \ \ / / \
/ \ \ / / \
/ \ \ / / \
/ \___________\/___________/ \
\ / /\ \ /
\ / / \ \ /
\ / / \ \ /
\ / / \ \ /
\ / / \ \ /
\/___________/ \___________\/
\ \ / /
\ \ / /
\ \ / /
\ \ / /
\ \ / /
\___________\/___________/
______
/_/_/\_\
/_/\_\/\_\
/\_\/_/\/_/\
\/_/\_\/_/\/
\_\/_/\_\/
\_\_\/_/
____________
/ / /\ \
/___/___/ \___\
/ /\ \ /\ \
/___/ \___\/ \___\
/\ \ / /\ / /\
/ \___\/___/ \/___/ \
\ / /\ \ / /\ /
\/___/ \___\/___/ \/
\ \ / /\ \ /
\___\/___/ \___\/
\ \ \ / /
\___\___\/___/
__________________
/ / /\ \
/ / / \ \
/_____/_____/ \_____\
/ /\ \ /\ \
/ / \ \ / \ \
/_____/ \_____\/ \_____\
/\ \ / /\ / /\
/ \ \ / / \ / / \
/ \_____\/_____/ \/_____/ \
\ / /\ \ / /\ /
\ / / \ \ / / \ /
\/_____/ \_____\/_____/ \/
\ \ / /\ \ /
\ \ / / \ \ /
\_____\/_____/ \_____\/
\ \ \ / /
\ \ \ / /
\_____\_____\/_____/
________________________
/ / /\ \
/ / / \ \
/ / / \ \
/_______/_______/ \_______\
/ /\ \ /\ \
/ / \ \ / \ \
/ / \ \ / \ \
/_______/ \_______\/ \_______\
/\ \ / /\ / /\
/ \ \ / / \ / / \
/ \ \ / / \ / / \
/ \_______\/_______/ \/_______/ \
\ / /\ \ / /\ /
\ / / \ \ / / \ /
\ / / \ \ / / \ /
\/_______/ \_______\/_______/ \/
\ \ / /\ \ /
\ \ / / \ \ /
\ \ / / \ \ /
\_______\/_______/ \_______\/
\ \ \ / /
\ \ \ / /
\ \ \ / /
\_______\_______\/_______/
______________________________
/ / /\ \
/ / / \ \
/ / / \ \
/ / / \ \
/_________/_________/ \_________\
/ /\ \ /\ \
/ / \ \ / \ \
/ / \ \ / \ \
/ / \ \ / \ \
/_________/ \_________\/ \_________\
/\ \ / /\ / /\
/ \ \ / / \ / / \
/ \ \ / / \ / / \
/ \ \ / / \ / / \
/ \_________\/_________/ \/_________/ \
\ / /\ \ / /\ /
\ / / \ \ / / \ /
\ / / \ \ / / \ /
\ / / \ \ / / \ /
\/_________/ \_________\/_________/ \/
\ \ / /\ \ /
\ \ / / \ \ /
\ \ / / \ \ /
\ \ / / \ \ /
\_________\/_________/ \_________\/
\ \ \ / /
\ \ \ / /
\ \ \ / /
\ \ \ / /
\_________\_________\/_________/
____________________________________
/ / /\ \
/ / / \ \
/ / / \ \
/ / / \ \
/ / / \ \
/___________/___________/ \___________\
/ /\ \ /\ \
/ / \ \ / \ \
/ / \ \ / \ \
/ / \ \ / \ \
/ / \ \ / \ \
/___________/ \___________\/ \___________\
/\ \ / /\ / /\
/ \ \ / / \ / / \
/ \ \ / / \ / / \
/ \ \ / / \ / / \
/ \ \ / / \ / / \
/ \___________\/___________/ \/___________/ \
\ / /\ \ / /\ /
\ / / \ \ / / \ /
\ / / \ \ / / \ /
\ / / \ \ / / \ /
\ / / \ \ / / \ /
\/___________/ \___________\/___________/ \/
\ \ / /\ \ /
\ \ / / \ \ /
\ \ / / \ \ /
\ \ / / \ \ /
\ \ / / \ \ /
\___________\/___________/ \___________\/
\ \ \ / /
\ \ \ / /
\ \ \ / /
\ \ \ / /
\ \ \ / /
\___________\___________\/___________/
________
/_/\_\_\_\
/\_\/\_\_\_\
/\/_/\/_/_/\_\
/\/\_\/_/_/\/\_\
\/\/_/\_\_\/\/_/
\/\_\/_/\_\/_/
\/\_\_\/_/_/
\/_/_/_/_/
________________
/ /\ \ \ \
/___/ \___\___\___\
/\ \ /\ \ \ \
/ \___\/ \___\___\___\
/\ / /\ / / /\ \
/ \/___/ \/___/___/ \___\
/\ /\ \ / / /\ /\ \
/ \/ \___\/___/___/ \/ \___\
\ /\ / /\ \ \ /\ / /
\/ \/___/ \___\___\/ \/___/
\ /\ \ / /\ \ / /
\/ \___\/___/ \___\/___/
\ /\ \ \ / / /
\/ \___\___\/___/___/
\ / / / / /
\/___/___/___/___/
________________________
/ /\ \ \ \
/ / \ \ \ \
/_____/ \_____\_____\_____\
/\ \ /\ \ \ \
/ \ \ / \ \ \ \
/ \_____\/ \_____\_____\_____\
/\ / /\ / / /\ \
/ \ / / \ / / / \ \
/ \/_____/ \/_____/_____/ \_____\
/\ /\ \ / / /\ /\ \
/ \ / \ \ / / / \ / \ \
/ \/ \_____\/_____/_____/ \/ \_____\
\ /\ / /\ \ \ /\ / /
\ / \ / / \ \ \ / \ / /
\/ \/_____/ \_____\_____\/ \/_____/
\ /\ \ / /\ \ / /
\ / \ \ / / \ \ / /
\/ \_____\/_____/ \_____\/_____/
\ /\ \ \ / / /
\ / \ \ \ / / /
\/ \_____\_____\/_____/_____/
\ / / / / /
\ / / / / /
\/_____/_____/_____/_____/
________________________________
/ /\ \ \ \
/ / \ \ \ \
/ / \ \ \ \
/_______/ \_______\_______\_______\
/\ \ /\ \ \ \
/ \ \ / \ \ \ \
/ \ \ / \ \ \ \
/ \_______\/ \_______\_______\_______\
/\ / /\ / / /\ \
/ \ / / \ / / / \ \
/ \ / / \ / / / \ \
/ \/_______/ \/_______/_______/ \_______\
/\ /\ \ / / /\ /\ \
/ \ / \ \ / / / \ / \ \
/ \ / \ \ / / / \ / \ \
/ \/ \_______\/_______/_______/ \/ \_______\
\ /\ / /\ \ \ /\ / /
\ / \ / / \ \ \ / \ / /
\ / \ / / \ \ \ / \ / /
\/ \/_______/ \_______\_______\/ \/_______/
\ /\ \ / /\ \ / /
\ / \ \ / / \ \ / /
\ / \ \ / / \ \ / /
\/ \_______\/_______/ \_______\/_______/
\ /\ \ \ / / /
\ / \ \ \ / / /
\ / \ \ \ / / /
\/ \_______\_______\/_______/_______/
\ / / / / /
\ / / / / /
\ / / / / /
\/_______/_______/_______/_______/
________________________________________
/ /\ \ \ \
/ / \ \ \ \
/ / \ \ \ \
/ / \ \ \ \
/_________/ \_________\_________\_________\
/\ \ /\ \ \ \
/ \ \ / \ \ \ \
/ \ \ / \ \ \ \
/ \ \ / \ \ \ \
/ \_________\/ \_________\_________\_________\
/\ / /\ / / /\ \
/ \ / / \ / / / \ \
/ \ / / \ / / / \ \
/ \ / / \ / / / \ \
/ \/_________/ \/_________/_________/ \_________\
/\ /\ \ / / /\ /\ \
/ \ / \ \ / / / \ / \ \
/ \ / \ \ / / / \ / \ \
/ \ / \ \ / / / \ / \ \
/ \/ \_________\/_________/_________/ \/ \_________\
\ /\ / /\ \ \ /\ / /
\ / \ / / \ \ \ / \ / /
\ / \ / / \ \ \ / \ / /
\ / \ / / \ \ \ / \ / /
\/ \/_________/ \_________\_________\/ \/_________/
\ /\ \ / /\ \ / /
\ / \ \ / / \ \ / /
\ / \ \ / / \ \ / /
\ / \ \ / / \ \ / /
\/ \_________\/_________/ \_________\/_________/
\ /\ \ \ / / /
\ / \ \ \ / / /
\ / \ \ \ / / /
\ / \ \ \ / / /
\/ \_________\_________\/_________/_________/
\ / / / / /
\ / / / / /
\ / / / / /
\ / / / / /
\/_________/_________/_________/_________/
________________________________________________
/ /\ \ \ \
/ / \ \ \ \
/ / \ \ \ \
/ / \ \ \ \
/ / \ \ \ \
/___________/ \___________\___________\___________\
/\ \ /\ \ \ \
/ \ \ / \ \ \ \
/ \ \ / \ \ \ \
/ \ \ / \ \ \ \
/ \ \ / \ \ \ \
/ \___________\/ \___________\___________\___________\
/\ / /\ / / /\ \
/ \ / / \ / / / \ \
/ \ / / \ / / / \ \
/ \ / / \ / / / \ \
/ \ / / \ / / / \ \
/ \/___________/ \/___________/___________/ \___________\
/\ /\ \ / / /\ /\ \
/ \ / \ \ / / / \ / \ \
/ \ / \ \ / / / \ / \ \
/ \ / \ \ / / / \ / \ \
/ \ / \ \ / / / \ / \ \
/ \/ \___________\/___________/___________/ \/ \___________\
\ /\ / /\ \ \ /\ / /
\ / \ / / \ \ \ / \ / /
\ / \ / / \ \ \ / \ / /
\ / \ / / \ \ \ / \ / /
\ / \ / / \ \ \ / \ / /
\/ \/___________/ \___________\___________\/ \/___________/
\ /\ \ / /\ \ / /
\ / \ \ / / \ \ / /
\ / \ \ / / \ \ / /
\ / \ \ / / \ \ / /
\ / \ \ / / \ \ / /
\/ \___________\/___________/ \___________\/___________/
\ /\ \ \ / / /
\ / \ \ \ / / /
\ / \ \ \ / / /
\ / \ \ \ / / /
\ / \ \ \ / / /
\/ \___________\___________\/___________/___________/
\ / / / / /
\ / / / / /
\ / / / / /
\ / / / / /
\ / / / / /
\/___________/___________/___________/___________/
N-1
wiodące puste linie. :(Odpowiedzi:
CJam,
85797672 bajtówRozmiar powinien znajdować się w pierwszej linii. I następuje diament.
Niezbyt dobrze grał w golfa ... A połowa postaci pochodziła ze szczegółów.
Objaśnienia (poprzedniej wersji)
źródło
Python 2, 164
Dane wyjściowe dotyczące przypadków testowych.
Co się tu dzieje?
Główną ideą jest to, że każda postać w oryginale wysadza się w
n*n
blok. Na przykład dla n = 4/
może byćOryginalny znak pojawia się raz w każdej linii, a po obu stronach jest dopełnienie. Tutaj jest
po lewej
i
_
po prawej stronie. Tylko dolny rząd może być wypełniony'_'
; reszta jest zawsze' '
.Główną trudnością jest to, że wypełnienie po prawej stronie może zależeć od nadchodzącego symbolu. W szczególności
'/ '
ma inną wyściółkę niż'/_'
, więc potrzebujemy trochę przyszłości. Co więcej, aby uniknąć spacji, musimy pamiętać, że jesteśmy przy ostatnim symbolu i powstrzymujemy się od dopełniania po prawej stronie.Rozwiązujemy oba te problemy, wypełniając tylko lewą stronę aktualnej postaci. Kiedy to robimy, wykonujemy również prawe dopełnienie od poprzedniego znaku, używając bieżącego symbolu dopełniania. Tak więc wypisujemy prawe dopełnienie należne z poprzedniego znaku, lewe dopełnienie z bieżącego znaku, a następnie bieżący znak. Przechowujemy także kwotę „długu” wypełniającego, którą następny znak będzie musiał zapłacić.
Teraz przejdźmy do kodu.
Ciąg wejściowy to,
s
a współczynnik skali ton
. Przechodzimy linia po linii, drukującn
linie dla każdej linii wejściowejW
, z kopiami indeksowanymij=n,n-1,...,2,1
. Pierwszy wiersz jest kopiowany tylko raz, co osiągamy poprzez inicjalizacjęj
na 1, ale zmianę nan
każdą pętlę.Iterujemy przez linię wejściową, kumulując linię do wydrukowania
O
. Najpierw ustalamy odpowiedni znak wypełniającyq
, który jest podkreśleniem, jeśli znajdujemy się w dolnej linii, a albo obecny, albo poprzedni znak jest znakiem podkreślenia, a w przeciwnym razie spacją.Następnie decydujemy o ilości wypełnienia po lewej (
e
). W przypadku/
, to jestj-1
(maleje wraz ze spadkiem liczby kopii linia) i komplementarnychn-j
do\
. Inne postacie traktujemy w ten sam sposób. Na przykład, chociaż_
wydaje się, że daje rządn
znaków podkreślenia, w rzeczywistości daje pojedynczy znak podkreślenia, wypełniony znakami podkreślenia po lewej i prawej stronie. To wydaje się nieefektywne, ale pozwala nam pracuje_
ina tej samej podstawie, jak
/
i\
The położenia „centralnej” podkreślenia nie ma znaczenia, więc to i guzekz
\
; ten wybór sprawia, że górny rząd działa bez specjalnej obudowy.Następnie dodajemy do ciągu wyjściowego. Ustaliliśmy symbol dopełnienia
q
i bieżącą ilość dopełnieniae
, ale musimy także pamiętać o długu dopełnianiad
z poprzedniego symbolu. Tak więc dodajemyq*(e+d)
. Następnie dodajemy bieżący symbolc
, z tym wyjątkiem, że musimy unikać znaków podkreślenia w wierszu innym niż dolny, co naprawiamy, przekształcając znaki podkreślenia na symbol wypełnienia.Na koniec rejestrujemy kwotę zadłużenia uzupełniającego, która stanowi uzupełnienie
n+~d
bieżącej kwoty marginesu uzupełniającego. Nagrywamy również bieżący symbolp
, aby później dowiedzieć się, czy był to poprzedni symbol_
.źródło
JavaScript ( ES6 ) 274
281 289 338źródło
Python 2,
2172111951941906 bajtów dzięki Sp3000.
Wywołaj
m
z pierwszym argumentem będącym diamentem jako łańcuchem, a drugim argumentem numerem powtórzenia.Jest to oparte na 3-etapowej sekwencji zamiany łańcucha:
/\
w/ \
, wraz z liczbą miejsc odstępie, począwszy od 2 do 2 * (N-1) w linii.\/
w\ /
, wraz z liczbą miejsc odstępie, począwszy od 2 x (n-1) na 2 po liniach.Następnie istnieje wiele sposobów na poprawienie wiodących pól i poprawienie pierwszej linii.
Zauważ, że ostatni wiersz programu powinien być tabulatorem, a nie 4 spacjami. Markdown nie obsługuje kart.
źródło
(i+(n-i+~i)*(d[-1]>f)) --> [i,n+~i][d[-1]>f]
i używasz tylko'_'
raz, więc marnujesz bajt na ich zdefiniowanie.Python,
272238228243 bajtówZaktualizowana wersja, teraz pobiera pojedynczy ciąg jako dane wejściowe, zamiast sekwencji ciągów. Usuwa również końcowe białe znaki, które były obecne we wcześniejszej wersji. Niestety zmiany te zwiększają rozmiar.
Wersja z białymi znakami i instrukcje podzielone na mniejsze jednostki dla czytelności:
Podstawowe podejście tutaj:
N
, generując linię wyjściową w każdej iteracji pętli. Istnieje specjalny przypadek dla pierwszego wiersza, w którym generowana jest tylko ostatnia linia wyjściowa, aby uniknąć generowania pustych linii na początku wyniku.N
znakami, gdzie:N
spacjami.N
spacjami dla pierwszejN -1
iteracji pętli iN
znakami podkreślenia dla ostatniej iteracji pętli.N - 1
spacjami lub podkreślnikami.Najtrudniejszą częścią jest to, że wypełnianie dla ukośników / ukośników używa spacji lub znaków podkreślenia w zależności od następnego (dla ukośników) lub poprzedniego (dla ukośnika) znaku wejściowego. Nie pasowało to do strategii zastępowania ciągów.
To, co zrobiłem, aby rozwiązać ten problem, polega na tym, że najpierw zastępuję niektóre dwie kombinacje postaci różnymi postaciami, aby móc traktować je inaczej podczas faktycznej zamiany. Na przykład
/_
jest zastąpiony przez(_
. Po tym(
następuje „ukośnik, po którym następuje podkreślenie”, które można następnie odpowiednio zastąpić.Główny program używany do testowania funkcji:
źródło
n-1-k
jestn+~k
.rstrip()
9 znaków. Mam nadzieję, że poradzę sobie lepiej, a także znalazłem sposób na wycięcie 5 postaci.sys.stdin
nie jest dopuszczalnym parametrem wejściowym - musisz manipulować samym łańcuchem.sys.stdin
iint(sys.argv[1])
, ale nie dostaniesz je za darmo przez spodziewałem się, że być przekazany jako zmiennych (czy to uczciwa gra, to można również oczekiwać aliasyrange
i replace` i co tam jeszcze trzeba być predefine) .stdin
lista , jak i lista ciągów są ciągami znaków.Perl, 132
Połączone wejście STDIN i ARGV. Przykład:
źródło
Rubinowy 236
237Test online: http://ideone.com/e6XakQ
Oto kod przed golfem:
źródło