次々とOEIS


95

13/03/2018 16:45 UTCの時点で、勝者はScroobleによる回答#345 です。これは、コンテストが公式に終了したことを意味しますが、ルールに従っている限り、回答を投稿してください。

同様に、回答数の観点から上位3人の回答者に簡単に叫んでください。

1. NieDzejkob -41の答え

2. KSmarts -30の答え

3. ハイパーニュートリノ-26の答え


これは、OEISのシーケンスと前回の提出の長さを使用する回答連鎖質問です。

この回答連鎖の質問は、次のように機能します。

  • 最初の回答を投稿します。他のすべてのソリューションは、そこから派生する必要があります。
  • 次のユーザー(userAと呼びましょう)は、そのインデックス番号(以下を参照)がコードの長さと同じであるOEISシーケンスを見つけます。
  • 次に、シーケンスを使用して、未使用の言語で、入力nとして整数を取り、そのシーケンスのn番目の数値を出力するプログラムをコーディングする必要があります。
  • 次に、彼らは私のソリューションを投稿し、新しいユーザー(userB)は同じことを繰り返さなければなりません。

nシーケンスのth番目の用語は、最初の値のn回後の用語であり、最初の値がそのOEISページで指定された最初の値で動作します。この質問では、これらのシーケンスに0インデックスを使用します。たとえば、A000242およびのn = 3場合、正しい結果は25になります。

しかしながら!

これはではないため、最短のコードは重要ではありません。ただし、コードの長さにはまだ影響があります。シーケンスの重複を防ぐには、バイトカウントが一意でなければなりません。これは、ここで送信された他のプログラムが、あなたと同じ長さのバイト数になることはないことを意味します

最後の投稿の長さのシーケンスがない場合、投稿のシーケンスは最も低い未使用のシーケンスです。これは、使用されるシーケンスも一意である必要があり、シーケンスがバイトカウントと同じであってはならないことを意味します。

回答が投稿され、新しい回答が1週間以上投稿されなかった、最後に投稿されたの回答(チェーンを中断しなかったもの)が勝ちます。

入出力

汎用の入力および出力ルールが適用されます。入力は整数または整数の文字列表現でなければならず、出力はシーケンス内の正しい値でなければなりません。

書式設定

ほとんどの質問と同様に、解答は次のようにフォーマットしてください

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

`code`

[next sequence](link)

*anything else*

