Một OEIS khác


95

Kể từ ngày 13/03/2018 16:45 UTC, người chiến thắng là câu trả lời # 345 , bởi Scrooble . Điều này có nghĩa là cuộc thi đã chính thức kết thúc, nhưng hãy thoải mái tiếp tục đăng câu trả lời, chỉ cần họ tuân thủ các quy tắc.

Đồng thời, chỉ cần một tiếng hét nhanh với ba người trả lời hàng đầu về số lượng câu trả lời:

1. NieDzejkob - 41 câu trả lời

2. KSmarts - 30 câu trả lời

3. Hyper Neutrino - 26 câu trả lời


Đây là một câu hỏi chuỗi trả lời sử dụng trình tự từ OEIS và độ dài của lần gửi trước.

Câu trả lời câu hỏi chuỗi này sẽ hoạt động theo cách sau:

  • Tôi sẽ đăng câu trả lời đầu tiên. Tất cả các giải pháp khác phải xuất phát từ đó.
  • Người dùng tiếp theo (hãy gọi họ là userA) sẽ tìm thấy chuỗi OEIS trong đó số chỉ mục của nó (xem bên dưới) giống với độ dài mã của tôi.
  • Sau đó, sử dụng chuỗi, họ phải mã, trong một ngôn ngữ không được sử dụng , một chương trình lấy một số nguyên làm đầu vào, n và xuất số thứ n trong chuỗi đó.
  • Tiếp theo, họ đăng giải pháp của họ sau của tôi và một người dùng mới (userB) phải lặp lại điều tương tự.

Các nthuật ngữ thứ của một chuỗi là một thuật ngữ n lần sau khi lần đầu tiên, làm việc với giá trị đầu tiên là giá trị đầu tiên đưa ra trên trang OEIS của nó. Trong câu hỏi này, chúng tôi sẽ sử dụng lập chỉ mục 0 cho các chuỗi này. Ví dụ: với A000242n = 3, kết quả đúng sẽ là 25 .

Tuy nhiên!

Đây không phải là một , vì vậy mã ngắn nhất không thành vấn đề. Nhưng độ dài của mã của bạn vẫn có tác động. Để ngăn chặn sự trùng lặp của chuỗi, bytecount của bạn phải là duy nhất . Điều này có nghĩa là không có chương trình nào khác được gửi ở đây có thể có cùng độ dài bằng byte như của bạn.

Nếu không có trình tự cho độ dài của bài đăng cuối cùng, thì trình tự cho bài đăng của bạn là trình tự không được sử dụng thấp nhất. Điều này có nghĩa là các chuỗi được sử dụng cũng phải là duy nhất và chuỗi đó không thể giống với chuỗi của bạn.

Sau khi một câu trả lời đã được đăng và không có câu trả lời mới nào được đăng trong hơn một tuần, câu trả lời trước khi bài đăng cuối cùng (người không phá vỡ chuỗi) sẽ giành chiến thắng.

Đầu vào và đầu ra

Quy tắc đầu vào và đầu ra chung được áp dụng. Đầu vào phải là số nguyên hoặc biểu diễn chuỗi của một số nguyên và đầu ra phải là giá trị chính xác trong chuỗi.

Định dạng

Như với hầu hết các , vui lòng định dạng câu trả lời của bạn như thế này

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

`code`

[next sequence](link)

*anything else*

