Diberi nama kation dan anion, menghasilkan "S" (larut) atau "I" (tidak larut). Tabel yang akan kita gunakan adalah dari wikipedia: https://en.wikipedia.org/wiki/Solubility_chart . Itu disalin di akhir pertanyaan untuk referensi di masa depan.
Input : Kation, diikuti oleh anion, dipisahkan oleh spasi. Kation akan menjadi salah satu dari yang berikut:
Lithium Sodium Potassium Ammonium Beryllium Magnesium Calcium
Strontium Barium Zinc Iron(II) Copper(II) Aluminium Iron(III) Lead(II) Silver
dan anion akan menjadi salah satu dari yang berikut:
Fluoride Chloride Bromide Iodide Carbonate Chlorate Hydroxide Cyanide Cyanate
Thiocyanate Nitrate Oxide Phosphate Sulfate Dichromate
Masing-masing akan memiliki huruf pertama dikapitalisasi.
Input Contoh: Sodium Chloride
Output : Nilai kebenaran, atau S
, jika larut, falsey atau I
sebaliknya. Jika halaman wikipedia mencantumkan hal lain (misalnya sedikit larut, atau bereaksi dengan air) atau jika input tidak dalam bentuk "kation anion," program Anda dapat melakukan apa saja (perilaku tidak terdefinisi), sehingga dapat menghasilkan 'S', ' Aku, atau yang lainnya.
Meja:
?,S,S,S,?,S,S,S,?,S,S,?,I,S,S
S,S,S,S,S,S,S,S,S,S,S,?,S,S,S
S,S,S,S,S,S,S,S,S,S,S,?,S,S,S
S,S,S,S,S,S,S,S,?,S,S,?,S,S,S
S,S,S,?,?,?,?,?,?,?,S,?,?,S,?
?,S,S,S,I,S,I,?,?,?,S,I,I,S,I
I,S,S,S,I,S,?,S,?,?,S,?,I,?,I
?,S,S,S,I,S,S,?,?,?,S,?,?,I,?
?,S,S,S,I,S,S,S,?,?,S,?,?,I,?
?,S,S,S,I,S,I,I,?,?,S,I,I,S,I
S,S,S,S,I,S,I,?,?,?,S,I,I,S,I
?,S,S,?,I,S,I,?,?,I,S,I,I,S,I
S,S,S,?,?,S,I,?,?,?,S,I,I,S,I
?,S,S,?,?,S,I,?,?,?,S,I,I,?,I
?,?,?,I,I,S,I,?,?,?,S,I,I,I,?
S,I,I,I,I,S,?,I,I,?,S,?,I,?,I
Barisnya adalah kation dalam urutan yang tercantum di atas dan kolomnya adalah anion. Misalnya, karena Magnesium Iodide larut, dan Magnesium adalah kation ke-6 dan Iodide adalah anion ke-4, baris ke-6 dan ke-4 memiliki karakter 'S'. The ?
menunjukkan perilaku undefined.
sumber
?
s memberikan banyak kebebasan dalam algoritma apa yang dapat digunakan.kolmogorov-complexity
tag, tantangannya tidak meminta untuk menampilkan tabel, tetapi nilai yang benar untuk pasangan (kation, anion) yang diberikan.truthy
/'S'
ataufalsy
/'I'
?Jawaban:
JavaScript (Node.js) , 143 byte
Mengembalikan 1 untuk larut, 0 untuk tidak larut.
Cobalah online!
Bagaimana?
Konversi string input ke indeks pencarian
Kami pertama-tama membangun kunci dengan mengekstraksi karakter anion ke-2 dan ke-7 dan menambahkan dua karakter pertama dari kation:
Contoh:
Kami mengubahnya menjadi indeks pencarian dengan menguraikannya dalam basis-35 dan menerapkan modulo 1325 diikuti oleh modulo 508 (nilai-nilai kasar):
Kompresi dari tabel pencarian
Karena ada pasangan yang jauh lebih mudah larut daripada yang tidak larut , kami mengisi semua entri yang tidak digunakan dalam pencarian dengan larut .
Dengan mengkodekan terlarut dengan 1 dan tidak larut dengan 0 , tabel pencarian kami pada dasarnya terdiri dari string panjang 1 diikuti oleh 0 :
Kami mengompresnya dengan menyimpan panjang string 1 sebagai karakter ASCII dalam rentang [32-126] .
sumber
Ruby
-n
,969275706965 byteCobalah online!
Saya tidak terlalu pandai menghasilkan hash dan tabel pencarian, jadi alih-alih saya memilih untuk mengambil keuntungan dari semua wildcard tanda tanya itu untuk menyederhanakan struktur logis tabel, dan kemudian menerapkan sihir Regex murni.
Pembaruan : Penugasan yang diubah dari beberapa tanda tanya dan selanjutnya menyederhanakan logika pencocokan.
Pembaruan 2 : Hanya 2 bulan kemudian, saya telah datang dengan mengubah tabel lain untuk menghemat beberapa byte lagi.
Tabel yang akan kita hasilkan terlihat seperti ini:
Sekarang, senyawa berikut dapat dianggap larut:
ra
Nit ra te, Chlo ra te[SPm]o
Jadi dium, Po tassium, Am mo nium^[^C]*F
F luoride, tetapi bukan C alcium atau C opperh.*D
Lit h ium D ichromateDari senyawa yang tersisa, berikut ini tidak dapat larut:
Le
Iklan Le[MAIZ]i.*y
M agnesium, A luminium, saya ron (dan kation lain dengan biaya yang ditunjukkan), Z senyawa inc dengan blok anion yang mengandungy
(H y droxide-Thioc y anate)[OPDFbv]
O xide, P hosphate, D ichromate, F luoride, Car b onate, Sil v er[tr]i.*S
Stron ti um dan Ba ri um S ulfatesYang lainnya larut.
sumber
Python 2 ,
166161131 byteCobalah online!
sumber
Python 2 ,
180177151149147 byteCobalah online!
sumber
17*(b%91%61%17)%272
bisab%91%61%17*17%272
?Pascal (FPC) ,
387358353348341319297 byteCobalah online!
Penjelasan:
sumber
Jelly ,
67 61 60 50 4744 byteTautan monadik yang mengembalikan daftar yang kosong untuk
I
dan yang tidak kosong untukS
(dalam daftar kosong Jelly adalah falsey sedangkan yang non-kosong adalah benar).Cobalah online! (footer
”S”IÇ?
adalahif LastLink(x) is Truthy then "S" else "I"
)Atau lihat semua case yang diformat sebagai kisi yang cocok dengan urutan kisi di OP.
Bagaimana?
Setelah membuat set input yang harus
S
danI
dan mengevaluasi input ini sebagai basis sepuluh (Python:)dec=lambda s:sum(10**i*ord(c) for i, c in enumerate(s[::d]))
dan menggunakan beberapa loop nilai modulo-ing dan mengatur memeriksa hash yang digunakan di sini ditemukan.Integer kunci tidak larut dibuat dalam kode dengan mengevaluasi basis 250 integer yang dikodekan, mengubahnya menjadi basis
25 ... 16* ... 10 dan secara kumulatif menjumlahkan hasilnya ...* pengurangan basis dicapai dengan menambahkan beberapa kunci yang berlebihan
sumber