Dalam tantangan ini, saya memiliki bidang alpukat yang ingin saya jus secepat dan selengkap mungkin. Bisakah Anda menulis program atau fungsi untuk membantu saya mengetahui cara membuat jus semua alpukat dengan sempurna?
Sebagai input, Anda akan mendapatkan alpukat sebagai kisi m
x- m
kuadrat, di mana m
bilangan bulat antara 3 dan 6. Setiap kotak berisi persis satu alpukat. Alpukat memiliki beberapa tahap kesegaran:
Tahap 1: Alpukat belum dijus sama sekali.
Tahap 2: Alpukat telah dijus sebagian.
Tahap 3: Alpukat telah dijus sepenuhnya.
Tahap 4: Alpukat telah meledak karena terlalu banyak membuat jus.
Saat Anda menggunakan alat jus, alpukat di area efek alat jus itu bergerak ke tahap berikutnya. Alpukat yang meledak memiliki banyak kekuatan dan akan menghancurkan seluruh bidang alpukat, jadi pastikan tidak ada alpukat yang meledak!
Ini adalah contoh dari kotak alpukat. Dalam contoh-contoh ini, saya telah menggunakan koordinat 0,0
untuk sudut kiri bawah, dan koordinat 2,2
untuk sudut kanan atas, meskipun Anda dapat menyesuaikan sistem koordinat agar sesuai dengan bahasa Anda.
112
221
231
Tujuannya adalah untuk membuat semua alpukat dijus sempurna (yaitu tahap 3). Untuk mencapai ini, Anda memiliki tiga alat jus yang berbeda yang Anda miliki. Setiap alat membuat jus memiliki efek area yang berbeda, tetapi semuanya meningkatkan kesuburan alpukat yang terkena dampak sebesar 1.
Berikut ini semua alat yang Anda miliki. Anda menggunakan juicer dengan menentukan huruf pertama dari alat, lalu koordinat yang ingin Anda jus. Misalnya, untuk menggunakan Slicer di kotak 5,2
, Anda akan menampilkan S 5,2
.
Slicer : Membuat jus target koordinat dan alpukat di kedua sisi.
112 112 112
221 --> XXX --> 332
231 231 231
Grater : Jus target koordinat dan alpukat di atas dan di bawah.
112 1X2 122
221 --> 2X1 --> 231 --> kaboom!
231 2X1 241
Peluncur Roket : Membuat jus target koordinat dan semua alpukat yang berdekatan.
112 1X2 122
221 --> XXX --> 332
221 2X1 231
Input dan Output Sampel
323
212
323
G 1,1
S 1,1
3312
3121
1213
2133
R 0,0
R 1,1
R 2,2
R 3,3
22322
22222
22222
33233
33333
G 0,3
G 1,3
G 2,2
G 3,3
G 4,3
222332
333221
222332
333222
222333
333222
S 1,5
S 1,3
S 1,1
S 4,5
S 4,3
S 4,1
G 5,4
Jawaban:
Mathematica - 350 byte
Bukan solusi yang sangat singkat, tetapi lebih baik daripada tidak ada solusi sama sekali, kan?
Versi yang lebih mudah dibaca (dengan spasi tambahan dan indentasi serta hal-hal lain):
Input adalah array (mis.
{{3,2,3},{2,2,2},{3,2,3}}
), Output adalah string (dengan baris baru yang tertinggal - jika ini tidak dapat diterima, lampirkan fungsi dalamStringDrop[...,-1]
selama 15 byte tambahan). Saya menggunakan sistem koordinat yang mengatakan (1,1) adalah sudut kiri atas, (n, n) adalah kanan bawah (di mana n adalah dimensi dari matriks). Terkadang, jika solusinya mengharuskan melakukan operasi yang sama beberapa kali, hasilnya mencakup hal-hal seperti3 G 2,2
(untuk "menggunakan parutan di (2,2) tiga kali") - karena Anda tidak mengatakan apa yang harus dilakukan dalam kasus ini, saya harap tidak apa-apa.Penjelasan:
Table[G[i,j]+G[i-1,j]+G[i+1,j]+S[i,j]+S[i,j-1]+S[i,j+1]+R[i,j]+R[i-1,j]+R[i+1,j]+R[i,j-1]+R[i,j+1],{i,n=Length@#},{j,n}]
membuat array dengan variabel G [i, j] di setiap tempat yang terpengaruh dengan menggunakan parutan di (i, j), dan juga untuk S [i, j] dan R [i, j]. Variabel-variabel ini mewakili berapa kali alat digunakan pada posisi itu..../.(G|S|R)[___,0|n+1,___]->0
menghilangkan efek menggunakan alat di posisi di luar bidang alpukat....==3-#
membandingkan ini dengan perbedaan antara input dan bidang alpukat dijus sempurna....&&And@@t[#[i,j]>=0&]
kata variabel G [i, j], S [i, j], R [i, j] harus non-negatif (Anda tidak dapat menghapus jus avokad!), menggunakan stenot[x_]:=Flatten@Table[x/@{G,S,R},{i,n},{j,n}]
.First@Solve[...,t[#[i,j]&],Integers]
menemukan solusi integer pertama untuk persamaan kami dalam hal variabel G [i, j], S [i, j], R [i, j]./.{(x_->m_):>ToString[m x]}
menyembunyikan variabel yang sama dengan nol, sementara juga menempatkan solusi dalam bentuk string yang bagus.StringReplace[...,{"["->" ","]"->"\n",", "->","}]
mengubah string seperti"2 G[1, 4]"
menjadi string seperti"2 G 1,4"
, dan menambahkan baris baru di akhir.""<>Cases[...,Except@"0"]
menghapus semua sisa"0"
s dan menyatukan semua string.sumber