一个接一个的OEIS


95

作为13/03/2018 16:45 UTC的,获胜者是回答#345,由Scrooble。这意味着比赛已正式结束,但只要他们遵守规则,就可以继续发布答案。

同样,只需快速回答排名靠前的三个回答者即可:

1. NieDzejkob -41个答案

2. KSmarts -30个答案

3. 超中微子 -26个答案


这是一个答案链问题,使用的是OEIS的序列以及先前提交内容的长度。

此答案链问题将以以下方式工作:

  • 我将发布第一个答案。所有其他解决方案必须源于此。
  • 下一个用户(我们称它们为userA)将找到OEIS序列,其中其索引号(请参见下文)与我的代码的长度相同。
  • 然后,他们必须使用该序列以未使用的语言编写一个程序,该程序将一个整数作为输入n,并按该序列输出第n个数字。
  • 接下来,他们在自己的解决方案之后发布解决方案,并且新用户(userB)必须重复相同的操作。

n序列的第一个项是第一个项之后n次的项,第一个值是其OEIS页上给出的第一个值。在这个问题中,我们将对这些序列使用0索引。例如,使用A000242n = 3,正确的结果将是25

然而!

这不是,因此最短的代码无关紧要。但是代码的长度仍然会产生影响。为了防止序列重复,您的字节数必须唯一。这意味着此处提交的任何其他程序都不能与您的字节长度相同。

如果没有最后一个帖子的长度顺序,则帖子的顺序是未使用的最低顺序。这意味着所使用的序列也必须是唯一的,并且该序列不能与您的字节数相同。

在发布答案并且超过一个星期没有发布新答案之后,最后一个发布者(未中断链接的答案)之前的答案将获胜。

输入输出

通用输入和输出规则适用。输入必须是整数或整数的字符串表示形式,输出必须是序列中的正确值。

格式化

与大多数问题一样,请按照以下格式设置答案格式

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

`code`

[next sequence](link)

*anything else*

规则

  • 发布答案后,您必须等待至少1个小时才能发布答案。
  • 您不能连续发布两次(或更多)。
  • 序列的索引号是A零件之后的数字,并且去除了前导零(例如,A000040索引号为40)
  • 您可以假定输入或所需的输出都不会超出您的语言数字范围,但是请不要滥用它,例如,选择仅使用数字1的语言。
  • 如果提交的长度超过65536个字符,请提供一个链接,以访问代码(例如,pastebin)。
  • n 绝对不会大于1000,也不会超出序列的范围,只是为了防止准确性差异阻止语言竞争。
  • 每有150个(有效)答案,使用一种语言的次数就会增加。因此,在发布150个解决方案之后,每种语言都可以使用两次(所有以前的答案都计入其中)。例如,发布150个答案后,Python 3可以使用两次,但是由于它已经被使用过一次,这意味着它只能再使用一次,直到发布了300个答案。
  • 请提供帮助,并发布指向下一个要使用的序列的链接。这不是必需的,但是是建议。
  • 不同版本的语言,例如Python 2和Python 3是不同的语言。通常,如果“在线试用”上都提供了不同的版本,则它们是不同的语言,但是请记住,这是一个通用规则,而不是严格的答案。
  • 它不是被禁止的,但是请尽量不要从OEIS页面中复制代码,而应该尝试解决它。
  • 仅当序列是有限的时才允许硬编码。请注意,提示此答案的答案(#40)是该规则的例外。在链硬编码中有一些早期的答案,但是这些答案可以忽略不计,因为删除链(直到#100)并没有好处。

答案链片段


评论不作进一步讨论;此对话已转移至聊天
丹尼斯,

如果程序需要更大的内建类型float/ 浮点精度double以产生更大的值,可以n吗?
NieDzejkob

1
@Giuseppe不,因为您是通过数学运算来生成数字的,而不是仅仅将它们放入数组/字符串中
caird coinheringaahing

2
@cairdcoinheringaahing在我看来,这是对gamma常数进行硬编码的方法。从理论上讲,它不适用于较大的数字。
user202729

Answers:


4

345. brainfuck,162个字节,A000301

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

在线尝试!

下一个序列!

这将带代码点的字符作为输入n(根据BF的规范),并以相同的方式输出。要查看数字,我建议使用@Timwi的EsotericIDE

说明:

+<<,                                  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. 

由于此操作将所有Fibonacci数字存储到重要的数字,因此,如果在有界磁带上输入大量的斐波那契数,它将失败。

通过对基数(2)进行硬编码,可以大大缩短此时间,但是高尔夫球性根本不是问题。


当下一个答案(#346)中断时,您的答案就是胜利者!
Caird coinheringaahing

1
@cairdcoinheringaahing感谢您的挑战。让我感到遗憾的是它应该现在就结束,但是就像世界上所有美好的事物一样,它也就结束了。现在,用这个可怜的借口找代码,因为它现在是任何人都会看到的第一个答案,而且肯定很短……
Khuldraeseth na'Barya

@Scrooble,您无法真正更改长度...
NieDzejkob

@NieDzejkob是的,但是我可以打高尔夫球并增加一些填充物,以保持相同的长度。
Khuldraeseth na'Barya

@cairdcoinheringaahing“打破了连锁”?这意味着什么?
魔术章鱼缸

40

22. FiM ++,982字节,A000024

注意:如果您正在阅读本文,则可能要按“最旧的”排序。

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

下一个序列


10
哈哈哈,整个事情都如此艰难地笑了。+1用于选择语言:-)
ETHproductions'Jul


22

1. 三角形,10字节,A000217

$\:_%i/2*<

在线尝试!

下一个序列

这个怎么运作

代码格式成这个三角形

   $
  \ :
 _ % i
/ 2 * <

IP始于并向$东南移动(SE,heh),其工作方式如下:

$            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.三角形,10字节,A000217。*关注链接* A000217 Triangular numbers...
MD XF

22

73. 星空,363字节,A000252

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

在线尝试!

下一个序列

使用公式a(n) = n^4 * product p^(-3)(p^2 - 1)*(p - 1)OEIS中的公式“ 乘积大于除以n的所有素数p的乘积”。

月亮是空无一人,但嘿,这不是代码高尔夫。


月球上的星星?
betseg

19

97. Python 3(PyPy),1772字节,A000236

首先,非常感谢Max Alekseyev博士对我的耐心。我很幸运能够通过电子邮件与他联系以了解这一挑战。他在这里的 Math.SE答案对我帮助很大。感谢Wheat Wizard的帮助。:)

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()

