Problem
Zainspirowany poprzednim wyzwaniem, robiąc coś podobnego
Biorąc pod uwagę dodatnie dane n
wyjściowe liczb całkowitych, kształt ma następujący wzór:
wejście n=1
:
* *
*
* *
wejście n=2
:
** **
****
**
****
** **
wejście n=3
:
*** ***
*** ***
*****
***
*****
*** ***
*** ***
i tak dalej...
Ma następujące właściwości:
n*2+1
wysokie linie
„ramiona” są n
szerokie, chyba że się łączą
linia środkowa jest n
szeroka
jeśli n
nawet linie powyżej i poniżej środka są n*2
szerokie
jeśli n
jest nieparzyste, linie powyżej i poniżej środka są n*2-1
szerokie
Zasady
- Końcowe znaki nowej linii są akceptowane
- Obowiązują standardowe luki
- Najkrótsze bajty wygrywają
- Wyjściem może być wydruk lub ciąg lub tablica ciągów
Edycje
n=0
nie trzeba się tym zajmować- Dozwolone spacje końcowe
1
zamiast*
i0
zamiast spacji?Odpowiedzi:
Węgiel drzewny ,
1312 bajtówDzięki @ErikTheOutgolfer za bajt
Wypróbuj online!
To moja pierwsza w historii odpowiedź na węgiel drzewny i jestem prawie pewien, że nie jest tak dobrze zagrana w golfa, ale pomyślałem, że zacznę gdzieś.
źródło
I
dla -1.MATL , 16 bajtów
Wypróbuj online!
Wyjaśnienie
Rozważ dane wejściowe
2
jako przykład. Zawartość stosu pokazano poniżej, a nowsze.źródło
Galaretka , 15 bajtów
Wypróbuj online!
źródło
»
wektoryzacji ...V ,
1817 bajtówZapisano bajt dzięki sztuczce wejściowej @ DJMcMayhem.
Wypróbuj online!
Wyjaśnienie
To wstawia
[n]*'*'+[n]*' '+[n]*'*'
Każda iteracja pętli, z której przechodzi bufor
Do
Gdzie
|
jest kursor ze*
spodemźródło
Àé*ÄJÀäl
zamiastÀá*Àá Àá*
, i możesz to zrobić<M-c>
, tj.ã
(Mnemonic: center ), aby przejść do środka linii, która jest bajtem krótszym niżÀl
. Wypróbuj online!<M-c>
przerwy na wyższe liczby05AB1E , 18 bajtów
Wypróbuj online!
Wyjaśnienie
Przykład dla
n=2
źródło
V , 23 bajty
Wypróbuj online!
Hexdump:
Z jakiegokolwiek powodu wyzwanie to jest znacznie trudniejsze w V niż w ostatnim. Od naszego ogólnego podejścia n razy, utwórz „x” nie zadziała tutaj, zamiast tego skonstruujemy górę X, skopiujemy ją i odwrócimy, a następnie połączymy dwie części razem.
Wyjaśnienie:
Wykonanie wcięcia na końcu pętli pozwala nam skorzystać z niejawnych zakończeń . To również wygodnie tworzy linie n + 1 , czyli dokładnie górną połowę „X”. Powiedzmy, że dane wejściowe to 4. Wtedy bufor wygląda następująco:
I jesteśmy na ostatniej linii. Więc my:
źródło
ãxx
na początku, ale myślę, że psuje się np. Dla n = 8?ãl
, lub jeśli wciśniesz przed centrowaniem, ale tak naprawdę nie oszczędza to żadnych bajtów. Nie rozumiem jednak, dlaczego to działa dla mniejszych liczb.C #,
139 130115 bajtów-1 bajt poprzez utworzenie łańcucha i wywołanie
WriteLine
, zapisując w ten sposób czek dla nowej linii.-6 bajtów dzięki Kevinowi i jego mistrzowskim technikom gry w golfa!
-2 bajtów zastępując
n*3-n
wn*2
.-15 bajtów po tym, jak Kevin uprzejmie wskazał mi właściwy kierunek: mogę po prostu zwrócić ciąg zamiast go wydrukować, zapisując w ten sposób wywołanie
System.Console.WriteLine()
. I kilka innych wskazówek również ...Wypróbuj online!
Nie golfowany:
Po prostu iteruje wzdłuż wierszy i kolumn przestrzeni potrzebnej do wydrukowania dużego X i drukuje albo a,
'*'
albo w' '
zależności od warunków.źródło
&&
może być&
i||
może być|
w tym przypadku.for(int j=0;
może być,for(int j=0,i;
a następnie możesz usunąćint
przódi
wewnętrznej pętli. Ponadto, po pierwszej zmianie&
i|
, możesz również usunąći++
wnętrze pętli for i zmienići==n*3-1?...
nai++==n*3-1?...
.WriteLine
, zapisałem tylko 1 bajt. Więc teraz nie jestem pewien, co zrobić z twoją ostatnią radą.System.Console.WriteLine
? Zwracanie ciągu:n=>{string s="";for(int i,j=0;j<n*2+1;j++,s+="\n")for(i=0;i<n*3;)s+=i>=j&i<j+n|i<=n*3-j-1&i++>n*2-j-1?'*':' ';return s;}
jest krótszy [ 120 bajtów ] (i pozbywa się nawiasów, umieszczając wszystko w pętli for. Oto link TIO, który pokazuje, że działa. Możesz też dodać to (lub własne) Link TIO do twojej odpowiedzi. :)WriteLine
kod, ponieważ OP poprosił o wyprowadzenie dużego X, a nie tylko o jego zwrócenie , więc czułem, że wyjście X (przez wywołanieWriteLine
metody) powinno być częścią kodu. Niemniej jednak nadal nie jestem przyzwyczajony do zasad gry w golfa i nie wiem, jakie licencje mogę uzyskać, pisząc kod. Właśnie widziałem, że niektóre inne odpowiedzi tutaj drukują X w kodzie, a inne drukują go w stopce. Jakie jest prawidłowe podejście w tym przypadku?j<n*2+1
może byćj<=n*2
. Stworzyłem również port Java 8 twojej odpowiedzi z tą samą liczbą bajtów, oczywiście podając twoją niesamowitą odpowiedź.Haskell ,
888786 bajtów-1 dzięki @Laikoni
Wypróbuj online!
źródło
zipWith max m(reverse m)
można skrócić dozipWith max(reverse m)m
. Jest to to samo, cozipWith max=<<reverse$m
, a następniem
można wstawić: Wypróbuj online!Galaretka ,
242316 bajtówWypróbuj online!
źródło
MATLAB,
153126 bajtów (17,6% ↓)Dzięki @ komentarzu LuisMendo użytkownika, funkcja
disp()
może wyjście znaków bez apostrofami, więc mogę zapobiec korzystaniafprintf
zformats
i pominąć kilka bajtów. Poza tym jego komentarz przypomina mi, że muszę użyćchar(32)
spacji zamiastchar(0)
(null).Wypróbuj online!
MATLAB, 153 bajty
Przykład wyniku: n = 10
źródło
Python 2 ,
93908983 bajtów-3 bajty dzięki Leaky Nun
-1 bajt dzięki Zachary T
-6 bajtów dzięki xnor
[Wypróbuj online!] [TIO-j3xwsktf]
Zaczyna się od ciągu, takiego jak
'*** '
forn=3
, ubiegając sięmap/max
o wybranie*
spacji dla każdej pozycji, następnie dodaj spację i usuń ostatni znak z ciągu i zrób to wszystko jeszcze raz.źródło
n*2*' '
zn*' '
?map(max
Można dokonać bezpośrednio bezzip
. Równieżn*2+1
jestn-~n
.Haskell , 70 bajtów
Wypróbuj online!
Wyświetla listę ciągów znaków.
Dla każdej pozycji wiersza
r
, kolumnyc
używa wzoru, aby ustalić, czy mieści się w jednym z dwóch ukośnych pasm i tak też jest*
.źródło
Java 8,
119118 bajtówPort z niesamowitej odpowiedzi C # @CarlosAlejo , po tym, jak pomogłem mu w grze w kilka rzeczy. Pamiętaj więc, aby go również głosować!
Wypróbuj tutaj.
źródło
JavaScript (ES2017),
155157 bajtówZwraca tablicę ciągów. Wykonuję operacje na tablicach, a następnie odbijam je. Prawdopodobnie można to zoptymalizować za pomocą macierzy takich jak inne odpowiedzi, ale chciałem być wyjątkowy.
Edycja: Jak wskazał Neil, dla parzystych wartości
n
linia środkowa nie byłan
szeroka, więc dodałem moduł wykrywający parzyste / nieparzyste podczas przecinania kolumny.Nie golfił
Kwadrant
Odbicie lustrzane w poziomie
Lustrzane odbicie w pionie
źródło
n
- linia środkowa nie jestn
szeroka.Mathematica, 148 bajtów
źródło
R, 102 bajty
Kod:
Test:
źródło
CJam, 24 bajty
Jest to blok, który pobiera liczbę ze stosu i wysyła listę stosów do stosu.
Wyjaśnienie:
źródło
Python 2 , 110 bajtów
Ten program dzieli każdą linię na 4 części, pierwsze spacje, pierwsze gwiazdy, drugie spacje, a następnie drugie gwiazdy. Dla każdej poziomej linii X oblicza, ile gwiazdek lub odstępów jest potrzebnych dla każdej z 4 sekcji linii, a następnie konstruuje i drukuje ten ciąg.
źródło
Siatkówka , 144 bajty
Wypróbuj online! Wyjaśnienie:
Dodaj 2n + 1 spacji przed wartością wejściową (po jednej dla każdej linii wyjściowej).
Zamień każde miejsce na a
#
i zbierz wyniki. Daje to ukośną linię#
s, po obu stronach wypełnioną spacją, z przyrostkiem wartości wejściowej.Usuń oryginalną wartość wejściową, ponieważ teraz mamy kopię w każdym wierszu.
Zbuduj dwie ukośne linie ns
*
, z kolumną separatoran
spacji owiniętą parą#
s.Na liniach, gdzie
*
s są bliżej środka, zamień dwie połówki wokół. Daje to wygląd przypominający> | | <
.Przesuń
| |
s tak daleko w lewo, jak to możliwe, dając rodzaj>> > <
wyglądu.Dla każdej spacji między
#
s usuń trzy następujące znaki. To łączy się> <
wX
.Usuń niepotrzebne teraz
#
s.źródło