CJam, 32 30 29 28 bajtów
ri_"/\ /"2/f*)@,\f>+_z..e>N*
Sprawdź to tutaj.
Próbowałem pomóc Reto w golfa na jego odpowiedź na CJam, ale skończyło się na rozwiązaniu, które nie miało z nim nic wspólnego, więc pomyślałem, że równie dobrze mogę to opublikować.
Wyjaśnienie
Wykorzystuje to symetrię wyjścia. W szczególności fakt, że wynik jest taki sam jak jego transpozycja.
Najpierw generujemy pierwsze N+1
linie, ale bez lewej krawędzi:
ri e# Read input and convert to integer N.
_ e# Duplicate.
"/\ /"2/ e# Push an array with two strings: ["/\" " /"]
f* e# Repeat each of the two strings N times. That gives the first two rows.
) e# Detach the second row.
@, e# Pull up the other copy of N and turn into range [0 1 ... N-1].
\f> e# For each element i in that range, discard the first i characters of
e# the second row.
+ e# Add all those lines back to the first row.
Teraz mamy tablicę ciągów reprezentujących następującą siatkę:
/\/\/\/\
/ / / /
/ / / /
/ / /
/ / /
Transpozycja tego wygląda następująco:
/ / /
\/ /
/ / /
\/ /
/ / /
\/ /
/ /
\/
Razem mają wszystkie potrzebne nam znaki spacji. Możemy teraz skorzystać z końcówki rad Dennisa, aby połączyć dwie siatki ASCII w jedną, biorąc maksimum z każdej pary odpowiednich znaków. We wszystkich pozycjach, w których dwie siatki się różnią, jedna będzie miała spację (lub wcale), a druga będzie miała postać, której szukamy. Gdy jedna lista w operacji wektorowej jest dłuższa od drugiej, dodatkowe elementy dłuższej listy zostaną po prostu zachowane, i właśnie tego szukamy. W pozostałych przypadkach znak spacji będzie zawsze maksymalnie dwoma znakami:
_z e# Duplicate the grid and transpose it.
..e> e# For each pair of characters in corresponding positions, pick the maximum.
N* e# Join the lines by linefeed characters.
;
.Python 2, 80 bajtów
źródło
Mathematica,
123122121 bajtówPrawdopodobnie można by dalej grać w golfa.
źródło
Java - 141 bajtów
Oczywiście nie najkrótsza, ale miło mieć rozwiązanie Java:
Bez golfa
Wkład
Wydajność
źródło
Pyth, 30 bajtów
Wypróbuj tutaj .
źródło
JavaScript,
128125123114 bajtówDe-golf (również przekonwertowany na ES5) + wersja demo:
źródło
Rubinowy, 50 bajtów
W programie testowym:
Pętla drukuje 2 wiersze dla każdej iteracji od i = 0 do i = n-1.
Drugi rząd jest zawsze
'\'
następują ni przypadki'/ '
.Pierwszy wiersz jest taki sam jak drugi wiersz poprzedniej iteracji, ale z
'\'
brakiem (więc przechowujemy tę wartość,s
gdy drukujemy drugi wiersz poprzedniej iteracji).Jedynym wyjątkiem jest iteracja zero, która jest obsługiwana przez inicjowanie
s
do'/\'*n
.źródło
JavaScript (ES6),
10710410098979190 bajtówPierwszy post tutaj!
Kiedyś używany, ale teraz używa , podobny do Rubiego .
Array(len)
.
join(str)
String.repeat(len)
operator*(str,len)
Nie golfowany:
Dzięki:
107 => 104 bajtów: @insertusernamehere
97 => 90 bajtów: @ user81655
źródło
p=>{s=Array(++p).join('/\\')+'\n';for(i=p;i>2;i--,s+='\\'+o+o)o=Array(i).join('/ ')+'\n';return s+'\\/'}
.repeat
metody.Python 2, 66 bajtów
Całkiem proste. Wartość
n
jest liczbą/
w linii ib
określa, czy linia zaczyna się od\
. Wartośćb
zmienia się między 0 a 1 in
zmniejsza się co drugi krok. Brzydki warunek zakończenia ustaje, kiedyn=1, b=0
. Alternatywa dlaexec
pętli wymagałaby wielu ucieczek"'\\\\'"
.Byłem zaskoczony, że to podejście jest krótsze niż używanie pojedynczej liczby
k=2*n+b
. To jest 68 bajtów:Alternatywna strategia pozwoliłaby uniknąć oddzielenia
print
dla górnej linii, ale nie widziałem zwięzłego sposobu.źródło
Minkolang 0,14 , 46 bajtów
Jestem pewien, że można grać w golfa, ale jest już 4 rano i muszę iść spać.
Wypróbuj tutaj.
Wyjaśnienie
źródło
Partia, 121 bajtów
Lub jeśli jednoargumentowy jest akceptowalny, 107 bajtów:
Wywołaj z odpowiednią liczbą 1s.
źródło
Matlab, 122 bajty
źródło
Haskell, 99 bajtów
Dwa rozwiązania o równej długości.
Zadzwoń
f
.i
źródło
Haskell, 96
Nie jest to tak naprawdę konkurencyjne w stosunku do istniejącego rozwiązania Haskell, ponieważ oszczędza 5 znaków, zwracając zamiast drukować ciąg. Publikuję to tylko po to, aby pokazać, jak podejście do nieskończonego wzoru porównuje się do podejścia opartego na współrzędnych. Uwagi:
p
można wstawiać bez zmiany długości.[t n l|(n,l)<-...]
zapisuje 2 ponad(map(uncurry t)$...)
.źródło
Ceylon, 100
Zawiera „listę nazwanych argumentów” dla
join
(bez nazwanych argumentów, ale zamiast tego zrozumiałe iterowalne) oraz kilka zastosowańString.repeat
(z których jedno w rzeczywistości oznacza „obejmuje tylko nieparzyste”i
”).Sformatowany:
źródło
PHP, 117 bajtów
Zakłada, że powiadomienia są wyłączone, a dane wejściowe są pobierane z wiersza poleceń.
Nie golfowany:
Komentarze są mile widziane :)
źródło