Quy tắc

  • Bạn phải đợi ít nhất 1 giờ trước khi đăng câu trả lời, sau khi đã đăng.
  • Bạn không thể đăng hai lần (hoặc nhiều hơn) liên tiếp.
  • Số chỉ mục của chuỗi là số sau Aphần và với các số 0 đứng đầu bị xóa (ví dụ: A000040số chỉ mục là 40)
  • Bạn có thể giả sử rằng cả đầu vào và đầu ra được yêu cầu sẽ không nằm ngoài phạm vi số ngôn ngữ của bạn, nhưng vui lòng không lạm dụng điều này bằng cách chọn một ngôn ngữ chỉ có thể sử dụng số 1, ví dụ.
  • Nếu độ dài bài gửi của bạn dài hơn 65536 ký tự, vui lòng cung cấp liên kết đến cách truy cập mã (ví dụ như pastebin).
  • n sẽ không bao giờ lớn hơn 1000, hoặc nằm ngoài giới hạn cho chuỗi, chỉ đơn giản là để ngăn sự khác biệt về độ chính xác ngăn chặn một ngôn ngữ cạnh tranh.
  • Cứ sau 150 câu trả lời (hợp lệ), số lần ngôn ngữ có thể được sử dụng sẽ tăng lên. Vì vậy, sau 150 giải pháp đã được đăng, mọi ngôn ngữ có thể được sử dụng hai lần (với tất cả các câu trả lời trước đó được tính vào điều này). Chẳng hạn, khi 150 câu trả lời đã được đăng, Python 3 có thể được sử dụng hai lần, nhưng do thực tế là nó đã được sử dụng một lần, điều này có nghĩa là nó chỉ có thể được sử dụng một lần nữa cho đến khi 300 câu trả lời được đăng.
  • Xin hãy giúp đỡ và gửi một liên kết đến trình tự tiếp theo sẽ được sử dụng. Điều này không bắt buộc, nhưng là một khuyến nghị.
  • Các phiên bản ngôn ngữ khác nhau, ví dụ Python 2 và Python 3 là các ngôn ngữ khác nhau . Theo nguyên tắc chung, nếu cả hai phiên bản khác nhau đều có sẵn trên Try It Online, chúng là các ngôn ngữ khác nhau, nhưng hãy nhớ rằng đây là quy tắc chung và không phải là câu trả lời cứng nhắc.
  • Nó không bị cấm, nhưng vui lòng cố gắng không sao chép mã từ trang OEIS và thực sự cố gắng giải quyết nó.
  • Mã hóa cứng chỉ được phép nếu chuỗi là hữu hạn. Xin lưu ý rằng câu trả lời đã nhắc điều này ( # 40 ) là ngoại lệ cho quy tắc. Một vài câu trả lời sớm trong mã cứng chuỗi, nhưng những câu này có thể bị bỏ qua, vì không có gì tốt trong việc xóa chuỗi lên đến, giả sử, # 100.

Câu trả lời chuỗi


Bình luận không dành cho thảo luận mở rộng; cuộc trò chuyện này đã được chuyển sang trò chuyện .
Dennis

Có ổn không nếu một chương trình sẽ cần độ chính xác dấu phẩy động tốt hơn cho phần dựng sẵn float/ doubleloại để tạo ra các giá trị lớn hơn n?
NieDzejkob

1
@Giuseppe Không, vì bạn đang tạo ra các con số bằng cách thực hiện các phép toán, thay vì chỉ đặt chúng vào một mảng / chuỗi
caird coinheringaahing

2
@cairdcoinheringaahing Theo tôi đó là việc giải mã hằng số gamma. Nó không hoạt động "trên lý thuyết" cho số lượng lớn hơn.
dùng202729

Câu trả lời:


4

345. brainfuck , 162 byte, A000602

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

Hãy thử trực tuyến!

Trình tự tiếp theo!

Điều này nhận làm đầu vào ký tự với điểm mã n(theo thông số kỹ thuật của BF) và đầu ra theo cùng một cách. Để xem các con số, tôi khuyên bạn nên sử dụng @ Timwi's EsotericIDE .

Giải trình:

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

Vì điều này lưu trữ tất cả các số Fibonacci cho đến số quan trọng, nên sẽ thực sự thất bại với đầu vào lớn trên một băng giới hạn.

Điều này có thể được rút ngắn đáng kể bằng cách mã hóa cơ sở (2), nhưng tính golf không phải là vấn đề.


Khi câu trả lời tiếp theo (# 346) phá vỡ chuỗi, câu trả lời của bạn là người chiến thắng!
caird coinheringaahing

1
@cairdcoinheringaahing Cảm ơn bạn vì thử thách tuyệt vời này. Thật buồn cho tôi rằng nó nên kết thúc ngay bây giờ, nhưng cũng như tất cả những điều tốt đẹp trên thế giới, kết thúc nó đã làm. Bây giờ để đánh golf cái cớ nghèo nàn này cho mã, vì bây giờ đây là câu trả lời đầu tiên mà mọi người sẽ thấy, và nó phải ngắn gọn ấn tượng ...
Khuldraeseth na'Barya

@Scrooble bạn thực sự không thể thay đổi độ dài ...
NieDzejkob 15/03/18

@NieDzejkob Vâng, nhưng tôi có thể chơi gôn và thêm một số phần đệm khác, để giữ nguyên chiều dài.
Khuldraeseth na'Barya

@cairdcoinheringaahing "phá vỡ chuỗi"? Điều đó nghĩa là gì?
Bạch tuộc ma thuật Urn

40

22. FiM ++ , 982 byte, A000024

Lưu ý : nếu bạn đang đọc này, bạn có thể muốn sắp xếp theo "cũ nhất".

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

Trình tự tiếp theo


10
Hahaha, cười rất nhiều trong toàn bộ sự việc. +1 cho lựa chọn ngôn ngữ :-)
ETHproductions

Thật tuyệt vời, hãy nâng cấp của tôi
downrep_nation

22

1. Hình tam giác , 10 byte, A000217

$\:_%i/2*<

Hãy thử trực tuyến!

Trình tự tiếp theo

Làm thế nào nó hoạt động

Các định dạng mã vào tam giác này

   $
  \ :
 _ % i
/ 2 * <

với IP bắt đầu từ $Đông Nam và di chuyển (SE, heh), hoạt động như thế này:

$            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. Hình tam giác, 10 byte, A000217. * theo liên kết * A000217 Triangular numbers...
MD XF

22

73. Starry , 363 byte, A000252

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

Hãy thử trực tuyến!

Trình tự tiếp theo

Sử dụng công thức " a(n) = n^4 * product p^(-3)(p^2 - 1)*(p - 1)trong đó sản phẩm nằm trên tất cả các số nguyên tố p chia n" từ OEIS.

Mặt trăng là một no-op, nhưng hey, đây không phải là môn đánh gôn.


sao trong trăng? hmmm
betseg

19

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

Trước hết, cảm ơn bác sĩ Max Alekseyev vì đã kiên nhẫn với tôi. Tôi rất may mắn khi tôi có thể liên lạc với anh ấy qua email để hiểu được thách thức này. Câu trả lời Math.SE của anh ấy ở đây đã giúp tôi rất nhiều. Cảm ơn Wheat Wizard đã giúp tôi là tốt. :)

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

