Wyzwanie
Biorąc pod uwagę liczbę całkowitą n
(gdzie 4<=n<=10**6
) jako dane wejściowe, stwórz „więzienne drzwi” sztuki ASCII * mierzące n-1
szerokość i n
wysokość znaków, używając symboli z poniższego przykładu.
Przykład
╔╦╗
╠╬╣
╠╬╣
╚╩╝
Używane są następujące znaki:
┌───────────────┬─────────┬───────┐
│ Position │ Symbol │ Char │
├───────────────┼─────────┼───────┤
│ Top Left │ ╔ │ 9556 │
├───────────────┼─────────┼───────┤
│ Top │ ╦ │ 9574 │
├───────────────┼─────────┼───────┤
│ Top Right │ ╗ │ 9559 │
├───────────────┼─────────┼───────┤
│ Right │ ╣ │ 9571 │
├───────────────┼─────────┼───────┤
│ Bottom Right │ ╝ │ 9565 │
├───────────────┼─────────┼───────┤
│ Bottom │ ╩ │ 9577 │
├───────────────┼─────────┼───────┤
│ Bottom Left │ ╚ │ 9562 │
├───────────────┼─────────┼───────┤
│ Left │ ╠ │ 9568 │
├───────────────┼─────────┼───────┤
│ Inner │ ╬ │ 9580 │
└───────────────┴─────────┴───────┘
Zasady
- Możesz przyjmować dane za pomocą dowolnych rozsądnych i wygodnych środków, o ile pozwalają na to standardowe reguły we / wy .
- Na potrzeby tego wyzwania w językach, w których symbole użyte do zbudowania „drzwi” są znakami wielobajtowymi, można je liczyć do wyniku jako jeden bajt.
- Wszystkie pozostałe znaki (jedno- lub wielobajtowe) należy liczyć jak zwykle.
- Dane wyjściowe mogą nie zawierać końcowych spacji, ale końcowy znak nowej linii jest dozwolony, jeśli jest to absolutnie konieczne.
- To jest golf golfowy, więc wygrywa najmniej bajtów.
Przypadki testowe
Input: 4
Output:
╔╦╗
╠╬╣
╠╬╣
╚╩╝
Input: 8
Output:
╔╦╦╦╦╦╗
╠╬╬╬╬╬╣
╠╬╬╬╬╬╣
╠╬╬╬╬╬╣
╠╬╬╬╬╬╣
╠╬╬╬╬╬╣
╠╬╬╬╬╬╣
╚╩╩╩╩╩╝
Input: 20
Output:
╔╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╗
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╚╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╝
* Tak, wiem, że im większy, tym mniej wygląda na drzwi więzienia! :RE
╬
nawet koryto, którego╬
nie ma na stronie kodowej? Jeśli nie, to czy jest"'Z“ζ
dozwolony jako koszt jednego bajtu (lub 2)? (push 9580, konwersja do Unicode)?"'Z“ζ
równy jednemu bajtowi byłoby jak w javascript"╬"
kosztującym 1 bajtOdpowiedzi:
Java 8,
156151148118 bajtów-30 bajtów, tworząc port odpowiedzi @raznagul C # (.NET Core) , po tym jak grałem w golfa 5 bajtów.
Wypróbuj online.
Stara 148 bajtowa odpowiedź:
-5 bajtów dzięki @raznagul .
Wyjaśnienie:
Wypróbuj tutaj.
źródło
-->
operatora idzie do ( ).i-->3
,i-->2
aj-->3´ you can save 5 bytes by removing the
n- = 3` in+1
.Węgiel drzewny , 34-5 = 29 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. 5-bajtowa redukcja dotyczy znaków rysujących w ramkach.
ReflectOverlapOverlap(0)
powinien być równoważny,ReflectMirror()
ale zamiast tego Węgiel po prostu robiReflectTransform()
zamiast tego, w przeciwnym razie to rozwiązanie również działałobyn=3
. Oto obejście, które pokazuje, co by się stałon=3
dla 38 - 5 = 33 bajtów:Jeszcze lepiej, jeśli
ReflectOverlapOverlap(0)
zadziałało, ale nie zawracałem sobie głowy wspieraniemn=3
, to mogłem to zrobić dla 31 - 4 = 27 bajtów:źródło
╠
do╣
i takie. „ Licznik bajtów Charcoala z jakiegoś powodu nie działa. ” Może Licznik bajtów Charcoala nie działa, ponieważ te znaki nie są częścią strony kodowej? Możesz jednak policzyć je jako 1 bajt zgodnie z regułami wyzwania, więc jest to rzeczywiście 27.Węgiel drzewny ,
4442 bajtyPrzekreślone 44 jest nadal regularne 44
Wypróbuj online!
źródło
Haskell, 75 bajtów
Wypróbuj online!
Funkcja
w
przyjmuje liczbę całkowitąi
i listę, gdziea
jest pierwszy,b
drugi element ic
resztę listy, i tworzy nową listęa
, a następniei-3
kopieb
, a następniec
. Zastosujw
najpierw do każdego elementu listy,["╔╦╗\n","╠╬╣\n","╚╩╝"]
a następnie ponownie (zi
powiększeniem o1
) na wynikowej liście. Połącz w jedną listę.źródło
<$
pochodzi zData.Functor
i został wprowadzonyPrelude
. Jest prawie taki sam jak>>
.a <$ b
Zastępuje każdy elementb
za
, podczas gdyb >> a
oczekujea
się lista i Łączy długośćb
kopiia
.[1,2] >> "aa"
->"aaaa"
,"aa" <$ [1,2]
->["aa","aa"]
. Uwaga:'x' <$ [1,2]
równa się[1,2] >> "x"
.Vim, 29 bajtów
Ponieważ są znaki kontrolne, oto zrzut xxd:
Wypróbuj online! (Wygląda na to, że interpreter V ma problemy z postaciami egzotycznymi, więc link używa bardziej przyziemnych).
Wyjaśnienie
źródło
GNU sed, 74 + 1 = 75 bajtów
+1 bajt dla
-r
flagi. Pobiera dane wejściowe jako liczbę jednoznaczną.Wypróbuj online!
Wyjaśnienie
To jest całkiem proste. Załóżmy, że wartością wejściową jest 6 (unary 111111). Pierwszy wiersz upuszcza cztery
1
si przekształca pozostałe dane wejściowe w to:Trzeci wiersz w pętli zastępuje każdy
1
poprzedzającym go znakiem. To tworzy nasze kolumny:Zauważ, że to także zduplikowało
;
postać. Wreszcie piąta linia w pętli zastępuje każdy;
znak kopią następującego wiersza:źródło
Galaretka , 33 bajty
... czy to 33? - konwersja z jednego bajtu literałów ciągowych (indeksów stron kodowych) na znaki Unicode kosztuje 5.
Pełny program drukujący wynik.
Wypróbuj online!
W jaki sposób?
źródło
Y
końcem+⁽"7Ọ
dodaje do nich 9556, a następnie rzutuje na znaki. Czy są (5) darmowe? Wydaje mi się, że byłoby to tak samo, jakbym mógł bezpośrednio używać znaków Unicode. (Mógłbym również użyć rzeczywistych znaków zamiast indeksów stron kodowych i użyć mapowania dla większej liczby bajtów).Python 3 , 75 bajtów
Wypróbuj online!
źródło
n-3
n=int(input())-3;print("╔"+"╦"*n+"╗\n"+("╠"+"╬"*n+"╣\n")*(n+1)+"╚"+"╩"*n+"╝")
n+1
jest równoważne z-~n
.Dyalog APL, 71 bajtów
Wypróbuj online!
źródło
(some expr)f Y
zY f⍨ some expr
.Japt ,
60 52 49 4836 bajtówWypróbuj online!
Inna wersja (47 bajtów +
-R
flaga)Potrzebuje
-R
flagi (dodanej do pola wprowadzania). Wypróbuj online!Jak to działa?
Ponieważ początkowo zakładałem, że „drzwiowe znaki” kosztują więcej niż jeden bajt, pomyślałem, że mogę zaoszczędzić sporo bajtów, kodując je. Następnie odjąłem 9500 od kodów znaków, co pozostawiło mnie ze znakami
8J; DPG >MA
, które kosztują tylko jeden bajt. Następnie mógłbym dodać 9500 do każdego kodu znaków i wszystko byłoby dobrze.źródło
05AB1E , 29 bajtów
Wypróbuj online!
źródło
Szybki, 161 bajtów
Bez golfa:
Możesz wypróbować tę odpowiedź tutaj
źródło
QBIC , 78 bajtów
Na szczęście wszystkie symbole używane w drzwiach komórki znajdują się na stronie kodowej QBasic.
Wyjaśnienie
Przykładowe dane wyjściowe
źródło
PHP , 131 bajtów, 113 znaków
Wypróbuj online!
PHP , 133 bajty, 115 znaków
Wypróbuj online!
źródło
JavaScript (ES6), 86 bajtów
Jest to znacznie dłużej niż w przypadku innej odpowiedzi JS , ale chciałem spróbować z alternatywną metodą.
W jaki sposób?
Przypisujemy wagę do każdej krawędzi siatki: 1 dla prawej, 2 dla lewej, 3 dla dolnej i 6 dla górnej. Suma wag daje indeks używanego znaku.
Próbny
Pokaż fragment kodu
źródło
JavaScript (ES6),
8074 bajtówźródło
Rubin,
5452 bajty-2 bajty dzięki ymbirtt.
Wypróbuj online!
Bez golfa
To jest bardzo nudne:
źródło
(n+1)
trochę skrócić, pisząc-~n
- pierwszeństwo operatora również oszczędza nawiasy.Java 8, 102 + 101 bajtów
To jest kolejny repeater ciągów o tej samej długości:
Wypróbuj online!
źródło
BiFunction
:n->{n-=3;return"╔"+r("╦",n)+"╗\n"+r("╠"+r("╬",n)+"╣\n",-~n)+"╚"+r("╩",n)+"╝";}
iString r(String c,int n){return c.valueOf(new char[n]).replace("\0",c);}
Wypróbuj online. Druga metoda może być również zmieniona naString r(String c,int n){String r=c;for(;n-->1;r+=c);return r;}
(63 bajty), więc staje się w sumie 141 bajtamin->"╔"+r("╦",n-=3)+"╗\n"+r("╠"+r("╬",n)+"╣\n",-~n)+"╚"+r("╩",n)+"╝"
iString r(String c,int n){String r=c;for(;n-->1;r+=c);return r;}
Wypróbuj online.C # (.NET Core) ,
wynik 123 (141 bajtów)wynik 118 (136 bajtów)Wypróbuj online!
-5 bajtów dzięki @KevinCruijssen
Wyjaśnienie:
źródło
b+="╣\n";c+="╝";for(;n-->2;)a+=b;return a+c;};
tofor(b+="╣\n";n-->2;)a+=b;return a+c+"╝";}
Try it online.Stax, 23 bytes
Run and debug it
Here's the ungolfed version. Amusingly, it's actually smaller for stax not to use the literal characters because including them as a literal would prevent source packing.
Run this one
źródło
Mathematica, 106 bytes
źródło
oK, 38 chars
Try it online.
k does not seem to want to handle unicode well, so I went with oK.
źródło
Batch, 126 bytes
Works in CP437 or CP850. Looks like this in those code pages:
źródło
Retina,
5650 bytesTry it online! Works by building up a square of ╬s and then fixing up the edges (in particular three colums are deleted when the sides are added).
źródło
PowerShell, 67 bytes
Takes input
$args[0]
, subtracts3
, saves that into$x
, uses that in the construction of the top of the door to output the appropriate number of middle sections. Then we're outputting the middle rows, of which we have$x+1
of. Finally, the bottom row is similar to the top row. All of those are left on the pipeline, and the implicitWrite-Output
inserts a newline between elements for free.Try it online!
źródło
Perl 5, 61
60 characters of code (90 including the multibyte door characters) + 1 for
-p
Try it online!
źródło
C# (.NET Core), 130 bytes
Port of @RobertoGraham's Java 8 answer, after I golfed about 70 bytes.
Try it online.
źródło
J,
4137 bytesTry it online!
Default box drawing takes 13 bytes, unfortunately the best way of replacing the characters I could find costs 28.
źródło