Dado o nome de um cátion e ânion, produza "S" (solúvel) ou "I" (insolúvel). A tabela que usaremos é da wikipedia: https://en.wikipedia.org/wiki/Solubility_chart . É copiado no final da pergunta para referência futura.
Entrada : O cátion, seguido pelo ânion, separado por um espaço. O cátion será um dos seguintes:
Lithium Sodium Potassium Ammonium Beryllium Magnesium Calcium
Strontium Barium Zinc Iron(II) Copper(II) Aluminium Iron(III) Lead(II) Silver
e o ânion será um dos seguintes:
Fluoride Chloride Bromide Iodide Carbonate Chlorate Hydroxide Cyanide Cyanate
Thiocyanate Nitrate Oxide Phosphate Sulfate Dichromate
Cada um terá sua primeira letra maiúscula.
Exemplo de entrada: Sodium Chloride
Saída : Um valor verdadeiro ou S
, se for solúvel, falsey ou de I
outra forma. Se a página da wikipedia listar qualquer outra coisa (por exemplo, ligeiramente solúvel ou reagir com água) ou se a entrada não estiver na forma "ânion cátion", seu programa poderá fazer qualquer coisa (comportamento indefinido) e, portanto, produzir 'S', ' Eu ', ou qualquer outra coisa.
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
As linhas são cátions na ordem listada acima e as colunas são ânions. Por exemplo, como o iodeto de magnésio é solúvel e o magnésio é o sexto cátion e o iodeto é o quarto ânion, a sexta linha e a quarta coluna têm o caractere 'S'. O ?
indica comportamento indefinido.
fonte
?
s dá muita liberdade em quais algoritmos se pode usar.kolmogorov-complexity
tag, o desafio não exige a saída da tabela, mas o valor correto para um determinado par (cátion, ânion).truthy
/'S'
oufalsy
/'I'
?Respostas:
JavaScript (Node.js) , 143 bytes
Retorna 1 para solúvel, 0 para insolúvel.
Experimente online!
Quão?
Conversão da cadeia de entrada em um índice de pesquisa
Primeiro construímos uma chave extraindo o 2º ao 7º caracteres do ânion e adicionando os dois primeiros caracteres do cátion:
Exemplos:
Transformamos isso em um índice de pesquisa analisando-o na base-35 e aplicando um módulo 1325 seguido por um módulo 508 (valores de força bruta):
Compactação da tabela de pesquisa
Como existem pares significativamente mais solúveis que os insolúveis , preenchemos todas as entradas não utilizadas na pesquisa com solúvel .
Ao codificar solúvel com 1 e insolúvel com 0 , nossa tabela de pesquisa consiste essencialmente em cadeias longas de 1 's seguidas por um 0 :
Nós o compactamos armazenando os comprimentos das seqüências de caracteres de 1 como caracteres ASCII no intervalo [32-126] .
fonte
Ruby
-n
,969275706965 bytesExperimente online!
Como não sou muito bom em gerar hashes e tabelas de pesquisa, optei por aproveitar todos esses curingas de ponto de interrogação para simplificar a estrutura lógica da tabela e, em seguida, aplicar alguma mágica pura do Regex.
Atualização : atribuição alterada de alguns pontos de interrogação e simplificou ainda mais a lógica da correspondência.
Atualização 2 : Apenas 2 meses depois, criei outra reformulação da tabela para economizar mais alguns bytes.
A tabela que vamos produzir tem a seguinte aparência:
Agora, os seguintes compostos podem ser considerados solúveis:
ra
Nit ra te, Chlo ra te[SPm]o
Então dium, Po tassium, Am mo nium^[^C]*F
F luoreto, mas não C alcium ou C opperh.*D
Lit h io D ichromateDos compostos restantes, os seguintes são insolúveis:
Le
Le ad[MAIZ]i.*y
H agnesium, Um Luminium, eu ron (e outros catiões com carga indicada), Z compostos inc com bloco de aniões contendoy
(H y droxide-Thioc y anate)[OPDFbv]
O hidróxido O, P hosphate, D ichromate, F luoride, Car b onato, Sil v er[tr]i.*S
Stron ti e Ba ri um S ulfatesTudo o resto é solúvel.
fonte
Python 2 ,
166161131 bytesExperimente online!
fonte
Python 2 ,
180177151149147 147 bytesExperimente online!
fonte
17*(b%91%61%17)%272
serb%91%61%17*17%272
?Pascal (FPC) ,
387358353348341319297 bytesExperimente online!
Explicação:
fonte
Geléia ,
67 61 60 50 4744 bytesUm link monádico retornando uma lista vazia
I
e não vaziaS
(no Jelly, as listas vazias são falsey e as não vazias são verdadeiras).Experimente online! (rodapé
”S”IÇ?
éif LastLink(x) is Truthy then "S" else "I"
)Ou veja todos os casos formatados como uma grade que corresponde à ordem da grade no OP.
Quão?
Depois de criar conjuntos de entradas que devem ser
S
eI
avaliar essas entradas como base dez (Python:)dec=lambda s:sum(10**i*ord(c) for i, c in enumerate(s[::d]))
e usar alguns loops de valores modulares e verificar a configuração, o hash usado aqui foi encontrado.Os números inteiros chave insolúveis são criados no código, avaliando um número inteiro codificado na base 250, convertendo-o em base
25 ... 16* ... 10 e somando cumulativamente o resultado ...* as reduções de base foram alcançadas adicionando algumas chaves redundantes
fonte