Những chiếc hộp nhỏ trên sườn đồi


13

Có một bài hát châm biếm tên là Little Box , ban đầu bởi Malvina Reynold, về vùng ngoại ô có lời bài hát như sau:

Những chiếc hộp nhỏ trên sườn đồi,
Những chiếc hộp nhỏ làm bằng cù lét,
Những chiếc hộp nhỏ trên sườn đồi,
Những chiếc hộp nhỏ đều giống nhau.
Có một màu xanh lá cây và một màu hồng
Và một màu xanh và một màu vàng,
Và tất cả chúng đều được tạo ra từ sự nhảm nhí
Và tất cả chúng đều trông giống nhau.

Công việc của bạn ở đây là, được đưa ra một đầu vào số nguyên n>1biểu thị kích thước của ngôi nhà, xuất ra bốn "hộp nhỏ" bằng cách sử dụng các màu sau (theo ký hiệu 0xRRGGBB):

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

Nếu bảng điều khiển cụ thể của bạn không có các màu chính xác này, bạn có thể sử dụng mã thoát gần nhất có sẵn (ví dụ: mã thoát ANSI).

Những ngôi nhà được xây dựng với n _đại diện cho sàn và mái nhà. Họ được bao quanh bởi n/2các |nhân vật (làm tròn) đại diện cho các bức tường. Các mái nhà luôn luôn 2cao và là hai /ở cạnh trái, hai \ở cạnh phải và n-2 -đại diện cho đỉnh mái. Khi các ngôi nhà trở nên lớn hơn, kích thước so sánh của mái nhà sẽ nhỏ hơn; đây là dự định

Đây là một ngôi nhà có kích thước 2:

 /\
/__\
|__|

Đây là kích thước 3:

 /-\
/___\
|   |
|___|

Đây là kích thước 7:

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

Do đó, đưa ra một đầu vào 7, đầu ra bốn ngôi nhà có kích thước 7như mô tả ở trên, với ngôi thứ nhất màu xanh lá cây, ngôi thứ hai màu hồng (đỏ tươi), ngôi thứ ba màu xanh lam và ngôi nhà thứ tư màu vàng. Đầu ra của màu sắc theo thứ tự đó là quan trọng.

Hình ảnh ví dụ về kích thước 3:

nhập mô tả hình ảnh ở đây

Quy tắc

  • Những ngôi nhà có thể nằm ngang hoặc dọc miễn là có sự tách biệt rõ ràng giữa chúng.
  • Các dòng mới hàng đầu / dấu hoặc khoảng trắng khác là tùy chọn, miễn là các ngôi nhà xếp thành hàng thích hợp.
  • Hoặc là một chương trình đầy đủ hoặc một chức năng được chấp nhận. Nếu một chức năng, bạn có thể trả lại đầu ra thay vì in nó.
  • Đầu ra có thể vào bàn điều khiển, được lưu dưới dạng hình ảnh, v.v.
  • Sơ hở tiêu chuẩn bị cấm.
  • Đây là vì vậy tất cả các quy tắc chơi gôn thông thường đều được áp dụng và mã ngắn nhất (tính bằng byte) sẽ thắng.

Câu trả lời:


5

Python 2 , 123 121 119 111 109 108 byte

  • Đã lưu hai byte nhờ caird coinheringaahing ; sử dụng ký tự ASCII không thể in thực tế thay vì thoát nó ( \33)
  • Có thể (và đã) lưu một byte bằng cách viết toàn bộ chương trình bằng cách sử dụng input()thay vì xác định hàm
  • Đã lưu bảy byte nhờ ElPedro ; sử dụng thực tế là str(90+n)với 0<=n<=9"9%s"%n
  • Đã lưu hai ba byte bằng cách sử dụng định dạng chuỗi thay vì nối chuỗi

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

Hãy thử trực tuyến!

Sử dụng mã thoát ANSI để tô màu cho các ngôi nhà.



1
112 bằng cách lặp "2543" và sử dụng định dạng chuỗi - Hãy thử trực tuyến!
ElPedro

2
@ElPedro Cảm ơn. Không xảy ra với tôi điều đó 902,5,4,3tóm tắt là kết nối có hiệu quả.
Jonathan Frech

4

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

Đã lưu 8 byte nhờ @Shaggy
Lưu 1 byte nhờ @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))

Bản giới thiệu

Đảm bảo mở bảng điều khiển của trình duyệt của bạn để có đầu ra màu.


Hoạt động tốt với tôi dưới dạng Snippet, với bảng điều khiển trình duyệt của tôi mở. Lưu 8 byte bằng cách sử dụng mã hex gồm 3 chữ số: tio.run/##NYvRCsIgGEbv9xSDFr/ Kẻ
Shaggy

@Shaggy Cảm ơn những lời đề nghị!
Arnauld

Là hàng đầu 0cần thiết?
Jonathan Frech

