Xây dựng đèn hiệu


8

Trong trò chơi điện tử Minecraft, bạn có thể lấy đèn hiệu và đặt chúng lên các cấu trúc giống như kim tự tháp để cung cấp cho bạn các hiệu ứng đặc biệt, chẳng hạn như tốc độ hoặc tăng tốc nhảy.

Nhiệm vụ của bạn là, đưa ra một hiệu ứng, xây dựng kim tự tháp đèn hiệu cần thiết cho nó.

Có nhiều kích cỡ của kim tự tháp đèn hiệu, cần thiết cho các hiệu ứng khác nhau. Cái lớn nhất có một cái 9đế kích thước , và cái nhỏ nhất có cái 3đế kích thước .

Đây là những hiệu ứng bạn có thể nhận được và kim tự tháp cần thiết cho chúng (như được chỉ định bởi wiki Minecraft chính thức:

3:
  Speed I
  Haste I
5:
  Resistance I
  Jump Boost I
7:
  Strength I
9:
  Regeneration I
  Resistance II
  Jump Boost II
  Speed II
  Haste II
  Strength II

Đèn hiệu được xây dựng với đế ở phía dưới, sau đó nó tăng lên, giảm kích thước xuống 2. Khi chúng ta nhấn 1, cần có đèn hiệu +ở trên cùng.

Đèn hiệu được định nghĩa là a +, nhưng nó cần một kim tự tháp hỗ trợ để hoạt động.

Bạn có thể cho rằng đầu vào là hợp lệ (nghĩa là, đó là một trong những hiệu ứng được chỉ định ở đây) và, tùy ý, bạn có thể cho rằng đầu vào là chữ thường. Nhân #vật nên được sử dụng trong kim tự tháp, và +như đèn hiệu.

Ví dụ:

Haste I
 +
###

Resistance I
  +
 ###
#####

Strength I
   +
  ###
 #####
#######

Regeneration I
    +
   ###
  #####
 #######
#########

Speed II
    +
   ###
  #####
 #######
#########

Bạn cũng phải thực hiện nhiều hiệu ứng vì các kim tự tháp có thể chia sẻ các khối - tuy nhiên, một đèn hiệu không thể thực hiện nhiều hơn một hiệu ứng. Bạn phải sử dụng các khối tối thiểu.

Khi thực hiện nhiều hiệu ứng, bạn có thể sử dụng bất kỳ định dạng đầu vào hợp lý nào như danh sách, dòng mới được phân tách, v.v. Ngoài ra, bạn có thể lấy danh sách đơn cho các đèn hiệu nếu bạn đang sử dụng danh sách.

Đối với những ví dụ này, tôi chỉ liệt kê một giải pháp có thể, nhưng có nhiều giải pháp chấp nhận được.

Speed I, Haste II
    ++
   ####
  #####
 #######
#########
(another acceptable solution is the following,
these are both valid as they use the same amount of blocks)
    +
   ###
  #####
 #######+
##########
(the following is not valid for the same input; it doesn't use minimal blocks)
    +
   ###
  #####           +
 #######         ###
#########

Strength I, Strength I
   ++
  ####
 ######
########

(không xuất ra những thứ trong ngoặc, nếu điều đó không đủ rõ ràng)


Có vẻ như hầu hết thử thách này là về sự kết hợp của các kim tự tháp, nhưng bạn không mô tả các quy tắc để làm như vậy (nếu chúng có thể "chia sẻ" các khối, tại sao chúng ta không thể chỉ tạo ra khối lớn hơn?). (Ngoài ra, bạn nói rằng chúng tôi "có thể" lấy nhiều, khi tôi nghĩ bạn có nghĩa là "phải có khả năng")
Jonathan Allan

@Jonathan ALLan Làm rõ.
Okx

Không, tôi vẫn không biết quy tắc kết hợp ...
Jonathan Allan

@Jonathan ALLan Tôi đã nói rằng một đèn hiệu không thể làm nhiều hơn một hiệu ứng. Điều đó không đủ rõ ràng?
Okx

3
Khi tôi lần đầu tiên nhìn vào điều này, tôi nghĩ rằng nó sẽ tầm thường, và sau đó tôi thấy phần về việc có nhiều hiệu ứng đèn hiệu. : P
HyperNeutrino

Câu trả lời:


9

Python 2 , 216 195 byte

def b(e):s=sorted(63372>>len(_)*2-14&3for _ in e)[::-1];f=s[0]+2;r=range(f);print"\n".join(reduce(lambda p,n:[p[i]+"+# "[cmp(i,f-n-2)]for i in r],s[1:],[" "*(f-i-1)+"+#"[i>0]*(2*i+1)for i in r]))

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

Hàm để in chuỗi có cấu trúc kim tự tháp là b, được gọi với một danh sách các hiệu ứng như là đối số duy nhất của nó.

Điều này hóa ra lâu hơn tôi mong đợi, nhưng ít nhất tôi rất vui khi tôi có thể tìm thấy kích thước đèn hiệu dựa trên ma thuật đen.

Chỉnh sửa: đã có thể giảm đáng kể số byte bằng cách kết hợp chức năng giảm thành lambdanhờ vào cmpchức năng của Python 2 .



7

Than , 75 71 60 54 48 byte

A⟦⟧βWS⊞βI§14034244⁻Lι⁷FUPsorted⟦β⟧«G→→↖⁺ι¹#¦+Mι↙

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

Câu trả lời Python cũng là của tôi, nhưng tôi muốn thử bài nộp golf đầu tiên của mình ở Char than!

Tôi cũng muốn đảm bảo rằng tôi có thể giữ tiền thưởng đó;)

A⟦⟧β                        assign an empty list to β
WS                         while the next string input ι is truthy: (aka while the input is not an empty line)
    ⊞βI§14034244⁻Lι⁷       push level for ι into β (explained below)
FUPsorted⟦β⟧«             for each level ι in the sorted version of β:
    G→→↖⁺ι¹#                draw a triangle of "#"s with side lengths ι + 1
    ¦+                       draw a "+" (already on top vertex)
    Mι↙                     move down and left by ι cells (preparation for next level)
                             implicit end of for

Tất cả các tên đèn hiệu có cùng độ dài đều có chung cấp độ đèn hiệu. Như vậy, chúng ta có thể xác định mức đèn hiệu của hiệu ứng từ ánh xạ độ dài (trừ 7 đến căn cứ bằng 0) đến các số trong chuỗi "14034244" (có 0 cho rõ ràng vì độ dài 9 không tương ứng với hiệu ứng ). Ý tưởng tương tự này được sử dụng trong câu trả lời Python của tôi, nhưng với sự dịch chuyển bit để tạo ra các số 0-3.


1
Cảm ơn bạn đã sử dụng Than! Ngoài ra, tôi cũng khuyên bạn nên thêm -acờ để in AST nếu bạn muốn có một loại giải thích trong liên kết TIO
ASCII - chỉ

1
Ngoài ra, 48 byte , từ việc thay đổi đầu vào thành biến thành toán tử nilary đầu vào
ASCII - chỉ

1
Lưu ý, tôi sẽ cập nhật sớm nên WS⊞υI§14034244⁻Lι⁷F▷sυ«G→→↖⁺ι¹#¦+Mι↙sẽ hợp lệ vì vậy hãy nhớ rằng υ▷ssẽ mới
ASCII - chỉ

Cảm ơn bạn rất nhiều vì những lời khuyên! Tôi mong muốn được chơi gôn nhiều hơn trong
Char

2

Thạch , 68 byte

FṀ‘
0;Ṗ
|Ç€|Ḋ€Ç|
⁽lƑb4‘ị@L€ṢµI‘ż@IṚṭṀṭ0Fs2+\µḅÑ‘Ṭ;0sѵ+ÇÐLị“#+ ”Y;”#

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

Tôi nghĩ lý do này dài hơn câu trả lời của Char than (mặc dù tôi đã có thể thực hiện 'ma thuật đen' của mình trong 10 byte) là vì Char than được chế tạo để vẽ hai chiều. Tôi đã kết thúc tùy thuộc vào một máy tự động di động 2D để tìm vị trí của #s cho các vị trí của +s để tạo ra các hình tam giác.

Cách thức hoạt động (phân chia liên kết chính để dễ đọc)

FṀ‘
0;Ṗ
|Ç€|Ḋ€Ç|
⁽lƑb4‘ị@L€ṢµI‘ż@IṚṭṀṭ0Fs2+\µḅÑ‘Ṭ;0sѵ+ÇÐLị“#+ ”Y;”# - Main link, input is list of strings
⁽lƑb4‘ị@L€Ṣ     - list of strings to list of heights (1,2,3,4)
⁽lƑ               - the number 28147
   b4‘            - base 4 and incremented: [2, 3, 4, 2, 4, 4, 1, 4]
        L€        - lengths of each input string
      ị@          - index into the list to get a list of heights
          Ṣµ      - sort and store for the next link:
I‘ż@IṚṭṀṭ0Fs2+\ - get list of coordinates for `+`s
I‘ż@I             - [0,1] between each element. Add [1,1]*n between each pair of elements with difference n
     Ṛ            - Reverse
      ṭṀṭ0        - prepend [0,maximum]
          Fs2     - format the array as a list of coordinate pairs
             +\   - cumulative sum
ḅÑ‘Ṭ;0sÑ        - convert to binary rectangular matrix:
ḅÑ‘               - change each coordinate pair (y,x) to y*width+x (Ñ is the width)
   Ṭ              - boolean array with 1s at the above indices
    ;0            - append a zero for formatting reasons
      sÑ          - split into rows of the right width
µ+ÇÐL           - add locations of `#`s:  the matrix now has 2s at future `+`s, 1s at `#`s, and `0`s at spaces
  ÇÐL             - repeatedly apply a step of the cellular automoton: 1s at `#`s and `+`s, and 0s at space
µ+                - add this to the matrix of `+`s which has 1s at `+`s.
ị“#+ ”Y;”#      - format into a string
ị“#+ ”            - index into the string "#+ ".
      Y           - join by newlines.
       ;”#        - append a `#` character to finish up the formatting.
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.