다른 OEIS


95

13/03/2018 16:45 세계 협정으로, 우승자는 # 345에 응답 하여, Scrooble . 이는 컨테스트가 공식적으로 종료되었지만 규칙을 준수하는 한 자유롭게 답변을 게시하는 것을 의미합니다.

또한, 답변 수의 관점에서 상위 3 명의 답변자에게 간단히 외치십시오.

1. NieDzejkob- 답변 41 개

2. KSmarts- 답변 30 개

3. Hyper Neutrino- 답변 26 개


이것은 OEIS의 시퀀스와 이전 제출 기간을 사용하는 답변 체인 질문입니다.

이 답변 연쇄 질문은 다음과 같은 방식으로 작동합니다.

  • 첫 번째 답변을 게시하겠습니다. 다른 모든 솔루션은 그로부터 시작되어야합니다.
  • 다음 사용자 (userA라고 함)는 색인 번호 (아래 참조)가 내 코드 길이와 동일한 OEIS 시퀀스를 찾습니다.
  • 그런 다음 시퀀스를 사용하여 사용 하지 않는 언어 로 정수를 입력 n으로 사용하고 해당 시퀀스에서 n 번째 숫자를 출력하는 프로그램 을 코딩해야합니다 .
  • 다음으로 솔루션을 게시 한 후 새 사용자 (userB)가 동일한 작업을 반복해야합니다.

n시퀀스의 첫 번째 항은 첫 번째 후 n 번의 항이며, 첫 번째 값은 OEIS 페이지에 주어진 첫 번째 값입니다. 이 질문에서는 이러한 시퀀스에 0 인덱싱 을 사용 합니다. 예를 들어, 함께 A000242 하고 n = 3, 올바른 결과가 될 것이다 (25) .

하나!

이것은 가 아니므로 가장 짧은 코드는 중요하지 않습니다. 그러나 코드 길이는 여전히 영향을 미칩니다. 시퀀스 중복을 방지하려면 바이트 수는 고유해야합니다 . 이것은 여기에 제출 된 다른 프로그램이 귀하의 바이트 와 동일한 길이 일 수 없음을 의미합니다 .

마지막 게시물의 길이에 대한 시퀀스가없는 경우 게시물의 시퀀스가 ​​사용되지 않은 가장 낮은 시퀀스입니다. 이는 사용 된 시퀀스도 고유해야하며 시퀀스가 ​​바이트 수와 같을 수 없음을 의미합니다.

답변이 게시되고 일주일 이상 새 답변이 게시 되지 않으면 마지막 게시 전 (체인을 끊지 않은 사람) 이전 의 답변 이 이깁니다.

입력과 출력

일반 입력 및 출력 규칙이 적용됩니다. 입력은 정수 또는 정수의 문자열 표현이어야하며 출력은 시퀀스에서 올바른 값이어야합니다.

서식

대부분의 질문과 마찬가지로 답변을 다음과 같이 형식화하십시오.

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

`code`

[next sequence](link)

*anything else*

