Małe pudełka na zboczu wzgórza

13

Istnieje satyryczna piosenka Little Boxes , oryginalnie napisana przez Malvinę Reynolds, na temat podmiejskiego bezładu, która ma następujące teksty:

Małe pudełka na zboczu wzgórza,
Małe pudełka z kleistego kleju,
Małe pudełka na wzgórzu,
Małe pudełka mimo wszystko.
Jest zielony i różowy
I niebieski i żółty
I wszystkie są zrobione z kleistego kleju
I wszystkie wyglądają tak samo.

Twoim zadaniem tutaj jest, biorąc pod uwagę liczbę całkowitą n>1reprezentującą rozmiar domu, wypisz cztery „małe pudełka” przy użyciu następujących kolorów (w notacji 0xRRGGBB):

Green -- 0x00FF00
Pink --- 0xFF00FF (technically magenta)
Blue --- 0x0000FF
Yellow - 0xFFFF00

Jeśli twoja konsola nie ma dokładnie tych kolorów, możesz użyć najbliższego dostępnego (np. Kodów specjalnych ANSI).

Domy są zbudowane z n _reprezentacją podłogi i linii dachu. Są otoczone n/2(zaokrąglonymi) |postaciami reprezentującymi ściany. Dachy są zawsze 2wysokie i mają dwa /na lewej krawędzi, dwa \na prawej krawędzi i n-2 -reprezentują szczyt dachu. Gdy domy stają się większe, względny rozmiar dachu staje się coraz mniejszy; to jest zamierzone.

Oto dom wielkości 2:

 /\
/__\
|__|

Oto rozmiar 3:

 /-\
/___\
|   |
|___|

Oto rozmiar 7:

 /-----\
/_______\
|       |
|       |
|       |
|_______|

Tak więc biorąc pod uwagę dane 7wyjściowe, wyprowadzaj cztery domy wielkości, 7jak opisano powyżej, pierwszy w kolorze zielonym, drugi w kolorze różowym (magenta), trzeci w kolorze niebieskim, a czwarty w kolorze żółtym. Wyjście kolorów w tej kolejności jest ważne.

Przykładowe zdjęcie rozmiaru 3:

wprowadź opis zdjęcia tutaj

Zasady

  • Domy mogą być poziome lub pionowe, o ile istnieje wyraźna separacja między nimi.
  • Wiodące / końcowe znaki nowej linii lub inne białe znaki są opcjonalne, pod warunkiem, że domy są odpowiednio ustawione.
  • Dopuszczalny jest pełny program lub funkcja. Jeśli funkcja, możesz zwrócić dane wyjściowe zamiast je drukować.
  • Dane wyjściowe mogą być wysyłane do konsoli, zapisane jako obraz itp.
  • Standardowe luki są zabronione.
  • To jest więc obowiązują wszystkie zwykłe zasady gry w golfa, a wygrywa najkrótszy kod (w bajtach).
AdmBorkBork
źródło

Odpowiedzi:

5

JavaScript (ES6), Chrome / Firefox, 156 148 151 150 bajtów

Zapisano 8 bajtów dzięki @Shaggy
Zapisano 1 bajt dzięki @Neil

n=>['0f0','f0f','00f','ff0'].map(c=>console.log(`%c /${'-'[r='repeat'](n-2)}\\
/${s='_'[r](n)}\\
${(`|${' '[r](n)}|
`)[r](~-n/2)}|${s}|`,'color:#'+c))

Próbny

Pamiętaj, aby otworzyć konsolę przeglądarki, aby uzyskać kolorowe wydruki.

Arnauld
źródło
Działa dobrze dla mnie jako Snippet, przy otwartej konsoli mojej przeglądarki. Zaoszczędź 8 bajtów, używając 3-cyfrowych kodów szesnastkowych: tio.run
Shaggy
@Shaggy Dzięki za sugestie!
Arnauld,
Czy prowadzenie 0jest konieczne?
Jonathan Frech
@JathanathanFrech Tak. Bez wiodących zer nie byłyby to prawidłowe #RGBkody kolorów CSS.
Arnauld,
Myślę, że wysokość jest niewłaściwa w szerszych domach.
Neil
5