Hãy thử trực tuyến!

Nếu nó cho kết quả sai, chỉ cần tăng 100 đến một cái gì đó lớn hơn. Tôi nghĩ 10000 sẽ hoạt động cho 4 nhưng tôi sẽ để máy tính chạy qua đêm để xác nhận điều đó; nó có thể mất một vài giờ để hoàn thành.

Lưu ý rằng phần (PyPy) chỉ để tôi có thể sử dụng lại Python. Tôi thực sự không biết nhiều ngôn ngữ khác và tôi sẽ không cố gắng chuyển ngôn ngữ này sang Java và có nguy cơ không hoàn thành kịp thời gian.

Trình tự tiếp theo (Ngoài ra, vui lòng không thực hiện thêm bất kỳ nội dung toán học điên rồ nào nữa; Tôi không còn phiên bản Python nào để người khác sẽ phải lưu thử thách này D :)


cũng luôn có pypy3
ASCII - chỉ

15

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

Hãy thử trực tuyến!

Lần đầu tiên lập trình bằng TrumpScript, có thể tôi đã phát minh lại bánh xe một vài lần - 4 dòng được dành riêng để tính 2 ^ n. Tôi đã cố gắng để làm cho nó trông giống như một cái gì đó (say rượu) Trump có thể nói. Như một phần thưởng, đây là một kịch bản Python tôi đã viết để xác minh rằng tôi đang làm mọi thứ đúng. Có một số khác biệt cho chương trình trên, nhưng phần lớn là tương đương trực tiếp.

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)

Trình tự tiếp theo!


3
I will make cat feel goodO_O
Mèo kinh doanh

Đáng buồn là I will make Business Cat feel goodsẽ không hoạt động ...
NieDzejkob

14

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

Hãy thử trực tuyến!

Thậm chí sẽ không bận tâm đến golf này. Này, đây không phải là câu trả lời Python dài nhất của tôi trên trang web này!

Trình tự tiếp theo


1
Chúc mừng bạn đã giải mã được các phép toán: D
Leaky Nun


@LeakyNun Như tôi đã nói, tôi không thèm chơi golf này lol. Bên cạnh đó, đây không phải là câu trả lời Python dài nhất của tôi trên trang web này vì vậy idc: P nhưng rất hay
HyperNeutrino 22/07/17

@LeakyNun Và cảm ơn: D Tôi phải mất một thời gian để hiểu tất cả về nó lol
HyperNeutrino

