Chúc mừng sinh nhật, hãy ăn bánh nào!


12

Sắp đến sinh nhật bạn tôi và vì anh ấy là lập trình viên và người yêu nghệ thuật ASCII, tôi nghĩ tôi sẽ làm cho anh ấy một chiếc bánh ASCII!

Đáng buồn thay, tôi đã quên mất tuổi hiện tại của anh ấy, vì vậy tôi muốn có một chương trình cho lò nướng ASCII của mình, đó là nướng một chiếc bánh với một số nến được chỉ định, vì vậy tôi không phải tự làm lại nếu tôi sai với anh ấy tuổi tác.

Lò nướng ASCII chỉ có bộ nhớ và dung lượng lưu trữ hạn chế, vì vậy nó nên sử dụng ít byte nhất có thể .


Nhiệm vụ của bạn:

Viết chương trình xuất ra một chiếc bánh sinh nhật vào bàn điều khiển, với số lượng nến nhiều như đầu vào chỉ định.

Yêu cầu về bánh là:

  • Nó phải có đường viền, được xây dựng từ các đường ngang -và dọc |và các đỉnh +.
  • Toàn bộ 5 ký tự (bao gồm cả viền bánh |)
  • Cao nhất 5 ký tự (bao gồm cả viền bánh -)
  • Phải có một ký tự khoảng trắng giữa đường viền bánh và đế nến đầu tiên (không phải ngọn lửa), ở mỗi bên, trừ khi có một ngọn lửa trong không gian đó. Một ngọn lửa hoặc chân nến không thể chồng lên các đường viền bánh.
  • Chiều rộng tối đa của bánh là 9 ký tự, vì vậy có tối đa 5 nến mỗi hàng.
  • Vì chúng tôi không muốn bánh của chúng tôi là 2 chiều, nên nó phải cao thêm 2 hàng, để cho nó một khối lượng. Thêm đường viền khác ở phía dưới và kết nối các đỉnh với những người ở trên chúng, một lần nữa bằng cách sử dụng các ký tự ASCII từ trên cao ( -, |+).

Yêu cầu nến là:

  • Bao gồm các cơ sở |và ngọn lửa *, với ngọn lửa xếp chồng lên nhau trên cơ sở.
  • Nến có thể không liền kề với nhau, ngoại trừ đường chéo.
  • Nến được đặt từ trái sang phải, sau đó từ trên xuống dưới, tối đa 5 trong một dòng.
    (Lưu ý: Nếu có 5 nến ở hàng trước, hàng tiếp theo không thể có 5 nến, kể từ đó chúng sẽ liền kề nhau.)

Ghi chú bổ sung:

  • Chiều rộng bánh phụ thuộc vào số lượng nến ở hàng đầu tiên , nhưng nó phải có tối thiểu 5 ký tự và rộng tối đa 9 ký tự.
  • Những ngọn nến được lấp đầy bắt đầu từ hàng trên cùng, đi từ trái sang phải. Khi một hàng nếu đầy, hàng tiếp theo sẽ bắt đầu ở hàng bên dưới hàng đầu tiên.

Đầu vào:

Bạn có thể chấp nhận một số ở định dạng (hợp lý) mà bạn thích.

Đối với thử thách này, bạn có thể cho rằng con số nằm trong khoảng từ 0 đến 2 31 (không bao gồm 0), mặc dù tôi không thừa nhận ai đó đã già.

Đầu ra:

Bạn có thể trả về một chuỗi hoặc trực tiếp viết bánh kết quả vào bảng điều khiển đầu ra.

Quy tắc:

  • Sơ hở tiêu chuẩn bị cấm.
  • Đây là , vì vậy mã ngắn nhất tính bằng byte, trong bất kỳ ngôn ngữ nào, sẽ thắng.

Ví dụ:

Đầu vào: 8

+-----------+
| * * * * * |
| |*|*|*| | |
|  | | |    |
|           |
+-----------+
|           |
+-----------+

Đầu vào: 2

+-----+
| * * |
| | | |
|     |
+-----+
|     |
+-----+

Đầu vào: 12

+-----------+
| * * * * * |
| |*|*|*|*| |
| *|*|*| |  |
| | | |     |
|           |
+-----------+
|           |
+-----------+

Chúc may mắn!


Có thể có nhiều giải pháp hợp lệ cho một đầu vào?
chính thức tuyên bố

1
@officialaimm Vì có các thông số kỹ thuật cho việc đặt nến và kích thước bánh nên không thể thực hiện được.
Ian H.

2
Thực tế vô dụng: Nếu bạn tổ chức sinh nhật mỗi giây thay vì mỗi năm, thì 2 ^ 31 ~ = 68 tuổi. Nhưng điều đó làm cho rất nhiều bánh mỗi ngày và có thể trở nên tẻ nhạt sau một thời gian.
Arnauld

1
@Arnauld Nhưng sau đó 99% không phải là sinh nhật của bạn :( ... ngoại trừ nếu bạn đang ăn mừng sự thật chung rằng bạn được sinh ra.
Ian H.

3
@IanH. Hãy nói rằng bạn đang ăn mừng dấu thời gian khởi đầu của bạn. :-)
Arnauld

Câu trả lời:


10

Than , 76 71 70 66 46 byte

