Biorąc pod uwagę dwie dodatnie liczby całkowite, W i H, generuje pole ASCII-art, którego ramka składa się z ukośników ( /
i \
) z W „pikami” na górnej i dolnej krawędzi oraz H „pikami” na lewej i prawej krawędzi. Wnętrze skrzynki jest wypełnione spacjami.
„Kolec” to po prostu dwa ukośniki łączące się w kształt strzałki:
/\ \/
/ \
\ /
Więc wynik W = 4, H = 3
byłby
/\/\/\/\
\ /
/ \
\ /
/ \
\/\/\/\/
ponieważ na górze znajdują się 4 kolce skierowane w górę, 4 na dole skierowane w dół, 3 po lewej skierowane w lewo i 3 po prawej skierowane w prawo.
Oto kilka innych par wejścia / wyjścia:
W H
[spiky slash box]
1 1
/\
\/
1 2
/\
\/
/\
\/
2 1
/\/\
\/\/
2 2
/\/\
\ /
/ \
\/\/
1 3
/\
\/
/\
\/
/\
\/
3 1
/\/\/\
\/\/\/
2 3
/\/\
\ /
/ \
\ /
/ \
\/\/
3 2
/\/\/\
\ /
/ \
\/\/\/
10 1
/\/\/\/\/\/\/\/\/\/\
\/\/\/\/\/\/\/\/\/\/
10 2
/\/\/\/\/\/\/\/\/\/\
\ /
/ \
\/\/\/\/\/\/\/\/\/\/
4 5
/\/\/\/\
\ /
/ \
\ /
/ \
\ /
/ \
\ /
/ \
\/\/\/\/
Żadne wiersze na wyjściu nie powinny mieć spacji wiodących ani końcowych. Opcjonalnie może istnieć jedna nowa linia.
Najkrótszy kod w bajtach wygrywa.
Odpowiedzi:
Węgiel , 9 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
F²«↷P…\/N»‖M¬
(pobiera dane wejściowe w wysokości, kolejności szerokości).MATL , 18 bajtów
Wypróbuj w MATL Online!
Wyjaśnienie
Rozważmy wejść
W = 4
,H = 3
. Kod buduje wektory wierszowe[1 2 3 4 5 6 7 8]
(zakres od1
do2*W
) i[1 2 3 4 5 6]
(zakres od1
do2*H
). Przeniesienie tego drugiego i dodanie do tego pierwszego z transmisją daje macierzModułowe indeksowanie w łańcuchu
\/
daje pożądany wynik w ramce macierzy:Aby usunąć wartości bez obramowania, ustawiamy je na
0
(interpretowane jako char jest wyświetlane jako spacja):Skomentowany kod:
źródło
Python 2 ,
6968 bajtów-1 dzięki Kevin Cruijssen
Wypróbuj online!
źródło
\\%s
może się stać\%s
i\\/
może się stać\/
.Haskell ,
90888782 bajtów16 bajtów zapisanych dzięki LynnWypróbuj online!
Nadal czuję się naprawdę długo, zobaczę, co mogę zrobić.
źródło
a#b=[a..b]
i zastąpienie wszystkich wystąpień pozwala zaoszczędzić jeden bajt:a#b=[a..b];x!y|i<-2#x>>" "=(1#x>>"/\\"):(2#y>>['\\':i++"/",'/':i++"\\"])++[1#x>>"\\/"]
a#b=[1..a]>>b;x!y|i<-(x-1)#" "=x#"/\\":(y-1)#['\\':i++"/",'/':i++"\\"]++[x#"\\/"]
właściwie oszczędza 6 ~05AB1E , 14 bajtów
Wypróbuj online!
Wyjaśnienie
Tworzy to tylko lewy górny róg, szerokość x znaków i wysokość y znaków. Następnie odzwierciedla to w obu osiach:
źródło
JavaScript (ES6), 84 bajtów
Pobiera dane wejściowe w składni curry
(w)(h)
.Próbny
Pokaż fragment kodu
źródło
Swift 3 , 166 bajtów
Pełny zestaw testów.
Niestety wersja zamknięcia jest nieco dłuższa (175 bajtów):
Zestaw testowy z wersją zamknięcia.
źródło
Retina ,
7773 bajtówWypróbuj online! Link zawiera przypadki testowe. Pobiera dane wejściowe w formacie
<height> <width>
. Wyjaśnienie:Konwertuj wejścia na unary.
Pomnóż dane wejściowe, ale dodaj nowy wiersz, aby wynik był prostokątem.
Stwórz kolczasty top.
Duplikuj każdy kolczasty rząd, ale z przesunięciem kolców w drugim rzędzie.
Usuń końcowe znaki nowej linii.
Usuń wnętrze pudełka. (Uwaga spacja w ostatnim wierszu.)
źródło
Excel, 95 bajtów
źródło
APL (Dyalog) ,
4139 bajtówMonity o listę
[H,W]
Wypróbuj online!
⎕-1
monit o wprowadzenie (mnemonic: stylizowana konsola) i odjęcie 12×
pomnóż przez dwa''⍴⍨
użyj tego, aby przekształcić pusty ciąg (pola ze spacjami)⊢
wydajność, która (służy do jej oddzielenia4
){
…}⍣4
Zastosuj następującą funkcję cztery razy:≢⍵
Tally (długość) argumentu'/\'⍴⍨
cyklicznie r eshape"/\"
tej długości⍵,
dołącz to po prawej stronie argumentu⌽⍉
transpozycja i odbicie lustrzane (tj. obrót o 90 °)¯1⌽1
cyklicznie obracaj pierwszy rząd o jeden krok w prawo⊢
wydajność, która (służy do jej oddzielenia1
)'\'@2@1
wprowadzić odwrotny ukośnik na 2 nd pozycji 1 st głównego elementu.źródło
C (gcc) ,
170166158155108105-3 bajty dzięki cleblanc
Wypróbuj online!
Myślę, że można to pograć w golfa przy mniej prostym podejściu. Zobaczę, co da się zrobić, kiedy znajdę czas.Ok nie mogę znaleźć innego sposobu na zmniejszenie liczby bajtów dla tego kodu.
Objaśnienie: prosta podwójna pętla drukująca pole char po char.
Podczas drukowania ramki: jeśli współrzędne xiy są parzyste lub nieparzyste, wyświetla a
/
, w przeciwnym razie a\
wyświetla się aJeśli nie jest obramowaniem, zamiast niego wyświetlany jest znak spacji
źródło
puts("")
pierwszy do pętli for w ten sposóbx,y;f(w,h){for(y=h*=2;y--;puts(""))for(x=w*2;x--;)putchar(!x|x==w*2-1|!y|y==h-1?x&y&1|~x&~y&1?47:92:32);}
/// ,
172117 bajtówPonieważ dane wyjściowe składają się z
///
s iwhitespace
s, należy przesyłać dane w tych 2 językach.Umieść dane wejściowe za kodem
W,H
jako liczbę jednoznaczną (unary dla /// jest dozwolone , dzięki Challenger5 dla sugestii) (użyj*
do przedstawienia cyfry, oddziel od,
).Wypróbuj online! (z wejściem
W=4, H=3
)źródło
Python 3 ,
8782 bajtówEdycja: Zapisano 5 bajtów dzięki @officialaimm , @ Mr.Xcoder i @tsh
Wypróbuj online!
źródło
*(b-1)
możesz być*~-b
na -2 bajty." "*2*~-a
? Właśnie"__"*~-a
.J, 48 bajtów
bez golfa
wyjaśnienie
Wypróbuj online!
źródło
' '(<,~<<0 _1)}'\/'{~=/&(2|i.)&+:
. Amend jest tutaj świetny.'/\ '{~2(<,~<<0 _1)}2|+/&i.&+:
z pewną refaktoryzacją05AB1E , 19 bajtów
Wypróbuj online!
Odwraca argumenty.
źródło
Haskell ,
8479 bajtówWypróbuj online! Przykładowe użycie:
3%6
daje listę linii. SłużymapM putStrLn $ 3%6
do ładnego wydrukowania pudełka.źródło
Java 8, 141 bajtów
Curled lambda od szerokości do wysokości do wyjścia.
Wypróbuj online (nie,
return t+i+o;
nie było zamierzone)Niegolfowana lambda
To rozwiązanie jest nietypowo wybredne pod względem wielkości wejściowej, ponieważ a
char
służy do zliczania do szerokości wejściowej. Na szczęście algorytm jest na tyle zły, że przy tych rozmiarach ukończenie programu prawdopodobnie już stanowi problem. Zdecydowałem się użyćchar
indeksu pętli, aby móc go później użyć jako taniego aliasu'\n'
.źródło
SOGL V0.12 ,
222113 bajtówWypróbuj tutaj! (oczekuje obu danych wejściowych na stosie, więc
..
(i"
ponieważ ciąg nie został jawnie uruchomiony) - weź dwa razy dane wejściowe, aby ułatwić obsługę)Wyjaśnienie:
źródło
Mathematica, 87 bajtów
Wypróbuj w Mathics (z jakiegoś powodu drukuje dodatkowe spacje na początku większości linii) lub w piaskownicy Wolfram ! Pobiera na wejściu dwie liczby całkowite.
To dość naiwne rozwiązanie, ale wszystkie sprytne rzeczy, których próbowałem, miały więcej bajtów. Coś, co prawie działa
z wyjątkiem tego, że nie powiedzie się, jeśli jeden z wymiarów ma wartość 1 (wejście to lista zawierająca wymiary).
źródło
Pyth ,
40 3938 bajtówTo bierze dwie liczby całkowite oddzielone znakiem nowej linii.
Pełny zestaw testów.
źródło
Rubin ,
62 6160 bajtów-1 bajt dzięki Arnauldowi
Wypróbuj online!
źródło
Właściwie 38 bajtów
Wypróbuj online!
źródło
J , 39 bajtów
Wypróbuj online!
Przyjmuje dwa argumenty, jak
height
w przypadku LHS iwidth
RHS.źródło
VBA (Excel), 161 bajtów
źródło
Sub b
c=[2*A1]
r=[2*B1]
For i=1To r
For j=1To c
Debug.?IIf(i=1Or j=1Or i=r Or j=c,IIf((i + j)Mod 2,"\","/")," ");
Next
Debug.?
Next
End Sub
c=[2*A1]:r=[2*B1]:For i=1To r:For j=1To c:?IIf(i=1Or j=1Or i=r Or j=c,IIf((i + j)Mod 2,"\","/")," ");:Next:?:Next
R,
160 bajtów152 bajtyWypróbuj online!
Dzięki BLT za golenie 8 bajtów.
źródło
s
funkcji?s=
bit. Funkcje anonimowe są dozwolone.dc , 123 bajty
Jest daleki od najkrótszego, ale jeśli weźmie się dwie ostatnie linie i obróci je
pi/2
radianami zgodnie z ruchem wskazówek zegara do pozycji „pionowej”, to wygląda to jak słup totemu .Pobiera dane wejściowe jako dwie liczby całkowite oddzielone spacjami.
Wypróbuj online!
źródło
Mathematica, 116 bajtów
źródło
Rotate[w,Pi]
jest równoznaczne zw~Rotate~Pi
, jak too["/\\",#]
do"/\\"~o~#
V , 18 bajtów
Odpowiedź nie wymagałaby
ll
tylko<M-h>ollow
pozostawienia 2 kolumn char :(Wypróbuj online!
źródło
C # (.NET Core) , 188 bajtów
Liczba bajtów obejmuje również:
Wypróbuj online!
Zacząłem wyjaśniać polecenie po poleceniu, ale przestało to mieć sens w połowie ... Podstawową zasadą jest zrobienie pełnego kolczastego pudełka, a następnie wydrążenie środka. Użyłem Linq ze względu na użycie Linq, prawdopodobnie może być krótszy przy użyciu standardowych iteracji.
Oto wyjaśnienie idące na środek (najpierw wewnętrzna komenda):
Najpierw utwórz wiersze dla pełnego pola i połącz w pojedynczy ciąg
Następnie weź każdy znak z rzędu, a jeśli nie jest to obrys ramki, zastąp spacją, połącz je z powrotem w jeden ciąg dla każdego rzędu
Na koniec pobierz każdy wiersz i połącz je razem z nowymi wierszami (obejmuje również generowanie kolekcji dla wierszy)
źródło
Perl 5, 83 + 1 (-n) = 84 bytes
Try it online!
źródło