Python 2 , 123 121 119 111 109 108 bajtów

  • Oszczędność dwóch bajtów dzięki Cairnowi Coherheringaahing ; używanie rzeczywistego niedrukowalnego znaku ASCII zamiast jego ucieczki ( \33)
  • Mógł (i zrobił) zapisać bajt, pisząc cały program, input()zamiast definiować funkcję
  • Zaoszczędzono siedem bajtów dzięki ElPedro ; korzystając z faktu, że str(90+n)z 0<=n<=9jest"9%s"%n
  • Zaoszczędzono dwa trzy bajty, używając formatowania łańcucha zamiast konkatenacji łańcucha

N=input()
for(n)in"2543":Z="_"*N;print"[9%sm /"%n+~-~-N*"-"+"\ \n/%s\\\n"%Z+~-N/2*("|%s|\n"%" "*N)+"|%s|"%Z

Wypróbuj online!

Używa kodów ucieczki ANSI do kolorowania domów.

Jonathan Frech
źródło
119 bajtów
caird coinheringaahing
1
112 przez zapętlenie „2543” i użycie formatowania ciągów - wypróbuj online!
ElPedro
2
@ElPedro Thanks. Nie przyszło mi do głowy, że 90i 2,5,4,3podsumowując, to skutecznie konkatenacja.
Jonathan Frech
3

Excel VBA, 243 bajtów

Anonimowa funkcja bezpośredniego okna VBE, która pobiera dane wejściowe A1i wyjściowe z zakresuA2:A5

