Ein OEIS nach dem anderen


95

Der Gewinner ist die Antwort # 345 von Scrooble . Dies bedeutet, dass der Wettbewerb offiziell beendet ist. Sie können jedoch auch weiterhin Antworten veröffentlichen, sofern die Regeln eingehalten werden.

Ein kurzer Gruß an die drei Antwortenden in Bezug auf die Anzahl der Antworten:

1. NieDzejkob - 41 Antworten

2. KSmarts - 30 Antworten

3. Hyper Neutrino - 26 Antworten


Dies ist eine Frage zur Antwortverkettung, die Sequenzen aus OEIS und die Länge der vorherigen Einreichung verwendet.

Diese Frage zur Verkettung der Antwort funktioniert folgendermaßen:

  • Ich werde die erste Antwort posten. Alle anderen Lösungen müssen sich daraus ergeben.
  • Der nächste Benutzer (nennen wir ihn BenutzerA) findet die OEIS-Sequenz, in der seine Indexnummer (siehe unten) der Länge meines Codes entspricht.
  • Unter Verwendung der Sequenz müssen sie dann in einer nicht verwendeten Sprache ein Programm codieren, das eine Ganzzahl als Eingabe n verwendet und die n-te Zahl in dieser Sequenz ausgibt.
  • Als nächstes veröffentlichen sie ihre Lösung nach meiner, und ein neuer Benutzer (BenutzerB) muss dasselbe wiederholen.

Der ndritte Term einer Sequenz ist der n-fache nach dem ersten Term, wobei der erste Wert der erste Wert ist, der auf der OEIS-Seite angegeben ist. In dieser Frage verwenden wir die 0-Indizierung für diese Sequenzen. Beispiel: Bei A000242 und n = 3ist das korrekte Ergebnis 25 .

Jedoch!

Dies ist kein , also spielt der kürzeste Code keine Rolle. Die Länge Ihres Codes hat jedoch weiterhin Auswirkungen. Um das Duplizieren von Sequenzen zu verhindern, muss Ihr bytecount eindeutig sein . Dies bedeutet, dass kein anderes Programm, das hier eingereicht wird, dieselbe Länge in Byte haben kann wie das Ihre.

Wenn es für die Länge des letzten Posts keine Sequenz gibt, ist die Sequenz für Ihren Post die niedrigste nicht verwendete Sequenz. Dies bedeutet, dass die verwendeten Sequenzen ebenfalls eindeutig sein müssen und dass die Sequenz nicht mit Ihrem bytecount identisch sein kann.

Nachdem eine Antwort gepostet wurde und mehr als eine Woche lang keine neuen Antworten gepostet wurden, gewinnt die Antwort vor der zuletzt geposteten (diejenige, die die Kette nicht unterbrochen hat).

Ein- und Ausgang

Es gelten generische Ein- und Ausgaberegeln. Die Eingabe muss eine Ganzzahl oder eine Zeichenfolgendarstellung einer Ganzzahl sein, und die Ausgabe muss den richtigen Wert in der Sequenz haben.

Formatierung

Wie bei den meisten Antworten formatieren Sie Ihre Antwort bitte so

# N. language, length, [sequence](link)

`code`

[next sequence](link)

*anything else*

Regeln

  • Sie müssen nach dem Posten mindestens 1 Stunde warten, bevor Sie eine Antwort senden.
  • Sie dürfen nicht zweimal (oder öfter) hintereinander posten.
  • Die Indexnummer einer Sequenz ist die Nummer nach dem ATeil, wobei führende Nullen entfernt werden (z. B. für A000040die Indexnummer ist 40).
  • Sie können davon ausgehen, dass weder die Eingabe noch die erforderliche Ausgabe außerhalb des Zahlenbereichs Ihrer Sprache liegen. Bitte missbrauchen Sie dies jedoch nicht, indem Sie eine Sprache auswählen, die beispielsweise nur die Zahl 1 verwenden kann.
  • Wenn Ihre Einreichung länger als 65536 Zeichen ist, geben Sie bitte einen Link an, über den Sie auf den Code zugreifen können (z. B. Pastebin).
  • n wird niemals größer als 1000 sein oder außerhalb der Grenzen für die Sequenz liegen, um einfach zu verhindern, dass Genauigkeitsdiskrepanzen eine Sprache am Wettbewerb hindern.
  • Je 150 (gültige) Antworten, desto häufiger kann eine Sprache verwendet werden. Nachdem also 150 Lösungen veröffentlicht wurden, kann jede Sprache zweimal verwendet werden (wobei alle vorherigen Antworten darauf angerechnet werden). Wenn beispielsweise 150 Antworten gepostet wurden, kann Python 3 zweimal verwendet werden. Da es jedoch bereits einmal verwendet wurde, kann es nur noch einmal verwendet werden, bis 300 Antworten gepostet wurden.
  • Bitte hilfreich sein und einen Link zur nächsten zu verwendenden Sequenz posten. Dies ist nicht erforderlich, aber eine Empfehlung.
  • Verschiedene Sprachversionen, z. B. Python 2 und Python 3, sind verschiedene Sprachen . Wenn beide Versionen in Try It Online verfügbar sind, handelt es sich in der Regel um unterschiedliche Sprachen. Beachten Sie jedoch, dass dies eine allgemeine Regel und keine starre Antwort ist.
  • Es ist nicht gesperrt, aber bitte versuchen Sie nicht, den Code von der OEIS-Seite zu kopieren, und versuchen Sie tatsächlich, ihn zu lösen.
  • Hardcoding ist nur zulässig, wenn die Sequenz endlich ist. Bitte beachten Sie, dass die Antwort, die dies veranlasste ( Nr. 40 ), die Ausnahme von der Regel ist. Ein paar Antworten zu Beginn des Ketten-Hardcodes, aber diese können ignoriert werden, da es nichts Gutes ist, die Kette bis beispielsweise # 100 zu löschen.

Antwortkettenschnipsel


Kommentare sind nicht für eine längere Diskussion gedacht. Diese Unterhaltung wurde in den Chat verschoben .
Dennis

Ist es in Ordnung , wenn ein Programm müsse eine bessere Fließkomma-Genauigkeit für die builtin float/ doubleArt , um für größere Werte zu produzieren n?
NieDzejkob

1
@Giuseppe Nein, wie Sie die Zahlen sind zu erzeugen , indem die Mathematik zu tun, anstatt nur sie in ein Array / string platzieren
CAIRD coinheringaahing

2
@cairdcoinheringaahing Meiner Meinung nach ist das eine Hardcodierung der Gammakonstante. Es funktioniert nicht "theoretisch" für größere Zahlen.
user202729

Antworten:


4

345. Brainfuck , 162 Bytes, A000301

+<<,[>>[>]<<[>>+>+<<<-]>>>[<<<+>>>-]<<[>+>+<<-]>>[<<+>>-]<[<]<-]>>[>]+<[-]++<[>[>>+>+<<<-]>>>[<<<+>>>-]<<[>[>+>+<<-]>>[<<+>>-]<<<-]>[-]>[<<+>>-]<<<<-]>>too golfy.

Probieren Sie es online!

Nächste Sequenz!

Dies nimmt als Eingabe das Zeichen mit dem Codepunkt n(gemäß den Spezifikationen von BF) und gibt es auf die gleiche Weise aus. Um die Zahlen zu sehen, empfehle ich die Verwendung von @ Timwi's EsotericIDE .

Erläuterung:

+<<,                                  Initialize the tape with the first two Fibonacci numbers. Take loop counter from input.
[                                     n times:
  >>[>]                                 Move to the end of the tape. 
  <<[>>+>+<<<-]>>>[<<<+>>>-]            Add fib(n-2)...
  <<[>+>+<<-]>>[<<+>>-]                 and fib(n-1). Store on the end of the tape.
  <[<]<-                                Move back to start of tape. Update loop counter.
]                                     End loop.
>>[>]+<[-]++<                         Delete the extra Fibonacci number and prepare for exponentiation. 
[                                     fib(n) times:
  >[>>+>+<<<-]>>>[<<<+>>>-]<<           Copy the base (2) to preserve it.
  [>[>+>+<<-]>>[<<+>>-]<<<-]            Multiply what started as a 1 by the base.
  >[-]>[<<+>>-]<<<<-                    Clean up and update loop counter.
]                                     End loop.
>>too golfy.                          Add some bytes, for all sequences <162 had been used. Print result. 

Da hiermit alle Fibonacci-Zahlen bis zu der wichtigen Zahl gespeichert werden, schlägt die WIRKLICH große Eingabe auf einem begrenzten Band fehl.

Dies könnte durch Hardcodierung der Basis (2) erheblich verkürzt werden, aber Golf ist überhaupt kein Problem.


