Geben Sie unter der Bezeichnung eines Kations und Anions "S" (löslich) oder "I" (unlöslich) aus. Die Tabelle, die wir verwenden werden, stammt aus Wikipedia: https://en.wikipedia.org/wiki/Solubility_chart . Es wird zum späteren Nachschlagen am Ende der Frage kopiert.
Eingabe : Das Kation, gefolgt vom Anion, durch ein Leerzeichen getrennt. Das Kation wird eines der folgenden sein:
Lithium Sodium Potassium Ammonium Beryllium Magnesium Calcium
Strontium Barium Zinc Iron(II) Copper(II) Aluminium Iron(III) Lead(II) Silver
und das Anion wird eines der folgenden sein:
Fluoride Chloride Bromide Iodide Carbonate Chlorate Hydroxide Cyanide Cyanate
Thiocyanate Nitrate Oxide Phosphate Sulfate Dichromate
Bei jedem wird der erste Buchstabe groß geschrieben.
Beispiel Eingabe: Sodium Chloride
Ausgabe : Ein wahrer Wert oder S
, wenn er löslich ist, falsch oder auf I
andere Weise. Wenn die Wikipedia-Seite etwas anderes auflistet (z. B. schwer löslich oder mit Wasser reagierend) oder wenn die Eingabe nicht in der Form "Kationenanion" vorliegt, kann Ihr Programm alles tun (undefiniertes Verhalten), sodass möglicherweise "S" ausgegeben wird. Ich 'oder irgendetwas anderes.
Tabelle:
?,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
Die Zeilen sind Kationen in der oben angegebenen Reihenfolge und die Spalten sind Anionen. Da beispielsweise Magnesiumiodid löslich ist und Magnesium das 6. Kation und Iodid das 4. Anion war, haben die 6. Reihe und 4. Spalte den Buchstaben "S". Das ?
zeigt undefiniertes Verhalten an.
quelle
?
s viel Freiheit in den Algorithmen gibt, die man verwenden kann.kolmogorov-complexity
Tags fordert die Challenge nicht zur Ausgabe der Tabelle auf, sondern zum korrekten Wert für ein bestimmtes (Kation, Anion) Paar.truthy
/'S'
oderfalsy
/ auszugeben'I'
?Antworten:
JavaScript (Node.js) , 143 Byte
Gibt 1 für löslich, 0 für unlöslich zurück.
Probieren Sie es online!
Wie?
Konvertierung der Eingabezeichenfolge in einen Nachschlageindex
Wir erstellen zunächst einen Schlüssel, indem wir die 2. bis 7. Stelle des Anions extrahieren und die beiden ersten Stellen des Kations hinzufügen:
Beispiele:
Wir machen daraus einen Lookup-Index, indem wir ihn in base-35 analysieren und ein Modulo 1325 gefolgt von einem Modulo 508 (Brute-Forced-Werte) anwenden:
Komprimierung der Nachschlagetabelle
Da es deutlich mehr lösliche Paare als unlösliche gibt, füllen wir alle nicht verwendeten Einträge in der Suche mit löslich .
Durch Kodierung von löslich mit 1 und unlöslich mit 0 besteht unsere Nachschlagetabelle im Wesentlichen aus langen Zeichenfolgen von 1 , gefolgt von einer 0 :
Wir komprimieren es durch die Längen der Saiten des Speicherns 1 ‚s als ASCII - Zeichen im Bereich [32-126] .
quelle
Ruby
-n
,969275706965 BytesProbieren Sie es online!
Ich bin nicht sehr gut darin, Hashes und Nachschlagetabellen zu generieren, und habe mich stattdessen dafür entschieden, alle diese Fragezeichen-Platzhalter zu nutzen, um die logische Struktur der Tabelle zu vereinfachen und dann etwas pure Regex-Magie anzuwenden.
Update : Die Zuweisung einiger Fragezeichen wurde geändert und die Logik des Abgleichs weiter vereinfacht.
Update 2 : Nur 2 Monate später habe ich mir eine weitere Überarbeitung der Tabelle ausgedacht, um ein paar Bytes mehr zu sparen.
Der Tisch, den wir produzieren werden, sieht folgendermaßen aus:
Nun können die folgenden Verbindungen als löslich angesehen werden:
ra
Nit ra te, Chlo ra te[SPm]o
So dium, Po tassium, Am mo nium^[^C]*F
F luoride, aber nicht C alcium oder C opperh.*D
Lit h ium D ichromateVon den übrigen Verbindungen sind die folgenden unlöslich:
Le
Le ad[MAIZ]i.*y
M agnesium, A luminium, I ron (und andere Kationen mit der angegebenen Gebühr), Z inc Verbindungen mit Block von Anioneny
(H y droxide-ThioC y anate)[OPDFbv]
O Xide, P hosphate, D ichromate, F luoride, Car b Onate, Sil v ER[tr]i.*S
Stron ti um und Ba ri um S ulfatesAlles andere ist löslich.
quelle
Python 2 ,
166161131 BytesProbieren Sie es online!
quelle
Python 2 ,
180177151149147 BytesProbieren Sie es online!
quelle
17*(b%91%61%17)%272
nicht seinb%91%61%17*17%272
?Pascal (FPC) ,
387358353348341319297 BytesProbieren Sie es online!
Erläuterung:
quelle
Jelly ,
67 61 60 50 4744 BytesEin monadischer Link, der eine Liste zurückgibt, für die leer
I
und für die nicht leer istS
(in Jelly sind leere Listen falsch, während nicht leere wahr sind).Probieren Sie es online! Fußzeile
”S”IÇ?
istif LastLink(x) is Truthy then "S" else "I"
)Oder sehen Sie alle Fälle als Raster formatiert mit der Reihenfolge des Gitters im OP übereinstimmt.
Wie?
Nach Sätze von Eingängen zu schaffen , die sein müssen
S
undI
und Auswertung dieser Eingänge als Basis zehn (Python:dec=lambda s:sum(10**i*ord(c) for i, c in enumerate(s[::d]))
) und mit ein paar Schleifen von Modulo-ing Werte und Satz hier die Überprüfung der verwendeten Hash wurde gefunden.Die unlöslichen Ganzzahlen werden im Code erzeugt, indem eine für die Basis 250 codierte Ganzzahl ausgewertet und in die Basis
25 ... 16konvertiert wird* ... 10 und das Ergebnis kumuliert wird ...* Die Basisreduzierungen wurden durch Hinzufügen einiger redundanter Schlüssel erreicht
quelle