To jest okno:
---
| |
---
Dodajmy ściany |
. Umieść dwa pola po obu stronach, aby okno miało dużo miejsca.
| --- |
| | | |
| --- |
Dodajmy teraz dach i sufit. Aby okno pozostało na środku pokoju, dodajmy jeszcze jeden rząd nad nim i pod nim.
---------
| |
| --- |
| | | |
| --- |
| |
---------
Teraz po prostu dodaj dach. Umieść ukośnik jak najdalej w lewo, a ukośnik jak najdalej w prawo, a my to:
/ \
---------
| |
| --- |
| | | |
| --- |
| |
---------
Następnie przesuń ukośnik w prawo i w prawo. Przesuń lewy ukośnik w górę i w lewo:
/ \
/ \
---------
| |
| --- |
| | | |
| --- |
| |
---------
Powtarzaj, aż dwa ukośniki się spotkają, a następnie dodaj gwiazdkę w miejscu, w którym się spotykają:
*
/ \
/ \
/ \
/ \
---------
| |
| --- |
| | | |
| --- |
| |
---------
I jesteś skończony! To jest dom 1x1. dom 2x2 wyglądałby tak:
*
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
-----------------
| | |
| --- | --- |
| | | | | | |
| --- | --- |
| | |
|-------|-------|
| | |
| --- | --- |
| | | | | | |
| --- | --- |
| | |
-----------------
i dom 3x2:
*
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
-------------------------
| | | |
| --- | --- | --- |
| | | | | | | | | |
| --- | --- | --- |
| | | |
|-------|-------|-------|
| | | |
| --- | --- | --- |
| | | | | | | | | |
| --- | --- | --- |
| | | |
-------------------------
Wyzwanie
Musisz napisać pełny program, który przyjmuje dwie liczby całkowite, xiy, i drukuje dom o szerokości X pokoi i wysokości Y pokoi. Twój program powinien być w stanie obsłużyć domy do 10x10. IO może mieć dowolny rozsądny format. Końcowe spacje w każdej linii są dozwolone, a jedna końcowa nowa linia jest dozwolona.
Najkrótsza odpowiedź w bajtach wygrywa.
f'{name}'
formatowanie ciągów?Python 2,
190181 bajtówJestem pewien, że golf ma wiele do zaoferowania, zwłaszcza okna, ale na razie jest coś takiego. Szerokość wejściowa i wysokość oddzielone przecinkami, np
1,2
.Szybkie i przybliżone wyjaśnienie:
źródło
JavaScript (ES6),
292270238215200 bajtówDzięki @Neil za pomoc w przycięciu tego!
Zadzwoń jako:
F(a)(b)
Buduje dach, a następnie montuje dom rdzenia z warstwowymi powtórzeniami struny.
źródło
join`|\n`
a teraz żałuję, że nie skomentowałem tego w tamtym czasie. Byłbym dobrą wymówką, aby dodać do mojego częściowego komentarza sugerującego skorzystanie z niego9*a
w pewnym momencie, którego nigdy nie przesłałem, ponieważ był zbyt krótki.4*a-1
wygląda niepoprawnie, myślę, że powinna być4*a
, to przy okazji zaoszczędzi ci 4 bajty.m-i-1
staje się--m
.9*a-a
staje się8*a
.*\n${[...Array(m)].map(...).join
\ n}\n
'', ale możesz przejść o jeden lepszy i dołączyć ciąg przed i po tym samym czasie:a=>b=>(p=(c,d=' ')=>d.repeat(c),[p(m=4*a)+`*`,...[...Array(m)].map((c,i)=>p(--m)+'/'+p(i*2+1)+'\\'),y=p(8*a+1,'-')].join`\n`+p(b,`\n`+[x=p(a,'| '),w=p(a,'| --- '),p(a,'| | | '),w,x,y].join`|\n`))
`/${p(i*2+1)}\\`
.C ++, 282 bajty, rozwiązuje problemy z poprzednim wpisem:
Wydajność:
źródło
Ruby, Rev B 165 bajtów
wykorzystuje pojedynczą pętlę i kilka innych sztuczek golfowych.
Ruby, Rev A 179 bajtów
Nie golfił
źródło
| \-'
.\-
nie ma to znaczenia jako sekwencja ucieczki, więc\-
jest po prostu analizowany jako 2 znaki. Wtedy oczywiście-
ma specjalne znaczenietr
, więc potrzebujemy łańcucha,' \-'
aby okna mogły uciec-
(odwzorowanie C-> spacja, B->-
i A->,-
ponieważ nie ma już więcej znaków.) Na podłogach mamy tylko ciąg'-'
iw tym przypadkutr
wydaje się szczęśliwy interpretować go jako dosłowny, a nie specjalny znak, przypisując C = B = A ='-'
W sumie praca była trudna. Jestem pewien, że jest więcej do gry w golfa, edytuję później.C ++, 258 bajtów Test tutaj
Wynik:
źródło
-
. Piętra pośrednie są zrywane z|
C #,
361353 bajtówPełny program:
źródło
s=""
można je umieścić w pętli for (j) (weź również pod uwagęj-->0
warunek ii++<h
w ostatnia pętla),i=0
można przenieść z pętli for do deklaracji, zapisując bajt. Możesz także zapisać bajt, ponownie wykorzystując przypisane puste ciągi (pom
przypisaniu możesz przypisaćo=m
zapisywanie""
. Zamień również bierze ciągi, więc możesz użyjq
zamiast' '
, a po>
deklaracji nie ma miejsca po tymr
. Małe rzeczy;)VBA, 284 bajty
Funkcja Zamień jest doskonałym narzędziem do wykonywania wielu kopii w sposób, którego niestety nie chce funkcja String.
Wywołaj w celu uzyskania najlepszego efektu w oknie Natychmiastowego edytora VBA:
?H(8,8)
na przykład.źródło