[C1]=vbLf:For i=1To 4:Cells(i+1,1)=[" /"&Rept("-",A1-2)&"\"&C1&"/"&Rept("_",A1)&"\"&C1&Rept("|"&Rept(" ",A1)&"|"&C1,A1/2)&"|"&Rept("_",A1)&"|"]:Cells(i+1,1).Font.Color=Array(32768,&HFF00FF,rgbBlue,65535)(i-1):Next:Cells.Font.Name="Courier New"

Wynik

Wynik

Taylor Scott
źródło
2

Japt , 79 76 74 73 72 bajty

3#²¤r1'f ò3 w £Ol"%c /{ç- ¤}\\
/{ç'_}\\
{/2-½ ç"|{ç}|
"}|{ç'_}|"Xi`¬l:#

Wypróbuj (Otwórz konsolę przeglądarki, zanim klikniesz „Uruchom”).

Dzięki ETH za pomoc w testowaniu tej ostatniej nocy, gdy pracowałem nad tym na telefonie.


Wyjaśnienie

Domniemane wprowadzenie liczby całkowitej U

3#²¤r1'f ò3 w

Najpierw tworzymy tablicę 3-cyfrowych kolorów szesnastkowych do odwzorowania. Kod znakowy ²to 178, więc 3#²daje nam 3178. Konwertujemy go na ciąg base-2 z, ¤a następnie zastępujemy wszystkie wystąpienia 1z f. ò3dzieli ciąg na tablicę ciągów o długości 3 i wodwraca tę tablicę.
(Muszę jakoś wymyślić, jak to skrócić).

£Ol

Mapujemy tablicę za pomocą £- Xbędąc bieżącym elementem - i Ollogujemy się do konsoli. Prześlemy do tego 2 ciągi znaków, jeden zawierający dom, a drugi CSS.

Xi`¬l:#

Drugi ciąg jest konstruowany przy użyciu ipoprzedzającego Xskompresowanego ciągu color:#.

"%c /{ç- ¤}\\

%cMówi konsolę do używania jako drugi ciąg CSS. Górna linia domu jest budowana poprzez powtórzenie ( ç) czasów -znaków, Ua następnie wycięcie ich z drugiego elementu (indeksowane 0) za pomocą ¤. Nawiasy klamrowe działają jako swego rodzaju skrót do łączenia łańcuchów.

/{ç'_}\\

Druga linia jest zbudowana w podobny sposób, tym razem powtarzając czasy _postaci U.

{/2-½ çRi|²iUç 1}

Bryła domu jest budowana poprzez |dwukrotne powtórzenie znaku, ²a następnie wstawienie spacji powtórzonych Urazy do tego ciągu o indeksie 1. Powstały ciąg jest następnie dodawany do nowej linii ( R), a ciąg ten jest powtarzany U/2-0.5razy.

|{ç'_}|"

Wreszcie ostatnia linia jest budowana w taki sam sposób jak druga.

Kudłaty
źródło
1

Python 2 , 120 bajtów

n=input()
for i in'2543':s='_'*n;print'[1;3'+i+('m /'+'-'*(n-2)+'\ \n/%s\\\n'%s+(-~n/2-1)*('|'+' '*n+'|\n')+'|%s|\n'%s)

Wypróbuj online! (pokazuje znaki specjalne zamiast rzeczywistych kolorów, testowane na lokalnym terminalu)

Erik the Outgolfer
źródło
Myślę, że wasze domy są zbyt wysokie, aby mogły zostać wykorzystane n=2.
Jonathan Frech
@JonathanFrech tak Naprawię ... błędne podejście sufitowe najwyraźniej EDYCJA: naprawiono
Erik the Outgolfer
Pytanie brzmi „tak” use the closest available, chociaż wydaje się, że używasz normalnych kolorów zamiast jasnych kolorów. Jasne kolory - myślę - byłyby jednak bliższe pożądanym kolorom.
Jonathan Frech,
@JonathanFrech Hmm, twoje też wydają się używać normalnych kolorów, ale tak, jasne są bliżej.
Erik the Outgolfer,
1
@ElPedro W każdym razie jego okazało się lepsze niż moje: p
Erik the Outgolfer
1

Yabasic , 220 bajtów

Anonimowa funkcja, która pobiera dane wejściowe jako liczbę całkowitą ni przekazuje do terminalu 4 kolorowe domy.

Brak dedykowanej funkcji powtarzania lub zastępowania łańcucha w yabsic naprawdę szkodzi tej odpowiedzi.

Clear Screen
Input""n
b$="__"
c$="|  "
For i=1To n-2
a$=a$+"-"
b$=b$+"_"
c$=c$+" "
Next
c$=c$+"|\n"
For i=1To n-4
d$=d$+c$
Next
For i=0To 3
?Color(Mid$("gremagbluyel",1+3*i,3))" /"+a$+"\\\n/"+b$+"\\\n"+d$+"|"+b$+"|"
Next

Ta wersja wymaga trybu graficznego i dlatego nie działa na TIO.

Wynik

Poniżej podano wartość wejściową n=7.

Wynik

Taylor Scott
źródło
1

SmileBASIC, 115 bajtów

INPUT N
H.H 6H 4H 2DEF H C
COLOR C+5?" /";"-"*(N-2);"\
?"/";"_"*N;"\
FOR I=3TO N?"|";" "*N;"|
NEXT?"|";"_"*N;"|
END

Kolejny, który ma również 115 bajtów:

INPUT N
FOR J=0TO 3COLOR!!J*8-J*2+5?" /";"-"*(N-2);"\
?"/";"_"*N;"\
FOR I=3TO N?"|";" "*N;"|
NEXT?"|";"_"*N;"|
END

Potrzebne mi kody kolorów (w 4-bitowym RGBI) to 5, 11, 9, 7. Jest to generowane przy użyciu !!J*8-J*2+5Jeśli J nie jest 13-J*2równe 0, to jest (daje 11,9,7), a jeśli tak, to wynik to tylko 5.

12Me21
źródło