@LeakyNun 309 byte vì giá trị thực tế _là không liên quan; chúng ta chỉ cần lặp lại nhiều lần
HyperNeutrino

13

2. Haskell, 44 byte, A000010

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

Hãy thử trực tuyến!

Trình tự tiếp theo


12
Tên của chuỗi tiếp theo mặc dù ...
hoàn toàn là

@totallyhuman thỏ nghèo ...
Erik the Outgolfer 21/07/17

Chúng ta có nên liên kết đến bài viết trước?
Rò rỉ Nun

Nó làm tôi đau đớn rằng tôi không thể đánh gôn bây giờ. Tôi phải là người đầu tiên bạn nhìn thấy
BlackCap 21/07/2017

Trình tự tiếp theo là gì? Tôi không hiểu ba cái: P
Beta Decay

13

9. Pyth , 19 byte, A000025

?>Q0sm@_B1-edld./Q1

Bộ thử nghiệm .

Trình tự tiếp theo

a (n) = số phân vùng của n với số thứ tự chẵn trừ số có thứ hạng lẻ. Thứ hạng của một phân vùng là phần lớn nhất của nó trừ đi số lượng các phần.


Đối với những người biết Pyth, tôi cố tình sử dụng >Q0thay vì Qđể, bạn biết, có trình tự tiếp theo là A000019.
Leaky Nun

1
Từ trang OEISKeywords: easy,nice
BlackCap

@LeakyNun Vâng, nếu không tôi sẽ phải giải A000017 ... gộp.
Erik the Outgolfer


12

206. Proton , 3275 byte, 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))

Hãy thử trực tuyến!

Trình tự tiếp theo


Đợi đã, bạn thực sự đã làm nó? Nếu bạn không viết một bài báo với những chương trình kỳ dị này và nói chuyện với một giáo sư nào đó, thì bạn đang chuyển sang một thứ hay ho: P
Stephen

@Stephen Hiện đang sửa lỗi lol
HyperNeutrino

Đây có phải là cách tiếp cận của việc chia các hình tam giác, hình vuông và hình ngũ giác theo mỗi plantri? Có vẻ như nó có thể, nhưng một số cú pháp không quen thuộc.
Peter Taylor

1
@PeterTaylor Giả sử tôi hiểu cách tiếp cận mà bạn đang mô tả, vâng, nó tìm các hình tam giác và đặt một đỉnh liền kề với cả 3 đỉnh hoặc hai chu kỳ liền kề và xóa cạnh chung và đặt một đỉnh liền kề với cả 4, giống nhau cho 3 tam giác trên một hình ngũ giác. Tôi nghĩ đó là một trong những bạn đang mô tả.
HyperNeutrino


12

308. ENIAC (giả lập) , 3025 byte, A006060

Mã giả:

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
}

Không có giả lập trực tuyến, kết quả thực hiện: Đầu vào thẻ Đầu ra thẻ punch

Các thanh ghi và hằng số:

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

Luồng tín hiệu chương trình và luồng dữ liệu: Luồng tín hiệu chương trình và biểu đồ luồng dữ liệu

"Mã" đầy đủ trên pastebin hoặc trong các nhận xét HTML trong phần đánh dấu của câu trả lời này, để ngăn chặn linkrot và một câu trả lời khá dài để cuộn qua cùng một lúc. Đây là niềm vui

Trình tự tiếp theo


Bạn có thể thêm một liên kết đến trình tự tiếp theo không
Zacharý

@ Zacharý Liên kết trong bài. Tôi sẽ chuyển nó đến cuối bài để dễ tìm hơn.
leo3065

12

15. CJam, 85 byte, A000060

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

Bản demo trực tuyến

Trình tự tiếp theo

Mổ xẻ

OEIS cho

Gf: S (x) + S (x ^ 2) -S (x) ^ 2, trong đó S (x) là hàm tạo cho A000151. - Bông Ter, ngày 12 tháng 10 năm 2005

Ở đâu

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 phút và 33 giây trước tôi ... trong khi tôi đang gõ lời giải thích
Leaky Nun

11

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

Khóa capslock của tôi bị ràng buộc để thoát, vì vậy tôi đã viết toàn bộ điều này trong khi giữ ca ..

Hãy thử trực tuyến!

Trình tự tiếp theo


+1 khi sử dụngPRAIME
Leaky Nun