ルール

  • 回答を投稿する前に、投稿してから少なくとも1時間待つ必要があります。
  • 連続して2回(またはそれ以上)投稿することはできません。
  • シーケンスのインデックス番号は、Aパートの後の番号であり、先行ゼロが削除されています(たとえばA000040、インデックス番号は40)
  • 入力も必要な出力も言語の数値範囲外ではないと想定できますが、たとえば数字1のみを使用できる言語を選択することでこれを悪用しないでください。
  • 提出の長さが65536文字を超える場合は、コードにアクセスする方法へのリンクを提供してください(たとえば、ペーストビン)。
  • n 精度の不一致が言語の競合を止めることを防ぐためだけに、1000より大きくなることはありません。
  • 150(有効な)回答ごとに、言語を使用できる回数が増えます。したがって、150のソリューションが投稿された後、すべての言語が2回使用される可能性があります(以前の回答はすべてこれにカウントされます)。たとえば、150個の回答が投稿された場​​合、Python 3は2回使用される可能性がありますが、既に1回使用されているため、300個の回答が投稿されるまで1回しか使用できません。
  • 参考にして、次に使用するシーケンスへのリンクを投稿してください。これは必須ではありませんが、推奨事項です。
  • 異なるバージョンの言語、たとえばPython 2とPython 3は異なる言語です。一般的なルールとして、異なるバージョンが両方ともTry It Onlineで利用可能な場合、それらは異なる言語ですが、これは一般的なルールであり、厳密な答えではないことに留意してください。
  • 禁止されていませんが、OEISページからコードをコピーしないようにし、実際に解決してください。
  • ハードコーディングは、シーケンスが有限の場合にのみ許可されます。これを促した答え(#40)はルールの例外であることに注意してください。チェーンのハードコードの早い段階でいくつかの回答がありますが、これらは無視できます。たとえば、#100までチェーンを削除しても意味がないからです。

アンサーチェーンスニペット


コメントは詳細なディスカッション用ではありません。この会話はチャットに移動さました
デニス

より大きな値を生成するために、プログラムが組み込みfloat/ double型に対してより良い浮動小数点精度を必要とする場合は問題ありnませんか?
-NieDzejkob

1
あなたは、配列/文字列にそれらを置くだけで数学をやって、というよりによって番号を生成しているようなし@Giuseppe、
coinheringaahing caird

2
@cairdcoinheringaahing私の意見では、それはガンマ定数をハードコーディングしています。これは、より大きな数に対しては「理論上」機能しません。
user202729

回答:


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. 

これは、重要な番号までのすべてのフィボナッチ数を保存するため、境界のあるテープで本当に大きな入力を行うと失敗します。

これは、ベースをハードコーディングすることで大幅に短縮できます(2)が、ゴルフは問題になりません。


次の答え(#346)がチェーンを破ったので、あなたの答えが勝者です!
コヒーリングコアリング

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

すばらしい、私の
賛成票を

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

まず第一に、私に我慢してくれたマックス・アレクセイエフ博士に感謝します。この挑戦を理解するために彼にメールで連絡できたことは非常に幸運です。ここでの彼の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を大きくしてください。4で10000が機能すると思いますが、それを確認するためにコンピューターを一晩稼働させておきます。完了するまでに数時間かかる場合があります。

(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
リーキー修道女


@LeakyNun私が言っていたように、私はこの笑をゴルフする気にしませんでした。また、それはIDCので、このサイト上で私の最長のPythonの答えではないのです:Pけど素敵
HyperNeutrino

@LeakyNunそしてありがとう:Dすべてを理解するのに少し時間がかかりましたlol
HyperNeutrino

@LeakyNun 309バイト_。実際の値は無関係であるため。私たちはその何回も繰り返す必要がある
HyperNeutrino

13

2. Haskell、44バイト、A000010

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

オンラインでお試しください!

次のシーケンス


12
しかし、次のシーケンスの名前
...-完全に人間

@totallyhuman貧しいウサギ...
エリックアウトゴルファー

前の投稿にリンクする必要がありますか?
リーキー修道女

今はゴルフできないのが痛いです。私はあなたが最初に見る必要がありました
ブラックキャップ

次のシーケンスは何ですか?P:私は3つのものを理解していません
ベータ崩壊

13

9. Pyth、19バイト、A000025

?>Q0sm@_B1-edld./Q1

テストスイート

次のシーケンス

a(n)=偶数ランクのnのパーティションの数から奇数ランクの数を引いた数。パーティションのランクは、その最大部分から部分の数を引いたものです。


Pythを知っている人のために、次のシーケンスをA000019にするため>Q0Qはなく、意図的に使用しました。
リーキー修道女

1
OEISページからKeywords: easy,nice
-BlackCap

@LeakyNunうん、そうでなければ私はA000017 ...グロスを解決しなければならないだろうから
エリックアウトゴルファー


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現在バグ修正lol
HyperNeutrino

これは、plantriに従って三角形、正方形、および五角形を分割するアプローチですか?一見そうかもしれませんが、構文のいくつかはなじみがありません。
ピーターテイラー

1
@PeterTaylorあなたが説明しているアプローチを理解していると仮定すると、はい、それは三角形を探して3つの頂点すべてに隣接する頂点を配置するか、2つの隣接するサイクルと共通エッジを削除し、3つの三角形について同じ4つすべてに隣接する頂点を配置します五角形に。それはあなたが説明しているものだと思います。
ハイパーニュートリノ


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

プログラムの信号の流れとデータの流れ: プログラム信号の流れとデータの流れ図

完全な「コード」linkbinと非常に長い回答が同時にスクロールするのを防ぐために、この回答のマークアップのpastebinまたはHTMLコメントの。これは楽しいです!

次のシーケンス


次のシーケンスへのリンクを追加してください
ザカリー

@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の生成関数です。-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秒先に私の...私は説明を入力している間に
漏れ修道女

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

私のcapslockキーはエスケープする必要があるため、shift ..

オンラインでお試しください!

次のシーケンス


使用のための+1PRAIME
Leaky Nun

3
あなたはプログラマが、あなたはこれを書かれ、その後、Pythonスクリプトを介して実行している可能性がありますupper、それは-.- D」
スティーブン・

5
@StepHenまたは単にgggUG私が書いたvimで、しかし私はそれほど賢くない
-BlackCap

10

10.マグマ、65バイト、A000019

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

ここで試してみてください

ビルトイン

次のシーケンス


@ETHproductions :)問題ありません、OEISページに感謝しますが、そこには正確な
ビルトイン

4
; _; A000064を解決し、変更しました。ダウン投票。
リーキー修道女

私の
すごい

Python(TIO)でこれを行おうとしているときに誤ってA007317を解決しました:P
ETHproductions

再支持!\ o /
リーキーヌン


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 and NJA Sloane、On Cayley's Enumeration of Alkanes(or 4-Valent Trees)、Journal of Integer Sequences、Vol。2(1999)、th係数が固定されるのに必要な数の項の合計を取得し、合計の4分の3を入れ子にします。特に、前半を入れ子にすることは、のサイクルインデックスをすべてではなく1つだけに適用する必要があることを意味します。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してDIKからhttps://oeis.org/transforms2.htmlをしかし、式はタイプミスの数を持っているようです。私はLPAL多くの困難を伴わずに修正し、二面体グループのサイクルインデックスにDIK Pólya列挙を適用することに基づいた式を独自に導出しました。#121から#156までの間、私はポリヤの列挙について多くを学んでいます。私はいくつかの正誤表を提出しました。これらの変換がチェーンの中で再び出てきた場合、他の人にとって有用であると証明されるかもしれません。



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価の場合、エッジのパワーセットを調べ、長さでソートされます。最初に見つかったサイクルが短すぎる場合は、先に進みます。最初に見つかったサイクルが入力(3のオフセット)と一致する場合、正しい頂点カウントを出力して終了します。

次のシーケンス <-このすべての数学のナンセンスからの休憩として簡単なものを持っています:D

編集:バイトカウントを変更せずに、少し高速化するためにいくつかの最適化を追加しました(ただし、TIOの60秒の制限内で3番目の項を計算することはできません)。


...そして、チェーンが答え90で終わるだろうと真剣に考えていました
-pppery

1
@ppperry :)私はoutgolfedを心配する必要はありませんので、ほとんどの人がしても解決策を作ることができないので、私はハードな課題をやって好き:)(例えば炭素鎖ナメル問題)
HyperNeutrino