@JonathanFrech Vâng. Nếu không có các số 0 đứng đầu, đó sẽ không phải là #RGBmã màu CSS hợp lệ .
Arnauld

Tôi nghĩ rằng chiều cao là sai trên những ngôi nhà rộng hơn.
Neil

3

VBA Excel, 243 byte

Hàm cửa sổ ngay lập tức VBE ẩn danh đưa đầu vào A1và đầu ra vào phạm viA2: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"

Đầu ra

Đầu ra


2

Japt , 79 76 74 73 72 byte

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

Hãy thử nó (Mở bảng điều khiển trình duyệt của bạn trước khi nhấn "Chạy").

Cảm ơn ETH đã giúp tôi kiểm tra tối qua trong khi tôi đang làm việc trên điện thoại của mình.


Giải trình

Nhập số nguyên U

3#²¤r1'f ò3 w

Đầu tiên chúng ta xây dựng một mảng các màu hex 3 chữ số để ánh xạ qua. Mã số ²là 178 vì vậy 3#²cung cấp cho chúng tôi 3178. Chúng tôi chuyển đổi chuỗi đó thành chuỗi cơ sở 2 bằng ¤và sau đó thay thế tất cả các lần xuất hiện 1bằng f. ò3chia chuỗi thành một chuỗi các chuỗi có độ dài 3 và wđảo ngược mảng đó.
(Tôi cần tìm ra một cách để rút ngắn điều đó, bằng cách nào đó.)

£Ol

Chúng tôi ánh xạ qua mảng bằng cách sử dụng £- với Xthành phần hiện tại - và Olghi nhật ký vào bàn điều khiển. Chúng ta sẽ chuyển 2 chuỗi đến đó, một chuỗi chứa ngôi nhà và một chuỗi chứa CSS.

Xi`¬l:#

Chuỗi thứ hai được xây dựng bằng cách sử dụng iđể thêm vào Xchuỗi nén color:#.

"%c /{ç- ¤}\\

%ccho giao diện điều khiển sử dụng chuỗi thứ hai là CSS. Dòng trên cùng của ngôi nhà được xây dựng bằng cách lặp lại ( ç) số lần -ký tự Uvà sau đó cắt nó từ phần tử thứ hai (0-index) với ¤. Các dấu ngoặc nhọn hoạt động như một phím tắt, các loại, để nối chuỗi.

/{ç'_}\\

Dòng thứ hai được xây dựng theo cách tương tự, lần này lặp lại lần _nhân vật U.

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

Phần thân của ngôi nhà được xây dựng bằng cách lặp lại |ký tự hai lần đầu tiên ²và sau đó chèn một khoảng trắng lặp lại Uvào chuỗi đó ở chỉ mục 1. Chuỗi kết quả sau đó được thêm vào một dòng mới ( R) và chuỗi đó được lặp lại nhiều U/2-0.5lần.

|{ç'_}|"

Cuối cùng, dòng cuối cùng được xây dựng theo cách tương tự như dòng thứ hai.


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)

Hãy thử trực tuyến! (hiển thị ký tự thoát thay vì màu thực tế, được thử nghiệm trên thiết bị đầu cuối cục bộ)


Tôi nghĩ rằng ngôi nhà của bạn quá cao cho đầu vào như thế nào n=2.
Jonathan Frech

@JonathanFrech yep Tôi sẽ sửa ... cách tiếp cận trần rõ ràng EDIT: đã sửa
Erik the Outgolfer

Câu hỏi nói lên use the closest available, mặc dù bạn dường như sử dụng màu bình thường thay vì màu sáng. Các màu sáng - tôi nghĩ - tuy nhiên, sẽ gần với các màu mong muốn hơn.
Jonathan Frech

@JonathanFrech Hmm, bạn dường như cũng đang sử dụng các màu bình thường, nhưng vâng, những màu sáng gần hơn.
Erik the Outgolfer

1
@ElPedro Dù sao đi nữa, anh ấy đã trở nên tốt hơn tôi: p
Erik the Outgolfer

1

Yabasic , 220 byte

Một hàm ẩn danh lấy đầu vào là một số nguyên nvà xuất 4 ngôi nhà có màu vào thiết bị đầu cuối.

Việc thiếu một chức năng lặp lại hoặc thay thế chuỗi chuyên dụng trong yabsic thực sự làm tổn thương phản hồi này.

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

Phiên bản này yêu cầu chế độ đồ họa và do đó không hoạt động trên TIO.

Đầu ra

Giá trị đầu vào cho bên dưới là n=7.

Đầu ra


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

Một số khác cũng là 115 byte:

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

Các mã màu tôi cần (trong RGBI 4 bit) là 5, 11, 9, 7. Điều này được tạo bằng !!J*8-J*2+5If J không phải là 0, đây là 13-J*2(cho 11,9,7) và nếu có, kết quả là chỉ 5

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.