Défi
Étant donné deux entrées, un ion positif et un ion négatif, vous devez produire la formule du composé ionique qui serait fabriqué à partir des deux ions. Cela signifie essentiellement équilibrer les frais pour qu'ils soient égaux à zéro.
Ne vous embêtez pas avec le formatage de la formule avec des nombres en indice, mais vous devez avoir des crochets pour les ions multi-atomes (comme NO3
).
Vous n'avez pas à tenir compte des erreurs (par exemple, si quelqu'un entre deux ions négatifs, vous pouvez simplement laisser le programme échouer).
Remarque: prenez Fe pour avoir une charge de 3+
Ions
Tous les ions qui doivent être pris en compte se trouvent avec leurs charges sur la deuxième partie de la fiche technique AQA GCSE Chemistry .
Ions positifs
H +
Na +
Ag +
K +
Li +
NH 4 +
Ba 2+
Ca 2+
Cu 2+
Mg 2+
Zn 2+
Pb 2+
Fe 3+
Al 3+
Ions négatifs
Cl -
Br -
F -
Je -
OH -
NO 3 -
O 2-
S 2-
SO 4 2-
CO 3 2-
Exemples
Quelques exemples:
H et O renvoie: -H2O
Ca et CO 3 renvoie: -CaCO3
Al et SO 4 renvoie: -Al2(SO4)3
Notez le cas suivant que vous devez prendre en compte:
H et OH renvoie: - H2O
pas H(OH)
Fe
une charge de 2+ ou 3+?Réponses:
CJam, 176 octets
Essayez-le en ligne
Cela a été quelque peu douloureux, en particulier avec tous les cas spéciaux pour les parenthèses, montrant les nombres, le H2O, etc.
Les données ne sont pas dans un format super compact. Il pourrait être réduit davantage, mais le code nécessaire pour l'interpréter compenserait probablement les économies. Je suis donc allé avec un tableau de chaînes, où chaque chaîne contient les atomes avec la même charge, classés de -2 à +3 (où la chaîne pour 0 est vide).
Explication:
la source
Lua ,
174242 octetsJ'ai oublié les parenthèses -_-, ce qui m'a fait monter à 242. Oh bien, c'était un défi assez amusant au moins.
Essayez-le en ligne!
Ancienne version:
En abusant de la tendance de Lua à tout initialiser avec une valeur nulle, nous pouvons réduire les coûts de stockage. Pourtant, Lua est toujours un peu maladroit :(
la source
Al
etSO4
devrait sortirAl2(SO4)3
, mais vous sortezAl2SO43
. Essayez-le en ligneCa
etCO3
. Vous devez également ajouter le lien TIO à votre réponse.Java (
619647667 octets)[Corrigé] Mise à jour: H + OH renvoie HOH même si je l'ai codé en dur pour ne pas ... travailler dessus
[Fixe] Mise à jour: Parfois, les parenthèses apparaissent alors qu'elles ne devraient pas
Code
Je ne savais pas comment faire cela sans coder en dur chaque charge d'ions, donc cela a fini par être long. Heureusement, toutes les charges sont de 1, 2 ou 3, il est donc facile de trouver la quantité de chaque ion.
Étendu
Essayez-le ici
Les données
Faites-moi savoir si certains d'entre eux ont tort
Remarque
J'ai commencé en Pyth, mais ensuite j'ai été ennuyé par la commande et les parenthèses, voici ce que j'avais si quelqu'un voulait le terminer.
la source
H
etOH
?H + SO4
, je pense que le résultat devrait êtreH2SO4
, sans parenthèses.JavaScript (ES6),
316277 octetsJ'ai globalisé les variablesp
etn
(comme je l'ai fait dans CoffeeScript) pour faciliter les tests. La localisation des variables ne ferait aucune différence dans le nombre de caractères.Variante ES5,
323284 octetsPas beaucoup de changements à part se débarrasser de la fonction flèche et de la chaîne de modèle:
Afficher l'extrait de code
la source
CoffeeScript,
371333 octetsCe nombre inclut les sauts de ligne (certains sauts de ligne peuvent être remplacés par des points-virgules mais cela n'affecterait pas le nombre de caractères)
la source
CJam (137 octets)
Il s'agit d'un bloc (fonction) anonyme qui prend deux ions sous forme de chaînes enveloppées dans une liste et renvoie une chaîne.
Démo en ligne .
Dissection
la source
Python 3 , 364 octets
Stocke les ions par la valeur absolue de leurs charges comme
index+1
dans un tableau 2-D (les éléments d'indice 0 ont + - 1 charge, etc.). Utilise string.split () pour y enregistrer quelques caractères. Gère le cas spécial duH + OH = H2O
premier, puis il calcule combien d'ions sont nécessaires de chaque sorte comme le LCM de leurs deux charges divisé par sa charge. Ajoute ensuite entre parenthèses si nécessaire ainsi que le nombre réel d'ions.Essayez-le en ligne!
la source