3
Bạn là một lập trình viên, bạn có thể viết này và sau đó chạy nó thông qua một kịch bản Python upper'd nó -.-
Stephen

5
@StepHen Hoặc đơn giản là gggUGtrong vim nơi tôi đã viết nó, nhưng tôi không thông minh
BlackCap 23/07/17

10

10. Magma, 65 byte, A000019

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

Hãy thử nó ở đây

xây dựng lol

Trình tự tiếp theo


@ETHproductions :) không vấn đề gì, cảm ơn trang OEIS mặc dù vì nó có bản dựng chính xác ở đó lol
HyperNeutrino

4
; _; Tôi đã giải quyết A000064 và bạn đã thay đổi nó. Bị hạ bệ.
Leaky Nun

Chúa ơi, rất nhiều chuỗi phân vùng
ETHproductions 21/07/17

Tôi đã vô tình giải A007317 trong khi cố gắng làm điều này trong Python ( TIO ): P
ETHproductions 21/07/17

Nâng cấp lại! \ o /
Leaky Nun


9

121. Pip , 525 byte, 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

Bản demo trực tuyến

Trình tự tiếp theo

Sự thật thú vị: khi thử thách được đăng lần đầu tiên, tôi đã lập ra một danh sách các số thứ tự khó chịu nhỏ mà tôi muốn nhắm đến với CJam, và A000022 đứng đầu danh sách.

Điều này thực hiện chức năng tạo được mô tả trong EM Rains và NJA Sloane, On Enley's Enumutions of Alkanes (hoặc 4-Valent Tree) , Tạp chí Chuỗi số nguyên, Tập. 2 (1999), lấy tổng số cho nhiều số hạng cần thiết để hệ số thứ được cố định và sau đó kính thiên văn ba phần tư của tổng. Cụ thể, kính thiên văn nửa đầu có nghĩa là chỉ số chu kỳ chỉ phải được áp dụng cho một trong số chứ không phải cho tất cả chúng.CknS4Th

Mã bị phá vỡ là

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

Lưu ý rằng đây là chương trình Pip đầu tiên của tôi, nên có lẽ không thành ngữ lắm.


Bình luận không dành cho thảo luận mở rộng; cuộc trò chuyện này đã được chuyển sang trò chuyện .
Dennis

9

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

Lưu ý: điểm số là 2439 byte cho mã và 27 cho cờ trình biên dịch -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]);
        }
    }
}

Bản demo trực tuyến . Đây là một chương trình đầy đủ lấy đầu vào từ dòng lệnh.

Trình tự tiếp theo

Mổ xẻ

Tôi theo nhận xét của Bowen trong OEIS rằng hàm tạo A000083(x) = A000237(x) + A035349(x) - A000237(x) * A035350(x)trong đó các hàm tạo thành phần có liên quan bằng cách chuyển đổi như

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

Tôi sử dụng các định nghĩa BIKDIKtừ https://oeis.org/transforms2.html nhưng các công thức dường như có một số lỗi chính tả. Tôi đã sửa chữa LPALmà không gặp nhiều khó khăn và độc lập đưa ra một công thức DIKdựa trên việc áp dụng phép liệt kê Pólya cho chỉ số chu kỳ của nhóm dih thờ . Từ # 121 đến # 156 Tôi đang học hỏi rất nhiều về bảng liệt kê Pólya. Tôi đã gửi một số errata , có thể chứng minh hữu ích cho người khác nếu những biến đổi này xuất hiện trở lại trong chuỗi.



8

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

Hãy thử trực tuyến!


8

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

Hãy thử trực tuyến!

Tôi hy vọng sử dụng Python 2 PyPy được tính là một phiên bản chính khác. Nếu ai đó có thể giúp tôi có trình thông dịch Python 0, tôi cũng có thể sử dụng nó, nhưng tôi hy vọng điều này là hợp lệ.

Điều này bắt đầu từ 1 đỉnh và hoạt động, tạo ra biểu diễn ma trận kề của mọi đồ thị vô hướng có thể có với nhiều đỉnh đó. Nếu nó là hóa trị ba, thì nó sẽ xem qua sức mạnh của các cạnh, sẽ được sắp xếp theo chiều dài. Nếu chu kỳ đầu tiên nó tìm thấy quá ngắn, thì nó sẽ tiếp tục. Nếu chu kỳ đầu tiên nó tìm thấy khớp với đầu vào (bù 3) thì nó sẽ xuất ra số đỉnh chính xác và chấm dứt.

