Manajemen persediaan Minecraft sulit. Anda memiliki 17 berlian, tetapi Anda perlu 7 untuk membuat meja pesona, beliung, dan pedang. Apakah Anda mengambilnya dan mengklik kanan 7 kali? Atau apakah Anda mengklik kanan sekali dan klik kanan dua kali dan mengambil 7 kiri? Sangat membingungkan!
Bagi Anda yang sekarang bingung, jangan khawatir, saya akan menjelaskan semuanya dalam sekejap
Tantangan
Mengingat ukuran tumpukan item dan jumlah yang diinginkan, tentukan jumlah klik paling sedikit untuk mendapatkan jumlah itu. Anda hanya perlu menangani hingga 64 untuk kedua input dan Anda mungkin menganggap Anda memiliki slot inventaris tak terbatas. Anda tidak dapat menggunakan trik seret untuk mendistribusikan.
Definisi
The persediaan adalah kumpulan slot di mana Anda dapat menyimpan barang-barang.
Sebuah Slot adalah ruang penyimpanan di inventaris Anda di mana Anda dapat menempatkan hingga satu jenis barang.
Sebuah tumpukan adalah jumlah item ditempatkan dalam kelompok yang sama. Untuk keperluan tantangan ini, tumpukan hanyalah sekelompok item di tempat yang sama (jadi abaikan ukuran tumpukan)
The kursor adalah thingy runcing Anda. Kursor itu. Itu dapat memiliki item "di atasnya"; dalam istilah lain, jika Anda mengklik slot dan mengambil item, item yang Anda ambil adalah "pada kursor" sampai Anda meletakkannya.
Spesifikasi
Ada empat kemungkinan situasi. Entah Anda memiliki item pada kursor atau tidak, dan Anda mengklik kiri atau mengklik kanan.
Jika Anda tidak memiliki item pada kursor Anda dan Anda mengklik kiri pada slot, Anda mengambil seluruh tumpukan.
Jika Anda tidak memiliki item pada kursor Anda dan Anda mengklik kanan slot, Anda mengambil setengah tumpukan, dibulatkan.
Jika Anda memiliki item pada kursor dan klik kiri pada slot, Anda menempatkan semua item ke dalam slot itu. (Untuk Anda semua pemain Minecraft, Anda tidak akan memiliki> 64 item untuk tantangan ini dan semuanya 64-stackable, dan Anda hanya memiliki satu jenis sehingga pertukaran item tidak berlaku di sini)
Jika Anda memiliki item pada kursor Anda dan Anda mengklik kanan slot, Anda menempatkan satu item ke slot itu.
Jadi, Anda mulai dengan semua item yang diberikan (input pertama, atau kedua; Anda dapat memilih urutan) dalam slot, dan Anda ingin menyelesaikan dengan memiliki jumlah yang diinginkan (input lain) di kursor Anda.
Mari kita jalankan melalui sebuah contoh. Katakanlah Anda mulai dengan 17 item dan Anda ingin 7. Pertama, Anda klik kanan pada tumpukan, yang berarti Anda telah mengambil 9 dan ada 8 di slot itu. Kemudian, jika Anda mengklik kanan tumpukan lagi, Anda menempatkan satu item kembali ke dalam slot, meninggalkan Anda dengan 8 dan slot dengan 9. Akhirnya, Anda klik kanan lagi dan Anda memiliki 7 dan slot memiliki 10. Jadi, Anda akan kembali 3
(jumlah klik).
Jika Anda berhasil meng-klik-golf saya, tolong beri tahu saya dan saya akan mengedit contoh: P
Uji Kasus
Ini dibuat secara manual, jadi tolong beri tahu saya jika ada kesalahan. Saya melakukan manajemen inventaris melalui klik kanan jitter sehingga saya tidak memiliki pengalaman dengan manajemen inventaris yang optimal: P
Given, Desired -> Output
17, 7 -> 3
64, 8 -> 5
63, 8 -> 5
10, 10 -> 1
10, 0 -> 0 # note this case
25, 17 -> 7
Penjelasan
Tantangan ini mungkin rumit untuk pemain non-Minecraft, saya tidak tahu. Berikut ini beberapa penjelasannya.
64, 8 -> 5
karena Anda mengambil 32 menggunakan klik kanan, letakkan, ambil 16, letakkan, lalu ambil 8.
63, 8 -> 5
untuk alasan yang sama.
25, 17 -> 7
karena Anda mengambil 13, meletakkannya, mengambil 6 dari sisa 12, menempatkan 2 kembali ke tumpukan sisa, dan kemudian menempatkan 4 di kursor ke dalam 13, dan kemudian mengambilnya.
Aturan
- Celah standar berlaku
- Anda mungkin menganggap itu
0 <= desired <= given <= 64
- Anda dapat mengambil input dalam urutan apa pun dan melakukan I / O dalam format apa pun yang wajar
0,[n]
, mungkin transisi: (1) dari0,[a,b,...]
kea,[b,...]
,b,[a,...]
,ceil(a/2),[floor(a/2),b,...]
, atauceil(b/2),[a,floor(b/2),...]
; atau (2) darix,[a,b,...]
(x>0
) kex-1,[a+1,b,...]
,x-1,[a,b+1,...]
,x-1,[a,b,...,1]
,0,[a+x,b,...]
,0,[a,b+x,...]
,0,[a,b,...,x]
. Tantangannya adalah untuk menemukan transisi seminimal mungkin dari0,[g]
mana g diberikan ket,L
manat
target yang diinginkan danL
apakah ada daftar?Jawaban:
C ++ ,
498482457 byteJika fungsi ini hanya dipanggil sekali, bisa 455 byte.
Saya menemukan bahwa hampir setiap kompiler GCC online (termasuk TIO) melarang saya untuk menghilangkan jenis fungsi
f
. Namun, GCC di komputer saya memungkinkan, dan saya tidak tahu mengapa.Yang ini dapat menangani input besar jika slot dapat berisi jumlah item (meskipun membutuhkan array yang lebih besar dan mungkin akan kehabisan waktu).
Tidak Disatukan:
sumber
Jelly , 74 byte
Program lengkap dengan input pertama (argumen ke-3) tumpukan saat ini dan input kedua (argumen ke-4) kursor yang diinginkan.
Cobalah online! Karena implementasinya, waktu TIO 60 detik habis untuk
25, 17
kasus uji. Ini dapat diatasi dengan menghapus redundansi yang tersisa untuk golf menggunakan byter 84 ini (yang menyaring tumpukan berukuran nol dan memilah yang tersisa denganḟ€Ṣ¥0¦€0
di akhir tautan 6 dan hanya menyimpan status unik pada setiap langkah dengan menggunakanQ$
di Main tautan).Bagaimana?
Program mengimplementasikan mesin negara yang ditentukan.
Itu menciptakan keadaan asli
[0, [argument 1]]
kemudian melangkah ke semua keadaan berikutnya yang mungkin berulang kali
sampai ditemukan yang cocok
[argument 2, [...]]
.Catatan: entri program ada di "Tautan utama" yang merupakan yang paling bawah (
Wṭ0WÇ€Ẏ$ÑпL’
)sumber