Desafío
Dadas dos entradas, un ion positivo y un ion negativo, debe generar la fórmula para el compuesto iónico que se formaría a partir de los dos iones. Esto básicamente significa equilibrar las cargas para que sean iguales a cero.
No se moleste en formatear la fórmula con números de subíndice, pero debe tener corchetes para los iones de átomos múltiples (como NO3
).
No tiene que dar cuenta de ningún error (por ejemplo, si alguien ingresa dos iones negativos, puede dejar que el programa falle).
Nota: Tome Fe para tener un cargo de 3+
Iones
Todos los iones que deben tenerse en cuenta se encuentran junto con sus cargas en la segunda parte de la hoja de datos de química AQA GCSE .
Iones positivos
H +
Na +
Ag +
K +
Li +
NH 4 +
Ba 2+
Ca 2+
Cu 2+
Mg 2+
Zn 2+
Pb 2+
Fe 3+
Al 3+
Iones negativos
Cl -
Br -
F -
Yo -
OH -
NO 3 -
O 2-
S 2-
SO 4 2-
CO 3 2-
Ejemplos
Algunos ejemplos:
H y O regresa: -H2O
Retornos de Ca y CO 3 : -CaCO3
Al y SO 4 regresa: -Al2(SO4)3
Tenga en cuenta el siguiente caso que debe tener en cuenta:
H y OH devuelve: - H2O
no H(OH)
Fe
Tiene un cargo de 2+ o 3+?Respuestas:
CJam, 176 bytes
Pruébalo en línea
Esto fue algo doloroso, particularmente con todos los casos especiales para paréntesis, mostrando conteos, el H2O, etc.
Los datos no están en un formato súper compacto. Podría recortarse más, pero el código necesario para interpretarlo probablemente compensaría los ahorros. Así que fui con una serie de cadenas, donde cada cadena contiene los átomos con la misma carga, ordenada de -2 a +3 (donde la cadena para 0 está vacía).
Explicación:
fuente
Lua ,
174242 bytesOlvidé los corchetes '-_-, eso me llevó hasta 242. Oh, bueno, al menos fue un desafío bastante divertido.
Pruébalo en línea!
Versión antigua:
Abusando de la tendencia de Lua de inicializar todo con un valor nulo, podemos reducir los costos de almacenamiento. Aún así, Lua todavía es un poco torpe :(
fuente
Al
ySO4
debería salirAl2(SO4)3
, pero usted saleAl2SO43
. Pruébelo en líneaCa
yCO3
. Además, debe agregar el enlace TIO a su respuesta.Java (
619647667 bytes)[Solucionado] Actualización: H + OH devuelve HOH aunque lo codifiqué para no ... trabajar en él
[Solucionado] Actualización: a veces aparecen paréntesis cuando no deberían
Código
No estaba seguro de cómo hacer esto sin codificar duro cada carga de iones, por lo que terminó siendo largo. Por suerte, todas las cargas son 1, 2 o 3, por lo que es fácil encontrar la cantidad de cada ion.
Expandido
Pruébalo aquí
Datos
Avísame si alguno de ellos está equivocado
Nota
Comencé en Pyth, pero luego me molesté con el orden y el paréntesis, esto es lo que tenía si alguien quiere terminarlo.
fuente
H
yOH
?H + SO4
, creo que el resultado debería serH2SO4
, sin paréntesis.JavaScript (ES6),
316277 bytesHe globalizado las variablesp
yn
(al igual que lo hice en CoffeeScript) para facilitar las pruebas. La localización de las variables no haría una diferencia en el recuento de caracteres.Variante ES5,
323284 bytesNo hay muchos cambios aparte de deshacerse de la función de flecha y la cadena de plantilla:
Mostrar fragmento de código
fuente
CoffeeScript,
371333 bytesEste recuento incluye líneas nuevas (algunas líneas nuevas se pueden reemplazar con punto y coma, pero eso no afectaría el recuento de caracteres)
fuente
CJam (137 bytes)
Este es un bloque anónimo (función) que toma dos iones como cadenas envueltas en una lista y devuelve una cadena.
Demo en línea .
Disección
fuente
Python 3 , 364 bytes
Almacena los iones por el valor absoluto de sus cargas como
index+1
en una matriz 2-D (los elementos de índice 0 tienen + - 1 carga, etc.). Utiliza string.split () para guardar algunos caracteres allí. Maneja el caso especial deH + OH = H2O
primero, luego calcula cuántos iones se necesitan de cada tipo como el LCM de sus dos cargas dividido por su carga. Luego agrega paréntesis si es necesario, así como el número real de iones.Pruébalo en línea!
fuente