Chuỗi tiếp theo <- có một cách dễ dàng như một sự phá vỡ tất cả những điều vô nghĩa toán học này: D

EDIT : Tôi đã thêm một số tối ưu hóa để làm cho nó nhanh hơn một chút (vẫn không thể tính thuật ngữ thứ ba trong giới hạn 60 giây của TIO) mà không thay đổi giá trị phụ.


... và tôi đã nghiêm túc nghĩ rằng chuỗi sẽ kết thúc với câu trả lời 90
pppery

1
@ppperry :) Tôi thích thực hiện các thử thách khó khăn vì hầu hết mọi người thậm chí không thể đưa ra giải pháp nên tôi không phải lo lắng về việc bị lỗi thời :) (ví dụ: vấn đề đặt tên chuỗi carbon)
HyperNeutrino

Trừ khi có ai đó đưa giải pháp của bạn và chuyển đổi nó thành ngôn ngữ khó hiểu hơn
pppery

@ppperry mà quá o_O: P
HyperNeutrino

1
@HyperNeutrino Chúc mừng bạn đã giải quyết được điều đó! Tôi đã lo lắng rằng tôi đã phá vỡ chuỗi và đang xem xét việc đệm số byte để trỏ đến một chuỗi khác. Làm tốt lắm!
Scott Milner

8

232. Funky , 326 330 332 byte, 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;
}

Hãy thử trực tuyến!

Polyglot với Javascript. Hãy thử trực tuyến!

Trình tự tiếp theo .


Sử dụng công thức trên trang OEIS vì O(n^2 log n)sự phức tạp, thay vì ngây thơ O(n^6).

Giải thích nhanh:

  • Mã này sử dụng công thức 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)được mô tả trong phần mã Mathicala.
  • Bằng chứng công thức:

    • Công thức tương đương với điều này .

    • Đặt kích thước của khung giới hạn của ba điểm là m * k. Xem xét 2 trường hợp:

      • k != 0m != 0: Có 2 cách để chọn hướng của ba điểm ( \hoặc /), gcd(k-1, m-1)-1cách chọn điểm nằm giữa 2 điểm còn lại và (n - k) × (n - m)cách chọn vị trí của khung giới hạn.
      • k == 0hoặc m == 0: Có 2 cách để chọn hướng ( |hoặc -), ncách chọn hàng / cột mà các điểm nằm trên và Binomial[n, 3] == (n*(n-1)*(n-2)) / 6cách chọn các điểm trên hàng / cột đó.

Một số ghi chú polyglot:

  • Funky không thực sự có từ khóa return. Tuy nhiên, như ATaco đã giải thích , [Funky] nghĩ returnlà một biến. Vì vậy, nó phân tích biểu thức đó, thuận tiện không làm gì, sau đó phân tích biểu thức tiếp theo. Và điều này được sử dụng như một đầu ra.
  • Javascript sử dụng ^dưới dạng bitwise xor, không giống như Funky sử dụng ^theo cấp số nhân. Vì vậy, n*nphải được sử dụng thay vì n^2để đảm bảo khả năng tương thích Javascript.
  • Trong Funky, tất cả các nhà khai thác ( +, -, *, vv) có ưu tiên như nhau và phải kết hợp, vì vậy biểu thức cần phải được ngoặc đúng.

1
+1 không mong đợi một polyglot.
ATaco

Không có Pentagony, nhưng Hexagony rất phù hợp.
NieDzejkob

Số tiền này đã được sử dụng ... link
NieDzejkob

Vì vậy, để khắc phục sự cố bytecount, bạn có thể vui lòng đệm câu trả lời này thành 330 byte không? Tôi sẽ xử lý phần còn lại.
NieDzejkob

[Trả lời được đệm tới 332 byte vì các vấn đề xung đột, hãy xem tin nhắn trò chuyện này ]
user202729


8

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

Hãy thử trực tuyến!


