Wyzwanie
Biorąc pod uwagę dwa wejścia, jon dodatni i ujemny, musisz wyprowadzić wzór dla związku jonowego, który byłby wytworzony z dwóch jonów. Zasadniczo oznacza to równoważenie ładunków, aby były równe zero.
Nie zawracaj sobie głowy formatowaniem formuły za pomocą liczb indeksu dolnego, ale musisz mieć nawiasy klamrowe dla jonów wieloatomowych (np. NO3
).
Nie musisz brać pod uwagę żadnych błędów (na przykład, jeśli ktoś wprowadzi dwa jony ujemne, możesz po prostu pozwolić programowi zawieść).
Uwaga: weź Fe, aby mieć ładunek 3+
Jony
Wszystkie jony, które należy uwzględnić, znajdują się wraz z ich ładunkami w drugiej części karty danych chemicznych AQA GCSE .
Jony dodatnie
H +
Na +
Ag +
K +
Li +
NH 4 +
Ba 2+
Ca 2+
Cu 2+
Mg 2+
Zn 2+
Pb 2+
Fe 3+
Al 3+
Jony ujemne
Cl -
Br -
F -
Ja -
OH -
Nr 3 -
O 2-
S 2-
SO 4 2-
CO 3 2-
Przykłady
Kilka przykładów:
Zwroty H i O : -H2O
Zwraca Ca i CO 3 :CaCO3
Al i SO 4 zwracają: -Al2(SO4)3
Zwróć uwagę na następujący przypadek, który musisz uwzględnić:
Zwroty H i OH : - H2O
nie H(OH)
Fe
opłata wynosi 2+ lub 3+?Odpowiedzi:
CJam, 176 bajtów
Wypróbuj online
Było to nieco bolesne, szczególnie w przypadku wszystkich specjalnych przypadków dotyczących nawiasów, zliczania, H2O itp.
Dane nie są w super kompaktowym formacie. Można go jeszcze bardziej przyciąć, ale kod potrzebny do jego interpretacji prawdopodobnie zrekompensuje oszczędności. Poszedłem więc z tablicą ciągów, gdzie każdy ciąg zawiera atomy o tym samym ładunku, uporządkowane od -2 do +3 (gdzie ciąg dla 0 jest pusty).
Wyjaśnienie:
źródło
Lua ,
174242 bajtówZapomniałem nawiasów „-_-, co doprowadziło mnie do 242. No cóż, to było co najmniej zabawne wyzwanie.
Wypróbuj online!
Stara wersja:
Nadużywając skłonności Lui do inicjowania wszystkiego zerową wartością, możemy obniżyć koszty przechowywania. Mimo to Lua wciąż jest trochę niezręczna :(
źródło
Al
iSO4
powinien wyprowadzaćAl2(SO4)3
, ale ty wyprowadzaszAl2SO43
. Wypróbuj onlineCa
iCO3
. Powinieneś również dodać link TIO do swojej odpowiedzi.Java (
619647667 bajtów)[Naprawiono] Aktualizacja: H + OH zwraca HOH, chociaż na stałe go zakodowałem, aby nie ... działał na nim
[Naprawiono] Aktualizacja: Czasami nawiasy pojawiają się, gdy nie powinny
Kod
Nie byłem pewien, jak to zrobić bez twardego kodowania każdego ładunku jonów, więc skończyło się to długo. Na szczęście wszystkie ładunki wynoszą 1, 2 lub 3, więc znalezienie ilości każdego jonu jest łatwe.
Rozszerzony
Wypróbuj tutaj
Dane
Daj mi znać, jeśli któryś z nich jest błędny
Uwaga
Zacząłem w Pyth, ale potem zirytowało mnie zamówienie i nawias. Oto, co miałem, jeśli ktoś chciałby to zakończyć.
źródło
H
iOH
?H + SO4
myślę, że wynik powinien byćH2SO4
bez nawiasów.JavaScript (ES6),
316277 bajtówZglobalizowałem zmiennep
in
(tak jak to zrobiłem w CoffeeScript) dla łatwiejszego testowania. Lokalizacja zmiennych nie miałaby różnicy w liczbie znaków.Wariant ES5,
323284 bajtówNiewiele zmian oprócz pozbycia się funkcji strzałki i ciągu szablonu:
Pokaż fragment kodu
źródło
CoffeeScript,
371333 bajtówLiczba ta obejmuje znaki nowej linii (niektóre znaki nowej linii można zastąpić średnikami, ale nie wpłynie to na liczbę znaków)
źródło
CJam (137 bajtów)
Jest to anonimowy blok (funkcja), który przyjmuje dwa jony jako łańcuchy zawinięte na liście i zwraca łańcuch.
Demo online .
Sekcja
źródło
Python 3 , 364 bajty
Przechowuje jony według bezwzględnej wartości ich ładunków, jak
index+1
w macierzy 2-D (elementy 0-indeksowe mają ładunek + - 1 itd.). Wykorzystuje string.split (), aby zapisać tam kilka znaków. Obsługuje szczególny przypadekH + OH = H2O
najpierw, a następnie oblicza, ile jonów jest potrzebnych każdego rodzaju, gdy LCM ich dwóch ładunków jest podzielony przez jego ładunek. Następnie dodaje w nawiasach, jeśli to konieczne, a także rzeczywistą liczbę jonów.Wypróbuj online!
źródło