(Nie jestem chemikiem! Mogę się mylić w niektórych sprawach, piszę to, czego nauczyłem się w szkole średniej)
Atomy węgla mają specjalną właściwość: mogą wiązać się z 4 innymi atomami (co nie jest tak wyjątkowe) i pozostają stabilne nawet w długich łańcuchach, co jest bardzo wyjątkowe. Ponieważ można je łączyć i łączyć na wiele różnych sposobów, potrzebujemy jakiejś konwencji nazewnictwa, aby je nazwać.
To najmniejsza cząsteczka, jaką możemy wytworzyć:
CH4
To się nazywa metan. Składa się tylko z jednego węgla i 4 atomów wodoru. Następny to:
CH3 - CH3
To się nazywa etan. Składa się z 2 atomów węgla i 6 atomów wodoru.
Następne 2 to:
CH3 - CH2 - CH3
CH3 - CH2 - CH2 - CH3
Są to propan i butan. Problemy zaczynają się od łańcuchów z 4 atomami węgla, ponieważ można je budować na 2 różne sposoby. Jeden pokazano powyżej, a drugi to:
CH3 - CH - CH3
|
CH3
To oczywiście nie to samo co inne. Liczba atomów i wiązań są różne. Oczywiście samo złożenie wiązań i obrócenie molekuły nie sprawi, że będzie inaczej! Więc to:
CH3 - CH2 - CH2 - CH3
I to:
CH3 - CH2
|
CH3 - CH2
Są takie same (jeśli zajmujesz się teorią grafów, możesz powiedzieć, że jeśli między 2 cząsteczkami występuje izomorfizm; są one takie same). Odtąd nie będę wypisywać atomów wodoru, ponieważ nie są one niezbędne do tego wyzwania.
Ponieważ nienawidzisz chemii organicznej i masz wiele różnych atomów węgla, zdecydujesz się napisać program, który zrobi to za Ciebie. Nie masz zbyt wiele miejsca na dysku twardym, więc program musi być jak najmniejszy.
Wyzwanie
Napisz program, który pobiera tekst wielowierszowy jako dane wejściowe (łańcuch węglowy) i wyświetla nazwę łańcucha węglowego. Dane wejściowe będą zawierać tylko spacje, wielkie litery „c” i „|” i „-”, które reprezentuje wiązanie. Łańcuch wejściowy nigdy nie będzie zawierał cykli! Przykład:
Wkład:
C-C-C-C-C-C
| |
C C-C
Wydajność:
4-etylo-2-metyloheksan
Każde wyjście jest akceptowalne, o ile jest czytelne dla człowieka i zasadniczo takie samo (więc możesz na przykład użyć różnych separatorów).
Konwencja nazewnictwa:
(Patrz: zasady IUPAC )
Zidentyfikuj najdłuższy łańcuch węglowy. Ten łańcuch nazywa się łańcuchem macierzystym.
Zidentyfikuj wszystkie podstawniki (grupy dołączające z łańcucha macierzystego).
Policz węgle łańcucha macierzystego od końca, który daje podstawnikom najniższe liczby. Porównując serię liczb, seria „najniższa” to ta, która zawiera najniższą liczbę przy pierwszej różnicy. Jeśli dwa lub więcej łańcuchów bocznych znajduje się w równoważnych pozycjach, przypisz najniższy numer do tego, który będzie pierwszy w nazwie.
Jeśli ten sam podstawnik występuje więcej niż jeden raz, podaje się lokalizację każdego punktu, w którym występuje podstawnik. Ponadto liczbę wystąpień grupy podstawnikowej wskazuje przedrostek (di, tri, tetra itp.).
Jeśli istnieją dwa lub więcej różnych podstawników, są one wymienione w kolejności alfabetycznej przy użyciu nazwy podstawowej (zignoruj prefiksy). Jedynym przedrostkiem, który jest używany podczas ustawiania podstawników w porządku alfabetycznym, jest izo jak w izopropylu lub izobutylu. Prefiksy sec- i tert- nie są używane do określania kolejności alfabetycznej, chyba że są porównywane ze sobą.
Jeśli łańcuchy o równej długości rywalizują o wybór jako łańcuch macierzysty, wówczas wybór idzie w szeregu do:
- łańcuch, który ma największą liczbę łańcuchów bocznych.
- łańcuch, którego podstawniki mają najniższe liczby.
- łańcuch mający największą liczbę atomów węgla w najmniejszym łańcuchu bocznym.
- łańcuch mający najmniej rozgałęzione łańcuchy boczne (wykres mający najmniejszą liczbę liści).
W przypadku łańcucha nadrzędnego jest to:
Number of carbons Name
1 methane
2 ethane
3 propane
4 butane
5 pentane
6 hexane
7 heptane
8 octane
9 nonane
10 decane
11 undecane
12 dodecane
Żadne łańcuchy nie będą dłuższe niż 12, więc to wystarczy. W przypadku podłańcuchów jest tak samo, ale zamiast „ane” na końcu mamy „yl”.
Możesz założyć, że C
s są w nieparzystych kolumnach, a wiązania ( |
i -
znaki) mają długość 1 między atomami węgla.
Przypadki testowe:
Wkład:
C-C-C-C
Wydajność:
butan
Wkład:
C-C-C
|
C
Wydajność:
2-metylopropan
Wkład:
C-C-C-C
|
C
|
C-C
Wydajność:
3-metyloheksan
Wkład:
C-C-C-C-C
|
C
|
C
Wydajność:
3-metyloheksan
Wkład:
C
|
C
|
C-C-C-C
|
C-C-C
|
C-C
Wydajność:
3,4-dimetylo-5-etyloheptan
Edycja: Przepraszamy za złe przykłady. Nie byłem dobrym studentem :(. Teraz powinny zostać naprawione.
If the same substituent occurs more than once, the location of each point on which the substituent occurs is given. In addition, the number of times the substituent group occurs is indicated by a prefix (di, tri, tetra, etc.).
nie należy nazywać ostatniego przykładu 3,4- di metylo-5-etyloheptanem? (dopiero zaczynamy chemię organiczną, mogę się mylić: P)Odpowiedzi:
Python 2 ,
187618711870185918461830182619001932191318471833163516131596 bajtówWypróbuj online!
Cóż, proszę bardzo. Na pewno nie najbardziej golfowy, ale działa (mam nadzieję): D
Może zajęło mi to około 10 godzin? Prawdopodobnie mój najdłuższy golf zarówno pod względem wielkości, jak i czasu, a to mówi coś, biorąc pod uwagę, że używałem Java D:
Logika:
EDYCJA : Naprawiono błąd, który powodował błędy, jeśli nie było żadnych łańcuchów bocznych.
EDYCJA : Dzięki MD XF za zauważenie kilku dodatkowych spacji (wcięcia dla pętli for).
EDYCJA : Zupełnie zapomniałem o prefiksie dla tego samego podstawnika.
UWAGA : Każda linia musi mieć tę samą szerokość, aby to działało. Oznacza to, że wymagane są spacje końcowe.
Ciekawostka: większość cyklicznych węglowodorów będzie określana jako „metan”
Ciekawostka: jeśli zrobisz to
C-C-...-C-C
z 13 C, daethane
tothane
za 14,ropane
za 15 itd.-79 bajtów dzięki Jonathan Frech
-119 bajtów dzięki NieDzejkob
-17 bajtów dzięki ovs
źródło