Als die nächste Antwort (# 346) die Kette durchbrach, ist Ihre Antwort der Gewinner!
Caird Coinheringaahing

1
@cairdcoinheringaahing Vielen Dank für diese erstaunliche Herausforderung. Es macht mich traurig, dass es jetzt enden sollte, aber wie alle guten Dinge auf der Welt hat es auch enden müssen. Nun, um diese schlechte Entschuldigung für Code zu spielen, denn es ist jetzt die erste Antwort, die jeder sehen wird, und es muss beeindruckend kurz sein ...
Khuldraeseth na'Barya

@ Scrooble Sie können nicht wirklich die Länge ändern ...
NieDzejkob

@NieDzejkob Ja, aber ich kann Golf spielen und etwas mehr Polster hinzufügen, um die gleiche Länge zu behalten.
Khuldraeseth na'Barya

@cairdcoinheringaahing "brach die Kette"? Was bedeutet das?
Magic Octopus Urn

40

22. FiM ++ , 982 Bytes, A000024

Hinweis : Wenn Sie dies lesen, möchten Sie möglicherweise nach "ältesten" sortieren.

Dear PPCG: I solved A000024!

I learned how to party to get a number using the number x and the number y.
Did you know that the number beers was x?
For every number chug from 1 to y,
  beers became beers times x!
That's what I did.
Then you get beers!
That's all about how to party.

Today I learned how to do math to get a number using the number n.
Did you know that the number answer was 0?
For every number x from 1 to n,
  For every number y from 1 to n,
    Did you know that the number tmp1 was how to party using x and 2?
    Did you know that the number tmp2 was how to party using y and 2?
    Did you know that the number max was how to party using 2 and n?
    tmp2 became tmp2 times 10!
    tmp1 became tmp1 plus tmp2!
    If tmp1 is more than max then: answer got one more.
  That's what I did.
That's what I did.
Then you get answer!
That's all about how to do math.

Your faithful student, BlackCap.

PS:  This is the best answer
PPS: This really is the best answer

Nächste Sequenz


10
Hahaha, ich habe so heftig gelacht. +1 für die Wahl der Sprache :-)
ETHproductions

Erstaunlich, nimm meine upvote
downrep_nation

22

1. Dreieckig , 10 Bytes, A000217

$\:_%i/2*<

Probieren Sie es online!

Nächste Sequenz

Wie es funktioniert

Der Code wird in dieses Dreieck formatiert

   $
  \ :
 _ % i
/ 2 * <

Wenn die IP am $und im Südosten beginnt (SE, heh), funktioniert das folgendermaßen:

$            Take a numerical input (n);     STACK = [n]
 :           Duplicate it;                   STACK = [n, n]
  i          Increment the ToS;              STACK = [n, n+1]
   <         Set IP to W;                    STACK = [n, n+1]
    *        Multiply ToS and 2ndTos;        STACK = [n(n+1)]
     2       Push 2;                         STACK = [n(n+1), 2]
      /      Set IP to NE;                   STACK = [n(n+1), 2]
       _     Divide ToS by 2ndToS;           STACK = [n(n+1)/2]
        \    Set IP to SE (heh);             STACK = [n(n+1)/2]
         %   Output ToS as number;           STACK = [n(n+1)/2]
          *  Multiply ToS by 2ndToS (no op); STACK = [n(n+1)/2]

13
1. Dreieckig, 10 Bytes, A000217. * follow link * A000217 Triangular numbers...
MD XF

22

73. Sternenklar , 363 Bytes, A000252

, +      + *     '.     `
 + + + +  *  *  *  +     
 +`      +*       +    ` 
 + +   +  + +   + *  '   
   +   '  ####`  + +   + 
 + +    ####  +*   +    *
    '  #####  +      + ' 
  `    ######+  + +   +  
+ +   + #########   * '  
 +   +  + #####+ +      +
*  +      + * +  *  *   +
   +  *  + + + +  *  *   
+   +  +   *   + `  + +  
 +  + +   + *'    +    +.

Probieren Sie es online!

Nächste Sequenz

Verwendet die Formel " a(n) = n^4 * product p^(-3)(p^2 - 1)*(p - 1)wobei das Produkt über allen Primzahlen p liegt, die n teilen" von OEIS.

Der Mond ist ein No-Op, aber hey, das ist kein Code-Golf.


Sterne im Mond? hmmm
betseg

19

97. Python 3 (PyPy) , 1772 Bytes, A000236

Zunächst einmal vielen Dank an Dr. Max Alekseyev für die Geduld mit mir. Ich bin sehr glücklich, dass ich ihn per E-Mail kontaktieren konnte, um diese Herausforderung zu verstehen. Seine Math.SE-Antwort hier hat mir sehr geholfen. Vielen Dank an Wheat Wizard, der mir ebenfalls geholfen hat. :)

plist = []

def primes(maximal = -1): # Semi-efficient prime number generator with caching up to a certain max.
	index = plist and plist[-1] or 2
	for prime in plist:
		if prime <= maximal or maximal == -1: yield prime
		else: break
	while index <= maximal or maximal == -1:
		composite = False
		for prime in plist:
			if index % prime == 0:
				composite = True
				break
		if not composite:
			yield index
			plist.append(index)
		index += 1

def modinv(num, mod): # Multiplicative inverse with a modulus
	index = 1
	while num * index % mod != 1: index += 1
	return index

def moddiv(num, dnm, mod):
	return num * modinv(dnm, mod) % mod

def isPowerResidue(num, exp, mod):
	for base in range(mod):
		if pow(base, exp, mod) == num:
			return base
	return False

def compute(power, prime):
	for num in range(2, prime):
		if isPowerResidue(moddiv(num - 1, num, prime), power, prime):
			return num - 1
	return -1

# file = open('output.txt', 'w')

def output(string):
	print(string)
	# file.write(str(string) + '\n')

def compPrimes(power, count):
	maximum = 0
	index = 0
	for prime in getValidPrimes(power, count):
		result = compute(power, prime)
		if result > maximum: maximum = result
		index += 1
		# output('Computed %d / %d = %d%% [result = %d, prime = %d]' % (index, count, (100 * index) // count, result, prime))
	return maximum

def isValidPrime(power, prime):
	return (prime - 1) % power == 0

def getValidPrimes(power, count):
	collected = []
	for prime in primes():
		if isValidPrime(power, prime):
			collected.append(prime)
		if len(collected) >= count:
			return collected
		# output('Collected %d / %d = %d%% [%d]' % (len(collected), count, (100 * len(collected)) // count, prime))

power = int(input()) + 2

output(compPrimes(power, 100))

# file.close()

Probieren Sie es online!

Wenn es das falsche Ergebnis gibt, erhöhen Sie einfach die 100 auf etwas Größeres. Ich denke, dass 10000 für 4 funktionieren wird, aber ich lasse meinen Computer über Nacht laufen, um dies zu bestätigen. Es kann einige Stunden dauern, bis der Vorgang abgeschlossen ist.

Beachten Sie, dass der (PyPy-) Teil nur so ist, dass ich Python wieder verwenden kann. Ich kenne wirklich nicht viele andere Sprachen und werde nicht versuchen, dies auf Java zu portieren, und riskieren, nicht rechtzeitig fertig zu werden.

Nächste Sequenz (Bitte mache auch keine verrückten Mathe-Sachen mehr. Ich habe keine Python-Versionen mehr, damit jemand anderes diese Herausforderung speichern muss. D :)


Nun, es gibt immer pypy3
ASCII

15

107. TrumpScript , 1589 Bytes, A000047

My cat hears everything really well
because with me every cat is a safe cat
Everybody knows that one is 1000001 minus 1000000
but only most of you that two is, one plus one;
As always nothing is, one minus one;
My dog is one year old.
I promise you that as long as you vote on me, nothing will be less cool than a cat;:
Much dog is, dog times two;
Dead cat is, cat minus one;!
I will make dog feel good, food for dog plus one;
Roads can be made using different things. Asphalt is one of them.
As long as Hillary jailed, I love asphalt less than my dog;:
Roads are, always made using asphalt plus one of other things;
I promise my roadways are, two times asphalt than you want;
My roadways are great, always roadways plus one;
Vladimir is nothing more than my friend.
Name of Putin is Vladimir.
As long as, Putin eat less roadways;:
China is nothing interesting.
We all know people speaking Chinese are from China.
As long as, Chinese makes less roads;:
I will make economy, for Putin - Chinese will love me;
If it will mean, economy is asphalt in Russia?;:
I will make cat feel good, cat plus one dollar on food;
Make Vladimir roadways to help Russia economy.
Never make china roads!
I show you how great China is, China plus one; You can add numbers to China.
Like Chinese is, China times China makes sense;
Like Chinese is, two times Chinese letter;!
Make Vladimir happy, Vladimir plus one million dollars;
I also show you how great Putin is, Vladimir times Vladimir; You can do number stuff to Putin too!
I will make asphalt roads a lot!
Everybody say cat. You did it? America is great.

Probieren Sie es online!

Beim ersten Programmieren in TrumpScript habe ich das Rad möglicherweise einige Male neu erfunden - 4 Zeilen sind für die Berechnung von 2 ^ n vorgesehen. Ich habe versucht, es so aussehen zu lassen, wie es (betrunken) Trump sagen könnte. Als Bonus habe ich hier ein Python-Skript geschrieben, um zu überprüfen, ob ich alles richtig mache. Es gibt einige Unterschiede zum obigen Programm, aber viele davon sind direkt gleichwertig.