규칙

  • 답변을 게시 한 후 게시 한 후 1 시간 이상 기다려야합니다.
  • 한 번에 두 번 이상 게시 할 수 없습니다.
  • 시퀀스의 색인 번호는 A부품 뒤의 번호 이며 선행 0이 제거됩니다 (예 : A000040색인 번호의 경우 40).
  • 입력 또는 필수 출력이 언어 숫자 범위를 벗어나지 않는다고 가정 할 수 있지만, 예를 들어 숫자 1 만 사용할 수있는 언어를 선택하여이를 남용하지 마십시오.
  • 제출 기간이 65536자를 초과하는 경우 코드에 액세스 할 수있는 방법 (예 : 페이스트 빈)에 대한 링크를 제공하십시오.
  • n 언어가 경쟁하는 것을 막기 위해 정확도 불일치가 발생하는 것을 막기 위해 1000보다 크거나 시퀀스의 범위를 벗어나지 않습니다.
  • 150 (유효한) 답변마다 언어 사용 횟수가 증가합니다. 따라서 150 개의 솔루션을 게시 한 후에는 모든 언어를 두 번 사용할 수 있습니다 (이전의 모든 답변은 이에 해당됩니다). 예를 들어, 150 답변이 게시되면 Python 3을 두 번 사용할 수 있지만 이미 한 번 사용했기 때문에 300 답변이 게시 될 때까지 한 번만 사용할 수 있습니다.
  • 도움이되고 사용할 다음 순서에 대한 링크를 게시하십시오. 필수는 아니지만 권장 사항입니다.
  • 다른 버전의 언어 (예 : Python 2 및 Python 3)는 다른 언어 입니다. 일반적으로 Try It Online에서 다른 버전을 모두 사용할 수있는 경우 언어가 다르지만 이는 일반적인 규칙 이며 엄격한 대답이 아니라는 점을 명심하십시오 .
  • 금지되어 있지는 않지만 OEIS 페이지에서 코드를 복사하지 말고 실제로 해결해보십시오.
  • 하드 코딩은 시퀀스가 ​​유한 한 경우에만 허용됩니다. 이 메시지를 표시 한 답변 ( # 40 )은 규칙에 대한 예외입니다. 체인 하드 코드의 초기에 몇 가지 답변이 있지만 # 100까지 체인을 삭제하는 것이 좋지 않기 때문에 무시할 수 있습니다.

답변 체인 스 니펫


의견은 긴 토론을위한 것이 아닙니다. 이 대화는 채팅 으로 이동 되었습니다 .
Dennis

프로그램이 더 큰 값을 생성하기 위해 내장 float/ double유형에 대해 더 나은 부동 소수점 정확도가 필요한 경우 괜찮 n습니까?
NieDzejkob

1
@Giuseppe 아니요, 수학을 배열 / 문자열에 배치하는 대신 수학을 수행하여 숫자를 생성 할 때
caird coinheringaahing

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)이 체인을 끊었을 때 귀하의 답변이 승자입니다!
caird coinheringaahing

1
@cairdcoinheringaahing이 놀라운 도전에 감사합니다. 지금 끝내야한다는 것이 슬프지만, 세상의 모든 좋은 일들이 그랬듯이 끝났습니다. 이제 코드에 대한이 불쌍한 핑계를
골라 내려면

@Scrooble 당신은 정말 길이를 변경할 수 없습니다 ...
NieDzejkob

@NieDzejkob 네,하지만 같은 길이를 유지하기 위해 골프를 치고 패딩을 더 추가 할 수 있습니다.
Khuldraeseth na'Barya

@cairdcoinheringaahing "체인을 끊었다"? 그게 무슨 뜻이야?
매직 문어 Urn

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 위에있는 "공식을 사용합니다 .

달은 엉망이지만, 이건 코드 골프가 아닙니다.


달의 별? hmmm
betseg

19

97. Python 3 (PyPy) , 1772 바이트, A000236

우선, Dr. Max Alekseyev에게 감사합니다. 이 문제를 이해하기 위해 이메일로 연락 할 수있어서 매우 행운입니다. 그의 Math.SE 답변은 여기 에 많은 도움이되었습니다. 저를 도와 준 밀 마법사에게 감사드립니다. :)

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) 부분은 파이썬을 다시 사용할 수 있도록하기위한 것입니다. 나는 정말로 다른 많은 언어를 모른다. 나는 이것을 Java로 포팅하려고 시도하지 않고 제 시간에 끝나지 않을 위험이있다.

다음 순서 (또한 더 이상 미친 수학 작업을 수행하지 마십시오. 파이썬 버전이 남아 있지 않으므로 다른 사람 이이 도전 과제를 저장해야합니다 :)


물론 항상 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. 파이썬 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 내가 말했듯이, 나는이 롤 골프를 귀찮게하지 않았다. 게다가, 그것은이 사이트에서 가장 긴 파이썬 답변이 아니므로 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 가난한 토끼 ...
Outgolfer 에릭

이전 게시물에 연결해야합니까?
Leaky Nun

지금은 골프를 타지 못해 고통 스럽습니다. 내가 먼저
봤어야했는데

다음 순서는 무엇입니까? 나는 세 가지를 이해하지 못한다 : P
Beta Decay

13

9. Pyth , 19 바이트, A000025

?>Q0sm@_B1-edld./Q1

테스트 스위트 .

다음 순서

a (n) = 짝수 순위를 가진 n의 파티션 수에서 홀수 순위를 가진 숫자입니다. 파티션의 순위는 가장 큰 부분에서 부분 수를 뺀 것입니다.