誰かがあなたのソリューションを取り、それをより簡潔な言語に変換しない限り
-pppery

@ppperryあまりにもo_O:P
HyperNeutrino

1
@HyperNeutrinoおめでとうございます!私はチェーンを壊したのではないかと心配し、別のシーケンスを指すようにバイトカウントをパディングすることを検討していました。よくやった!
スコットミルナー

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

オンラインでお試しください!

JavaScriptを使用したポリグロット。オンラインでお試しください!

次のシーケンス


O(n^2 log n)複雑さについては、単純ではなく、OEISページの式を使用してください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コードセクションで説明されている式を使用します。
  • フォーミュラプルーフ:

    • 式はこれと同等です。

    • 3点の境界ボックスのサイズをとしますm * k。2つのケースを検討してください。

      • k != 0およびm != 0:3つのポイント(\または/)の向きを選択する2つの方法gcd(k-1, m-1)-1、他の2つのポイントの間にあるポイント(n - k) × (n - m)を選択する方法、および境界ボックスの位置を選択する方法があります。
      • k == 0またはm == 0:方向(|または-)を選択する2つの方法、ポイントがある行/列を選択する方法n、およびBinomial[n, 3] == (n*(n-1)*(n-2)) / 6その行/列のポイントを選択する方法があります。

いくつかのポリグロットノート:

  • ファンキーには実際にはキーワードがありませんreturn。ただし、ATAcoが説明したように、[Funky] returnは変数だと考えています。そのため、その式を解析していますが、これは便利なことは何もせず、次の式を解析します。そして、これは出力として使用されます。
  • Javascriptは^^指数演算として使用するFunkyとは異なり、ビット単位のxorとして使用します。そのため、Javascriptの互換性を確保するn*n代わりに使用する必要がn^2あります。
  • ファンキーでは、すべての演算子(+-*表現が適切に括弧する必要があるので、など)が、同じ優先順位と右結合を有しています。

1
+1は多声を期待していませんでした。
アタコ

五角形はありませんが、六角形はうまく適合します。
-NieDzejkob

この:バイトは...既に使用されたリンク
NieDzejkob

それでは、バイトカウントの問題を修正するために、この回答を330バイトに埋めてください。残りは処理します。
NieDzejkob

[回答を参照、なぜなら:バイト相反する問題の332バイトにパディングこのチャットメッセージ ]
user202729

8

11. Pari / GP、64バイト、A000065

{a(n) = if( n<0, 0, polcoeff ( 1 / eta(x + x*O(x^n) ), n) - 1)};

オンラインでお試しください!

次のシーケンス


その有効な入力はありますか?
リーキー修道女