NθF=+B⁺³⌊⟦χ⁺θθ⟧÷⁺℅ι⁺θθ⁹↘↘Fθ«↑|*¶¶¿‹⁶﹪⁺ιι⁹«M⁹←↓

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Chỉnh sửa: Đã lưu 1 byte nhờ @ASCII_Only. Đã lưu 20 byte lớn bằng cách khám phá một cách gọn gàng để vẽ nến. Giải trình:

NθF=+B⁺³⌊⟦χ⁺θθ⟧÷⁺℅ι⁺θθ⁹

Tính kích thước của cả hai chiếc bánh bao gồm cả khối lượng thêm và chỉ phần trên cùng của bánh để chúng có thể được rút ra. (( == ASCII 61) = ( += ASCII 43) + 9 * 2 cho âm lượng bổ sung.)

↘↘Fθ«

Di chuyển con trỏ đến hàng đầu tiên của 5 ngọn nến. Vòng qua từng ngọn nến.

↑|*¶¶

In một cây nến và di chuyển đúng hai ký tự cho cây nến tiếp theo.

¿‹⁶﹪⁺ιι⁹«

Tuy nhiên, sau các nến thứ 4, 8, 13, 17, 22, v.v. (nằm ở cuối hàng),

M⁹←↓

di chuyển con trỏ đến cây nến đầu tiên trên hàng tiếp theo. Điều này hoạt động trên cả hàng lẻ và thậm chí hàng!


1
Giải pháp của bạn đặt một hàng phụ (không mong muốn) cho số đầu vào nhỏ hơn 6. :)
Ian H.

@IanH. Xin lỗi, tôi nghĩ rằng đó là chiều cao tối thiểu vì một số lý do. Sửa nó thực sự tiết kiệm cho tôi 4 byte!
Neil

Vẫn hiển thị sai trên TIO: /
Ian H.

1
@IanH. Hãy thử trực tuyến! cho tôi kết quả giống hệt với ví dụ của bạn ...
Neil

1
@Neil nhớ bạn không cần lúc bắt đầu: P (btw thanks cho việc tìm kiếm golfer khác (không-Somali) trường hợp cạnh)
ASCII chỉ

3

Thạch , 67 byte

s9s€5Ẏa;⁶;⁶z⁶Z
ç”|ṙ-ż"ç”*$U⁸RḤ’¤¦Ẏ€j@€“| “|”Zj@€⁾--Z”+®¦€0,1©¦;ṫ¥-Y

Một liên kết đơn âm lấy một số và trả về một danh sách các ký tự hoặc một chương trình đầy đủ in ra đầu ra.

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

Làm sao?

s9s€5Ẏa;⁶;⁶z⁶Z - Link 1, make some candle parts & topping: number, age; character, part
s9             - split (implicit range(age)) into chunks of 9 (or remainder)
  s€5          - split each chunk of 9 into chunks of 5 (a 5 and a 4 or remainder)
     Ẏ         - tighten (to a list of lists of length 5, 4, 5, 4, ..., remainder)
      a        - logical and with the part character (either | or * here)
       ;⁶      - concatenate a space (we all still want topping when no candles)
         ;⁶    - ...and another (we also want some extra topping below the last row)
           z⁶  - transpose with filler space (fill the top with topping!)
             Z - transpose (put it back around the right way again chef)

ç”|ṙ-ż"ç”*$U⁸RḤ’¤¦Ẏ€j@€“| “|”Zj@€⁾--Z”+®¦€0,1©¦;ṫ¥-Y - Main link: number, age
ç”|                                                  - call last link (1) as a dyad with '|'
   ṙ-                                                - rotate left by -1
          $                                          - last two links as a monad:
       ç”*                                           -   call (1) as a dyad with '*'
      "                                              - zip with the dyadic operation:
     ż                                               -   zip (interleave each)
                 ¦                                   - sparse application:
           U                                         - ...of: upend (reverse each)
                ¤                                    - ...to indexes: nilad+links as a nilad:
            ⁸                                        -   chain's left argument, age
             R                                       -   range
              Ḥ                                      -   double (vectorises)
               ’                                     -   increment
                  Ẏ€                                 - tighten €ach (from '|*' or '*|' pairs)
                       “| “|”                        - literal ["| ", "|"]
                    j@€                              - join (swap arguments) for €ach (add a little extra topping to the left, and add piping to the sides)
                             Z                       - transpose
                                 ⁾--                 - literal "--"
                              j@€                    - join (swap arguments) for €ach (add piping to the top and bottom edges)
                                    Z                - transpose (time to invest in a potters wheel!)
                                              ¦      - sparse application:
                                          0,1        - ...to indexes: [0,1] (both ends)
                                             ©       -   (copy that to the register)
                                         €           - ...of: for each:
                                        ¦            -   sparse application:
                                     ”+              -   ...of: '+' character
                                       ®             -   ...to indexes: recall from register (both ends)
                                                  -  - literal -1
                                                 ¥   - last two links as a dyad
                                                ṫ    -   tail from index (gets last two rows)
                                               ;     -   concatenate (repeats them underneath)
                                                   Y - join with newlines
                                                     - as a full program: implicit print

1
Holy +1 để đánh bại Char than
ASCII - chỉ

@ Chỉ ASCII Xin lỗi, tôi đã tìm thấy cách tiết kiệm 4 byte ...
Neil

@Neil cũng tốt, Char than được cho là giỏi về nghệ thuật ASCII (tốt hơn thạch) sau tất cả: P
ASCII - chỉ

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.