Wprowadzenie
Chodzi o to, aby użyć gwiazdki (gwiazdy), *
aby wyświetlić gwiazdę ascii-art w określonym wymiarze. Wymiar jest liczbą wejściową większą lub równą która określa wysokość w liniach górnego punktu gwiazdy. Gwiazdy tutaj mają być sześcioramiennymi gwiazdami o większych rozmiarach, wyglądającymi lepiej z perspektywy obrazu.
We wszystkich przypadkach ascii-art reprezentacja gwiazd ma wyglądać jak dwa trójkąty, które zachodzą na siebie, jak pokazano w poniższych przykładach.
Parametry
Poniższy obrazek i tabela danych opisują atrybuty dla pierwszych siedmiu rozmiarów gwiazdy. Każdy z parametrów rośnie w postępie arytmetycznym wraz ze wzrostem , z wyjątkiem tego , że jest inny .
Przykłady
Dla wejścia 1 (przypadek zdegenerowany) wyjście programu powinno wyglądać następująco:
*
*****
*****
*
Wejście 2:
*
***
*********
*******
*********
***
*
(3)
*
***
*****
***************
*************
***********
*************
***************
*****
***
*
(5)
*
***
*****
*******
*********
***************************
*************************
***********************
*********************
*******************
*********************
***********************
*************************
***************************
*********
*******
*****
***
*
Wyzwanie
Twoim zadaniem jest stworzenie funkcji lub programu, który zaakceptuje liczbę N jako dane wejściowe, a następnie wyśle gwiazdkę o odpowiednim rozmiarze za pomocą samych znaków i
*
znaku.
- Możesz założyć, że wartość wejściowa jest zawsze dodatnią liczbą całkowitą.
- Końcowe białe znaki w liniach wyjściowych są prawidłowe.
- Algorytm programu powinien być na tyle ogólny, aby jakikolwiek wejściowy mógł generować wyjście sztuki gwiazdy. Oczywiście istnieją praktyczne ograniczenia wynikające z wielkości wyjściowej wyświetlacza.
- Dane wyjściowe powinny zostać wydrukowane do STDOUT.
- Standardowe luki są zabronione.
- To jest golf golfowy, więc obowiązują wszystkie zwykłe zasady gry w golfa.
Punktacja
To jest code-golf, więc wygrywa kod z najmniejszą liczbą bajtów!
Odpowiedzi:
05AB1E , 21 bajtów
Wypróbuj online! lub jako pakiet testowy
Wyjaśnienie
źródło
3*s≠-L·<
podobnych6*s≠·-ÅÉ
lub≠3/-6*ÅÉ
, ale niestety żadna z nich nie jest krótsza .. Dobra odpowiedź, jak zawsze! :)xs3*<ŸRsLì'*×.º.C.∊
za 19 :). Kłamałem, to nie działa dla 1. Zostawiając to dla inspiracji.Haskell , 114 bajtów
Buduje funkcję,
g
która pobiera liczbę i tworzyIO
monadę, która wypisuje gwiazdę na STDOUT. Myślę, że to jest w porządku.Wypróbuj online!
Wyjaśnienie
Najpierw porozmawiajmy o lambda.
Trzeba
n
narysować liczbę jako gwiazdy. Drukujemy dwa razy tyle gwiazdek, a następnie jeszcze 1 i wkładamy go z prawej strony do rozmiaru obrazu. Wstawiamy to po prawej stroniea
spacjami, aby wyśrodkować linię gwiazd. Możemy użyć tej lambda do narysowania każdej linii.Z tej lambdy tworzymy
(%)
.(%)
zaczyna się od zrobieniamapM_
z naszą lambda przekształcenia profilu w kształt.Teraz wszystko, co musimy zrobić, to zrobić listę profilu dla gwiazdy. Możemy to zrobić, najpierw tworząc trójkąt
[1..a]
, a następnie wypełniając go zerami++replicate b 0
. Jeśli weźmiemy profil trójkąta i odwrócimy go, otrzymamy drugą połowę gwiazdy. Aby je narzucić, po prostu tworzymy nowy profil, w którym każdy wpis to maksimum z dwóch trójkątów. JestzipWith max
.Następnie nazywamy to na jeden z dwóch sposobów: jak
3%1
dla wkładu1
i z(3*a-1)%a
inaczej.Odtąd trochę grzebiemy przy niektórych wartościach, aby ogolić niektóre bajty. Ponieważ
3*a-1
jest on dość długi, wyrównaliśmy niektóre z naszych innych wartości o 1, dzięki czemu wszystko się anuluje i3*a
zamiast tego otrzymamy zamierzone zachowanie . Mianowicie zaczniemy naszą listę co2
zamiast1
i zrobić2*n-3
zamiast2*n-1
nadrobić zmiany.Alternatywna wersja, 114 bajtów
Ten buduje funkcję bez punktów
(%)<*>min 2
Wypróbuj online!
Wypróbuj online!
Wypróbuj online!
źródło
R ,
125107101 bajtówWypróbuj online!
Poprzednie (inne) podejście:
R ,
150148136135130128 bajtówWypróbuj online!
źródło
Python 2 ,
1019997 bajtówWypróbuj online!
-2 bajty, dzięki Lynn
źródło
i+x>n*6or
oszczędzasz dwa bajty.i+x>~i/n/2%2*6*n
lub coś w tym stylui+x>3*n*(~i/n&2)
(oba 96 bajtów)JavaScript (V8) ,
101108 bajtówEDYCJA: +7 bajtów do wydrukowania do STDOUT
Wypróbuj online!
Skomentowane (bez
print
)źródło
Galaretka , 21 lat bajtów
Pełny program akceptujący dodatnią liczbę całkowitą, która wypisuje do STDOUT.
Wypróbuj online!Lub zobacz zestaw testowy .
W jaki sposób?
źródło
Płótno ,
2523 bajtówWypróbuj tutaj!
15 bajtów bez obsługi
1
źródło
Galaretka , 21 bajtów
Wypróbuj online!
Monadyczny link akceptujący pojedynczą liczbę całkowitą jako lewy argument i zwracający ciąg galaretki oddzielony znakiem nowej linii z gwiazdą jako wyjściem. Po uruchomieniu jako pełny program domyślnie drukuje gwiazdę na STDOUT.
Wyjaśnienie
źródło
×3’»3
ma taką samą długość ^ _ ^ɓ
nie miało to znaczenia, ale zachowałem go, ponieważ nadal mi się podobało!Węgiel , 25 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
Narysuj nieregularny pięciokąt przedstawiający prawą górną ćwiartkę gwiazdy, ale o specjalnej obudowie,
1
aby poszerzyć rząd o dodatkową kolumnę.Zastanów się, aby ukończyć gwiazdę.
Bardziej specjalna obudowa sprawia, że gwiazda na
1
dodatkowy rząd jest wyższa.Alternatywne rozwiązanie, również 25 bajtów:
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
Wydrukuj dodatkowy
*
przypadek1
.Narysuj lewą połowę trójkąta o odpowiednim rozmiarze.
Zastanów się, aby ukończyć trójkąt.
Nakładaj go na swoje odbicie, z wyjątkiem przypadku
1
, w którym to przypadku po prostu odzwierciedlaj.14 bajtów bez specjalnej obudowy dla
1
:Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
Narysuj trójkąt o odpowiednim rozmiarze.
Nakładaj go na swoje odbicie.
źródło
Perl 6 , 74 bajtów
Wypróbuj online!
Dosłownie tworzy trójkąt o odpowiednich proporcjach i nakłada go odwróconą kopią za pomocą łańcucha lub operatora (
~|
). Wyjście jako lista linii z białymi odstępami linii początkowej i końcowej.Wyjaśnienie:
źródło
J ,
5350 bajtówWypróbuj online!
bez golfa
w jaki sposób
Użyj tabeli funkcji (np. Tabeli czasów 3 klasy), aby skonstruować połowę trójkąta, używając
>:
(większej lub równej) jako funkcji. Następnie odwróć każdy rząd, posiekaj ostatnią kolumnę i połącz dwa boki razem, aby uzyskać pełny trójkąt (ale złożony z 1 i 0). Dodajn
rzędy zer na dole. Na koniec odwróć całość i nałóż ją na oryginał, używając wartości logicznej lub,+.
aby uzyskać wynik. Następnie obróć 1 do*
i 0 do spacji.źródło
T-SQL, 194 bajty
@
jest wartością wejściową@c
obsługuje szerokość górnego trójkąta@d
obsługuje szerokość dolnego trójkąta@e
zawiera dane wyjściowe albo@c
albo@d
- to oszczędza kilka bajtów@f
obsługuje specjalny przypadek 1 jako danych wejściowych.@c*@=3
określa, kiedy użyć@f
. 5 bajtów tańsze niż pisanie@c=3and @=1
Wypróbuj online
źródło
Japt
-R
, 25 bajtów+5 bajtów dla
n=1
: \Spróbuj
źródło