Bangun suar

8

Dalam gim video Minecraft, Anda dapat memperoleh suar dan meletakkannya pada struktur seperti piramida untuk memberi Anda efek khusus, seperti kecepatan atau lompatan boost.

Tugas Anda adalah, memberikan efek, membangun piramida suar yang diperlukan untuk itu.

Ada beberapa ukuran piramida suar, yang diperlukan untuk efek yang berbeda. Yang terbesar memiliki 9basis ukuran , dan yang terkecil memiliki 3basis ukuran .

Ini adalah efek yang bisa Anda dapatkan, dan piramida yang diperlukan untuk mereka (sebagaimana ditentukan oleh wiki resmi Minecraft:

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

Beacon dibangun dengan pangkalan di bagian bawah, kemudian naik, mengurangi ukurannya menjadi 2. Setelah kita menekan 1, harus ada suar +di bagian atas.

Suar didefinisikan sebagai +, tetapi membutuhkan piramida pendukung untuk bekerja.

Anda dapat mengasumsikan input tersebut valid (yaitu, itu adalah salah satu efek yang ditentukan di sini), dan, opsional, Anda dapat menganggap input semuanya huruf kecil. The #karakter harus digunakan dalam piramida, dan +sebagai beacon.

Contoh:

Haste I
 +
###

Resistance I
  +
 ###
#####

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

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

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

Anda juga harus mengambil beberapa efek karena piramida suar dapat berbagi blok - namun, satu suar tidak dapat melakukan lebih dari satu efek. Anda harus menggunakan blok minimal.

Saat mengambil beberapa efek, Anda dapat menggunakan format input yang masuk akal seperti daftar, baris baru dipisahkan, dll. Selain itu, Anda dapat mengambil daftar tunggal untuk suar tunggal jika Anda menggunakan daftar.

Untuk contoh-contoh ini, saya hanya mendaftar satu solusi yang mungkin, tetapi ada beberapa solusi yang dapat diterima.

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
   ++
  ####
 ######
########

(jangan tampilkan hal-hal dalam kurung, jika itu tidak cukup jelas)

Okx
sumber
Tampaknya sebagian besar tantangan ini adalah tentang penggabungan piramida, tetapi Anda tidak menggambarkan aturan untuk melakukannya (jika mereka dapat "berbagi" blok, mengapa kita tidak bisa hanya mengeluarkan yang lebih besar?). (Juga Anda mengatakan kami "boleh" mengambil banyak, ketika saya pikir maksud Anda "harus bisa")
Jonathan Allan
@ JonathanAllan Klarifikasi.
Okx
Tidak, saya masih tidak tahu aturan untuk menggabungkan ...
Jonathan Allan
@ Jonathanathan Allan Saya mengatakan bahwa satu suar tidak dapat melakukan lebih dari satu efek. Apakah itu tidak cukup jelas?
Okx
3
Ketika saya pertama kali melihat ini, saya pikir itu akan sepele, dan kemudian saya melihat bagian tentang memiliki beberapa efek suar. : P
HyperNeutrino

Jawaban:

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]))

Cobalah online!

Fungsi untuk mencetak string dengan struktur piramida adalah b, yang disebut dengan daftar efek sebagai argumen tunggal.

Ini ternyata lebih lama dari yang saya harapkan, tetapi saya setidaknya senang bahwa saya dapat menemukan ukuran suar berdasarkan ilmu hitam.

Sunting: mampu mengurangi jumlah byte secara signifikan dengan menggabungkan fungsi pengurangan menjadi fungsi lambdaberkat Python 2 cmp.

notjagan
sumber
4
Bagus sekali dengan ilmu hitam Anda;)
Okx
7

Arang , 75 71 60 54 48 byte

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

Cobalah online!

Jawaban Python juga milik saya, tetapi saya ingin mencoba pengiriman golf pertama saya di Charcoal!

Saya juga ingin memastikan saya bisa menahan karunia itu;)

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

Semua nama suar dengan panjang yang sama berbagi tingkat suar. Dengan demikian, kita dapat menentukan tingkat suar efek dari memetakan panjang (minus 7 untuk mendasarkannya pada nol) ke angka dalam string "14034244" (ada 0 untuk kejelasan karena panjang 9 tidak sesuai dengan efek ). Ide yang sama digunakan dalam jawaban Python saya, tetapi dengan sedikit bergeser untuk menghasilkan angka 0-3.

notjagan
sumber
1
Terima kasih telah menggunakan Arang! Juga, saya akan merekomendasikan menambahkan -abendera untuk mencetak AST jika Anda ingin semacam penjelasan di tautan TIO juga
ASCII-satunya
1
Juga, 48 byte , dari mengubah input ke variabel ke operator input nilary
ASCII-only
1
Catatan, saya akan segera memperbarui sehingga WS⊞υI§14034244⁻Lι⁷F▷sυ«G→→↖⁺ι¹#¦+Mι↙akan valid jadi perlu diingat bahwa υdan ▷sakan menjadi baru
hanya ASCII
Terima kasih banyak atas tipsnya! Saya berharap untuk bermain golf lebih banyak di Charcoal: D
notjagan
2

Jelly , 68 byte

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

Cobalah online!

Saya pikir alasan ini lebih lama dari jawaban Arang (meskipun saya bisa melakukan 'ilmu hitam' saya dalam 10 byte) karena Charcoal dibuat untuk menggambar dua dimensi. Saya berakhir tergantung pada otomat seluler 2D untuk menemukan posisi #s diberi posisi +s untuk membuat segitiga.

Cara Kerja (pemisahan tautan utama agar mudah dibaca)

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.
fireflame241
sumber