Kotak Kecil di Sisi Bukit

13

Ada lagu menyindir yang disebut Little Boxes , awalnya oleh Malvina Reynolds, tentang penyebaran pinggiran kota yang memiliki lirik sebagai berikut:

Kotak-kotak kecil di sisi bukit,
Kotak-kotak kecil yang terbuat dari ticky-tacky,
Kotak-kotak kecil di sisi bukit,
Kotak-kotak kecil semuanya sama.
Ada yang hijau dan yang merah muda,
yang biru dan yang kuning,
Dan mereka semua terbuat dari ticky-norak
Dan mereka semua terlihat sama.

Pekerjaan Anda di sini adalah, diberi input integer n>1yang mewakili ukuran rumah, output empat "kotak kecil" menggunakan warna berikut (dalam notasi 0xRRGGBB):

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

Jika konsol khusus Anda tidak memiliki warna yang tepat ini, Anda dapat menggunakan terdekat yang tersedia (misalnya, kode pelarian ANSI).

Rumah-rumah dibangun dengan n _mewakili lantai dan garis atap. Mereka dikelilingi oleh karakter n/2(bundar) yang |mewakili dinding. Atap selalu 2tinggi dan dua /di tepi kiri, dua \di tepi kanan, dan n-2 -mewakili puncak atap. Ketika rumah-rumah semakin besar, ukuran komparatif atap menjadi lebih kecil; ini dimaksudkan.

Ini rumah ukuran 2:

 /\
/__\
|__|

Ini ukurannya 3:

 /-\
/___\
|   |
|___|

Ini ukurannya 7:

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

Jadi diberi input 7, output empat rumah ukuran 7seperti yang dijelaskan di atas, dengan yang pertama berwarna hijau, yang kedua berwarna pink (magenta), yang ketiga berwarna biru, dan yang keempat berwarna kuning. Output warna dalam urutan itu penting.

Contoh gambar ukuran 3:

masukkan deskripsi gambar di sini

Aturan

  • Rumah-rumah bisa horisontal atau vertikal selama ada pemisahan yang jelas di antara mereka.
  • Leading / trailing newlines atau spasi putih lainnya adalah opsional, asalkan rumah berbaris dengan tepat.
  • Program lengkap atau fungsi dapat diterima. Jika suatu fungsi, Anda dapat mengembalikan output daripada mencetaknya.
  • Output bisa ke konsol, disimpan sebagai gambar, dll.
  • Celah standar dilarang.
  • Ini adalah sehingga semua aturan golf biasa berlaku, dan kode terpendek (dalam byte) menang.
AdmBorkBork
sumber

Jawaban:

5

Python 2 , 123 121 119 111 109 108 bytes

  • Disimpan dua byte berkat caird coinheringaahing ; menggunakan karakter ASCII yang sebenarnya tidak dapat dicetak alih-alih menghindarinya ( \33)
  • Bisa (dan memang) menyimpan byte dengan menulis seluruh program menggunakan input()alih-alih mendefinisikan fungsi
  • Disimpan tujuh byte berkat ElPedro ; menggunakan fakta bahwa str(90+n)dengan 0<=n<=9is"9%s"%n
  • Menyimpan dua tiga byte dengan menggunakan pemformatan string daripada penggabungan string

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

Cobalah online!

Menggunakan kode pelarian ANSI untuk mewarnai rumah.

Jonathan Frech
sumber
119 byte
caird coinheringaahing
1
112 dengan mengulang "2543" dan menggunakan pemformatan string - Cobalah online!
ElPedro
2
@ ElPedro Terima kasih. Tidak terpikir oleh saya bahwa 90dan 2,5,4,3disimpulkan adalah gabungan yang efektif.
Jonathan Frech
4

JavaScript (ES6), Chrome / Firefox, 156 148 151 150 byte

Disimpan 8 byte berkat @Shaggy
Disimpan 1 byte berkat @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))

Demo

Pastikan untuk membuka konsol browser Anda untuk mendapatkan hasil berwarna.

Arnauld
sumber
Bekerja dengan baik untuk saya sebagai Cuplikan, dengan konsol browser saya terbuka. Simpan 8 byte dengan menggunakan kode hex 3 digit: tio.run/##NYvRCsIgGEbv9xSDFr/…
Shaggy
@Shaggy Terima kasih atas sarannya!
Arnauld
Apakah pemimpin 0perlu?
Jonathan Frech
@ JonathanFrech Ya. Tanpa nol terkemuka, itu tidak akan menjadi #RGBkode warna CSS yang valid .
Arnauld
Saya pikir ketinggian salah di rumah-rumah yang lebih luas.
Neil
3

