Compte tenu du nom d'un cation et d'un anion, sortie "S" (soluble) ou "I" (insoluble). Le tableau que nous utiliserons provient de wikipedia: https://en.wikipedia.org/wiki/Solubility_chart . Il est copié à la fin de la question pour référence future.
Entrée : Le cation, suivi de l'anion, séparé par un espace. Le cation sera l'un des suivants:
Lithium Sodium Potassium Ammonium Beryllium Magnesium Calcium
Strontium Barium Zinc Iron(II) Copper(II) Aluminium Iron(III) Lead(II) Silver
et l'anion sera l'un des suivants:
Fluoride Chloride Bromide Iodide Carbonate Chlorate Hydroxide Cyanide Cyanate
Thiocyanate Nitrate Oxide Phosphate Sulfate Dichromate
Chacun aura sa première lettre en majuscule.
Exemple d'entrée: Sodium Chloride
Sortie : une valeur véridique, ou S
, si elle est soluble, falsey ou I
autre. Si la page wikipedia répertorie autre chose (par exemple, légèrement soluble, ou réagit avec l'eau) ou si l'entrée n'est pas sous la forme "cation anion", votre programme peut faire n'importe quoi (comportement indéfini), donc il peut afficher "S", " Je ', ou autre chose.
Table:
?,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
Les lignes sont des cations dans l'ordre indiqué ci-dessus et les colonnes sont des anions. Par exemple, puisque l'iodure de magnésium est soluble et que le magnésium était le 6e cation et l'iodure était le 4e anion, la 6e ligne et la 4e colonne ont le caractère «S». Le ?
indique un comportement indéfini.
la source
?
s donne beaucoup de liberté dans les algorithmes que l'on peut utiliser.kolmogorov-complexity
balise, le défi ne demande pas de sortir la table, mais la valeur correcte pour une paire donnée (cation, anion).truthy
/'S'
oufalsy
/'I'
?Réponses:
JavaScript (Node.js) , 143 octets
Renvoie 1 pour soluble, 0 pour insoluble.
Essayez-le en ligne!
Comment?
Conversion de la chaîne d'entrée en un index de recherche
Nous construisons d'abord une clé en extrayant les 2e à 7e caractères de l'anion et en ajoutant les deux premiers caractères du cation:
Exemples:
Nous transformons cela en un index de recherche en l'analysant en base-35 et en appliquant un modulo 1325 suivi d'un modulo 508 (valeurs forcées par brute):
Compression de la table de recherche
Parce qu'il y a beaucoup plus de paires solubles que de paires insolubles , nous remplissons toutes les entrées inutilisées de la recherche avec soluble .
En codant soluble avec 1 et insoluble avec 0 , notre table de correspondance se compose essentiellement de longues chaînes de 1 suivies d'un 0 :
Nous le compressons en stockant les longueurs des chaînes de 1 sous forme de caractères ASCII dans la plage [32-126] .
la source
Rubis
-n
,969275706965 octetsEssayez-le en ligne!
Je ne suis pas très bon pour générer des hachages et des tables de recherche, alors j'ai plutôt choisi de tirer parti de tous ces caractères génériques de point d'interrogation pour simplifier la structure logique de la table, puis d'appliquer de la magie Regex pure.
Mise à jour : modification de l'attribution de certains points d'interrogation et simplification de la logique de correspondance.
Mise à jour 2 : Juste 2 mois plus tard, j'ai trouvé une autre refonte de la table pour économiser quelques octets de plus.
Le tableau que nous allons produire ressemble à ceci:
Maintenant, les composés suivants peuvent être considérés comme solubles:
ra
Nit ra te, Chlo ra te[SPm]o
So dium, Po tassium, Am mo nium^[^C]*F
F luorure, mais pas C alcium ou C opperh.*D
Lit h ium D ichromateParmi les composés restants, les suivants sont insolubles:
Le
Le ad[MAIZ]i.*y
M agnesium, A luminium, I ron (et autres cations avec charge indiquée), Z inc composés avec bloc d'anions contenanty
(H y droxide-Thioc y anate )[OPDFbv]
O xyde, P hosphate, D ichromate, F luoride, Voiture b onate, Sil v er[tr]i.*S
Stron ti um et Ba ri um S ulfatesTout le reste est soluble.
la source
Python 2 ,
166161131 131 octetsEssayez-le en ligne!
la source
Python 2 ,
180177151 151149147 octetsEssayez-le en ligne!
la source
17*(b%91%61%17)%272
pas l'êtreb%91%61%17*17%272
?Pascal (FPC) ,
387358353348341319297 octetsEssayez-le en ligne!
Explication:
la source
Gelée ,
67 61 60 50 4744 octetsUn lien monadique renvoyant une liste qui est vide pour
I
et non vide pourS
(dans Jelly les listes vides sont falsey tandis que celles non vides sont véridiques).Essayez-le en ligne! (le pied de page
”S”IÇ?
estif LastLink(x) is Truthy then "S" else "I"
)Ou voyez tous les cas formatés comme une grille correspondant à l'ordre de la grille dans l'OP.
Comment?
Après avoir créé des ensembles d'entrées qui doivent être
S
etI
et évalué ces entrées en base dix (Python:)dec=lambda s:sum(10**i*ord(c) for i, c in enumerate(s[::d]))
et en utilisant quelques boucles de valeurs de modulation et en vérifiant l'ensemble, le hachage utilisé ici a été trouvé.Les entiers clés insolubles sont créés dans le code en évaluant un entier codé en base 250, en le convertissant en base
25 ... 16* ... 10 et en cumulant le résultat ...* les réductions de base ont été obtenues en ajoutant des clés redondantes
la source