Właśnie miałem lekcję w szkole na temat alkanów i pomyślałem, że prawdopodobnie będzie to świetne wyzwanie dla golfa! Nie martw się, to nie jest tak skomplikowane, jak mogłoby się wydawać!
Szybki powtórka
(Uwaga: aby zachować ten krótki opis, nie wszystkie informacje są w 100% dokładne).
Alkany są łańcuchami węgla i wodoru. Każdy atom węgla ma 4 wiązania, a każde wiązanie atomu wodoru 1. Wszystkie atomy węgla alkanu tworzą łańcuch, w którym każdy atom C jest połączony z 2 innymi atomami C (lewy i prawy w strukturze Lewisa) i 2 atomami H (w górę i w dół), z wyjątkiem końców łańcucha , w którym atom C jest połączony tylko z 1 innym C, ale 3 Hs. Oto podstawowy przykład dla pentanu (alkanu z 5 atomami węgla i 12 atomami wodoru):
H H H H H
| | | | |
H-C-C-C-C-C-H
| | | | |
H H H H H
Alkany mogą również mieć gałęzie. Ale nie martw się, wszystkie alkany w tym wyzwaniu można wyrazić za pomocą tylko 1 poziomu rozgałęzienia. Przykład:
H
|
H-C-H
H H H | H
| | | | |
H-C-C-C-C-C-H
| | | | |
H H H H H
Aby ukończyć to wyzwanie, musisz również zrozumieć konwencję nazewnictwa IUPAC dla rozgałęzionych alkanów. Najpierw jest alkan korzeniowy. W naszym poprzednim przykładzie byłaby to część „CCCCC”. W zależności od długości tego łańcucha ma on inną nazwę. 1 C nazywa się metanem, 2 ° C etanem, 3 ° C propanem, a następnie butanem, pentanem, heksanem, heptanem, oktanem, nonanem i dekanem (10 ° C). Następnie, dla każdej gałęzi, jest pewien prefiks: Po pierwsze, jest indeks (przesunięcie) atomu C, do którego dołączona jest gałąź (liczenie od lewej). W tym przykładzie byłoby to 4 (czyli czwarty atom C od lewej). Następnie jest łącznik (ten symbol: „-”), a następnie inna nazwa wskazująca rozmiar gałęzi. Nazewnictwo wielkości gałęzi jest prawie takie samo jak nazewnictwo wielkości katalogu głównego, po prostu zamiast „ane” dodajesz „yl”. Dzięki temu pełna nazwa przykładu będzie
4-methylpentane
Jeśli masz wiele gałęzi, są one również poprzedzone, oddzielone innym łącznikiem. Przykład:
2-butyl-5-methylhexane
I ostatnia rzecz: jeśli masz wiele gałęzi tego samego rozmiaru, zostaną one zgrupowane; ich przesunięcia są oddzielone przecinkiem i mają tę samą nazwę rozmiaru, która jest poprzedzana dodatkową sylabą w zależności od liczby zgrupowanych gałęzi: „di” dla 2 gałęzi, „tri” dla 3, „tetra” dla 4 (ty nie potrzeba więcej na to wyzwanie). Przykład:
2-ethyl-2,4,6-trimethyldecane
Do Twojej wiadomości, może to wyglądać mniej więcej tak: (pominięte atomy H)
|
-C-
| |
-C- -C-
| | | | | | | | | |
-C-C-C-C-C-C-C-C-C-C-
| | | | | | | | | |
-C- -C-
| |
Nomenklatura Ściągawka
Prefixes indicating numbers:
| Num | Prefix |
|------|--------|
| 1 | meth |
| 2 | eth |
| 3 | prop |
| 4 | but |
| 5 | pent |
| 6 | hex |
| 7 | hept |
| 8 | oct |
| 9 | non |
| 10 | dec |
Suffix root: ane
Suffix branch: yl
Prefixes grouping: di, tri, tetra
Zasady
Napisz program, który wczyta taką nazwę IUPAC ze STDIN, argumenty programu lub równoważny i narysuje go jako strukturę Lewisa w stylu ASCII do STDOUT (lub odpowiednika).
- Dla uproszczenia NIE musisz rysować atomów H (w przeciwnym razie napotkasz problemy z odstępami)
- NIE wolno drukować żadnych pustych linii poziomych przednich i końcowych
- Łańcuchy, które należy przeanalizować, nie będą dłuższe niż 10, a maksymalna liczba rozgałęzień w „grupie” jest ograniczona do 4.
- Maksymalne „przesunięcie” gałęzi wynosi 9 (co oznacza, że nie trzeba analizować więcej niż 1 cyfry)
- Twoje gałęzie muszą się naprzemiennie przechodzić w górę i w dół po każdej nowej gałęzi. Jeśli ta przestrzeń jest już zajęta przez inną gałąź o tym samym przesunięciu, musisz narysować ją po drugiej stronie korzenia. (góra-> dół, dół-> góra)
- W przypadku uszkodzonych, nieprawidłowo sformatowanych lub niemożliwych do wyciągnięcia danych wejściowych program może zachowywać się nieokreślony.
To jest kod golfowy, wygrywa najkrótszy kod w bajtach!
Miłej gry w golfa! :)
4-methylpropane
powiedzieć4-methylpentane
?4-<anything>propane
wydaje się mało prawdopodobne, chyba że całkowicie coś źle zrozumiałem.3-3-5-7-methyldodecane
że najdłuższy ciągły łańcuch węglowy ma długość 12. Powiedziałeś też, że nie wszystkie informacje w pytaniu są dokładne, ale myślę, że warto zauważyć, że druga cząsteczka jest2-methylpentane
, nie4-methylpentane
dlatego, że zaczynasz od węgla o najbliższym rozgałęzieniu.Your branches have to alternate between going up and down after every new branch.
Twój przykład narusza tę zasadę 2. Jaką maksymalną długość łańcucha musimy obsługiwać (analizowanie prefiksów będzie częścią wyzwania). Powinieneś połączyć (lub najlepiej skopiować) listę nomenklatury.Odpowiedzi:
Python 2, 620 bajtów
Wyjaśnienie
Wejście:
'2-ethyl-2,4,6-trimethyldecane'
Pierwsze parsowanie łańcucha z wyrażeniem regularnym (ostatnia grupa to root):
[[[2], 2], [[2, 4, 6], 1], [[], 10]]
Każda gałąź jest zapisana w tablicy długości
len(root)
(tutaj naprzemiennie góra / dół):[[0, 0], [1, 2], [0, 0], [1, 0], [0, 0], [0, 1], [0, 0], [0, 0], [0, 0], [0, 0]]
„Left” i „Right” (
L,R
) oraz „root” (C
Inicjowane są gałęzie ).Każda gałąź jest następnie dodawana do odpowiedniej gałęzi „string” (duża pętla).
Dwie strony i środek są wydrukowane na końcu:
źródło