cat = int(input())
dog = 2 ** cat + 1
asphalt = 1
cat = 0
while asphalt < dog:
    roads = asphalt + 1
    roadways = 2 * asphalt + 1
    vladimir = 0
    putin = vladimir
    while putin < roadways:
        china = 0
        chinese = china
        while chinese < roads:
            chair = putin - chinese
            if chair == asphalt:
                cat += 1
                vladimir = roadways
                china = roads
            china += 1
            chinese = 2 * china * china
        vladimir += 1
        putin = vladimir * vladimir
    asphalt = roads
print(cat)

Nächste Sequenz!


3
I will make cat feel goodO_O
Business Cat

Funktioniert I will make Business Cat feel good
leider

14

30. Python 1 , 1112 Bytes, A000046

def rotations(array):
	rotations = []
	for divider_index in range(len(array)):
		rotations.append(array[divider_index:] + array[:divider_index])
	return rotations

def next(array):
	for index in range(len(array) - 1, -1, -1):
		array[index] = 1 - array[index]
		if array[index]: break
	return array

def reverse(array):
	reversed = []
	for index in range(len(array) - 1, -1, -1):
		reversed.append(array[index])
	return reversed

def primitive(array):
	for index in range(1, len(array)):
		if array == array[:index] * (len(array) / index): return 1
	return 0

def necklaces(size):
	previous_necklaces = []
	array = [0] * size
	necklaces = 0
	for iteration in range(2 ** size):
		if not primitive(array) and array not in previous_necklaces:
			necklaces = necklaces + 1
			for rotation in rotations(array):
				complement = []
				for element in rotation:
					complement.append(1 - element)
				previous_necklaces.append(rotation)
				previous_necklaces.append(complement)
				previous_necklaces.append(reverse(rotation))
				previous_necklaces.append(reverse(complement))
		array = next(array)
	return necklaces

Probieren Sie es online!

Ich werde mich nicht einmal darum kümmern, Golf zu spielen. Hey, es ist nicht meine längste Python-Antwort auf dieser Site!

Nächste Sequenz


1
Herzlichen Glückwunsch zum Entschlüsseln der Mathematik: D
Leaky Nun


@LeakyNun Wie ich schon sagte, ich habe mich nicht darum gekümmert, Golf zu spielen. Außerdem ist es nicht meine längste Python-Antwort auf dieser Site, so idc: P, aber nett
HyperNeutrino

@LeakyNun Und danke: D Es hat eine Weile
gedauert,

@LeakyNun 309 Bytes, da der tatsächliche Wert von _irrelevant ist; wir müssen das nur viele Male wiederholen
HyperNeutrino

13

2. Haskell, 44 Bytes, A000010

f k|n<-k+1=length.filter(==1)$gcd n<$>[1..n]

Probieren Sie es online!

Nächste Sequenz


12
Der Name der nächsten Sequenz ...
totalhuman

@ Totallyhuman arme Kaninchen ...
Erik der Outgolfer

Sollen wir auf den vorherigen Beitrag verlinken?
Undichte Nonne

Es schmerzt mich, dass ich jetzt nicht Golf spielen kann. Ich musste der erste sein, den du siehst
BlackCap

Was ist die nächste Sequenz? Ich verstehe die drei nicht: P
Beta Decay

13

9. Pyth , 19 Bytes, A000025

?>Q0sm@_B1-edld./Q1

Testsuite .

Nächste Sequenz

a (n) = Anzahl der Partitionen von n mit geradem Rang minus Anzahl mit ungeradem Rang. Der Rang einer Partition ist der größte Teil abzüglich der Anzahl der Teile.


Für diejenigen , die Pyth weiß, ich absichtlich verwendet >Q0statt , Qum zu wissen Sie, die nächste Sequenz A000019 zu sein.
Undichte Nonne

1
Von der OEIS-SeiteKeywords: easy,nice
BlackCap

@LeakyNun Ja da ich sonst A000017 lösen müsste ... eklig.
Erik der Outgolfer


12

206. Proton , 3275 Bytes, A000109

# This took me quite a while to write; if it's wrong, please tell me and I'll try to fix it without changing the byte count..

permutations = x => {
	if len(x) == 0 return [ ]
	if len(x) == 1 return [x]
	result = []
	for index : range(len(x)) {
		for permutation : permutations(x[to index] + x[index + 1 to]) {
			result.append([x[index]] + permutation)
		}
	}
	return result
}

adjacency = cycles => {
	cycles = cycles[to]
	size = cycles.pop()
	matrix = [[0] * size for i : range(size)]
	for cycle : cycles {
		i, j, k = cycle[0], cycle[1], cycle[2]
		matrix[i][j] = matrix[i][k] = matrix[j][i] = matrix[j][k] = matrix[k][i] = matrix[k][j] = 1
	}
	return matrix
}

transform = a => [[a[j][i] for j : range(len(a[i]))] for i : range(len(a))]

isomorphic = (a, b) => {
	return any(sorted(b) == sorted(transform(A)) for A : permutations(transform(a)))
}

intersection = (a, b) => [x for x : a if x in b]

union = (a, b) => [x for x : a if x not in b] + list(b)

validate = graph => {
	matrix = adjacency(graph)
	rowsums = map(sum, matrix)
	r = 0
	for s : rowsums if s + 1 < graph[-1] r++
	return 2 || r
}

graphs = nodes => {
	if nodes <= 2 return []
	if nodes == 3 return [[(0, 1, 2), 3]]
	result = []
	existing = []
	for graph : graphs(nodes - 1) {
		graph = graph[to]
		next = graph.pop()
		for index : range(len(graph)) {
			g = graph[to]
			cycle = g.pop(index)
			n = g + [(cycle[0], cycle[1], next), (cycle[1], cycle[2], next), (cycle[2], cycle[0], next), next + 1]
			N = sorted(adjacency(n))
			if N not in existing {
				existing += [sorted(transform(a)) for a : permutations(transform(adjacency(n)))]
				result.append(n)
			}
			for secondary : index .. len(graph) - 1 {
				g = graph[to]
				c1 = g.pop(index)
				c2 = g.pop(secondary)
				q = union(c1, c2)
				g = [k for k : g if len(intersection(k, intersection(c1, c2))) <= 1]
				if len(intersection(c1, c2)) == 2 {
					for i : range(3) {
						for j : i + 1 .. 4 {
							if len(intersection(q[i, j], intersection(c1, c2))) <= 1 {
								g.append((q[i], q[j], next))
							}
						}
					}
				}
				g.append(next + 1)
				N = sorted(adjacency(g))
				if N not in existing {
					existing += [sorted(transform(a)) for a : permutations(transform(adjacency(g)))]
					result.append(g)
				}
				for tertiary : secondary .. len(graph) - 2 {
					g = graph[to]
					c1 = g.pop(index)
					c2 = g.pop(secondary)
					c3 = g.pop(tertiary)
					q = union(union(c1, c2), c3)
					g = [k for k : g if len(intersection(k, intersection(c1, c2))) <= 1 and len(intersection(k, intersection(c2, c3))) <= 1]
					if len(q) == 5 and len(intersection((q1 = intersection(c1, c2)), (q2 = intersection(c2, c3)))) <= 1 and len(q1) == 2 and len(q2) == 2 {
						for i : range(4) {
							for j : i + 1 .. 5 {
								if len(intersection(q[i, j], q1)) <= 1 and len(intersection(q[i, j], q2)) <= 1 {
									g.append((q[i], q[j], next))
								}
							}
						}
						g.append(next + 1)
						N = sorted(adjacency(g))
						if N not in existing {
							existing += [sorted(transform(a)) for a : permutations(transform(adjacency(g)))]
							result.append(g)
						}
					}
				}
			}
		}
	}
	return [k for k : result if max(sum(k[to -1], tuple([]))) + 1 == k[-1] and validate(k)]
}

x = graphs(int(input()) + 3)
print(len(x))

Probieren Sie es online!

Nächste Sequenz


Warten Sie, Sie haben es tatsächlich getan? Wenn Sie mit diesen verdammten Programmen keine Arbeit schreiben und mit einem Professor sprechen, verzichten Sie auf etwas Cooles: P
Stephen

@ Stephen Derzeit Bugfixing lol
HyperNeutrino

Ist dies der Ansatz, Dreiecke, Quadrate und Pentagone nach Plantri zu teilen? Sieht aus wie es sein könnte, aber einige der Syntax ist unbekannt.
Peter Taylor

1
@PeterTaylor Angenommen, ich verstehe den Ansatz, den Sie beschreiben, ja, er sucht nach Dreiecken und platziert einen Scheitelpunkt neben allen drei Scheitelpunkten oder zwei benachbarten Zyklen und löscht die gemeinsame Kante und platziert einen Scheitelpunkt neben allen vier, für drei Dreiecke dasselbe auf einem Fünfeck. Ich denke, das ist einer, den du beschreibst.
HyperNeutrino


12

308. ENIAC (Simulator) , 3025 Bytes, A006060

Pseudocode:

repeat{
    M←input
    N←-M
    A←1
    B←253
    while(N<0){
        C←60
        C←C-A
        repeat(194){
            C←C+B
        }
        A←B
        B←C
        N←N+1
    }
    output←A
}

Kein Online-Simulator, Ausführungsergebnis: Kartenleser eingang Lochkartenausgabe

