Thử thách Mùa Vọng 4: Dòng hội hiện tại!


12

<< Trước đó tiếp theo >>

Santa đã có thể tái sản xuất tất cả những món quà mà yêu tinh đã đánh cắp qua đêm! Bây giờ anh phải gửi chúng đến dây chuyền lắp ráp để đóng gói. Anh ta thường có một camera để giám sát dây chuyền lắp ráp để đảm bảo các yêu tinh đang làm tốt công việc và bởi vì hình ảnh của dây chuyền lắp ráp trông rất đẹp trên áp phích quảng cáo [cần dẫn nguồn]

Thật không may, máy ảnh của anh ấy đã bị hỏng, vì vậy anh ấy muốn bạn vẽ ra một mô phỏng về dây chuyền lắp ráp sẽ trông như thế nào!

Để giữ cho dây chuyền lắp ráp hoạt động với hiệu quả tối đa và giảm nguy cơ lỗi hoặc hỏng hóc, tất cả các hộp hiện tại đều có cùng chiều rộng để chúng khớp hoàn hảo trên băng chuyền.

Thử thách

Đưa ra một danh sách các món quà được đại diện bởi kích thước của chúng, xuất ra một băng chuyền với tất cả các món quà.

Một món quà được vẽ như vậy:

  +----+
 /    /|
+----+ |
|    | +
|    |/
+----+

Món quà này có chiều rộng 1, chiều cao 2 và chiều dài 4. Lưu ý rằng các dấu cộng không được tính cho chiều dài bên, vì vậy một món quà có chiều dài 4 thực sự kéo dài 6 vị trí.

Tất cả các món quà được vẽ cạnh nhau với một khoảng trống giữa hai ký tự gần nhất; nghĩa là, các góc dưới cùng bên trái của các món quà được đặt cách nhau sao cho nếu hộp hiện tại có chiều dài lvà chiều rộng w, góc dưới bên trái của hộp hiện tại sẽ chính xác là l + w + 4các vị trí bên phải của góc dưới bên trái của hộp trước.

Sau khi tất cả các hộp hiện tại được rút ra, băng chuyền được rút ra bằng cách thay thế khoảng trống giữa các hộp trên mỗi width + 2dòng cuối cùng bằng dấu gạch dưới.

Kết quả cuối cùng cho các hộp có mặt với (l, w, h)các [(4, 1, 2), (8, 1, 3), (1, 1, 1)]sẽ là:

           +--------+
  +----+  /        /|
 /    /| +--------+ |   +-+
+----+ | |        | |  / /|
|    | +_|        | +_+-+ +
|    |/__|        |/__| |/
+----+___+--------+___+-+

Định dạng thông số kỹ thuật

Bạn có thể chọn một danh sách gồm 3 bộ dữ liệu trong đó một trong các thành phần nhất quán trên toàn bộ danh sách (đó sẽ là chiều rộng) hoặc bạn có thể lấy chiều rộng hiện tại và sau đó là danh sách 2 bộ dữ liệu biểu thị độ dài và chiều cao của mỗi món quà. Bạn có thể lấy các đầu vào theo bất kỳ thứ tự nào và ở bất kỳ định dạng hợp lý nào, nhưng các món quà phải được hiển thị theo cùng thứ tự mà chúng được đưa ra làm đầu vào.

Bạn có thể chọn bất kỳ định dạng đầu ra hợp lý nào cho nghệ thuật ASCII (bao gồm cả việc trả về từ một hàm).

Các trường hợp thử nghiệm

Những trường hợp thử nghiệm được đưa ra như [(l, w, h), ...]định dạng.

[(4, 1, 2), (8, 1, 3), (1, 1, 1)]:

           +--------+
  +----+  /        /|
 /    /| +--------+ |   +-+
+----+ | |        | |  / /|
|    | +_|        | +_+-+ +
|    |/__|        |/__| |/
+----+___+--------+___+-+

[(5, 3, 4), (8, 3, 1), (1, 3, 7)]:

                               +-+
                              / /|
                             / / |
    +-----+                 / /  |
   /     /|                +-+   |
  /     / |                | |   |
 /     /  |     +--------+ | |   |
+-----+   |    /        /| | |   |
|     |   +___/        / +_| |   +
|     |  /___/        / /__| |  /
|     | /___+--------+ /___| | /
|     |/____|        |/____| |/
+-----+_____+--------+_____+-+

[(0, 0, 0)] (this is the most interesting test case ever :P)

 ++
+++
++

[(8, 3, 0), (0, 3, 8)] (more zero cases)

                   ++
                  //|
                 // |
                //  |
               ++   |
               ||   |
               ||   |
               ||   |
    +--------+ ||   |
   /        /+_||   +
  /        //__||  /
 /        //___|| /
+--------+/____||/
+--------+_____++

Quy tắc

  • Áp dụng sơ hở tiêu chuẩn
  • Đây là , vì vậy câu trả lời ngắn nhất bằng byte sẽ thắng
  • Không có câu trả lời sẽ được chấp nhận