在线尝试!

如果给出错误的结果,请将100增加到更大的值。我认为10000可以工作4,但是我将让我的计算机整夜运行以确认这一点。可能需要几个小时才能完成。

请注意(PyPy)部分只是为了让我可以再次使用Python。我真的不懂其他许多语言,也不会尝试将其移植到Java上,并且可能会无法及时完成。

下一序列(也请不要做任何更疯狂的数学工作;我没有剩下的Python版本,因此其他人将不得不保存这一挑战D :)


好吧,总是有pypy3
仅限ASCII

15

107. TrumpScript,1589字节,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.

在线尝试!

第一次在TrumpScript中编程,可能是我几次重新发明了轮子-4行专用于计算2 ^ n。我试图使它看起来像特朗普(醉酒)可以说的话。另外,这是我编写的Python脚本,用于验证我所做的一切正确。上面的程序有一些差异,但是其中很多是直接等效的。

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)

下一个序列!


3
I will make cat feel goodO_O
商业猫

遗憾的是I will make Business Cat feel good无法正常工作……
NieDzejkob

14

30. Python 1,1112字节,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

在线尝试!

甚至都不会去打高尔夫球。嘿,这不是我在这个网站上最长的Python答案!

下一个序列


1
祝贺您对数学进行解码:D
Leaky Nun


@LeakyNun就像我说的那样,我并没有打高尔夫球。此外,这不是我在该站点上最长的Python答案,所以idc:P但很好
HyperNeutrino

@LeakyNun并感谢:D我花了一些时间才了解所有这些内容
HyperNeutrino

@LeakyNun 309个字节,因为的实际值_无关紧要;我们只需要重复多次
HyperNeutrino

13

2. Haskell,44字节,A000010

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

在线尝试!

下一个序列


12
不过,下一个序列的名称是……
完全是人间的,它

@totallyhuman可怜的兔子...
暴民埃里克(Erik the Outgolfer)

我们应该链接到上一篇文章吗?
Leaky Nun

我现在不能打高尔夫球了,这让我很痛苦。我必须首先是你看到
BlackCap

接下来的顺序是什么?我不理解这三个:P
Beta Decay's

13

9. Pyth,19个字节,A000025

?>Q0sm@_B1-edld./Q1

测试套件

下一个序列

a(n)=具有偶数秩的n的分区数减去具有奇数秩的n的分区数。分区的等级是其最大部分减去部分数目。


对于那些知道Pyth的人,我故意使用>Q0而不是Q为了使下一个序列为A000019。
Leaky Nun