Excel VBA, 243 Bytes

Fungsi jendela langsung VBE anonim yang mengambil input dari A1dan output ke jangkauanA2: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"

Keluaran

Keluaran

Taylor Scott
sumber
2

Japt , 79 76 74 73 72 byte

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

Cobalah (Buka konsol browser Anda sebelum menekan "Run").

Terima kasih kepada ETH untuk membantu saya menguji ini semalam ketika saya sedang mengerjakannya di telepon saya.


Penjelasan

Input bilangan bulat implisit U

3#²¤r1'f ò3 w

Pertama-tama kita membangun larik 3 warna hex untuk dipetakan. Karakter kode ²178 adalah 3#²memberi kita 3178. Kami mengonversinya menjadi string basis-2 dengan ¤dan kemudian mengganti semua kemunculan 1dengan f. ò3membagi string menjadi array string dengan panjang 3 dan wmembalikkan array itu.
(Saya perlu mencari cara untuk mempersingkat itu, entah bagaimana.)

£Ol

Kami memetakan di atas array menggunakan £- dengan Xmenjadi elemen saat ini - danOl log ke konsol. Kami akan memberikan 2 string untuk itu, satu berisi rumah dan satu lagi berisi CSS.

Xi`¬l:#

String kedua dibangun menggunakan iuntuk mengawali Xdengan string terkompresi color:#.

"%c /{ç- ¤}\\

The %cmemberitahu konsol untuk menggunakan string kedua sebagai CSS. Baris teratas rumah dibangun dengan mengulangi ( ç) -karakter Ukali dan kemudian mengirisnya dari elemen kedua (0-diindeks) dengan ¤. Kawat gigi bertindak sebagai jalan pintas, semacam, untuk penggabungan string.

/{ç'_}\\

Baris kedua dibangun dengan cara yang sama, kali ini mengulangi _karakterU kali .

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

Tubuh rumah dibangun dengan terlebih dahulu mengulangi |karakter dua kali dengan ²dan kemudian memasukkan spasi berulang Ukali ke dalam string pada indeks 1. String yang dihasilkan kemudian ditambahkan ke baris baru ( R) dan string itu diulangU/2-0.5 kali.

|{ç'_}|"

Akhirnya, baris terakhir dibangun dengan cara yang sama seperti yang kedua.

Shaggy
sumber
1

Python 2 , 120 byte

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)

Cobalah online! (menunjukkan karakter melarikan diri, bukan warna yang sebenarnya, diuji pada terminal lokal)

Erik the Outgolfer
sumber
Saya pikir rumah Anda terlalu tinggi untuk input n=2.
Jonathan Frech
@ JonathanFrech ya saya akan memperbaiki ... pendekatan langit-langit yang salah ternyata EDIT: diperbaiki
Erik the Outgolfer
Pertanyaannya mengatakan use the closest available, meskipun Anda tampaknya menggunakan warna normal, bukan warna-warna cerah. Warna-warna cerah - saya pikir - akan, bagaimanapun, lebih dekat ke warna yang diinginkan.
Jonathan Frech
@ JonathanFrech Hmm, milikmu tampaknya menggunakan warna normal juga, tapi ya yang cerah lebih dekat.
Erik the Outgolfer
1
@ ElPedro Lagi pula ternyata lebih baik daripada milik saya: p
Erik the Outgolfer
1

Yabasic , 220 byte

Fungsi anonim yang mengambil input sebagai integer, n dan menampilkan 4 rumah berwarna ke terminal.

Kurangnya fungsi pengulangan atau penggantian string khusus di yabsic benar-benar menyakiti respons ini.

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

Versi ini memerlukan mode grafis dan karenanya tidak berfungsi pada TIO.

Keluaran

Nilai input untuk di bawah ini adalah n=7.

Keluaran

Taylor Scott
sumber
1

SmileBASIC, 115 byte

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

Satu lagi yang juga 115 byte:

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

Kode warna yang saya butuhkan (dalam 4-bit RGBI) adalah 5, 11, 9, 7. Ini dihasilkan menggunakan !!J*8-J*2+5Jika J bukan 0, ini adalah 13-J*2(memberikan 11,9,7), dan jika ya, hasilnya adalah hanya 5.

12Me21
sumber