Ein geradkettiges Alk * ne ist definiert als eine Folge von Kohlenstoffatomen, die durch Einfach- (Alkan), Doppel- (Alken) oder Dreifachbindungen (Alkin) verbunden sind (implizite Wasserstoffatome werden verwendet). Kohlenstoffatome können also nur 4 Bindungen bilden Kein Kohlenstoffatom darf gezwungen werden, mehr als vier Bindungen zu haben. Ein geradkettiges Alkohol kann als Liste seiner Kohlenstoff-Kohlenstoff-Bindungen dargestellt werden.
Dies sind einige Beispiele für gültige geradkettige Alkene:
[] CH4 Methane
[1] CH3-CH3 Ethane
[2] CH2=CH2 Ethene
[3] CH≡CH Ethyne
[1,1] CH3-CH2-CH3 Propane
[1,2] CH3-CH=CH2 Propene
[1,3] CH3-C≡CH Propyne
[2,1] CH2=CH-CH3 Propene
[2,2] CH2=C=CH2 Allene (Propadiene)
[3,1] CH≡C-CH3 Propyne
[1,1,1] CH3-CH2-CH2-CH3 Butane
...
Dies ist jedoch nicht der Fall, da mindestens ein Kohlenstoffatom mehr als 4 Bindungen aufweisen würde:
[2,3]
[3,2]
[3,3]
...
Ihre Aufgabe ist es, ein Programm / eine Funktion zu erstellen, das / die bei einer positiven ganzen Zahln
die Anzahl der gültigen geradkettigen Alkene mit genau der n
Länge der Kohlenstoffatome ausgibt / zurückgibt . Dies ist OEIS A077998 .
Spezifikationen / Erläuterungen
- Sie müssen
1
bei der Rücksendung korrekt vorgehen1
. - Alkene mögen
[1,2]
und[2,1]
gelten als verschieden. - Die Ausgabe ist die Länge einer Liste aller möglichen Alkane einer bestimmten Länge.
- Sie nicht haben 0 richtig zu handhaben .
Testfälle:
1 => 1
2 => 3
3 => 6
4 => 14
Dies ist Codegolf, also gewinnt die niedrigste Bytezahl !
quelle
<=4
, oder?Antworten:
Oasis ,
97 BytesProbieren Sie es online!
Erläuterung
Dies verwendet die Wiederholungsbeziehung in OEIS :
quelle
xkcd
.xkcd-+311
funktioniert , weilk
ist derzeit ein No-Op ...MATL , 10 Bytes
Probieren Sie es online!
Erläuterung
Dies verwendet die in OEIS gefundene Charakterisierung
quelle
Oasis ,
98 BytesEin Byte dank Adnan gespeichert
Probieren Sie es online!
Erläuterung
quelle
x
ist kurz für2*
:).0
hier eine Initiale zu verwenden )Gelee, 10 Bytes
Probieren Sie es online!
Verwendet den Algorithmus von Luis Mendo .
Erläuterung
Gelee, 15 Bytes
Probieren Sie es online!
Verwendet rohe Gewalt.
Erläuterung
quelle
MATL , 14 Bytes
Probieren Sie es online!
Erläuterung
Dies erzeugt die kartesische Potenz des
[1 2 3]
"Erhöhens" auf die Anzahl der Atome minus 1 und verwendet dann die Faltung, um zu überprüfen, ob keine zwei zusammenhängenden Zahlen in jedem kartesischen Tupel mehr als summieren4
.quelle
Mathematica, 48 Bytes
Wie Luis Mendo betonte, ist dies A006356 im OEIS. Hier sind meine ursprünglichen Versuche:
Für eine Eingabe
n
,Tuples[{1,2,3},n-1]
die Liste aller(n-1)
Tupel von Elementen ,{1,2,3}
die alle möglichen Sequenzen von Einzel-, Doppel- oder Dreifachbindungen zun
C - Atomen.+##<5&
ist eine reine Funktion, die zurückgibt, ob die Summe ihrer Argumente kleiner als ist5
, alsoSplit[#,+##<5&]&
eine Liste in Unterlisten aufteilt, die aus aufeinanderfolgenden Elementen bestehen, deren paarweise Summen kleiner als sind5
. Das Beschreiben eines gültigen Alk * ns entspricht der Länge dieser Liste0
(in dem Fall, in demn=1
) oder1
, also nurCount
der Anzahl der(n-1)
Tupel, in denen die Länge dieser Liste übereinstimmt0|1
.If[+##>4,4,#2]&
Gibt zurück,4
wenn die Summe der Argumente größer als ist,4
andernfalls wird das zweite Argument zurückgegeben. Macht mit dieser FunktionFold[If[+##>4,4,#2]&]
einen LinkFold
von seiner Eingabe. Hier gebe ich alsoCount
die Anzahl der(n-1)
-tupel an, auf die das Anwenden dieses Operators nicht zutrifft4
. Der Fall, in demn=1
seit behandelt wird,Fold
bleibt unbewertet, wenn das zweite Argument die leere Liste ist{}
.quelle
LinearRecurrence[{2,1,-1},{1,3,6},#][[#]]&
?this site
, meinst du OEIS oder PPCG?Python, 51 Bytes
Dies ist eine einfache Implementierung der Wiederholungsbeziehung. Danke an Tim Pederick für 3 Bytes. Die Ausgabe ist ein Float in Python 3 und eine Ganzzahl in Python 2.
Probieren Sie es online!
quelle
(n*n+n)/2
ist kürzer als[1,3,6][n-1]
. Und wenn Sie Python 3 verwenden und keine Gleitkomma-Ausgabe erhalten möchten,(n*n+n)//2
ist dies immer noch kürzer.Pyth - 16 Bytes
Verwendet rohe Gewalt.
Test Suite .
quelle
Ruby, 62 Bytes
Schrecklich ineffizienter Base-10-Brute-Force-Ansatz. Könnte für zusätzliche Bytes auf Basis 5 verbessert werden.
Es werden Zahlen generiert, bei denen jede Ziffer eine Bindung darstellt (n-1 Ziffern).
0
Dies entspricht einer Bindungsreihenfolge von 1 und2
einer Bindungsreihenfolge von 3. Ziffern über 2 sind ungültig.Wir multiplizieren dies mit 11, um benachbarte Ziffernpaare zu summieren. Wiederum sind Ziffern über 3 ungültig.
Wir kombinieren die beiden Zahlen in einer Zeichenkette und führen einen regulären Ausdruck durch, um nach ungültigen Ziffern zu suchen. Wenn keine gefunden werden, erhöhen wir den Zähler.
im Testprogramm
quelle
Ruby, 51 Bytes
Basierend auf der Wiederholungsrelation gemäß OEIS A006356.
Beginnt mit einem Array für die Elemente 0,1 und 2 der Sequenz, die 1 (wie von mir berechnet, damit es funktioniert) bzw. 1 und 3 sind.
Fügt
n
der Sequenz iterativ weitere Elemente hinzu und gibt dann das Element zurückn
. Es berechnet immer 2 Elemente mehr, als es tatsächlich benötigt, aber es ist immer noch eine lineare Zeit, die viel effizienter ist als meine vorherige Antwort.im Testprogramm
quelle
Mathematica,
42-40BytesDie Byteanzahl setzt eine kompatible Einzelbyte-Codierung wie CP-1252 voraus (die Standardeinstellung bei Windows-Installationen).
Dies implementiert einfach die Wiederholung, die in OEIS als unärer Operator angegeben ist.
quelle
CJam (19 Bytes)
Online-Testsuite . Dies ist ein anonymer Block (eine Funktion), der einen Gegenstand auf dem Stapel nimmt und einen auf dem Stapel belässt. Beachten Sie, dass die Testsuite enthält
a(0) = 1
.Die verwendete Wiederholung basiert auf der Beobachtung für die verwandte OEIS-Sequenz A006356 :
aber mit dem entsprechenden Versatz, der die Notwendigkeit für das Finale beseitigt,
+ 1
wie es jetzt durch gedeckt ista(0)
.Präparation
quelle
Brain-Flak, 56 Bytes
Verwendet den im ersten Kommentar auf der OEIS-Seite beschriebenen Algorithmus.
Probieren Sie es online!
Erläuterung
Die Reihenfolge kann wie folgt definiert werden:
Das Programm startet um
1
und wendet diese Wiederholung wiederholt zur Berechnung anu(k)
Annotated Code (aktuelle Annotation in Kürze)
Visualisierung der Stapel
In einer Iteration der Hauptschleife geschieht Folgendes (beachten Sie, dass die Nullen vorhanden sein können oder nicht, aber es spielt keine Rolle, wie auch immer):
Der Zustand des Stapels ist jetzt das gleiche , wie es am Anfang der Schleife wurde mit der Ausnahme , dass der aktuelle Stapel hat nun die nächsten Werte für
u
,v
undw
darauf.quelle
Perl 6, 48
Ursprünglich
aber ich habe vergessen, dass ich das brauchte,
sub f
damit die iterative Lösung siegt.quelle
Dyalog APL, 30 Bytes
Verwendet rohe Gewalt. Erklärung (zumindest mein bester Versuch):
quelle
Dyalog APL, 29 Bytes
Funktioniert unter Verwendung der rekursiven Definition der Ganzzahlsequenz OEIS A006356.
quelle
Python mit Numpy, 62 Bytes
Ich musste es versuchen, aber es scheint, als sei Python pur und die Rekursion kürzer als Numpy und die explizite, matrixbasierte Berechnung auf der OEIS-Seite.
quelle
R
6158555150 BytesÜbernimmt die Eingabe von stdin und verwendet die Matrixexponentiation, um das genaue Ergebnis zu bestimmen.
Wenn Sie eine rekursive Lösung bevorzugen, finden Sie hier eine einfache Implementierung der in OEIS aufgelisteten Wiederholungsrelation für 55 Byte .
quelle
Excel, 123 Bytes
Implementiert die Formel von OEIS:
Geben Sie wie immer
A1
in eine beliebige andere Zelle eine Formel ein.Habe alte Trig-Identitäten ausgegraben, um zu sehen, ob sie hilfreich sein könnten. Jetzt tut mir der Kopf weh.
quelle
Lithp , 79 Bytes
Implementiert die in OEIS aufgelistete rekursive Ganzzahlsequenz.
Lesbare Implementierung und Testsuite.
quelle