Napisz najkrótszy kod mierzony liczbą bajtów, aby wygenerować siatkę ASCII złożoną z rombu, biorąc pod uwagę następujące parametry:
- m - liczba kompletnych rombów w jednym rzędzie
- n - liczba rzędów
- s - strona najmniejszego rombu
- r - poziom zagnieżdżenia - ile rombów znajduje się wewnątrz „bazowych” (które są fonudami między przecięciami siatki)
Przykłady
1. Input: 5 3 1 0
Output:
/\/\/\/\/\
\/\/\/\/\/
/\/\/\/\/\
\/\/\/\/\/
/\/\/\/\/\
\/\/\/\/\/
A 5x3 grid of rhombi with side 1, no nesting
2. Input: 3 2 2 0
Output:
/\ /\ /\
/ \/ \/ \
\ /\ /\ /
\/ \/ \/
/\ /\ /\
/ \/ \/ \
\ /\ /\ /
\/ \/ \/
A 3x2 grid of rhombi with side 2, no nesting
3. Input: 5 2 1 2
Output:
///\\\///\\\///\\\///\\\///\\\
///\\\///\\\///\\\///\\\///\\\
///\\\///\\\///\\\///\\\///\\\
\\\///\\\///\\\///\\\///\\\///
\\\///\\\///\\\///\\\///\\\///
\\\///\\\///\\\///\\\///\\\///
///\\\///\\\///\\\///\\\///\\\
///\\\///\\\///\\\///\\\///\\\
///\\\///\\\///\\\///\\\///\\\
\\\///\\\///\\\///\\\///\\\///
\\\///\\\///\\\///\\\///\\\///
\\\///\\\///\\\///\\\///\\\///
A 5x2 grid of rhombi with side 1 (the smallest rhombus), level of nesting is 2
4. Input: 4 2 2 1
Output:
//\\ //\\ //\\ //\\
///\\\///\\\///\\\///\\\
// \\// \\// \\// \\
\\ //\\ //\\ //\\ //
\\\///\\\///\\\///\\\///
\\// \\// \\// \\//
//\\ //\\ //\\ //\\
///\\\///\\\///\\\///\\\
// \\// \\// \\// \\
\\ //\\ //\\ //\\ //
\\\///\\\///\\\///\\\///
\\// \\// \\// \\//
A 4x2 grid of rhombi with side 2 with level of nesting 1
5. Input: 4 2 3 3
Output:
////\\\\ ////\\\\ ////\\\\ ////\\\\
/////\\\\\ /////\\\\\ /////\\\\\ /////\\\\\
//////\\\\\\//////\\\\\\//////\\\\\\//////\\\\\\
//////\\\\\\//////\\\\\\//////\\\\\\//////\\\\\\
///// \\\\\///// \\\\\///// \\\\\///// \\\\\
//// \\\\//// \\\\//// \\\\//// \\\\
\\\\ ////\\\\ ////\\\\ ////\\\\ ////
\\\\\ /////\\\\\ /////\\\\\ /////\\\\\ /////
\\\\\\//////\\\\\\//////\\\\\\//////\\\\\\//////
\\\\\\//////\\\\\\//////\\\\\\//////\\\\\\//////
\\\\\///// \\\\\///// \\\\\///// \\\\\/////
\\\\//// \\\\//// \\\\//// \\\\////
////\\\\ ////\\\\ ////\\\\ ////\\\\
/////\\\\\ /////\\\\\ /////\\\\\ /////\\\\\
//////\\\\\\//////\\\\\\//////\\\\\\//////\\\\\\
//////\\\\\\//////\\\\\\//////\\\\\\//////\\\\\\
///// \\\\\///// \\\\\///// \\\\\///// \\\\\
//// \\\\//// \\\\//// \\\\//// \\\\
\\\\ ////\\\\ ////\\\\ ////\\\\ ////
\\\\\ /////\\\\\ /////\\\\\ /////\\\\\ /////
\\\\\\//////\\\\\\//////\\\\\\//////\\\\\\//////
\\\\\\//////\\\\\\//////\\\\\\//////\\\\\\//////
\\\\\///// \\\\\///// \\\\\///// \\\\\/////
\\\\//// \\\\//// \\\\//// \\\\////
A 4x2 grid of rhombi with side 3, level of nesting 3
Pamiętaj, aby wyświetlić częściowo widoczne romby na krawędziach i rogach, jeśli to konieczne.
Odpowiedzi:
SOGL V0.12 , 20 bajtów
Wypróbuj tutaj! Pobiera dane wejściowe w odwrotnej kolejności, tak jak w przykładach - r, s, n, m.
Wyjaśnienie:
źródło
∙*
...Węgiel drzewny ,
483937 bajtówWypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
Narysuj kwadrat wielkości
r + 1
. To jedna czwarta zagnieżdżonego diamentu o rozmiarze 1.Skopiuj kwadrat 1
s - 1
razy w prawo i w dół, aby uzyskać odpowiedni rozmiar.Odbij go, aby stać się w pełni zagnieżdżonym diamentem.
Oblicz rozmiar tego zagnieżdżonego diamentu.
Skopiuj diament we właściwym
m - 1
czasie.Skopiuj diament
n - 1
razy w dół .źródło
Python 2 ,
160159158 bajtów-1 bajt dzięki Jonathan Frech
Wypróbuj online!
Wykorzystuje to fakt, że spód rombu jest górą odwrócony (
[::-1]
), iterując w góręrange(n*2)
i używając~x%2*2-1
do kontrolowania, czy jest to góra czy dół.Na górze i na dole (po prawej stronie) jest tylko lewa strona odwrócony i zastępowanie
/
z\
->l.replace(*'/\\')..[::-1]
Aby wygenerować wzór / zagnieżdżania
~-s*' '+'/'*(1+r*2)+~-s*' '
służy do wykonywania ciąg jak///
to będzie powtórzyć i posiekane:źródło
(1+r*2)
może być(r-~r)
.Julia 0.6 , 190 bajtów
Jest to funkcjonalne rozwiązanie, które oblicza dla każdej pary indeksów,
i,j
jaki symbol powinien zostać wyświetlony.Wypróbuj online!
Ilustracja
Zacznij od siatki
r > 0
oznacza grubsze linieObchodź się z narożnikami, sprawdzając, która linia na oryginalnej siatce jest najbliższa
Wróżka każe nam usunąć każdą
s-1
linięPrzemierzaj po przekątnej i gotowe
źródło
JavaScript (ES6), 154 bajty
Bezpośrednio oblicza znak w każdej komórce wyniku.
źródło
CJam, 44
Wypróbuj online
Wyjaśnienie:
źródło
C # (.NET Core) , 167 bajtów
Wypróbuj online!
Jestem zaskoczony wielkością, którą udało mi się; Początkowo spodziewałem się dłuższego rozwiązania. Mówiąc to, jestem pewien, że są inne sztuczki, za którymi tęskniłem.
DeGolfed
źródło
Python 2 ,
201189 bajtówWypróbuj online!
Wykorzystuje fakt, że spód jest taki sam jak górny, ale został przesunięty:
Zaoszczędź 22 bajty dzięki Jonathanowi Frechowi
źródło
s-i-1
może byćs+~i
, zapisując dwa bajty.r+1+min(...
może byćr-~min(...
uratowanie kolejnego.L=[(...)*m for
może byćL=[m*(...)for
, oszczędzając jeszcze jeden bajt.L+=[...];print'\n'.join(L*n)
możnaprint'\n'.join((L+[...])*n)
zapisać kolejny bajt, co daje 196 bajtów .s+r-i-1
zs+~i+r
.exec
i formatowaniu ciągów.Perl 5, 159 + 3 (-anl) bajtów
Wypróbuj online
źródło