Pyth을 알고있는 사람들을 위해, 나는 의도적으로 사용하는 >Q0대신 Q, 당신도 알다시피, A000019 될 수있는 다음 시퀀스를 위해.
Leaky Nun

1
OEIS 페이지에서Keywords: easy,nice
BlackCap

@LeakyNun 예, 그렇지 않으면 A000017을 해결해야합니다.
Outgolfer Erik


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

온라인으로 사용해보십시오!

다음 순서


잠깐, 실제로 했어? 이 괴물 같은 프로그램으로 논문을 쓰지 않고 교수와 이야기를
Stephen

@Stephen 현재 버그 수정 lol
HyperNeutrino

이것이 plantri에 따라 삼각형, 사각형 및 오각형을 나누는 접근법입니까? 그럴 것 같지만 일부 구문이 생소합니다.
피터 테일러

1
@PeterTaylor 설명하는 접근법을 이해한다고 가정합니다. 예, 삼각형을 찾고 3 개의 정점 모두에 인접한 정점 또는 2 개의 인접한주기를 배치하고 공통 가장자리를 삭제하고 3 개의 삼각형에 대해 동일한 4 개의 정점을 모두 배치합니다 국방부에. 나는 그것이 당신이 묘사하는 것이라고 생각합니다.
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 주석에 전체 "코드" 가 표시되어 링크 로트와 동시에 스크롤하는 긴 응답을 방지합니다. 이 재미!

다음 순서


다음 순서로 링크를 추가해 주시겠습니까
Zacharý

@ 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

내 capslock 키가 탈출해야하므로 shift ..를 누른 상태 에서이 모든 것을 썼습니다.

온라인으로 사용해보십시오!

다음 순서


사용 +1PRAIME
Leaky Nun

3
당신은 프로그래머가, 당신이 작성하고 파이썬 스크립트를 통해 실행할 수도있어 upper이 -.- 거라고
스티븐

5
@StepHen 또는 단순히 gggUG그것을 쓴 vim에서, 그러나 나는 그렇게 영리하지 않습니다
BlackCap

10

10. 마그마, 65 바이트, A000019

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

여기 사용해보십시오

롤 내장

다음 순서


@ETHproductions :) 문제 없습니다, OEIS 페이지 감사합니다. cuz에는 정확한 내장 기능이 있습니다.
HyperNeutrino

4
; _; 나는 A000064를 풀었고 당신은 그것을 바꿨다. 공감.
Leaky Nun


파이썬 에서이 작업을 수행하는 동안 실수로 A007317 을 해결 했습니다 ( TIO ) . 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, On Cayley의 Alkanes 열거 (또는 4-Valent Trees) , Journal of Integer Sequences, Vol. 2 (1999), 필요한만큼 의 총합을Ckn 계수를 고정 4 분의 3을 끼워 넣습니다. 특히 상반신을 텔레 스코핑한다는 것은 사이클 인덱스 가 모두가 아닌 하나에 만 적용되어야 한다는 것을 의미 합니다.S4Th

코드는 다음과 같이 분류됩니다.

; 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 프로그램이므로, 아마도 관용적이지 않을 것입니다.


의견은 긴 토론을위한 것이 아닙니다. 이 대화는 채팅 으로 이동 되었습니다 .
Dennis

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

나는의 정의 사용 BIKDIK에서 https://oeis.org/transforms2.html을 하지만 공식은 오타의 번호를 갖고있는 것 같다. 나는 LPAL많은 어려움없이 교정 했고, DIKPhlya 열거를 다면체 그룹주기 지수 에 적용하는 것에 근거 하여 공식을 독립적으로 도출했습니다 . # 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를 다른 주요 버전으로 사용하기를 바랍니다. 누군가 파이썬 0 인터프리터를 얻을 수 있다면, 그것을 사용할 수도 있지만 이것이 유효하기를 바랍니다.

이것은 1 개의 정점에서 시작하여 작동하며, 많은 정점이있는 가능한 모든 무 방향 그래프의 인접 행렬 표현을 만듭니다. 3가이면 가장자리의 파워 세트를 살펴보고 길이별로 정렬됩니다. 첫 번째 사이클이 너무 짧으면 계속 진행됩니다. 찾은 첫 번째 사이클이 입력과 일치하면 (3으로 오프셋) 올바른 정점 수를 출력하고 종료됩니다.

다음 시퀀스 <-이 모든 수학 난센스에서 벗어나기 쉬운 것입니다 : D