Lưu ý: Tôi đã lấy cảm hứng cho loạt thử thách này từ Advent Of Code . Tôi không có liên kết với trang web này

Bạn có thể xem danh sách tất cả các thử thách trong chuỗi bằng cách xem phần 'Liên kết' của thử thách đầu tiên tại đây .


@AdmBorkBork tất cả các hộp hiện tại có cùng chiều rộng
Erik the Outgolfer 4/12/17

1
Nếu Char than không phá hỏng thứ này, tôi không biết điều gì sẽ xảy ra.
hoàn toàn là

@totallyhuman thực sự, brainf ** k sẽ chiến thắng thử thách này: P
HyperNeutrino

Bạn có thể tạo một bài đăng trên meta để lập chỉ mục tất cả những câu hỏi này không?
RamenChef

@RamenChef H'm ý tốt. Tôi có thể làm điều đó: P
HyperNeutrino

Câu trả lời:


4

Than , 96 81 byte

NθWS«→FυG↗→↙⁺²θ_≔I⪪ι υ≔⊟υπ≔§υ⁰ρ→↗G↑⊕π↗⊕θ→⊕ρ↓⊕π↙⊕θ ↑πP↗⊕θP←⊕ρ↓+↓πF²«↷⁴+ρ↷²+π↷¹+θ↶³

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Đầu vào là chiều rộng trên dòng đầu tiên, sau đó là các kích thước khác trên các dòng sau, kết thúc bằng một dòng trống. Giải trình:

Nθ

Nhập chiều rộng.

WS«

Lặp lại các dòng còn lại cho đến khi đạt được dòng trống.

→FυG↗→↙⁺²θ_

Vẽ vành đai giữa các món quà. Các ubiến được xác định trước vào một danh sách rỗng, mà do đó không có gì trên đèo đầu tiên, trong khi sau này nó kết thúc với một yếu tố duy nhất, gây ra mã này để chạy một lần. (Sử dụng một ifsẽ ít golf hơn.)

≔I⪪ι υ

Chia kích thước tại không gian, chuyển chúng thành số nguyên và lưu chúng vào u.

≔⊟υπ

Loại bỏ kích thước cuối cùng và lưu nó vào p.

≔§υ⁰ρ

Sao chép kích thước đầu tiên sang r, nhưng để nó vàou để vành đai được rút ra ở vòng tiếp theo.

→↗G↑⊕π↗⊕θ→⊕ρ↓⊕π↙⊕θ 

Xóa nội thất của hiện tại, trong trường hợp vành đai chồng lên nó.

↑πP↗⊕θP←⊕ρ↓+↓π

Vẽ các đường nội thất của hiện tại.

F²«↷⁴+ρ↷²+π↷¹+θ↶³

Vẽ một nửa xung quanh bên ngoài của hiện tại, sau đó lặp lại cho nửa kia.


1

Pip , 160 154 byte

153 byte mã, +1 cho -lcờ.

{YMX:_+B+3MUaRV$.({UwhlWg+^11{a<=h+w?J[sXa-haN[0hh+w]?'-XlWR'+sXlWR("/|"a<h)RV(("+|/"aCMw).sXw)@<MN[ah+w-awh]'_Xw-a+1|s]sXl+w+3}M,y}MUa)R`_ +`'_X#_<|:'_}

Đây là một chức năng có một danh sách các danh sách có chứa [width height length]. Hãy thử trực tuyến!

Làm sao?

Giải thích cấp cao nhất:

  • Xác định hàm trả về danh sách các dòng đại diện cho một hộp
  • Ánh xạ hàm đến từng danh sách các kích thước đã cho
  • Nối các danh sách kết quả của các mục hàng khôn ngoan
  • Thực hiện một chút xử lý hậu kỳ với các thay thế regex để làm cho các dấu gạch dưới hoạt động đúng

Để lại một bình luận và tôi sẽ thêm một lời giải thích chi tiết hơn.


0

Python 2 , 508 byte

def f(B):
 d=B[0][1]+2;H=max(B)[0]+d+1;W=sum(sum(b[1:])+3for b in B)+len(B);r=[[' ']*i+W*['_']for i in range(d)]+[W*[' ']for _ in' '*H];o=0
 for h,w,l in B:
	for i in range(w+2,1,-1):r[i-1][o+i-2:o+l+i]=[' ']*(l+2)+['/'];r[h+i][o+i-1]=r[h+i][o+l+i]='/'
	r[0][o:o+l+2]=r[h+1][o:o+l+2]=r[w+h+2][o+w+1:o+w+l+3]=['+']+['-']*l+['+']
	for i in range(1,h+1):m=min(i,w)-1;r[i][o:o+l+2+m]=['|']+[' ']*l+['|']+[' ']*m;r[i+w+1][o+l+w+2]='|'
	r[w+1][o+l+w+2]='+';o+=l+w+4
 for l in r[H-1::-1]:print''.join(l).rstrip('_')

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

Có một danh sách các danh sách [height, width, length]

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.