1
来自OEIS页面Keywords: easy,nice
BlackCap,

@LeakyNun是的,否则我必须解决A000017 ...毛病。
暴民埃里克(Erik the Outgolfer)'17年


12

206. 质子,3275字节,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))

在线尝试!

下一个序列


等等,你真的做到了吗?如果您不使用这些令人毛骨悚然的程序写论文,而去和某位教授交谈,那您就无聊了:P
Stephen

@Stephen当前错误修正大声笑
HyperNeutrino 17-10-10

这是按照法线分割三角形,正方形和五边形的方法吗?看起来可能是这样,但是某些语法并不熟悉。
彼得·泰勒

1
@PeterTaylor假设我了解您所描述的方法,是的,它查找三角形并在所有3个顶点或两个相邻循环附近放置一个顶点,并删除公共边并在所有4个顶点附近放置一个顶点,对于3个三角形相同在五边形上。我认为那是您要描述的。
HyperNeutrino


12

308. ENIAC(模拟器),3025字节,A006060

伪代码:

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
}

没有在线模拟器,执行结果: 读卡器输入 打卡输出

寄存器和常量:

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

程序信号流和数据流: 程序信号流和数据流程图

该答案的标记在pastebin或HTML注释中带有完整的“代码”,以防止linkrot和较长的答案同时滚动。这好有趣!

下一个序列


您可以添加到下一个序列,请一个链接
扎卡里

@Zacharý链接在帖子中。我将其移至帖子末尾,以便更轻松地查找。
leo3065

12

15. CJam,85个字节,A000060

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

在线演示

下一个序列

解剖

OEIS给

Gf:S(x)+ S(x ^ 2)-S(x)^ 2,其中S(x)是A000151的生成函数。-Pab Ter,2005年10月12日

哪里

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分33秒...当我输入解释信息时
Leaky Nun

11

67. LOLCODE,837字节,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

我的大写键注定会逃脱,所以我在按住shift的同时写了这整个东西。

在线尝试!

下一个序列


+1使用PRAIME
Leaky Nun

3
您是一名程序员,您可能已经编写了该代码,然后通过将upper其命名为Python脚本的脚本来运行它-.-
Stephen

5
@StepHen或者只是gggUG在vim中我写的地方,但是我并不那么聪明
BlackCap

10

10.岩浆,65字节,A000019

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

在这里尝试

大声笑内置

下一个序列


@ETHproductions :)没问题,感谢OEIS页面,尽管因为它具有确切的内置大声笑
HyperNeutrino

4
; _; 我解决了A000064,然后您进行了更改。不赞成投票。
Leaky Nun

我的天哪,这么多分区序列
ETHproductions'Jul

尝试在Python(TIO)中执行此操作时,我不小心解决了A007317:P
ETHproductions

重新推荐!\ o /
Leaky Nun


9

121. ,525个字节,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

在线演示

下一个序列

有趣的事实:首次发布挑战时,我草拟了一个我想与CJam一起使用的小讨厌的序列号列表,而A000022在列表的顶部。

这实现了EM Rains和NJA Sloane 在《 Cayley的烷烃(或4价树)枚举》,整数序列杂志,第1卷,第1 期中描述的生成函数。2(1999),将求和的次数与固定th系数所需的次数一样多,然后将求和的四分之一伸缩。特别地,伸缩前半部分意味着仅将循环指数应用于一个而不是全部应用于。CknS4Th

该代码分解为

; 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))

请注意,这是我有史以来第一个Pip程序,因此可能不是很惯用。


评论不作进一步讨论;此对话已转移至聊天
丹尼斯,

9

156. C#(单声道),2466字节,A000083

注意:代码的得分为2439字节,编译器标志的得分为27 -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]);
        }
    }
}

在线演示。这是一个完整的程序,需要从命令行输入。

下一个序列

解剖

我遵循OEIS中Bowen的评论,即A000083(x) = A000237(x) + A035349(x) - A000237(x) * A035350(x)组件生成功能通过以下方式关联的生成功能:

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

我使用的定义BIK,并DIKhttps://oeis.org/transforms2.html但公式似乎有一些错别字。我LPAL没有太大困难地进行了校正,并独立地DIK基于将Pólya枚举应用于二面体组循环指数得出了一个公式。在#121和#156之间,我学习了很多有关Pólya枚举的知识。我已经提交了一些勘误表,如果这些转换在链中再次出现,可能对其他人有用。



8

13. VB.NET(.NET 4.5),1246字节,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

在线尝试!


8

91. Python 2(PyPy),1733字节,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

在线尝试!