Lưu ý bên:

  1. Đã thử nghiệm cục bộ với Java 5. (sao cho cảnh báo không được in - xem tab gỡ lỗi TIO)
  2. Đừng. Không bao giờ. Sử dụng. Java. 1. Nó dài dòng hơn Java nói chung.
  3. Điều này có thể phá vỡ chuỗi.
  4. Khoảng cách (7 ngày và 48 phút) không nhiều hơn khoảng cách được tạo bởi câu trả lời này , tức là 7 ngày và 1 giờ 25 phút so với trước đó .
  5. Kỷ lục mới về số lượng lớn! Bởi vì tôi (nhầm lẫn?) Sử dụng khoảng trắng thay vì các tab, nên bytecount lớn hơn mức cần thiết. Trên máy của tôi, nó là 9550 byte. (tại thời điểm viết bản sửa đổi này)
  6. Trình tự tiếp theo .
  7. Mã, ở dạng hiện tại, chỉ in 20 điều khoản đầu tiên của chuỗi. Tuy nhiên thật dễ dàng để thay đổi để nó sẽ in 1.000 mặt hàng đầu tiên (bằng cách thay đổi các 20trong for (int i = 0; i < 20; ++i)để 1000)

Yay! Điều này có thể tính toán nhiều điều khoản hơn được liệt kê trên trang OEIS! (lần đầu tiên, đối với một thách thức tôi cần sử dụng Java) trừ khi OEIS có nhiều điều khoản hơn ở đâu đó ...


Giải thích nhanh

Giải thích về mô tả trình tự.

Trình tự yêu cầu số lượng polyeno không phẳng miễn phí với nhóm đối xứng C 2v , trong đó:

  • polyenoid: (mô hình toán học của polyene hydrocarbon) (hoặc trong trường hợp suy biến, đỉnh đơn) với có thể được nhúng trong mạng lục giác.

Ví dụ, hãy xem xét các cây

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

Cái đầu tiên không thể được nhúng trong mạng lục giác, trong khi cái thứ hai có thể. Sự nhúng đặc biệt đó được coi là khác với cây thứ ba.

  • nonplanar polyenoid: nhúng cây sao cho tồn tại hai đỉnh chồng chéo.

(2)(3)cây ở trên là phẳng. Điều này, tuy nhiên, là phi kế hoạch:

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

(có 7 đỉnh và 6 cạnh)

  • polyen tự do: Các biến thể của một polyen, có thể thu được bằng cách quay và phản xạ, được tính là một.

  • Nhóm C 2v : Đa giác chỉ được tính nếu chúng có 2 mặt phẳng vuông góc phản xạ, và không còn nữa.

Ví dụ: đa giác duy nhất có 2 đỉnh

O --- O

có 3 mặt phẳng phản xạ: Mặt phẳng ngang -, mặt phẳng dọc |và mặt phẳng song song với màn hình máy tính . Qua nhiều.

Mặt khác, cái này

O --- O
       \
        \
         O

có 2 mặt phẳng phản xạ: /.


Giải thích về phương pháp

Và bây giờ, cách tiếp cận về cách thực sự đếm số.

Đầu tiên, tôi dùng công thức a(n) = A000063(n + 2) - A000936(n) (được liệt kê trên trang OEIS) để được cấp. Tôi đã không đọc lời giải thích trong bài báo.

[TODO sửa phần này]

Tất nhiên, đếm phẳng dễ hơn đếm phi phẳng. Đó cũng là những gì tờ báo làm.

Các polyenoids phẳng hình học (không có các đỉnh chồng chéo) được liệt kê bằng lập trình máy tính. Do đó, số lượng polyenoids phi hình học trở nên dễ tiếp cận.

Vì vậy, ... chương trình sẽ đếm số lượng đa cực phẳng và trừ nó ra khỏi tổng số.

Vì dù sao cây cũng là mặt phẳng, nên rõ ràng nó có mặt phẳng phản xạ. Vì vậy, điều kiện sôi xuống là "đếm số lượng cây có trục phản xạ trong biểu diễn 2D của nó".

Cách ngây thơ sẽ tạo ra tất cả các cây với n các nút và kiểm tra tính đối xứng chính xác. Tuy nhiên, vì chúng tôi chỉ muốn tìm số lượng cây có trục phản xạ, chúng tôi chỉ có thể tạo tất cả nửa cây có thể trên một nửa, phản chiếu chúng qua trục và sau đó kiểm tra tính đối xứng chính xác. Hơn nữa, vì các polyenoids được tạo ra là cây (phẳng), nên nó phải chạm vào trục phản xạ chính xác một lần.