64バイトを取得する必要がありますか?:P-
完全に人間

@totallyhumanはい:;_; I solved A000064 and you changed it. Downvoted.
スティーブン

@totallyhumanは笑います。チャットを参照してください
HyperNeutrino


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個のアイテムを印刷するように変更するのは簡単です(20in for (int i = 0; i < 20; ++i)をに変更することにより1000

わーい!これにより、OEISページにリストされているより多くの用語を計算できます!(初めて、チャレンジのためにJavaを使用する必要があります)OEISがどこかにもっと用語を持たない限り...


簡単な説明

シーケンスの説明の説明。

シーケンスは、対称グループC 2vを持つ自由な非平面ポリエノイドの数を求めます。ここで、

  • ポリエノイド:(ポリエン炭化水素の数学モデル)木(または縮退の場合は単一の頂点)を六角格子に埋め込むことができます。

たとえば、木を考えます

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

最初のものは六角格子に埋め込むことはできませんが、2番目のものは埋め込むことができます。その特定の埋め込みは、3番目のツリーとは異なると見なされます。

  • 非平面ポリエノイド:重複する2つの頂点が存在するようにツリーを埋め込みます。

(2)そして(3)上のツリーは平面です。ただし、これは非平面です。

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

(7つの頂点と6つのエッジがあります)

  • 遊離ポリエノイド:回転と反射によって取得できる1つのポリエノイドのバリアントは、1としてカウントされます。

  • C 2vグループ:ポリエノイドは、2つの垂直な反射面がある場合にのみカウントされ、それ以上はカウントされません。

たとえば、2つの頂点を持つ唯一のポリエノイド

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ノードを持ち、互いに等しくありません(変換中)-追加されたノードはpredicateを満たさなければなりませんfn

考えられる2つの反射軸について考えます。1つは頂点を通過してエッジと一致するもの(x = 0)、もう1つはエッジの垂直二等分線です(2x = y)。とにかく、生成されたグラフは同型なので、そのうちの1つだけを取ることができます。

だから、最初の軸のx = 0基地グラフが単一のノードで構成されてから、我々は、開始(1, 0)(ケースでn奇数である)、または間のエッジを持つ2つのノード(1, 0) - (2, 0)(ケースでnもある)、そして次に、そのノードを展開しますy > 0。これは、プログラムの「反射タイプ1」セクションで行われ、生成された各グラフに対して、X軸x = 0g.reflectSelfX())を介して自身を反射(ミラー)し、正しい対称性があるかどうかを確認します。

ただし、もしn2で割り切れる場合、この方法で各グラフを2回カウントしたことに注意してください2x = y + 3。これは、軸によってミラーイメージも生成するためです。

(2つのオレンジ色のものに注意してください)

軸についても同様で、偶数の2x = y場合(点のみ)nから開始し、の(1, 1)ようなグラフを生成し2*x > y、それぞれを2x = y軸に反映し(g.reflectSelfType2())、で接続(1, 0)(1, 1)、正しい対称性があるかどうかを確認します。2で割ることも忘れないでください。


この(および他の)が投稿されたときに私が眠っていたことを考えると、私はあなたに疑いの利益を与え、まだ答えを受け入れません。
コイナーリンガーをケア

2
あなたがオンライン締め切り3分前...だった@cairdcoinheringaahing
user202729

ええと、次のシーケンスは、正しく読み込めば...(無限ではありますが)ハードコーディングできます。計算自体は---かなり---非常に簡単なので、しないでください。
user202729

7

6. R、71バイト、A000072

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

オンラインでお試しください!

次のシーケンス


1
神の愛のために、私はこの答えを投稿する前に次のシーケンスをチェックしませんでした。
リーキー修道女

簡単な次のシーケンスは戦略的な利点ではありませんか?
ブラックキャップ

@BlackCap連続して2回、または最後に回答してから1時間以内に回答することはできません。
エリックアウトゴルファー

@EriktheOutgolferthe answer before the last posted (the one who didn't break the chain) will win
ブラックキャップ

@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リンクにある再帰式を評価します。

次のシーケンス


ああ、サイトがダウンしたとき、それが戻ってきたとき、それは怒って急いでいると知っていました。かろうじて私を倒した。
シルヴィオマヨロ

私は、サイトがダウンした...気づいていなかった
スコット・ミルナー




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

悪...>。<しかし、とにかく、シーケンスの4つの要素をハードコーディングするだけです。十分に簡単なxD OPがそれを承認したようです¯\ _(ツ)_ /
¯– HyperNeutrino
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.