Dado el nombre de un catión y anión, salida "S" (soluble) o "I" (insoluble). La tabla que utilizaremos es de wikipedia: https://en.wikipedia.org/wiki/Solubility_chart . Se copia al final de la pregunta para referencia futura.
Entrada : El catión, seguido del anión, separado por un espacio. El catión será uno de los siguientes:
Lithium Sodium Potassium Ammonium Beryllium Magnesium Calcium
Strontium Barium Zinc Iron(II) Copper(II) Aluminium Iron(III) Lead(II) Silver
y el anión será uno de los siguientes:
Fluoride Chloride Bromide Iodide Carbonate Chlorate Hydroxide Cyanide Cyanate
Thiocyanate Nitrate Oxide Phosphate Sulfate Dichromate
Cada uno tendrá su primera letra en mayúscula.
Entrada de ejemplo: Sodium Chloride
Salida : un valor verdadero o S
, si es soluble, falsey o de I
otra manera. Si la página de wikipedia enumera cualquier otra cosa (por ejemplo, ligeramente soluble o reacciona con agua) o si la entrada no tiene la forma de "anión catiónico", su programa puede hacer cualquier cosa (comportamiento indefinido), por lo que puede generar 'S', ' Yo 'o cualquier otra cosa.
Mesa:
?,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
Las filas son cationes en el orden mencionado anteriormente y las columnas son aniones. Por ejemplo, dado que el yoduro de magnesio es soluble, y el magnesio era el sexto catión y el yoduro era el 4to anión, la 6ta fila y la 4ta columna tienen el carácter 'S'. El ?
indica comportamiento indefinido.
fuente
?
s da mucha libertad en los algoritmos que uno puede usar.kolmogorov-complexity
etiqueta, el desafío no pide generar la tabla, sino el valor correcto para un par dado (catión, anión).truthy
/'S'
ofalsy
/'I'
?Respuestas:
JavaScript (Node.js) , 143 bytes
Devuelve 1 para soluble, 0 para insoluble.
Pruébalo en línea!
¿Cómo?
Conversión de la cadena de entrada a un índice de búsqueda
Primero construimos una clave extrayendo los caracteres segundo a séptimo del anión y agregando los dos primeros caracteres del catión:
Ejemplos:
Convertimos esto en un índice de búsqueda analizándolo en base-35 y aplicando un módulo 1325 seguido de un módulo 508 (valores de fuerza bruta):
Compresión de la tabla de búsqueda.
Debido a que hay significativamente más pares solubles que insolubles , llenamos todas las entradas no utilizadas en la búsqueda con soluble .
Al codificar soluble con 1 e insoluble con 0 , nuestra tabla de búsqueda consiste esencialmente en largas cadenas de 1 seguidas de un 0 :
Lo comprimimos almacenando las longitudes de las cadenas de 1 como caracteres ASCII en el rango [32-126] .
fuente
Ruby
-n
,969275706965 bytesPruébalo en línea!
No soy muy bueno para generar hashes y tablas de búsqueda, por lo que opté por aprovechar todos esos comodines de signo de interrogación para simplificar la estructura lógica de la tabla y luego aplicar un poco de magia Regex pura.
Actualización : Alteración de la asignación de algunos signos de interrogación y simplificó aún más la lógica de la correspondencia.
Actualización 2 : solo 2 meses después, se me ocurrió otra actualización de la tabla para guardar algunos bytes más.
La tabla que vamos a producir se ve así:
Ahora, los siguientes compuestos pueden considerarse solubles:
ra
Nit ra te, Chlo ra te[SPm]o
Así dium, Po tassium, Am mo nium^[^C]*F
F luoruro, pero no C alcium o C opperh.*D
Lit h io D ichromateDe los compuestos restantes, los siguientes son insolubles:
Le
Le ad[MAIZ]i.*y
M agnesio, A luminio, I ron (y otros cationes con carga indicada), Z inc compuestos con bloque de aniones que contieney
(H y droxido de tioc y anato)[OPDFbv]
O xide, P hosfate, D icromate, F luoride, Car b onate, Sil v er[tr]i.*S
Stron ti um y Ba ri um S ulfatesTodo lo demás es soluble.
fuente
Python 2 ,
166161131 bytesPruébalo en línea!
fuente
Python 2 ,
180177151149147 bytesPruébalo en línea!
fuente
17*(b%91%61%17)%272
puede serb%91%61%17*17%272
?Pascal (FPC) ,
387358353348341319297 bytesPruébalo en línea!
Explicación:
fuente
Gelatina ,
67 61 60 50 4744 bytesUn enlace monádico que devuelve una lista que está vacía
I
y no vacíaS
(en Jelly las listas vacías son falsas, mientras que las no vacías son verdaderas).Pruébalo en línea! (pie de página
”S”IÇ?
esif LastLink(x) is Truthy then "S" else "I"
)O vea todos los casos formateados como una cuadrícula que coincida con el orden de la cuadrícula en el OP.
¿Cómo?
Después de crear conjuntos de entradas que deben ser
S
yI
evaluar estas entradas como base diez (Python:)dec=lambda s:sum(10**i*ord(c) for i, c in enumerate(s[::d]))
y utilizando algunos bucles de valores de modulación y comprobación de conjuntos, se encontró el hash utilizado aquí.Los enteros clave insolubles se crean en el código evaluando un entero codificado en base 250, convirtiéndolo en base
25 ... 16* ... 10 y sumando acumulativamente el resultado ...* las reducciones básicas se lograron agregando algunas claves redundantes
fuente