Hàm public static Graph[] expand(Graph[] graphs, Point.Predicate fn)lấy một mảng đồ thị, mỗi có nnút và xuất ra một mảng đồ thị, mỗi n+1nút có các nút, không bằng nhau (dưới bản dịch) - sao cho nút được thêm phải thỏa mãn vị ngữ fn.

Xem xét 2 trục phản xạ có thể có: Một trục đi qua một đỉnh và trùng với các cạnh ( x = 0) và một trục là đường phân giác vuông góc của một cạnh ( 2x = y). Dù sao, chúng ta chỉ có thể lấy một trong số chúng vì các biểu đồ được tạo là đẳng cấu.

Vì vậy, đối với trục đầu tiên x = 0, chúng ta bắt đầu từ biểu đồ cơ sở bao gồm một nút đơn (1, 0)(trong trường hợp nlà số lẻ) hoặc hai nút có cạnh giữa (1, 0) - (2, 0)(trong trường hợp nlà chẵn), sau đó mở rộng các nút sao cho y > 0. Điều đó được thực hiện bởi phần "Reflection type 1" của chương trình, và sau đó với mỗi biểu đồ được tạo, hãy phản chiếu (gương) qua trục X x = 0( g.reflectSelfX()), sau đó kiểm tra xem nó có đối xứng chính xác không.

Tuy nhiên, lưu ý rằng nếu nchia hết cho 2, bằng cách này, chúng tôi đã đếm từng biểu đồ hai lần, bởi vì chúng tôi cũng tạo ra hình ảnh phản chiếu của nó theo trục 2x = y + 3.

(lưu ý 2 quả cam)

Tương tự cho các trục 2x = y, nếu (và chỉ nếu) nthậm chí còn, chúng tôi bắt đầu từ điểm (1, 1), tạo các biểu đồ như vậy 2*x > y, và phản ánh mỗi người trong 2x = ytrục ( g.reflectSelfType2()), kết nối (1, 0)với (1, 1), và kiểm tra xem họ có đối xứng chính xác. Nhớ chia cho 2, quá.


Cho rằng tôi đã ngủ khi cái này (và cái kia) được đăng, tôi sẽ cho bạn lợi ích của sự nghi ngờ và chưa chấp nhận câu trả lời.
caird coinheringaahing

2
@cairdcoinheringaahing Bạn đã trực tuyến 3 phút trước hạn chót ...
user202729

Uh oh, trình tự tiếp theo có thể được mã hóa cứng ... (mặc dù nó là vô hạn) nếu tôi đọc đúng. Bản thân phép tính là --- khá --- rất dễ, vì vậy đừng làm điều đó.
dùng202729

7

6. R , 71 byte, A000072

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

Hãy thử trực tuyến!

Trình tự tiếp theo


1
Vì tình yêu của Chúa, tôi đã không kiểm tra trình tự tiếp theo trước khi đăng câu trả lời này.
Rò rỉ Nun

Không phải là một chuỗi tiếp theo dễ dàng là một lợi thế chiến lược?
BlackCap

@BlackCap Họ không thể trả lời hai lần liên tiếp hoặc ít hơn 1 giờ sau khi họ trả lời lần cuối.
Erik the Outgolfer 21/07/17

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

@BlackCap vào thời điểm này sẽ không xảy ra
Stephen


7

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

Đánh giá công thức đệ quy được tìm thấy trên liên kết OEIS.

Trình tự tiếp theo


Agh tôi biết khi trang web bị sập rằng nó sẽ là một cơn điên điên khi nó xuất hiện trở lại. Hoàn toàn đánh tôi.
Silvio Mayolo

Tôi đã không nhận ra trang web đã bị sập ...
Scott Milner




7

76. Pygmy , 4147 byte, 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                                         
}                                                                               

Trình tự tiếp theo

Bạn có thể chạy mã trên trang này . Ví dụ: bạn có thể nhận được số thứ 10 trong chuỗi bằng cách sao chép mã ở trên và thêm:

alert| A000035| 10

4
... chuỗi tiếp theo là không thể tính toán được ...
HyperNeutrino

1
@HyperNeutrino Tôi biết: PI đã cố tình làm điều này
Peter Olson

Ác ...>. <Nhưng dù sao đi nữa, tôi sẽ chỉ mã hóa 4 yếu tố trong chuỗi. XD OP đủ dễ chấp nhận điều đó rõ ràng \ _ (ツ) _ /
HyperNeutrino
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.