我希望使用Python 2 PyPy作为另一个主要版本。如果有人可以给我一个Python 0解释器,我也可以使用它,但是我希望这是有效的。

它从1个顶点开始,然后开始工作,从而创建具有多个顶点的每个可能的无向图的邻接矩阵表示。如果它是三价的,那么它将遍历边缘的幂集,并将按照长度对其进行排序。如果发现的第一个周期太短,它将继续运行。如果找到的第一个周期与输入匹配(偏移量为3),则它将输出正确的顶点计数并终止。

下一序列 <-从所有这些数学废话中轻松突破:D

编辑:我添加了一些优化措施,使其速度更快了(尽管仍然无法在TIO的60秒限制内计算出第三项),而不更改字节数。


...而且我很认真地认为链条会以答案90结尾
pppery

1
@ppperry :)我喜欢艰苦的挑战,因为大多数人甚至都无法提出解决方案,因此我不必担心变得过时:)(例如碳链命名者问题)
HyperNeutrino

除非有人接受您的解决方案并将其转换为简洁的语言
-pppery

@ppperry也是o_O:P
HyperNeutrino

1
@HyperNeutrino恭喜您解决了!我担心自己会打断链,并在考虑填充字节数以指向不同的序列。做得好!
Scott Milner

8

232. 质朴326个 330 332字节,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;
}

在线尝试!

用Java编写的多种语言。在线尝试!

下一个序列


对于O(n^2 log n)复杂性,请使用OEIS页面上的公式,而不要使用naive O(n^6)

快速说明:

  • 该代码使用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)Mathematica代码部分中描述的公式。
  • 公式证明:

    • 公式与等效。

    • 设三个点的边界框的大小为m * k。考虑2种情况:

      • k != 0m != 0:有两种方法可以选择三个点(\/)的方向,gcd(k-1, m-1)-1选择点的方式位于其他两个点之间,以及(n - k) × (n - m)选择边界框的位置的方式。
      • k == 0m == 0:有两种方法可以选择方向(|-),n选择点所在行/列的方式以及选择该行/列上的点的Binomial[n, 3] == (n*(n-1)*(n-2)) / 6方式。

一些多语种注释:

  • 时髦并没有关键字return。但是,正如ATaco解释的那样,[Funky]认为return是一个变量。因此,它将解析该表达式,该表达式不执行任何操作,然后解析下一个表达式。并将其用作输出。
  • Javascript ^用作按位异或,与Funky不同,Funky ^用作指数运算。因此n*n必须使用而不是n^2确保Javascript兼容性。
  • 在质朴,所有的操作员(+-*等)具有相同的优先级和右结合的,所以表达式需要适当括号。

1
+1没想到会说多种语言。
ATaco

没有五角大楼,但六角形非常合适。
NieDzejkob

该字节数已被使用... 链接
NieDzejkob

因此,要解决字节数问题,您能否将此答案填充到330个字节?我会处理剩下的。
NieDzejkob

[由于字节数冲突问题而将其填充为332个字节,请参阅此聊天消息 ]
user202729,2014年


8

281. Java 5,11628字节,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);
    }
}

在线尝试!