편집 : 바이트 수를 변경하지 않고 조금 더 빠르게하기 위해 최적화를 추가했습니다 (여전히 TIO의 60 초 한도 내에서 세 번째 용어를 계산할 수 없음).


... 그리고 체인이 응답 90으로 끝날 것이라고 진지하게 생각했습니다
pppery

1
내가 :) (예를 들어 탄소 체인 namer 문제를) outgolfed 점점 걱정하지 않아도 대부분의 사람들은 심지어 솔루션을 만들 수 없기 때문에 @ppperry : 열심히 도전하고 좋아
HyperNeutrino

누군가가 솔루션을 가져 와서 더
간결한

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

온라인으로 사용해보십시오!

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 코드 섹션에 설명 된 공식을 사용합니다 .
  • 공식 증거 :

    • 수식은 이것과 같습니다 .

    • 세 점의 경계 상자 크기를로합니다 m * k. 두 가지 경우를 고려하십시오.

      • k != 0m != 02 개 세 점 (의 방향을 선택할 수있는 방법이있다 \또는 /,) gcd(k-1, m-1)-1지점을 선택하는 방법을 다른 두 점 사이에있는, 그리고 (n - k) × (n - m)경계 상자의 위치를 선택하는 방법.
      • k == 0또는 m == 0: 방향 ( |또는 -) 을 선택하는 두 가지 방법 n, 점이있는 행 / 열 Binomial[n, 3] == (n*(n-1)*(n-2)) / 6을 선택하는 방법 및 해당 행 / 열의 점을 선택하는 방법이 있습니다.

일부 폴리 글 로트 노트 :

  • 펑키에는 실제로 keyword가 없습니다 return. 그러나 ATaco가 설명했듯이 [펑키]는return 는 변수 합니다. 그래서 그것은 편리하게 아무것도하지 않는 그 표현을 파싱하고 다음 표현을 파싱합니다. 그리고 이것은 출력으로 사용됩니다.
  • 지수로 ^사용하는 Funky와 달리 Javascript 는 비트 xor로 사용 ^됩니다. 따라서 n*n대신에 사용해야합니다n^2 Javascript 호환성을 보장 .
  • 펑키, 모든 연산자 ( +, -, *식은 괄호 속에해야하므로, 등)과 같은 우선 순위 권리 연관이있다.

1
+1은 폴리 글롯을 기대하지 않았습니다.
ATaco

오각은 없지만 Hexagony는 잘 어울립니다.
NieDzejkob


따라서 바이트 수 문제를 해결하기 위해이 답변을 330 바이트로 채울 수 있습니까? 나머지는 처리하겠습니다.
NieDzejkob

[바이트 수 충돌 문제로 인해 332 바이트로 응답 된 답변, 이 채팅 메시지 참조 ]
user202729


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. 하지마 이제까지. 사용하다. 자바. 1. 일반적으로 Java보다 더 장황합니다.
  3. 체인이 파손될 수 있습니다.
  4. 간격 (7 일 및 48 분) 은이 답변에 의해 생성 된 간격 ( 이전의 것보다 7 일 1 시간 25 분 늦음)을 넘지 않습니다.
  5. 큰 바이트 수에 대한 새로운 기록! 내가 (실수로?) 탭 대신 공백을 사용하기 때문에 바이트 수가 필요한 것보다 큽니다. 내 컴퓨터에서는 9550 바이트입니다. (본 개정 시점)
  6. 다음 순서 .
  7. 현재 형식의 코드는 시퀀스의 처음 20 개 항만 인쇄합니다. 그러나 그것이 처음 1000 개 항목을 인쇄 할 정도로 쉽게 변경할 수 있습니다 (변경하여 20의를 for (int i = 0; i < 20; ++i)1000)

예이! OEIS 페이지에 나열된 것보다 더 많은 용어를 계산할 수 있습니다! OEIS에 어딘가에 더 많은 용어가 없다면 (처음으로 Java를 사용해야합니다 .)


빠른 설명

시퀀스 설명에 대한 설명

이 시퀀스는 대칭 그룹 C 2v 를 갖는 자유 비평면 폴리에 노이드의 수를 요청합니다 .

  • 폴리에 노이드 (polyenoid) : (폴리 엔 탄화수소의 수학적 모델) 트리 (또는 축퇴 된 경우 단일 버텍스)는 육각형 격자에 포함될 수 있습니다.

