Saya seorang penyihir muda, dan saya berusaha sangat keras untuk tidak menyia-nyiakan mana selama pertemuan magis saya.
Saya memiliki mantra X yang tersedia pada waktu tertentu dan masing-masing dari mereka memiliki biaya mana sendiri Y.
X, Y menjadi bilangan bulat positif benar-benar lebih rendah dari 11.
Sebagai pemula, kumpulan mana saya berfluktuasi banyak (selalu lebih rendah dari 11) , dan saya butuh bantuan untuk melemparkan mantra sesedikit mungkin (gulungan mahal, ya tahu) sambil mengosongkan kolam mana saya. Jika Anda tidak dapat menemukan kombinasi mantra yang sama persis dengan ukuran mana kolam renang saya, Anda harus menawari saya yang terdekat (dan lebih murah).
Saya datang kepada Anda dan kebijaksanaan Anda yang tak terbatas untuk membantu saya menjadi penyihir hitam terhebat. Saya tidak akan kecewa.
INPUT style (karena style adalah segalanya):
Y; abcdef
Y adalah ukuran pool mana. (a, b, c, d, e, f) adalah mantra. Ada 6 mantra, yang pertama biaya 'a' mana, biaya mantra kedua 'b' mana, dll.
INPUT: 4; 1 2 3 3 7 6
Saya memiliki 4 manas tersedia, dan 6 mantra tersedia. Dua mantra biaya 1 mana, 1 mantra biaya 2 mana, dua mantra biaya 3 mana, dll.
OUTPUT: (3,1)
INPUT: 3; 1 3 5 2 10
OUTPUT: (3)
INPUT: 8; 4 1 9
OUTPUT: (4,1)
INPUT: 4; 1 2 2 3
OUTPUT: (2,2), (1,3)
Anda harus mengeluarkan setiap kombinasi mantra, tetapi tidak perlu mantra yang berbeda yang harganya sama.
Mantra terpendek untuk mesin apa pun yang Anda inginkan akan diberikan banyak terima kasih, dan cambuk takdir.
Jawaban:
GolfScript, 55 karakter
Cobalah online .
sumber
APL (87)
Format input adalah daftar APL, di mana elemen pertama adalah kolam mana dan sisanya elemen adalah mantra. Output memiliki masing-masing kemungkinan kombinasi mantra pada baris yang terpisah.
Penjelasan:
k←1↓i←⎕
: baca daftar dari input, dan simpan dii
. Letakkan elemen pertama (mana) dan simpan sisanya dik
.1↓g←⍳⍴k
: buat daftar dari1
hingga panjangk
, dan simpan dig
. Jatuhkan elemen pertama, memberi[2..len k]
.{
...}¨
: Untuk masing-masingnya, dapatkan indeks dari setiap kombinasi unik dengank
panjang⍵
:z←,⍳⍵/⍴k
: dapatkan⍵
matriks -dimensi indeks panjangk
, ratakan, dan simpan diz
.∧/¨2>/¨
: untuk setiap koordinat dalam setiap indeks, lihat apakah semua koordinat untukN
dimensi th lebih tinggi daripada koordinat untuk dimensiN-1
th.z/⍨
: pilih dariz
elemen-elemen yang benar di atas⊃,/g,
: karena di atas tidak berfungsi untuk vektor satu dimensi, tambahkang
ke depan. Kami sekarang memiliki daftar daftar daftar (karena foreach) dari semua indeks unikk
. Gabungkan daftar bersama-sama dan lepaskan (jadi kita berakhir dengan daftar daftar).{
...}¨
: untuk setiap daftar koordinat yang mungkin, cari kombinasi nilai yang sesuaik
, dan filter yang terlalu mahal:a←k[⍵]
: cari kombinasi saat ini dik
dan simpan dia
.a/⍨⊃i≥+/a
: piliha
hanya jika item pertama dalami
(kumpulan mana) sama dengan atau lebih besar dari jumlah elemena
.m←
: menyimpan semua kombinasi mantra yang tidak melebihi batas mana dalamm
.m←m/⍨t=⌈/t←+/¨m
: pilihm
hanya dari kombinasi yang jumlahnya sama dengan jumlah kombinasi paling mahal, dan simpanm
kembali.m/⍨t=⌊/t←⊃∘⍴¨m
: pilihm
hanya dari kombinasi yang panjangnya sama dengan panjang kombinasi terpendek.↑∪
: hapus duplikat, dan konversikan ke matriks (untuk menampilkan setiap kombinasi pada baris terpisah).sumber
Rubi,
114113 karakterInput: array dua elemen dari mana wizard dan daftar ejaan, memformat JSON satu baris.
Output: array 2D dari daftar ejaan, diformat sebagai JSON satu baris, atau
nil
jika wizard tidak dapat membuat mantra.Saya terutama cinta
x,y = eval gets
. Begitu berbahaya dan jahat, namun begitu kuat dan sederhana. Sempurna untuk bermain golf.Keduanya
sort
danuniq
perlu. Jika tidak, ini akan menghasilkan duplikat untuk input seperti[4, [1, 3, 1]]
. Saya tidak senang dengan hal ini.find
adalah metode yang berguna untuk aliran kontrol. Nilai kembalinya tidak berguna di sini. Panjang-bijaksana, itu setara denganany?
, yang mengembalikan nilai bahkan kurang bermanfaat.Contoh:
sumber
map
bukanfind
? Juga,,.reduce(:+)
tidak&
diperlukanmap
tidak berhenti pada hasil positif pertama. Itu akan mencetak semua kemungkinan, dikelompokkan berdasarkan biaya dan ukuran mana. Terima kasih atas saran kedua.Haskell (GHC),
172 167143 karakterDeobfuscated:
[4,1,2,3,3,7,6]
).Solusi mudah: ambil rangkaian input, lalu kurangi dengan memfilter kombinasi yang memiliki cukup untuk mana, dll.
sumber
Mathematica 131
Pasti ada cara yang lebih pendek, tapi ini yang bisa saya lakukan.
sumber