边注:

  1. 已在Java 5上进行了本地测试(这样不会显示警告-请参见“ TIO调试”选项卡)
  2. 别。曾经 采用。Java。1.一般而言,它比Java更冗长。
  3. 这可能会中断链。
  4. 间隔(7天48分钟)不超过此答案产生的间隔,即比上一个答案晚7天零1 25分钟。
  5. 大字节数的新记录!因为我(错误地?)使用空格而不是制表符,所以字节数超出了必要。在我的机器上是9550字节。(在撰写此修订本时)
  6. 下一个序列
  7. 当前形式的代码仅显示序列的前20个字词。但是它很容易改变,因此,它会首先打印1000个项目(通过将改变20for (int i = 0; i < 20; ++i)1000

好极了!这可以计算出比OEIS页面上列出的更多的术语!(这是我第一次需要挑战,我需要使用Java),除非OEIS在某处有更多术语...


快速说明

序列说明的说明。

该序列要求对称组为C 2v的自由非平面多烯类化合物的数量,其中:

  • polyenoid :(多烯碳氢化合物的数学模型)可嵌入六边形格子中的树(或在退化情况下为单个顶点)。

例如,考虑树木

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

第一个不能嵌入六边形格子,而第二个可以。该特定的嵌入被认为与第三棵树不同。

  • 非平面多面体:嵌入树木使得存在两个重叠的顶点。

(2)(3)上面的树是平面的。但是,这是非平面的:

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

(有7个顶点和6个边)

  • 游离多烯体:可以通过旋转和反射获得的一种多烯体的变体计为一个。

  • C 2v组:仅在具有两个垂直反射平面且没有更多反射平面的情况下才对多烯类进行计数。

例如,只有两个顶点的多面体

O --- O

具有3个反射平面:水平的-,垂直的|和与计算机屏幕平行的一个。这太多了。

另一方面,这个

O --- O
       \
        \
         O

有2个反射平面:/


方法说明

现在,该方法涉及如何实际计算数字。

首先,我认为公式a(n) = A000063(n + 2) - A000936(n)(在OEIS页面上列出)是理所当然的。我没有阅读论文中的解释。

[TODO修复此部分]

当然,平面计数要比非平面计数容易。这也是论文的目的。

几何平面的多烯类化合物(没有重叠的顶点)由计算机程序枚举。因此,几何上非平面的多烯类化合物的数目变得可访问。

所以...该程序计算平面多面体的数量,然后从总数中减去。

由于树无论如何都是平面的,因此显然具有反射平面。因此,条件归结为“在2D表示中具有反射轴的树的数量”。

天真的方法是生成带有n节点的所有树,并检查正确的对称性。但是,因为我们只想找到具有反射轴的树的数量,所以我们可以只在一个半轴上生成所有可能的半树,并通过轴镜像它们,然后检查正确的对称性。此外,由于生成的多烯类化合物是(平面)树,因此它必须恰好接触一次反射轴。

该函数public static Graph[] expand(Graph[] graphs, Point.Predicate fn)采用一个图形数组,每个图形都有n节点,并输出一个图形数组,每个图形都有彼此n+1不相等的节点(在转换中)-这样添加的节点必须满足谓词fn

考虑两个可能的反射轴:一个穿过顶点并与边缘重合(x = 0),另一个是边缘的垂直平分线(2x = y)。无论如何,我们只能采用其中之一,因为生成的图是同构的。

因此,对于第一个轴x = 0,我们从基础图开始,该基础图由一个节点(1, 0)(如果n是奇数)或两个节点之间有一条边(1, 0) - (2, 0)(如果n是偶数)组成,然后展开这样的节点y > 0。这是通过程序的“反射类型1”部分完成的,然后对于每个生成的图形,通过X轴x = 0g.reflectSelfX())反射(镜像)自身,然后检查其是否具有正确的对称性。

但是,请注意,如果n被2整除,则通过这种方式我们对每个图形计数了两次,因为我们还通过轴生成了其镜像2x = y + 3

(注意2个橙色的)

对于轴类似2x = y,如果(且仅当)n是偶数,我们从该点开始(1, 1),生成,使2*x > y,并将它们反射到2x = y轴(g.reflectSelfType2())上,(1, 0)与连接(1, 1),然后检查它们是否具有正确的对称性。记住也要除以2。


鉴于此(和另一个)发布时我睡着了,我将为您带来疑问的好处,而不接受答案。
caird coinheringaahing

2
@cairdcoinheringaahing您在截止日期前3分钟处于在线状态
user202729 17/12/24

嗯,如果我正确地阅读了下一个序列,则可以对其进行硬编码(尽管它是无限的)。计算本身非常简单,所以不要这样做。
user202729 '17

7

6. R,71字节,A000072

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

在线尝试!

下一个序列


1
为了上帝的爱,在发布此答案之前,我没有检查下一个顺序。
Leaky Nun

下一个简单的步骤不是战略优势吗?
BlackCap'7

@BlackCap他们不能连续回答两次,也不能在最后回答后不到1小时内回答。
大公埃里克(Erik the Outgolfer)'17年

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

@BlackCap在这一点上不会发生
斯蒂芬


7

26. TI-BASIC,274 字节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

评估在OEIS链接上找到的递归公式。

下一个序列


我知道,当该站点崩溃时,当它恢复正常运行时会发疯。勉强击败我。
西尔维奥·马约洛

我没有意识到该站点已关闭...
Scott Milner




7

76. 侏儒,4147字节,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                                         
}                                                                               

下一个序列

您可以在此页面上运行代码。例如,您可以通过复制上面的代码并添加以下内容来获得序列中的第10个数字:

alert| A000035| 10

4
...下一个序列是不可计算的...
HyperNeutrino

1
@HyperNeutrino我知道:PI故意这样做
Peter Olson

Evil ...>。<但是无论如何,我只会对序列中的4个元素进行硬编码。足够容易的xD OP批准它显然是\ _(ツ)_ /
¯– HyperNeutrino
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.