Bestimmen Sie bei einer positiven Zahl die Anzahl der Alkane mit Kohlenstoffatomen, wobei Sie die Stereoisomere ignorieren . oder äquivalent die Anzahl der nicht beschrifteten Bäume mit Knoten, so dass jeder Knoten einen Grad .
Dies ist die OEIS-Sequenz A000602 .
Siehe auch: Paraffine - Rosetta Code
Beispiel
Für lautet die Antwort , da Heptan neun Isomere hat :
- Heptan :
- 2-methylhexan :
- 3-Methylhexan :
- 2,2-Dimethylpentan :
- 2,3-Dimethylpentan :
- 2,4-Dimethylpentan :
- 3,3-Dimethylpentan :
Man beachte, dass 3-Methylhexan und 2,3-Dimethylpentan chiral sind , aber wir ignorieren hier Stereoisomere.
Testfälle
.
intput output
=============
0 1
1 1
2 1
3 1
4 2
5 3
6 5
7 9
8 18
9 35
10 75
11 159
12 355
13 802
14 1858
15 4347
16 10359
17 24894
18 60523
19 148284
20 366319
code-golf
sequence
combinatorics
chemistry
Alephalpha
quelle
quelle
Antworten:
CJam (
100 98 91 8983 Byte)Übernimmt die Eingabe von stdin und gibt sie an stdout aus. Beachten Sie, dass dies die Lizenz ausnutzt, um keine Eingaben
0
zu verarbeiten, um zwei Bytes zu sparen, indem die Definitionen vonC
und eingefügt werdenD
. Online-DemoHinweis: Dies ist sehr langsam und speichereffizient. Durch Trimmen von Arrays wird eine viel schnellere Version erhalten (3 Bytes mehr). Online-Demo .
Präparation
Ich manipulierte dies in eine etwas golferische Dekomposition und schaute dann in den Zwischensequenzen nach und stellte fest, dass sie auch in OEIS sind:
In früheren Versionen wurde ein Block
C
aus dieser Antwort wiederverwendet (zwei Polynome werden gefaltet) . Ich habe eine viel kürzere gefunden, kann diese Antwort jedoch nicht aktualisieren, da sie aus einer verketteten Frage stammt.quelle
Node.js 11.6.0 ,
229 223 221218 BytesAbgeleitet von der Java-Implementierung, die für Rosetta Code vorgeschlagen wurde .
Probieren Sie es online!
quelle
Alchemist (1547 Bytes)
Online-Demo .
Hinweis: Dies ist ziemlich langsam. Wenn Sie mit einem Interpreter testen, der es unterstützt, eine Regel mehrere Male gleichzeitig anzuwenden (z. B. meine - obwohl Sie sicherstellen, dass Sie die neueste Version haben, die einen Fehler im Parser behebt), können Sie eine erhebliche Beschleunigung erzielen, indem Sie zwei Regeln hinzufügen:
die eine Route durch die bestehenden Regeln inline
Partielle Dissektion
Auf hohem Niveau verwendet dies den gleichen Ansatz wie meine CJam-Antwort.
Das Rechenmodell von Alchemist ist im Wesentlichen die Minsky-Registermaschine . Alchemist macht jedoch die Gleichwertigkeit von Code und Daten sehr gut sichtbar, und indem viele Token auf der linken Seite einer Produktionsregel zugelassen werden, ist der Zustand nicht darauf beschränkt, durch ein Atom dargestellt zu werden: Wir können ein Tupel von Atomen verwenden, und dies erlaubt (nicht rekursive) Unterprogramme. Dies ist sehr nützlich für Golf. Das einzige, was wirklich fehlt, sind Makros und Debugging.
Für Arrays verwende ich eine Pairing-Funktion, die sich sehr gut in RMs implementieren lässt. Das leere Array wird durch dargestellt0 und das Ergebnis des Voranstellens x zu ordnen EIN ist ( 2 A + 1 ) 2x . Es gibt eine Unterroutine zum
P
Koppeln : Die Unterroutine wird aufgerufen und stellt den Wert vone
bis voranb
. Es gibt zwei Unterroutinen zum Aufheben der Paarung:n
Aufhebenb
der Paarung zue
undb
; undt
unpaarigd
zue
undd
. Dadurch konnte ich eine Menge Daten zwischen Variablen mischen, was wichtig ist: eine einzige "Verschiebungs" -Operationerweitert sich auf mindestens 17 Bytes:
wo
S
ist der aktuelle Zustand undT
ist der nächste Zustand. Eine nicht-destruktiv „Kopie“ ist noch teurer, weil sie als „move“ von getan werden muss ,a
umb
und einen Hilfstmp
, gefolgt von einer „Bewegung“ vontmp
zurück zua
.Verschleierung
Ich habe verschiedene Variablen aufeinander abgestimmt und im Verlauf des Golfspiels etwa 60 Zustände beseitigt, und viele von ihnen hatten sowieso keine besonders aussagekräftigen Namen, aber um das Golfspiel zu vervollständigen, habe ich einen Minimierer geschrieben, sodass die Namen jetzt vollständig nicht mehr zu entziffern sind. Viel Glück beim Reverse Engineering! Hier ist der Minimierer (in CJam), der einige Annahmen über den Code macht, aber angepasst werden kann, um andere Alchemist-Programme zu minimieren:
quelle
Pari / GP , 118 Bytes
Eine direkte Übersetzung von Peter Taylor ‚s CJam Antwort .
Probieren Sie es online!
quelle