Register und Konstanten:

A: 1-2
B: 3-4
C: 5-6
M: 7
N: 8

input: const. A
253: const. J
60: const. K
194: Master programmer decade limit 1B

Programmsignalfluss und Datenfluss: Signalfluss und Datenflussdiagramm programmieren

Voller "Code" im Pastebin oder in HTML-Kommentaren im Markup dieser Antwort, um Linkrot und eine recht lange Antwort zum gleichzeitigen Scrollen zu verhindern. Das macht Spaß!

Nächste Sequenz


Könnten Sie bitte einen Link zur nächsten Sequenz hinzufügen
Zacharý

@ Zacharý Der Link ist in der Post. Ich verschiebe es ans Ende des Beitrags, damit es leichter zu finden ist.
Leo3065

12

15. CJam, 85 Bytes, A000060

{ee\f{\~\0a*@+f*}:.+}:C;2,qi:Q,2f+{_ee1>{~2*\,:!X*X<a*~}%{CX<}*W=+}fX_0a*1$_C.- .+Q)=

Online-Demo

Nächste Sequenz

Präparation

OEIS gibt

Gf: S (x) + S (x ^ 2) - S (x) ^ 2, wobei S (x) die Erzeugungsfunktion für A000151 ist. - Pab Ter, 12. Oktober 2005

wo

S(x)=xi11(1xi)2s(i)=xi1(1+xi+x2i+)2s(i)
{           e# Define a block to convolve two sequences (multiply two polynomials)
  ee\f{     e#   Index one and use the other as an extra parameter for a map
    \~\0a*  e#     Stack manipulations; create a sequence of `index` 0s
    @+f*    e#     Shift the extra parameter poly and multiply by the coefficient
  }
  :.+       e#   Fold pointwise add to sum the polys
}:C;        e# Assign the block to C (for "convolve")
2,          e# Initial values of S: S(0) = 0, S(1) = 1
qi:Q        e# Read integer and assign it to Q
,2f+{       e# For X = 2 to Q+1
  _ee1>     e#   Duplicate accumulator of S, index, and ditch 0th term
  {         e#   Map (over notional variable i)
    ~2*\    e#     Double S(i) and flip i to top of stack
    ,:!     e#     Create an array with a 1 and i-1 0s
    X*X<    e#     Replicate X times and truncate to X values
            e#     This gives g.f. 1/(1-x^i) to the first X terms
    a*~     e#     Create 2S(i) copies of this polynomial
  }%
  {CX<}*    e#   Fold convolution and truncation to X terms
  W=+       e#   Append the final coefficient, which is S(X), to the accumulator
}fX
_0a*        e# Pad a copy to get S(X^2)
1$_C        e# Convolve two copies to get S(X)^2
.-          e# Pointwise subtraction
 .+         e# Pointwise addition. Note the leading space because the parser thinks
            e# -. is an invalid number
Q)=         e# Take the term at index Q+1 (where the +1 adjusts for OEIS offset)

1 Minute und 33 Sekunden vor mir ... während ich die Erklärung eintippte
Undichte Nonne

11

67. LOLCODE , 837 Bytes, A000043

HAI 1.2
  CAN HAS STDIO?

  I HAS A CONT ITZ 0
  I HAS A ITRZ ITZ 1
  I HAS A NUMBAH
  GIMMEH NUMBAH
  NUMBAH R SUM OF NUMBAH AN 1

  IM IN YR GF
    ITRZ R SUM OF ITRZ AN 1

    I HAS A PROD ITZ 1
    IM IN YR MOM UPPIN YR ASS WILE DIFFRINT ITRZ AN SMALLR OF ITRZ AN ASS
      PROD R PRODUKT OF PROD AN 2
    IM OUTTA YR MOM
    PROD R DIFF OF PROD AN 1

    I HAS A PRAIME ITZ WIN
    I HAS A VAR ITZ 1
    IM IN YR MOM
      VAR R SUM OF VAR AN 1
      BOTH SAEM VAR AN PROD, O RLY?
        YA RLY, GTFO
      OIC
      BOTH SAEM 0 AN MOD OF PROD AN VAR, O RLY?
        YA RLY
          PRAIME R FAIL
          GTFO
      OIC
    IM OUTTA YR MOM

    BOTH SAEM PRAIME AN WIN, O RLY?
      YA RLY, CONT R SUM OF CONT AN 1
    OIC

    BOTH SAEM NUMBAH AN CONT, O RLY?
      YA RLY, GTFO
    OIC
  IM OUTTA YR GF

  VISIBLE ITRZ
KTHXBYE

Meine Feststelltaste muss fliehen, also habe ich das Ganze bei gedrückter Umschalttaste geschrieben.

Probieren Sie es online!

Nächste Sequenz


+1 für die VerwendungPRAIME
Leaky Nun

3
Sie sind ein Programmierer, Sie hätten dies schreiben und es dann durch ein Python-Skript ausführen können, upperdas es -.-
Stephen

5
@StepHen Oder einfach gggUGin vim, wo ich es geschrieben habe, aber ich bin nicht so schlau
BlackCap

10

10. Magma, 65 Bytes, A000019

f:=function(n);return NumberOfPrimitiveGroups(n+1);end function;

Probieren Sie es hier aus

lol eingebaut

Nächste Sequenz


@ETHproductions :) Kein Problem, danke an die OEIS-Seite, obwohl sie genau dort eingebaut ist
HyperNeutrino

4
; _; Ich habe A000064 gelöst und du hast es geändert. Abgestimmt.
Undichte Nonne

Meine Güte, so viele Partitionssequenzen
ETHproductions

Ich habe versehentlich A007317 gelöst, als ich versuchte, dies in Python ( TIO ) zu tun : P
ETHproductions 21.07.17

Neu bewertet! \ o /
Undichte Nonne


9

121. Pip , 525 Bytes, A000022

