Desafio
Dadas duas entradas, um íon positivo e um íon negativo, você deve produzir a fórmula para o composto iônico que seria produzido a partir dos dois íons. Isso basicamente significa equilibrar as cobranças para que sejam iguais a zero.
Não se preocupe em formatar a fórmula com números de subscrito, mas você deve ter colchetes para os íons multiatomáticos (como NO3
).
Você não precisa dar conta de nenhum erro (por exemplo, se alguém inserir dois íons negativos, poderá deixar o programa falhar).
Nota: Tome Fe para ter uma carga de 3+
Íons
Todos os íons que precisam ser contabilizados são encontrados junto com suas cobranças na segunda parte da Folha de dados químicos do AQA GCSE .
Íons positivos
H +
Na +
Ag +
K +
Li +
NH 4 +
Ba 2+
Ca 2+
Cu 2+
Mg 2+
Zn 2+
Pb 2+
Fe 3+
Al 3+
Íons negativos
Cl -
Br -
F -
Eu -
OH -
NO 3 -
O 2-
S 2-
SO 4 2-
CO 3 2-
Exemplos
Alguns exemplos:
H e O retorna: -H2O
Retornos de Ca e CO 3 : -CaCO3
Al e SO 4 retornam: -Al2(SO4)3
Observe o seguinte caso que você deve considerar:
H e OH retorna: - H2O
não H(OH)
Fe
uma taxa de 2+ ou 3+?Respostas:
CJam, 176 bytes
Experimente online
Isso foi um pouco doloroso, principalmente em todos os casos especiais de parênteses, exibição de contagens, H2O etc.
Os dados não estão em um formato super compacto. Poderia ser mais aparado, mas o código necessário para interpretá-lo provavelmente compensaria a economia. Então, eu fui com uma matriz de cadeias, onde cada cadeia contém os átomos com a mesma carga, ordenada de -2 a +3 (onde a cadeia para 0 está vazia).
Explicação:
fonte
Lua ,
174242 bytesEsqueci os parênteses '-_-, que me elevaram a 242. Oh, bem, pelo menos foi um desafio bastante divertido.
Experimente online!
Versão antiga:
Abusando da tendência de Lua de inicializar tudo com um valor nulo, podemos reduzir os custos de armazenamento. Ainda assim, Lua ainda é um pouco desajeitada :(
fonte
Al
eSO4
deve produzirAl2(SO4)3
, mas você produzAl2SO43
. Experimente onlineCa
eCO3
. Além disso, você deve adicionar o link TIO à sua resposta.Java (
619647667 bytes)[Corrigido] Atualização: H + OH retorna HOH mesmo que eu o tenha codificado para não ... trabalhar nele
Atualização [Corrigida]: Às vezes, parênteses aparecem quando não deveriam
Código
Eu não tinha certeza de como fazer isso sem codificar cada carga de íons, então acabou sendo longo. Por sorte, todas as cargas são 1, 2 ou 3, portanto é fácil encontrar a quantidade de cada íon.
Expandido
Experimente aqui
Dados
Deixe-me saber se algum deles está errado
Nota
Comecei em Pyth, mas depois fiquei irritado com a ordem e o parêntese, eis o que eu tinha se alguém quisesse terminar.
fonte
H
eOH
?H + SO4
, acho que o resultado deve serH2SO4
, sem parênteses.JavaScript (ES6),
316277 bytesEu globalizei as variáveisp
en
(como fiz no CoffeeScript) para facilitar os testes. A localização das variáveis não faria diferença na contagem de caracteres.Variante ES5,
323284 bytesNão há muitas mudanças além de se livrar da função de seta e da sequência de modelos:
Mostrar snippet de código
fonte
CoffeeScript,
371333 bytesEssa contagem inclui novas linhas (algumas delas podem ser substituídas por ponto e vírgula, mas isso não afetaria a contagem de caracteres)
fonte
CJam (137 bytes)
Este é um bloco anônimo (função) que recebe dois íons como cadeias envolvidas em uma lista e retorna uma cadeia.
Demonstração online .
Dissecação
fonte
Python 3 , 364 bytes
Armazena os íons pelo valor absoluto de suas cobranças como
index+1
em uma matriz 2-D (os elementos do índice 0 têm + - 1 carga, etc.). Usa string.split () para salvar alguns caracteres lá. Lida com o caso especial deH + OH = H2O
primeiro e, em seguida, calcula quantos íons são necessários para cada tipo, como o LCM de suas duas cargas dividido pela carga. Em seguida, adiciona parênteses, se necessário, bem como o número real de íons.Experimente online!
fonte