예를 들어, 나무를 고려하십시오

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

첫 번째는 6 각형 격자에 포함될 수 없지만 두 번째는 6 각형 격자에 포함될 수 없습니다. 이 특정 임베딩은 세 번째 트리와 다른 것으로 간주됩니다.

  • 비평면 폴리에 노이드 : 두 개의 겹치는 정점이 존재하도록 나무를 포함시킵니다.

(2)그리고 (3)나무 위의 평면이다. 그러나 이것은 비평면입니다.

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

(정점 7 개와 모서리 6 개가 있습니다)

  • 유리 폴리에 노이드 : 회전 및 반사에 의해 얻을 수있는 하나의 폴리에 노이드 변형이 하나로 계산됩니다.

  • C 2v 그룹 : 폴리에 노이드는 두 개의 수직 반사 평면을 갖고 더 이상없는 경우에만 계산됩니다.

예를 들어 정점이 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노드에는 서로 같지 않은 노드 가 있습니다 (번역 중). 추가 된 노드가 조건자를 만족해야합니다 fn.

가능한 두 개의 반사 축을 고려하십시오. 하나는 꼭지점을 통과하고 모서리 ( x = 0) 와 일치 하고 다른 하나는 모서리 ( )의 수직 이등분선입니다 2x = y. 어쨌든 생성 된 그래프는 동형이기 때문에 그중 하나만 취할 수 있습니다.

따라서 첫 번째 축의 x = 0경우 기본 그래프에서 시작하여 단일 노드 (1, 0)( n홀수 인 경우 ) 또는 가장자리가있는 (1, 0) - (2, 0)( 두 경우 인 경우 ) 두 노드로 구성된 n다음 노드를 확장합니다 y > 0. 프로그램의 "반사 유형 1"섹션에서 수행 한 다음 생성 된 각 그래프에 대해 X 축 x = 0( g.reflectSelfX())을 통해 자신을 반사 (거울) 한 다음 올바른 대칭이 있는지 확인하십시오.

그러나 n2로 나눌 수 있으면 축으로 미러 이미지를 생성하기 때문에 각 그래프를 두 번 계산합니다 2x = y + 3.

(오렌지 2 개 참고)

axis 2x = y와 비슷하지만 (그리고 if 만) n짝수이면 점에서 시작 (1, 1)하여 그래프와 같은 2*x > y각 그래프를 생성 하고 2x = y축 ( g.reflectSelfType2())에 각각 반영 하고 연결 (1, 0)하고 (1, 1)대칭이 올바른지 확인합니다. 2로 나누는 것도 잊지 마십시오.


이것 (그리고 다른 하나)이 게시 될 때 잠들었 음을 감안할 때, 나는 당신에게 의심의 이익을 주지만 아직 대답을 받아들이지 않을 것입니다.
caird coinheringaahing

2
@cairdcoinheringaahing 당신은 마감 시간 3 분 전에 온라인 상태
였습니다

아, 다음 순서는 제대로 읽을 수 있다면 하드 코딩 될 수 있습니다 ... (무한하지만). 계산 자체는 매우 쉽습니다. 그렇게하지 마십시오.
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
하나님의 사랑을 위해이 답변을 게시하기 전에 다음 순서를 확인하지 않았습니다.
Leaky Nun

쉬운 다음 순서는 전략적인 이점이 아닌가?
BlackCap

@BlackCap 그들은 마지막으로 응답 한 후 1 시간 이내에 두 번 연속으로 응답 할 수 없습니다.
Outgolfer Erik

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

이 시점에서 @BlackCap은 일어나지 않을 것입니다
Stephen


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 링크에서 발견되는 재귀 공식을 평가합니다.

다음 순서


아아, 나는 사이트가 내려 왔을 때 그것이 돌아올 때 미친 듯이 돌릴 것이라는 것을 알았다. 간신히 이겼다.
Silvio Mayolo

나는 사이트가 다운
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
... 다음 순서는
계산할 수 없습니다

1
@HyperNeutrino 나는 알고있다 : PI는 이것을 목적으로했다
Peter Olson

Evil ...>. <그러나 어쨌든 시퀀스의 4 개 요소를 하드 코딩하겠습니다. 충분히 쉬운 xD OP 승인 ¯ \ _ (ツ) _ / ¯
HyperNeutrino
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.