n:(a+1)//2
t:[[0]RL(3*a+3)PE1]
Fh,n{
  m:([0]RL(3*a+3))
  Fi,(a+1){
    Fj,(a+1){
      Fk,(a+1)m@(i+j+k)+:(t@h@i)*(t@h@j)*(t@h@k)
      m@(i+2*j)+:3*(t@h@i)*(t@h@j)
    }
    m@(3*i)+:2*(t@h@i)
  }
  t:(tAE(m//6PE1))
}
k:t@n
o:0
Fh,aFi,aFj,aI(h+i+j<a)o+:(k@h)*(k@i)*(k@j)*k@(a-1-h-i-j)
Fh,((a+1)//2){
  Fi,aI(2*h+i<a){o+:6*(k@h)*(k@i)*(k@(a-1-2*h-i))}
  I(a%2=1)o+:3*(k@h)*(k@((a-1-2*h)//2))
}
Fh,((a+2)//3)o+:8*(k@h)*(k@(a-1-3*h))
I(a%4=1)o+:6*k@(a//4)
o//:24
Ia(o+:t@n@a)
Fh,nFj,(a+1)o-:(t@(h+1)@j-t@h@j)*(t@(h+1)@(a-j))
o

Online-Demo

Nächste Sequenz

Tolles Faktum: Als die Herausforderung zum ersten Mal veröffentlicht wurde, erstellte ich eine Liste mit kleinen unangenehmen Folgenummern, die ich mit CJam anstreben wollte, und A000022 stand ganz oben auf der Liste.

Dies implementiert die in EM Rains und NJA Sloane, On Cayleys Enumeration of Alkanes (oder 4-Valent Trees) , Journal of Integer Sequences, Vol. 3, No. 2 (1999), wobei die Summe für so viele Terme genommen wird, wie für die Festsetzung des Koeffizienten erforderlich sind, und dann drei Viertel der Summe teleskopiert werden. Insbesondere bedeutet das Teleskopieren der ersten Hälfte, dass der Zyklusindex von nur auf einen von ihnen und nicht auf alle von ihnen angewendet werden muss.CknS4Th

Der Code zerfällt als

; Calculate the relevant T_h
t:[[0]RL(3*a+3)PE1]
Fh,n{
  m:([0]RL(3*a+3))
  Fi,(a+1){
    Fj,(a+1){
      Fk,(a+1)m@(i+j+k)+:(t@h@i)*(t@h@j)*(t@h@k)
      m@(i+2*j)+:3*(t@h@i)*(t@h@j)
    }
    m@(3*i)+:2*(t@h@i)
  }
  t:(tAE(m//6PE1))
}

; Calculate the cycle index of S_4 applied to the last one
k:t@n
o:0
Fh,aFi,aFj,aI(h+i+j<a)o+:(k@h)*(k@i)*(k@j)*k@(a-1-h-i-j)
Fh,((a+1)//2){
  Fi,aI(2*h+i<a){o+:6*(k@h)*(k@i)*(k@(a-1-2*h-i))}
  I(a%2=1)o+:3*(k@h)*(k@((a-1-2*h)//2))
}
Fh,((a+2)//3)o+:8*(k@h)*(k@(a-1-3*h))
I(a%4=1)o+:6*k@(a//4)
o//:24

; Handle the remaining convolution,
; pulling out the special case which involves T_{-2}
Ia(o+:t@n@a)
Fh,nFj,(a+1)o-:(t@(h+1)@j-t@h@j)*(t@(h+1)@(a-j))

Beachten Sie, dass dies mein erstes Pip-Programm ist und daher wahrscheinlich nicht sehr idiomatisch ist.


Kommentare sind nicht für eine längere Diskussion gedacht. Diese Unterhaltung wurde in den Chat verschoben .
Dennis

9

156. C # (Mono), 2466 Bytes, A000083

Hinweis: Der Score beträgt 2439 Bytes für den Code und 27 für das Compiler-Flag -reference:System.Numerics.

using Num = System.Numerics.BigInteger;
namespace PPCG
{
    class A000083
    {
        static void Main(string[] a)
        {
            int N = int.Parse(a[0]) + 1;

            var phi = new int[N + 1];
            for (int i = 1; i <= N; i++)
                phi[i] = 1;
            for (int p = 2; p <= N; p++)
            {
                if (phi[p] > 1) continue;
                for (int i = p; i <= N; i += p)
                    phi[i] *= p - 1;
                int pa = p * p;
                while (pa <= N)
                {
                    for (int i = pa; i <= N; i += pa)
                        phi[i] *= p;
                    pa *= p;
                }
            }

            var aik = new Num[N + 1, N + 1];
            var a035350 = new Num[N + 1];
            var a035349 = new Num[N + 1];
            aik[0, 0] = aik[1, 1] = a035350[0] = a035350[1] = a035349[0] = a035349[1] = 1;
            for (int n = 2; n <= N; n++)
            {
                // A000237 = EULER(A035350)
                Num nbn = 0;
                for (int k = 1; k < n; k++)
                    for (int d = 1; d <= k; d++)
                        if (k % d == 0) nbn += d * a035350[d] * aik[1, n - k];
                aik[1, n] = nbn / (n - 1);

                // Powers of A000237 are used a lot
                for (int k = 2; k <= N; k++)
                    for (int i = 0; i <= n; i++)
                        aik[k, n] += aik[k - 1, i] * aik[1, n - i];

                // A035350 = BIK(A000237)
                Num bn = 0;
                for (int k = 1; k <= n; k++)
                {
                    bn += aik[k, n];
                    if (k % 2 == 1)
                        for (int i = n & 1; i <= n; i += 2)
                            bn += aik[1, i] * aik[k / 2, (n - i) / 2];
                    else if (n % 2 == 0)
                        bn += aik[k / 2, n / 2];
                }
                a035350[n] = bn / 2;

                // A035349 = DIK(A000237)
                Num dn = 0;
                for (int k = 1; k <= n; k++)
                {
                    // DIK_k is Polyà enumeration with the cyclic group D_k
                    // The cycle index for D_k has two parts: C_k and what Bower calls CPAL_k
                    // C_k
                    Num cikk = 0;
                    for (int d = 1; d <= k; d++)
                        if (k % d == 0 && n % d == 0)
                            cikk += phi[d] * aik[k / d, n / d];
                    dn += cikk / k;

                    // CPAL_k
                    if (k % 2 == 1)
                        for (int i = 0; i <= n; i += 2)
                            dn += aik[1, n - i] * aik[k / 2, i / 2];
                    else
                    {
                        Num cpalk = 0;
                        for (int i = 0; i <= n; i += 2)
                            cpalk += aik[2, n - i] * aik[k / 2 - 1, i / 2];
                        if (n % 2 == 0)
                            cpalk += aik[k / 2, n / 2];
                        dn += cpalk / 2;
                    }
                }
                a035349[n] = dn / 2;
            }

            // A000083 = A000237 + A035350 - A000237 * A035349
            var a000083 = new Num[N + 1];
            for (int i = 0; i <= N; i++)
            {
                a000083[i] = aik[1, i] + a035349[i];
                for (int j = 0; j <= i; j++) a000083[i] -= aik[1, j] * a035350[i - j];
            }

            System.Console.WriteLine(a000083[N - 1]);
        }
    }
}

Online-Demo . Dies ist ein vollständiges Programm, das Eingaben über die Befehlszeile entgegennimmt.

Nächste Sequenz

Präparation

Ich folge Bowens Kommentar in OEIS, dass die Erzeugungsfunktion, A000083(x) = A000237(x) + A035349(x) - A000237(x) * A035350(x)in der die Komponentenerzeugungsfunktionen verknüpft sind, wie folgt transformiert wird

  • A000237(x) = x EULER(A035350(x))
  • A035350(x) = BIK(A000237(x))
  • A035349(x) = DIK(A000237(x))

Ich verwende die Definitionen von BIKund DIKvon https://oeis.org/transforms2.html, aber die Formeln scheinen eine Reihe von Tippfehlern zu haben. Ich korrigierte LPALohne große Schwierigkeiten und leitete unabhängig eine Formel für DIKdie Anwendung der Pólya-Aufzählung auf den Zyklusindex der Diedergruppe ab . Zwischen # 121 und # 156 lerne ich viel über die Pólya-Aufzählung. Ich habe einige Errata eingereicht , die sich für andere als nützlich erweisen können, wenn diese Transformationen in der Kette erneut auftreten.



8

13. VB.NET (.NET 4.5), 1246 Bytes, A000131

Public Class A000131
    Public Shared Function Catalan(n As Long) As Long
        Dim ans As Decimal = 1
        For k As Integer = 2 To n
            ans *= (n + k) / k
        Next
        Return ans
    End Function
    Shared Function Answer(n As Long) As Long

        n += 7

        Dim a As Long = Catalan(n - 2)

        Dim b As Long = Catalan(n / 2 - 1)
        If n Mod 2 = 0 Then
            b = Catalan(n / 2 - 1)
        Else
            b = 0
        End If

        Dim c As Long = Catalan(n \ 2 - 1) ' integer division (floor)

        Dim d As Long
        If n Mod 3 = 0 Then
            d = Catalan(n / 3 - 1)
        Else
            d = 0
        End If

        Dim e As Long = Catalan(n / 4 - 1)
        If n Mod 4 = 0 Then
            e = Catalan(n / 4 - 1)
        Else
            e = 0
        End If

        Dim f As Long = Catalan(n / 6 - 1)
        If n Mod 6 = 0 Then
            f = Catalan(n / 6 - 1)
        Else
            f = 0
        End If

        Return (
                    a -
                    (n / 2) * b -
                    n * c -
                    (n / 3) * d +
                    n * e +
                    n * f
                ) /
                (2 * n)
    End Function
End Class

A001246

Probieren Sie es online!


8

91. Python 2 (PyPy) , 1733 Bytes, A000066

import itertools

girth = int(input()) + 3

v = 4

r = range

def p(v):
	a = [0 for i in r(v)]
	k = int((v * 2) ** .5)
	a[k - 1] = a[k - 2] = a[k - 3] = 1
	j = len(a) - 1
	for i in r(1, 3):
		a[j] = 1
		j -= i
	yield [x for x in a]
	while not all(a):
		for index in r(len(a) - 1, -1, -1):
			a[index] ^= 1
			if a[index]: break
		yield [x for x in a]

def wrap_(p, v):
	m = [[0 for j in r(v)] for i in r(v)]
	k = 0
	for i in r(0, v - 1):
		for j in r(i + 1, v):
			m[i][j] = m[j][i] = p[k]
			k += 1
	return m

def completes_cycle(edgelist):
	if not edgelist or not edgelist[1:]: return False
	start = edgelist[0]
	edge = edgelist[0]
	e = [x for x in edgelist]
	edgelist = edgelist[1:]
	while edgelist:
		_edges = [_edge for _edge in edgelist if _edge[0] in edge or _edge[1] in edge]
		if _edges:
			edgelist.remove(_edges[0])
			if _edges[0][1] in edge: _edges[0] = (_edges[0][1], _edges[0][0])
			edge = _edges[0]
		else:
			return False
	flat = sum(e, ())
	for i in flat:
		if flat.count(i) != 2: return False
	return edge[1] in start

def powerset(a):
	return sum([list(itertools.combinations(a, t)) for t in r(len(a))], [])

while True:
	ps = (v * (v - 1)) // 2
	skip = False
	for Q in p(ps):
		m = wrap_(Q, v)
		output = [row + [0] for row in m]
		output.append([0 for i in r(len(m[0]))])
		for i in r(len(m)):
			output[i][-1] = sum(m[i])
			output[-1][i] = sum(row[i] for row in m)
		if all(map(lambda x: x == 3, map(sum, m))):
			edges = []
			for i in r(v):
				for j in r(i, v):
					if m[i][j]: edges.append((i, j))
			for edgegroup in powerset(edges):
				if completes_cycle(list(edgegroup)):
					if len(edgegroup) == girth:
						print(v)
						exit(0)
					else:
						skip = True
						break
		if skip: break
	v += 1

Probieren Sie es online!

Ich hoffe, dass die Verwendung von Python 2 PyPy als weitere Hauptversion zählt. Wenn mir jemand einen Python 0-Interpreter besorgen könnte, könnte ich das auch verwenden, aber ich hoffe, das ist gültig.

Dies beginnt bei 1 Scheitelpunkt und führt zur Erstellung der Adjazenzmatrixdarstellung für jeden möglichen ungerichteten Graphen mit so vielen Scheitelpunkten. Wenn es dreiwertig ist, wird es durch die Potenz der Kanten schauen, die nach Länge sortiert werden. Wenn der erste gefundene Zyklus zu kurz ist, wird er fortgesetzt. Wenn der erste gefundene Zyklus mit der Eingabe übereinstimmt (um 3 versetzt), wird die korrekte Scheitelpunktzahl ausgegeben und der Vorgang beendet.

Nächste Sequenz <- haben Sie eine leichte Pause von all diesem mathematischen Unsinn: D

BEARBEITEN : Ich habe einige Optimierungen hinzugefügt, um es ein bisschen schneller zu machen (der dritte Term kann jedoch nicht innerhalb des 60-Sekunden-Limits von TIO berechnet werden), ohne den Bytecount zu ändern.


... und ich dachte ernsthaft, die Kette würde mit der Antwort 90
enden

1
@ppperry :) Ich mag es, schwere Herausforderungen zu meistern, weil die meisten Leute nicht einmal eine Lösung finden können, so dass ich mir keine Sorgen machen muss, dass ich übermütig werde :) (z. B. das Carbon Chain Namer-Problem)
HyperNeutrino

Es sei denn, jemand nimmt Ihre Lösung und konvertiert sie in eine schärfere Sprache
pppery

@ppperry das auch o_O: P
HyperNeutrino

1
@HyperNeutrino Herzlichen Glückwunsch zur Lösung! Ich befürchtete, die Kette gebrochen zu haben, und überlegte, die Byteanzahl zu ergänzen, um auf eine andere Sequenz hinzuweisen. Gut gemacht!
Scott Milner

8

232. Funky , 326 330 332 Bytes, A000938

function gcd (a, b) {
    while (b != 0) {
        c = a % b;
        a = b;
        b = c;
    };
    return a;
}

function A000938 (n) {
    n = n + 2;
    ans = 0;
    for (m = 2; m <= n; ++m) {
        for (k = 2; k <= n; ++k) {
            ans = ans + (((n - k) + 1) * ((n - m) + 1) * gcd(k - 1, m - 1));
        }
    }
    ans = (2 * ans) - (
        (n*n) *
        ((n*n)-1) / 6
    );
    return ans;
}

Probieren Sie es online!

Mehrsprachigkeit mit Javascript. Probieren Sie es online!

Nächste Sequenz .


Verwenden Sie die Formel auf der OEIS-Seite für O(n^2 log n)Komplexität anstelle der naiven O(n^6).

Schnelle Erklärung:

  • Für diesen Code wird die a[n_] := 2*Sum[(n - k + 1)*(n - m + 1)*GCD[k - 1, m - 1], {m, 2, n}, {k, 2, n}] - n^2*((n^2 - 1)/6)im Abschnitt Mathematica-Code beschriebene Formel verwendet.
  • Formelnachweis:

    • Die Formel ist äquivalent zu dieser .

    • Die Größe des Begrenzungsrahmens von drei Punkten sei m * k. Betrachten Sie zwei Fälle:

      • k != 0und m != 0: Es gibt zwei Möglichkeiten, die Ausrichtung der drei Punkte ( \oder /) gcd(k-1, m-1)-1zu bestimmen, und es gibt zwei (n - k) × (n - m)Möglichkeiten, die Position des Begrenzungsrahmens zu bestimmen.
      • k == 0oder m == 0: Es gibt zwei Möglichkeiten, die Ausrichtung ( |oder -), ndie Zeile / Spalte, in der sich die Punkte befinden, und Binomial[n, 3] == (n*(n-1)*(n-2)) / 6die Punkte in dieser Zeile / Spalte auszuwählen.

Einige mehrsprachige Notizen:

  • Funky hat nicht wirklich ein Schlüsselwort return. Wie ATaco jedoch erklärte , hält [Funky] dies für returneine Variable. Es wird also dieser Ausdruck analysiert, der praktisch nichts bewirkt, und dann der nächste Ausdruck analysiert. Und dies wird als Ausgabe verwendet.
  • Javascript ^als bitweises xor verwenden, im Gegensatz zu Funky, die ^als Potenzierung verwenden. Müssen n*nalso verwendet werden n^2, um die Javascript-Kompatibilität zu gewährleisten.
  • In Funky, alle Operator ( +, -, *, etc.) haben gleiche Priorität und rechtsassoziativ, so Ausdrücke richtig zu klammerten müssen.

1
+1 hatte keine Polyglotte erwartet.
ATaco

Es gibt kein Pentagony, aber Hexagony passt gut.
NieDzejkob

Dieses bytecount wurde bereits verwendet ... link
NieDzejkob

Können Sie diese Antwort auf 330 Byte auffüllen, um das bytecount-Problem zu beheben? Ich werde den Rest erledigen.
NieDzejkob

[Antwort wegen bytecount widersprüchlicher Probleme auf 332 Bytes aufgefüllt, siehe diese Chat-Nachricht ]
user202729


8

281. Java 5, 11628 Bytes, A000947

// package oeis_challenge;

import java.util.*;
import java.lang.*;

class Main {

//  static void assert(boolean cond) {
//      if (!cond)
//          throw new Error("Assertion failed!");
//  }

    /* Use the formula a(n) = A000063(n + 2) - A000936(n).
    It's unfair that I use the formula of "number of free polyenoid with n
    nodes and symmetry point group C_{2v}" (formula listed in A000063)
    without understanding why it's true...
    */

    static int catalan(int x) {
        int ans = 1;
        for (int i = 1; i <= x; ++i)
            ans = ans * (2*x+1-i) / i;
        return ans / -~x;
    }

    static int A63(int n) {
        int ans = catalan(n/2 - 1);
        if (n%4 == 0) ans -= catalan(n/4 - 1);
        if (n%6 == 0) ans -= catalan(n/6 - 1);
        return ans;
    }

    static class Point implements Comparable<Point> {
        final int x, y;
        Point(int _x, int _y) {
            x = _x; y = _y;
        }

        /// @return true if this is a point, false otherwise (this is a vector)
        public boolean isPoint() {
            return (x + y) % 3 != 0;
        }

        /// Translate this point by a vector.
        public Point add(Point p) {
            assert(this.isPoint() && ! p.isPoint());
            return new Point(x + p.x, y + p.y);
        }

        /// Reflect this point along x-axis.
        public Point reflectX() {
            return new Point(x - y, -y);
        }

        /// Rotate this point 60 degrees counter-clockwise.
        public Point rot60() {
            return new Point(x - y, x);
        }

        @Override
        public boolean equals(Object o) {
            if (!(o instanceof Point)) return false;
            Point p = (Point) o;
            return x == p.x && y == p.y;
        }

        @Override
        public int hashCode() {
            return 21521 * (3491 + x) + y;
        }

        public String toString() {
            // return String.format("(%d, %d)", x, y);
            return String.format("setxy %d %d", x * 50 - y * 25, y * 40);
        }

        public int compareTo(Point p) {
            int a = Integer.valueOf(x).compareTo(p.x);
            if (a != 0) return a;
            return Integer.valueOf(y).compareTo(p.y);
        }

        /// Helper class.
        static interface Predicate {
            abstract boolean test(Point p);
        }

        static abstract class UnaryFunction {
            abstract Point apply(Point p);
        }

    }

    static class Edge implements Comparable<Edge> {
        final Point a, b; // guarantee a < b
        Edge(Point x, Point y) {
            assert x != y;
            if (x.compareTo(y) > 0) { // y < x
                a = y; b = x;
            } else {
                a = x; b = y;
            }
        }

        public int compareTo(Edge e) {
            int x = a.compareTo(e.a);
            if (x != 0) return x;
            return b.compareTo(e.b);
        }
    }

    /// A graph consists of multiple {@code Point}s.
    static class Graph {
        private HashMap<Point, Point> points;

        public Graph() {
            points = new HashMap<Point, Point>();
        }

        public Graph(Graph g) {
            points = new HashMap<Point, Point>(g.points);
        }

        public void add(Point p, Point root) {
            assert(p.isPoint());
            assert(root.isPoint());
            assert(p == root || points.containsKey(root));
            points.put(p, root);
        }

        public Graph map(Point.UnaryFunction fn) {
            Graph result = new Graph();
            for (Map.Entry<Point, Point> pq : points.entrySet()) {
                Point p = pq.getKey(), q = pq.getValue();
                assert(p.isPoint()) : p;
                assert(q.isPoint()) : q;
                p = fn.apply(p); assert(p.isPoint()) : p;
                q = fn.apply(q); assert(q.isPoint()) : q;
                result.points.put(p, q);
            }
            return result;
        }

        public Graph reflectX() {
            return this.map(new Point.UnaryFunction() {
                public Point apply(Point p) {
                    return p.reflectX();
                }
            });
        }

        public Graph rot60() {
            return this.map(new Point.UnaryFunction() {
                public Point apply(Point p) {
                    return p.rot60();
                }
            });
        }

        @Override
        public boolean equals(Object o) {
            if (o == null) return false;
            if (o.getClass() != getClass()) return false;
            Graph g = (Graph) o;
            return points.equals(g.points);
        }

        @Override
        public int hashCode() {
            return points.hashCode();
        }

        Graph[] expand(Point.Predicate fn) {
            List<Graph> result = new ArrayList<Graph>();

            for (Point p : points.keySet()) {
                int[] deltaX = new int[] { -1, 0, 1, 1,  0, -1};
                int[] deltaY = new int[] {  0, 1, 1, 0, -1, -1};
                for (int i = 6; i --> 0;) {
                    Point p1 = new Point(p.x + deltaX[i], p.y + deltaY[i]);
                    if (points.containsKey(p1) || !fn.test(p1)
                        || !p1.isPoint()) continue;

                    Graph g = new Graph(this);
                    g.add(p1, p);
                    result.add(g);
                }
            }

            return result.toArray(new Graph[0]);
        }

        public static Graph[] expand(Graph[] graphs, Point.Predicate fn) {
            Set<Graph> result = new HashSet<Graph>();

            for (Graph g0 : graphs) {
                Graph[] g = g0.expand(fn);
                for (Graph g1 : g) {
                    if (result.contains(g1)) continue;
                    result.add(g1);
                }
            }

            return result.toArray(new Graph[0]);
        }

        private Edge[] edges() {
            List<Edge> result = new ArrayList<Edge>();
            for (Map.Entry<Point, Point> pq : points.entrySet()) {
                Point p = pq.getKey(), q = pq.getValue();
                if (p.equals(q)) continue;
                result.add(new Edge(p, q));
            }
            return result.toArray(new Edge[0]);
        }

        /**
         * Check if two graphs are isomorphic... under translation.
         * @return {@code true} if {@code this} is isomorphic
         * under translation, {@code false} otherwise.
         */
        public boolean isomorphic(Graph g) {
            if (points.size() != g.points.size()) return false;
            Edge[] a = this.edges();
            Edge[] b = g.edges();
            Arrays.sort(a);
            Arrays.sort(b);

            // for (Edge e : b)
                // System.err.println(e.a + " - " + e.b);
            // System.err.println("------- >><< ");

            assert (a.length > 0);
            assert (a.length == b.length);
            int a_bx = a[0].a.x - b[0].a.x, a_by = a[0].a.y - b[0].a.y;
            for (int i = 0; i < a.length; ++i) {
                if (a_bx != a[i].a.x - b[i].a.x || 
                    a_by != a[i].a.y - b[i].a.y) return false;
                if (a_bx != a[i].b.x - b[i].b.x || 
                    a_by != a[i].b.y - b[i].b.y) return false;
            }

            return true;
        }

        // C_{2v}.
        public boolean correctSymmetry() {

            Graph[] graphs = new Graph[6];
            graphs[0] = this.reflectX();
            for (int i = 1; i < 6; ++i) graphs[i] = graphs[i-1].rot60();
            assert(graphs[5].rot60().isomorphic(graphs[0]));
            int count = 0;
            for (Graph g : graphs) {
                if (this.isomorphic(g)) ++count;
                // if (count >= 2) {
                    // return false;
                // }
            }
            // if (count > 1) System.err.format("too much: %d%n", count);
            assert(count > 0);
            return count == 1; // which is, basically, true
        }

        public void reflectSelfType2() {
            Graph g = this.map(new Point.UnaryFunction() {
                public Point apply(Point p) {
                    return new Point(p.y - p.x, p.y);
                }
            });

            Point p = new Point(1, 1);
            assert (p.equals(points.get(p)));

            points.putAll(g.points);

            assert (p.equals(points.get(p)));
            Point q = new Point(0, 1);
            assert (q.equals(points.get(q)));
            points.put(p, q);
        }

        public void reflectSelfX() {
            Graph g = this.reflectX();
            points.putAll(g.points); // duplicates doesn't matter
        }

    }

    static int A936(int n) {
        // if (true) return (new int[]{0, 0, 0, 1, 1, 2, 4, 4, 12, 10, 29, 27, 88, 76, 247, 217, 722, 638, 2134, 1901, 6413})[n];

        // some unreachable codes here for testing.
        int ans = 0;

        if (n % 2 == 0) { // reflection type 2. (through line 2x == y)
            Graph[] graphs = new Graph[1];
            graphs[0] = new Graph();

            Point p = new Point(1, 1);
            graphs[0].add(p, p);

            for (int i = n / 2 - 1; i --> 0;)
                graphs = Graph.expand(graphs, new Point.Predicate() {
                    public boolean test(Point p) {
                        return 2*p.x > p.y;
                    }
                });

            int count = 0;
            for (Graph g : graphs) {
                g.reflectSelfType2();
                if (g.correctSymmetry()) {
                    ++count;

                    // for (Edge e : g.edges())
                        // System.err.println(e.a + " - " + e.b);
                    // System.err.println("------*");

                    }
                // else System.err.println("Failed");
            }

            assert (count%2 == 0);

            // System.err.println("A936(" + n + ") count = " + count + " -> " + (count/2));

            ans += count / 2;

        }

        // Reflection type 1. (reflectX)

        Graph[] graphs = new Graph[1];
        graphs[0] = new Graph();

        Point p = new Point(1, 0);
        graphs[0].add(p, p);

        if (n % 2 == 0) graphs[0].add(new Point(2, 0), p);

        for (int i = (n-1) / 2; i --> 0;)
            graphs = Graph.expand(graphs, new Point.Predicate() {
                public boolean test(Point p) {
                    return p.y > 0;
                }
            });

        int count = 0;
        for (Graph g : graphs) {
            g.reflectSelfX();
            if (g.correctSymmetry()) {
                ++count;
                // for (Edge e : g.edges())

                    // System.err.printf(

                // "pu %s pd %s\n"
                // // "%s - %s%n"

                // , e.a, e.b);
                // System.err.println("-------/");

            }
            // else System.err.println("Failed");
        }

        if(n % 2 == 0) {
            assert(count % 2 == 0);
            count /= 2;
        }
        ans += count;

        // System.err.println("A936(" + n + ") = " + ans);

        return ans;
    }

    public static void main(String[] args) {

        // Probably
        if (! "1.5.0_22".equals(System.getProperty("java.version"))) {
            System.err.println("Warning: Java version is not 1.5.0_22");
        }

        // A936(6);

        for (int i = 0; i < 20; ++i)
            System.out.println(i + " | " + (A63(i+9) - A936(i+7)));
        //A936(i+2);
    }
}

Probieren Sie es online!


Randnotiz:

  1. Lokal getestet mit Java 5. (so dass die Warnung nicht gedruckt wird - siehe TIO-Debug-Tab)
  2. Nicht. Je. Verwenden. Java. 1. Es ist ausführlicher als Java im Allgemeinen.
  3. Dies kann die Kette brechen.
  4. Die Lücke (7 Tage und 48 Minuten) ist nicht größer als die Lücke, die durch diese Antwort erstellt wurde. Dies sind 7 Tage und 1 Stunde und 25 Minuten später als die vorherige Antwort .
  5. Neuer Rekord auf großem bytecount! Da ich (aus Versehen?) Leerzeichen anstelle von Tabulatoren verwende, ist der Bytecount größer als erforderlich. Auf meinem Rechner sind es 9550 Bytes. (zum Zeitpunkt der Überarbeitung)
  6. Nächste Sequenz .
  7. Der Code druckt in seiner aktuellen Form nur die ersten 20 Terme der Sequenz. Es ist jedoch einfach zu ändern, so dass die ersten 1000 Elemente gedruckt werden (durch Ändern des 20Eingangs for (int i = 0; i < 20; ++i)zu 1000).

Yay! Hiermit können mehr Begriffe berechnet werden, als auf der OEIS-Seite aufgeführt sind! (zum ersten Mal, für eine Herausforderung muss ich Java verwenden) es sei denn, OEIS hat irgendwo mehr Begriffe ...


Schnelle Erklärung

Erläuterung der Sequenzbeschreibung.

Die Sequenz fragt nach der Anzahl der freien nichtplanaren Polyomagneten mit der Symmetriegruppe C 2v , wobei:

  • Polyenoid: (mathematisches Modell von Polyenkohlenwasserstoffen) Bäume (oder im entarteten Fall ein einzelner Scheitelpunkt) können in ein hexagonales Gitter eingebettet werden.

Betrachten Sie zum Beispiel die Bäume

      O                O           O      O       (3)
      |                 \         /        \
      |                  \       /          \
O --- O --- O             O --- O            O --- O
      |                                             \
      |                    (2)                       \
 (1)  O                                               O

Das erste kann nicht in das hexagonale Gitter eingebettet werden, das zweite nicht. Diese spezielle Einbettung unterscheidet sich vom dritten Baum.

  • nichtplanares Polyenoid: Einbetten von Bäumen, sodass zwei überlappende Scheitelpunkte vorhanden sind.

(2)und (3)Baum oben sind planar. Dieser ist jedoch nicht planar:

   O---O O
  /       \
 /         \
O           O
 \         /
  \       /
   O --- O

(Es gibt 7 Ecken und 6 Kanten)

  • Freier Hubmagnet: Varianten eines Hubmagneten, die durch Rotation und Reflexion erhalten werden können, werden als einer gezählt.

  • C 2v- Gruppe: Die Polyomagneten werden nur gezählt, wenn sie 2 senkrechte Reflexionsebenen haben und nicht mehr.

Zum Beispiel das einzige Magnetventil mit 2 Eckpunkten

O --- O

hat 3 Reflexionsebenen: die horizontale -, die vertikale |und die parallel zum Computerbildschirm verlaufende . Das ist zu viel.

Auf der anderen Seite dieser

O --- O
       \
        \
         O

hat 2 Reflexionsebenen: /und .


Erläuterung der Methode

Und jetzt der Ansatz, wie man die Anzahl tatsächlich zählt.

Zunächst nehme ich die a(n) = A000063(n + 2) - A000936(n)auf der OEIS-Seite aufgeführte Formel als selbstverständlich an. Ich habe die Erklärung in der Zeitung nicht gelesen.

[TODO fix this part]

Natürlich ist das Zählen von Planaren einfacher als das Zählen von Nichtplanaren. Das macht auch die Zeitung.

Geometrisch planare Polyenoide (ohne überlappende Eckpunkte) werden durch Computerprogrammierung aufgezählt. Dadurch wird die Anzahl der geometrisch nichtplanaren Polyenoide zugänglich.

Also ... zählt das Programm die Anzahl der planaren Magnetspulen und subtrahiert sie von der Summe.

Da der Baum sowieso eben ist, hat er offensichtlich die Reflexionsebene. Die Bedingung läuft also auf "Anzahl der Bäume mit einer Reflektionsachse in der 2D-Darstellung zählen" hinaus.

Der naive Weg wäre, alle Bäume mit nKnoten zu generieren und auf korrekte Symmetrie zu prüfen. Da wir jedoch nur die Anzahl der Bäume mit einer Reflexionsachse ermitteln möchten, können wir einfach alle möglichen Halbbäume auf einer Hälfte generieren, sie durch die Achse spiegeln und dann auf korrekte Symmetrie prüfen. Da es sich bei den erzeugten Polyenoiden um (planare) Bäume handelt, muss sie die Reflexionsachse genau einmal berühren.

Die Funktion public static Graph[] expand(Graph[] graphs, Point.Predicate fn)nimmt ein Array von Graphen auf, jeder hat nKnoten und gibt ein Array von Graphen aus, jeder hat n+1Knoten, die nicht gleich sind (unter Übersetzung) - so dass der hinzugefügte Knoten das Prädikat erfüllen muss fn.

Betrachten Sie zwei mögliche Reflexionsachsen: Eine, die durch einen Scheitelpunkt verläuft und mit Kanten zusammenfällt ( x = 0), und eine, die die senkrechte Winkelhalbierende einer Kante ist ( 2x = y). Wir können nur eine davon verwenden, da die generierten Grafiken ohnehin isomorph sind.

Für die erste Achse x = 0beginnen wir also mit dem Basisgraphen, der aus einem einzelnen Knoten (1, 0)(falls nungerade ist) oder zwei Knoten mit einer Kante zwischen (1, 0) - (2, 0)(falls gerade nist) besteht, und erweitern dann die Knoten so, dass y > 0. Dies wird im Abschnitt "Reflection type 1" des Programms durchgeführt. Anschließend spiegeln Sie sich für jedes erzeugte Diagramm durch die X-Achse x = 0( g.reflectSelfX()) und überprüfen, ob es die richtige Symmetrie aufweist.

Beachten Sie jedoch, dass wenn ndurch 2 teilbar ist, wir auf diese Weise jeden Graphen zweimal gezählt haben, da wir auch sein Spiegelbild durch die Achse erzeugen 2x = y + 3.

(Beachten Sie die 2 orangefarbenen)

Ähnliches gilt für die Achse 2x = y, wenn (und nur dann) nauch ist, beginnen wir von dem Punkt (1, 1), erzeugen Graphen , so dass 2*x > y, und beziehen sich jeder von ihnen über die 2x = yAchse ( g.reflectSelfType2()), verbinden (1, 0)mit (1, 1), und überprüfen , ob sie korrekt Symmetrie haben. Denken Sie auch daran, durch 2 zu teilen.


Da ich beim Posten dieses (und des anderen) eingeschlafen bin, gebe ich Ihnen den Vorteil des Zweifels und akzeptiere noch keine Antwort.
Caird Coinheringaahing

2
@cairdcoinheringaahing Du warst 3 Minuten vor Einsendeschluss online ...
user202729

Oh oh, die nächste Sequenz kann hart codiert werden ... (obwohl sie unendlich ist), wenn ich sie richtig lese. Die Berechnung selbst ist --- ziemlich --- sehr einfach, also tu es nicht.
user202729

7

6. R , 71 Bytes, A000072

function(n)length(unique((t<-outer(r<-(0:2^n)^2,r*4,"+"))[t<=2^n&t>0]))

Probieren Sie es online!

Nächste Sequenz


1
Aus Liebe zu Gott habe ich die nächste Sequenz nicht überprüft, bevor ich diese Antwort gepostet habe.
Undichte Nonne

Ist eine einfache nächste Sequenz nicht ein strategischer Vorteil?
BlackCap

@BlackCap Sie können nicht zweimal hintereinander oder weniger als 1 Stunde nach ihrer letzten Antwort antworten.
Erik der Outgolfer

@EriktheOutgolferthe answer before the last posted (the one who didn't break the chain) will win
BlackCap

@ BlackCap an diesem Punkt wird das nicht passieren
Stephen


7

26. TI-BASIC, 274 Bytes , A000183

.5(1+√(5→θ
"int(.5+θ^X/√(5→Y₁
"2+Y₁(X-1)+Y₁(X+1→Y₂
{0,0,0,1,2,20→L₁
Prompt A
Lbl A
If A≤dim(L₁
Then
Disp L₁(A
Else
1+dim(L₁
(~1)^Ans(4Ans+Y₂(Ans))+(Ans/(Ans-1))((Ans+1))-(2Ans/(Ans-2))((Ans-3)L₁(Ans-2)+(~1)^AnsY₂(Ans-2))+(Ans/(Ans-3))((Ans-5)L₁(Ans-3)+2(~1)^(Ans-1)Y₂(Ans-3))+(Ans/(Ans-4))(L₁(Ans-4)+(~1)^(Ans-1)Y₂(Ans-4→L₁(Ans
Goto A
End

Wertet die auf dem OEIS-Link gefundene rekursive Formel aus.

Nächste Sequenz


Agh ich wusste, als die Website ging, dass es ein wahnsinniger Ansturm sein würde, wenn es wieder auftauchte. Schlag mich kaum.
Silvio Mayolo

Ich habe nicht bemerkt, dass die Seite nicht mehr erreichbar ist ...
Scott Milner




7

76. Pygmy , 4147 Bytes, A000036

globaln: 0                                                                                           

Pi:: 3.141592653589793                                                                               

floor:: (number) {                                                                                   
    floatPart: number % 1                                                                            
    number >= 0 =>                                                                                   
    number - floatPart                                                                               
    number - floatPart - 1                                                                           
}                                                                                                    

fsqrt:: (number) {                                                                                   
    floor| number ^ 0.5                                                                              
}                                                                                                    

summation:: (f i imax) {                                                                             
    i > imax => 0                                                                                    
    (f| i) + summation| f, i + 1, imax                                                               
}                                                                                                    

absoluteValue:: (number) {                                                                           
    number < 0 => -number                                                                            
    number                                                                                           
}                                                                                                    

A:: (number) {                                                                                       
    globaln~: number                                                                                 
    1 + 4 * (fsqrt| number)                                                                          
       + 4 * (fsqrt| number / 2) ^ 2                                                                 
       + 8 * summation| (j){ fsqrt| globaln - j * j }, (fsqrt| number / 2) + 1, (fsqrt| number)      
}                                                                                                    

V:: (number) {                                                                  
    Pi * number                                                                      
}                                                                                    

P:: (number) {                                             
    (A| number) - (V| number)                               
}                                                           

recordMax: 0                                           
findRecord:: (searchIndex record recordCount) {                                    
    x: absoluteValue| P| searchIndex                                               
    (x > record && recordCount = recordMax - 1) => searchIndex                     
    x > record => findRecord| searchIndex + 1, x, recordCount + 1                  
    findRecord| searchIndex + 1, record, recordCount                               
}                                                                                  

A000099:: (number) {                                                                 
    recordMax~: number                                                              
    findRecord| 1, 0, 0                                                              
}                                                                               

A000035:: (number) {                                                                       
    floor| (P| (A000099| number)) + 0.5                                         
}                                                                               

Nächste Sequenz

Sie können den Code auf dieser Seite ausführen . Zum Beispiel können Sie die 10. Nummer in der Sequenz erhalten, indem Sie den obigen Code kopieren und Folgendes hinzufügen:

alert| A000035| 10

4
... die nächste Sequenz ist nicht berechenbar ...
HyperNeutrino

1
@HyperNeutrino Ich weiß: PI hat dies mit Absicht getan
Peter Olson

Das Böse ...>. <Aber ich werde trotzdem nur die 4 Elemente in der Sequenz hartcodieren. Einfach genug, xD OP befürwortet es anscheinend ¯ \ _ (() _ / ¯
HyperNeutrino
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.