Birbiri ardına bir OEIS


95

13/03/2018 16:45 UTC itibariyle kazanır # 345 cevap tarafından, Scrooble . Bu, yarışmanın resmen bittiği, ancak kuralları takip ettiği sürece cevap göndermeye devam etmekte özgür olduğu anlamına gelir.

Ayrıca, cevapların sayısı bakımından ilk üç yanıtlayıcıya hızlıca bir hayli hayret:

1. NieDzejkob - 41 cevaplar

2. KSmarts - 30 cevaplar

3. Hiper Nötrino - 26 cevap


Bu, OEIS'den gelen dizileri ve önceki gönderimin uzunluğunu kullanan bir cevap zincirleme sorusudur.

Bu cevap zincirleme sorusu şu şekilde çalışacaktır:

  • İlk cevabı ben gönderirim. Diğer tüm çözümler bundan kaynaklanmalıdır.
  • Bir sonraki kullanıcı (onları userA olarak adlandıralım), indeks numarasının (aşağıya bakınız) kodumun uzunluğu ile aynı olduğu OEIS dizisini bulacak.
  • Diziyi kullanarak, kullanılmayan bir dilde , bir tamsayıyı giriş, n olarak alan ve nt sayısını o dizilimde çıkaran bir program kodlamaları gerekir.
  • Ardından, çözümlerini benimkinden sonra yayınlarlar ve yeni bir kullanıcı (userB) aynı şeyi tekrarlamalıdır.

nBir dizinin inci terimi ilk değeri OEIS sayfa verilen ilk değerini ile çalışan, sonra ilk terim, n katıdır. Bu soruda, bu diziler için 0 indeksleme kullanacağız . Örneğin, A000242 ve n = 3doğru sonuç 25 olur .

Ancak!

Bu bir , bu yüzden en kısa kod önemli değil. Ancak kodunuzun uzunluğunun hala bir etkisi var. Dizilerin çoğaltılmasını önlemek için, bayt sayınızın benzersiz olması gerekir . Bu burada sunulan başka bir program içinde aynı uzunlukta olabileceği anlamına gelir bayt seninki kadar.

Son gönderinin uzunluğu için bir sıralama yoksa, gönderinizin sırası, kullanılmayan en düşük sıradır. Bu, kullanılan dizilerin de benzersiz olması gerektiği ve dizinin bayt sayınızla aynı olamayacağı anlamına gelir.

Bir cevap gönderildikten ve bir haftadan daha uzun bir süre boyunca yeni bir cevap gönderilmedikten sonra , son gönderimden önce (zinciri kırmayan kişi) önce cevap kazanacak.

Giriş ve çıkış

Genel giriş ve çıkış kuralları geçerlidir. Giriş bir tamsayı veya bir tamsayıya ait bir dize temsili olmalı ve çıkış, sıradaki doğru değer olmalıdır.

Biçimlendirme

sorularının çoğunda olduğu gibi , lütfen cevabınızı bu şekilde biçimlendirin.

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

`code`

[next sequence](link)

*anything else*

kurallar

  • Bir cevap göndermeden önce, gönderdikten sonra en az 1 saat beklemelisiniz.
  • Arka arkaya iki kez (veya daha fazla) gönderemezsiniz.
  • Bir dizinin indeks numarası, Aparçadan sonraki sayıdır ve baştaki sıfırlar kaldırılmıştır (örneğin A000040, indeks numarası için 40'tır)
  • Ne girdi ne de gerekli çıktının, dillerinizin sayısal aralığının dışında olmayacağını varsayabilirsiniz, ancak yalnızca örneğin 1 sayısını kullanabilecek bir dil seçerek bunu kötüye kullanmayın.
  • Gönderiminizin uzunluğu 65536 karakterden uzunsa, lütfen koda erişmek için bir bağlantı verin (örneğin pastebin).
  • n doğruluk tutarsızlıklarının bir dilin rekabet etmesini engellemesini önlemek için hiçbir zaman 1000'den büyük olmayacak veya dizinin sınırları dışında olmayacaktır.
  • Her 150 (geçerli) cevap, bir dilin kullanılma sayısını arttırır. Bu yüzden 150 çözüm gönderildikten sonra, her dil iki kez kullanılabilir (buna verilen tüm cevaplar ile). Örneğin, 150 cevap gönderildiğinde, Python 3 iki kez kullanılabilir, ancak bir kez kullanılmış olması nedeniyle, bu 300 cevap gönderilinceye kadar sadece bir kez daha kullanılabileceği anlamına gelir.
  • Lütfen yardımcı olun ve kullanılacak bir sonraki sıraya bir bağlantı gönderin. Bu gerekli değildir, ancak bir öneridir.
  • Dillerin farklı sürümleri, örneğin Python 2 ve Python 3 farklı dillerdir . Genel bir kural olarak, farklı sürümlerin her ikisi de Çevrimiçi Deneyin'de mevcutsa farklı dillerdir, ancak bunun genel bir kural olduğunu ve katı bir cevap olmadığını unutmayın.
  • Bu yasaklanmadı, ancak lütfen kodu OEIS sayfasından kopyalamamaya çalışın ve gerçekten de çözmeye çalışın.
  • Sabit kodlamaya yalnızca dizinin sonlu olması durumunda izin verilir. Lütfen bunu isteyen cevabın ( # 40 ) kuralın istisnası olduğunu unutmayın. Zincir hardcode'unun başlarında birkaç cevap var, fakat zinciri # 100'e kadar silmenin bir faydası olmadığından bunlar göz ardı edilebilir.

Cevap zinciri pasajı


Yorumlar uzun tartışmalar için değildir; bu konuşma sohbete taşındı .
Dennis,

Bir programın daha büyük değerler üretmek için yerleşik float/ doubletip için daha iyi bir kayan nokta doğruluğuna ihtiyacı olması sorun olmaz nmı?
NieDzejkob

1
@Giuseppe Hayır, matematiği yaparak sayıları oluştururken, sadece onları bir diziye / dizgeye yerleştirmek yerine
caird coinheringaahing

2
@cairdcoinheringaahing Bence gama sabitini kodlayan kod. Daha büyük sayılar için "teoride" çalışmaz.
user202729

Yanıtlar:


4

345. brainfuck , 162 bayt, A000301

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

Çevrimiçi deneyin!

Sıradaki sıra!

Bu, kod noktası olan karakteri n(BF'in özelliklerine göre) girer ve aynı şekilde çıkarır. Rakamları görmek için, @ Timwi'nin Ezoterik AĞINI kullanmanızı öneririm .

Açıklama:

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

Bu, tüm Fibonacci numaralarını önemli olana kadar sakladığından, sınırlı bir kasete GERÇEKTEN büyük girdiler için başarısız olur.

Bu, tabanı (2) kodlayarak önemli ölçüde kısaltılabilir, ancak golfellik hiç sorun değil.


Bir sonraki cevap (# 346) zinciri kırdığında, cevabınız kazanan!
caird coinheringaahing

1
@cairdcoinheringaahing Bu şaşırtıcı meydan okuma için teşekkür ederiz. Şimdi bitmesi beni üzüyor, ama dünyadaki tüm iyi şeyler gibi, bitiyor. Şimdi var için kodu için Şimdi golf için bu zavallı bahane, ilk cevap herkes görecek ve etkileyici kısa olmalı ...
Khuldraeseth na'Barya

@Scrooble gerçekten uzunluğunu değiştiremezsiniz ...
NieDzejkob

@NieDzejkob Evet, ancak aynı uzunluğu korumak için golf oynayabilir ve biraz daha dolgu ekleyebilirim.
Khuldraeseth na'Barya

@cairdcoinheringaahing "zinciri kırdı"? Bu ne anlama geliyor?
Magic Octopus Urn,

40

22. FiM ++ , 982 bayt, A000024

Not : Bunu okuyorsanız, "en eski" ye göre sıralamak isteyebilirsiniz .

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

Sonraki sıra


10
Hahaha, her şey boyunca çok güldü. Dil seçimi için +1 :-)
ETHproductions

Amazing, benim olumlu oyum
downrep_nation

22

1. Üçgen , 10 bayt, A000217

$\:_%i/2*<

Çevrimiçi deneyin!

Sonraki Sıra

Nasıl çalışır

Kod bu üçgene formatlar

   $
  \ :
 _ % i
/ 2 * <

$Güneydoğudan başlayan ve hareket eden IP ile (SE, heh), şöyle çalışır:

$            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. Üçgen, 10 bayt, A000217. * bağlantıyı takip eder * A000217 Triangular numbers...
MD XF

22

73. Yıldızlı , 363 bayt, A000252

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

Çevrimiçi deneyin!

Sonraki sıra

OEIS'den " a(n) = n^4 * product p^(-3)(p^2 - 1)*(p - 1)ürünün n'yi bölen tüm primerlerin üzerinde olduğu " formülünü kullanır .

Ay işsiz, ama hey, bu kod golf değil.


aydaki yıldızlar? hmmm
18'de

19

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

Her şeyden önce, benimle olan hastalığınız için Dr. Max Alekseyev'e teşekkür ederim. Bu zorluğu anlamak için onunla e-posta yoluyla iletişime geçebildiğim için çok şanslıyım. Onun Math.SE burada cevap çok yardımcı oldu. Bana yardımcı olduğu için Buğday Sihirbazı'na teşekkürler. :)

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

Çevrimiçi deneyin!

Yanlış sonuç verirse, 100'ü daha büyük bir şeye artırmanız yeterlidir. Sanırım 10000 4 çalışacak ama bilgisayarımı bir gecede çalışır durumda bırakacağım; bitirmesi birkaç saat sürebilir.

(PyPy) bölümünün Python'u tekrar kullanabileceğim şekilde olduğunu unutmayın. Gerçekten pek fazla dil bilmiyorum ve bunu Java ile ilişkilendirmeye çalışacağım ve zaman içinde bitirme riskini de göze almayacağım.

Sonraki Sıra (Ayrıca lütfen daha çılgın matematik işleri yapmayın; geriye kalan Python sürümleri kalmadı, bu yüzden başkasının bu mücadeleyi kurtarması gerekecek :)


peki her zaman pypy3 vardır
ASCII-yalnızca

15

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

Çevrimiçi deneyin!

TrumpScript'te ilk defa programlama, tekerleği birkaç kez yeniden icat etmem mümkündür - 4 satır 2 ^ n hesaplamaya adanmıştır. Onu (sarhoş) Trump'ın söyleyebileceği bir şey gibi göstermeye çalıştım. Bonus olarak, işte her şeyi doğru yaptığımı doğrulamak için yazdığım bir Python betiği. Yukarıdaki programda bazı farklılıklar vardır, ancak bunların çoğu doğrudan eşdeğerdir.

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)

Sıradaki sıra!


3
I will make cat feel goodO_O
Business Cat

Ne yazık ki I will make Business Cat feel goodişe yaramaz ...
NieDzejkob

14

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

Çevrimiçi deneyin!

Bunu golf oynamak için bile uğraşmayacaksınız. Hey, bu sitedeki en uzun Python cevabım değil!

Sonraki sıra


1
Matematiği çözdüğünüz için tebrikler: D
Leaky Nun


@ LeakyNun Söylediğim gibi, bu lol golf oynamak için zahmet etmedi. Ayrıca, bu sitede benim en uzun Python cevabım değil bu kadar idc: P ama güzel
HyperNeutrino

@LeakyNun Ve teşekkürler: D Bu beni anlamak için biraz zaman aldı lol
HyperNeutrino

@LeakyNun 309 bayt, çünkü gerçek değeri önemli değil _; sadece bunu birçok kez tekrarlamamız gerekiyor
HyperNeutrino


13

9. Pyth , 19 bayt, A000025

?>Q0sm@_B1-edld./Q1

Test paketi .

Sonraki sıra

a (n) = n'nin tek sıralı eksi sayılı rütbeli bölüm sayısı. Bir bölümün rankı en büyük bölümü eksi parça sayısıdır.


Pyth bilenler için, bile bile kullanılan >Q0yerine Q, bilirsiniz, A000019 olmak yanındaki diziyi sahip olmak için.
Leaky Nun

1
OEIS sayfasındanKeywords: easy,nice
BlackCap

@LeakyNun Evet, aksi halde A000017 'yi çözmek zorunda kalacağım.
Outgolfer Erik,


12

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

Çevrimiçi deneyin!

Sonraki Sıra


Bekle, gerçekten yaptın mı? Eğer bu garip programlarla bir makale yazmazsanız ve bazı profesörlerle konuşmaya giderseniz, harika bir şeyden söz edersiniz: P
Stephen

@Stephen Şu anda hata düzeltme lol
HyperNeutrino 10:17

Plantri'ye göre üçgen, kare ve beşgenleri ayırma yaklaşımı bu mu? Öyle görünüyor, ancak sözdiziminin bir kısmı bilinmiyor.
Peter Taylor

1
@PeterTaylor Tanımladığınız yaklaşımı anladığımı varsayarsak, evet, üçgenler arar ve her üç köşeye bitişik bir köşe yerleştirir veya iki bitişik çevrime ve ortak kenarı siler ve 3 üçgen için bitişik bir köşeye yerleştirir, 3 üçgen için aynı bir pentagon üzerinde. Bence bunu tarif ediyorsun.
HyperNeutrino,


12

308. ENIAC (simülatör) , 3025 bayt, A006060

pseudocode:

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

Çevrimiçi simülatör yok, işlem sonucu: Kart okuyucu girişi Delikli kart çıkışı

Kayıtlar ve sabitler:

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

Program sinyal akışı ve veri akışı: Program sinyal akışı ve veri akış şeması

Linkrotu engellemek ve aynı zamanda kaydırma yapmak için oldukça uzun bir cevabı işaretlemek için pastebin veya HTML yorumlarında tam olarak "kod" yazılmalıdır. Bu eğlenceli!

Sonraki sıra


Bir sonraki sıraya bir link ekler misiniz lütfen
Zacharý

@ Zacharý Link postada. Onu yazının sonuna taşıyacağım, böylece bulmak daha kolay olacaktır.
leo3065

12

15. CJam, 85 bayt, A000060

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

Çevrimiçi demo

Sonraki sıra

teşrih

OEIS verir

Gf: S (x) + S (x ^ 2) -S (x) ^ 2, ki burada S (x) A000151 için üretici fonksiyondur. - Pab Ter, 12 Ekim 2005

nerede

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 dakika benden 33 saniye öndeyim ... açıklama yazarken
Leaky Nun

11

67. LOLCODE , 837 bayt, 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 anahtarım kaçmak zorunda, bu yüzden vardiya tutarken bütün bunları yazdım ..

Çevrimiçi deneyin!

Sonraki sıra


Kullanmak için +1PRAIME
Leaky Nun

3
Bir programcı, bu yazılı ve sonra bir Python komut dosyası aracılığıyla çalıştırmak olabilirdi konum uppero -.- 'd
Stephen

5
@StepHen Ya da sadece gggUGyazdığım yerdeki vim içinde, ama o kadar da zekiyim
BlackCap

10

10. Magma, 65 bayt, A000019

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

Burada dene

lol yerleşik

Sonraki sıra


@ETHproductions :) sorun değil, çünkü orada kesin yerleşik olmasına rağmen OEIS sayfasına teşekkür ederim lol
HyperNeutrino, 21:17

4
; _; A000064'ü çözdüm ve sen değiştirdin. Downvoted.
Leaky Nun

Tanrım, birçok bölüm dizisi
ETHproductions 21:17

Bunu Python'da ( TIO ) yapmaya çalışırken A007317'yi yanlışlıkla çözdüm : P
ETHproductions

Re-upvoted!
Sızdıran Rahibe


9

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

Çevrimiçi demo

Sonraki sıra

Eğlenceli gerçek: meydan okuma ilk yayınlandığında, CJam ile hedeflemek istediğim küçük sıra dizilerinin bir listesini çizdim ve A000022 listenin başındaydı.

Bu, EM Rains ve NJA Sloane, Cayley'nin Alkan Sayıları (veya 4-Valent Ağaçları) , Journal of Integer Sequences, Vol. 2 (1999), toplamın sabitlenebilmesi için gerekli toplam katsayının gerekli olduğu kadar alınması ve toplamın dörtte üçünün teleskop olarak alınması. Özellikle, ilk yarının teleskopik hale getirilmesi, döngü endeksinin hepsine değil sadece birine uygulanması gerektiği anlamına gelir .CknS4Th

Kod olarak

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

Bunun benim ilk Pip programım olduğunu unutmayın, bu yüzden muhtemelen çok aptalca değildir.


Yorumlar uzun tartışmalar için değildir; bu konuşma sohbete taşındı .
Dennis,

9

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

Not: puan, kod için 2439 bayttır ve derleyici bayrağı için 27'dir -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]);
        }
    }
}

Çevrimiçi demo . Bu komut satırından girdi alan tam bir programdır.

Sonraki sıra

teşrih

Bowen'in OEIS'deki yorumunu A000083(x) = A000237(x) + A035349(x) - A000237(x) * A035350(x), bileşen üreten fonksiyonların dönüşümlerle ilişkili olduğu üretici fonksiyonun aşağıdaki gibi dönüştüğünü takip ediyorum .

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

Ben tanımlarını kullanmak BIKve DIKgelen https://oeis.org/transforms2.html ama formüller yazım hataları bir dizi var gibi. LPALÇok zorlanmadan düzelttim ve bağımsız olarak DIKPólya sayımını dihedral grubun döngü endeksine uygulamak için temel bir formül türetdim . # 121 ile 156 arasında Pólya sayımı hakkında çok şey öğreniyorum. Bu dönüşümler zincirde tekrar ortaya çıkarsa, diğer insanlara faydalı olabilecek bazı hatalar verdim .



8

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

Çevrimiçi Deneyin!


8

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

Çevrimiçi deneyin!

Python 2 PyPy sayıları kullanmanın başka bir önemli sürüm olduğunu düşünüyorum. Birisi bana Python 0 tercümanı bulabilseydi, onu da kullanabilirdim, ama umarım bu geçerlidir.

Bu, 1 tepe noktasında başlar ve o kadar tepe noktasıyla olası her yönlendirilmemiş grafiğin bitişik matris gösterimini oluşturarak çalışır. Eğer üç değerlikli ise, uzunluklarına göre sıralanacak olan kenarların güç kümesi üzerinden bakacaktır. Bulduğu ilk döngü çok kısa ise, o zaman devam edecektir. Eğer bulduğu ilk döngü girişle eşleşirse (3 ile ofset), doğru tepe sayımını verir ve sonlandırır.

Sonraki Sıra <- Tüm bu matematik saçmalık bir mola olarak kolay bir tane var: D

EDIT : Bayt sayısını değiştirmeden biraz daha hızlı hale getirmek için bazı optimizasyonlar ekledim (yine de TIO'nun 60 saniyelik limitindeki üçüncü terimi hesaplayamıyorum).


... ve ben ciddi zincir cevap 90 ile sona ereceğini düşünüyordum
pppery

1
Ben :) (örneğin karbon zinciri namer sorunu) outgolfed alma hakkında endişelenmenize gerek kalmaz çoğu insan bile bir çözüm yapamaz çünkü @ppperry :) Ben sert zorlukları yapmayı seviyorum
HyperNeutrino

Birisi sizin çözümünüzü alıp başka bir dile
çevirmezse

@ pperry that da o_O: P
HyperNeutrino

1
@HyperNeutrino Bunu çözdüğünüz için tebrikler! Zinciri kırmış olduğum için endişelendim ve bayt sayısını farklı bir diziye işaret etmeyi düşünüyordum. Aferin!
Scott Milner

8

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

Çevrimiçi deneyin!

Javascript ile çokgen. Çevrimiçi deneyin!

Sıradaki sıra .


O(n^2 log n)Karmaşıklık için naif yerine OEIS sayfasındaki formülü kullanın O(n^6).

Hızlı açıklama:

  • Bu kod 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 kodu bölümünde açıklanan formülü kullanır .
  • Formül kanıtı:

    • Formül eşdeğerdir , bu .

    • Üç puan sınırlama kutusunun büyüklüğü olsun m * k. 2 vaka düşünün:

      • k != 0ve m != 0: Üç noktanın yönünü seçmenin 2 yolu vardır ( \veya /), gcd(k-1, m-1)-1diğer 2 nokta arasında kalan noktayı seçmenin (n - k) × (n - m)yolları ve sınırlama kutusunun konumunu seçme yolları.
      • k == 0veya m == 0: Oryantasyonu ( |veya -) seçmenin 2 yolu n, noktaların bulunduğu satır / sütunu seçmenin yolları ve o satır / sütundaki noktaları seçmenin Binomial[n, 3] == (n*(n-1)*(n-2)) / 6yolları vardır.

Bazı polyglot notları:

  • Funky gerçekten bir anahtar kelimeye sahip değil return. Ancak, ATaco'nun açıkladığı gibi , [Funky] returnbir değişken olduğunu düşünüyor . Bu yüzden uygun bir şekilde hiçbir şey yapmayan ifadeyi ayrıştırıyor, sonra bir sonraki ifadeyi ayrıştırıyor. Ve bu bir çıktı olarak kullanılır.
  • Javascript üstel olarak ^kullanılan Funky'nin aksine, bitwise xor ^olarak kullanılır . Yani n*nkullanılacak yerine sahip n^2JavaScript uyumluluğu sağlamak için.
  • Funky, tüm operatör ( +, -, *ifadeleri düzgün parantez gerekir böylece, vs.), eşit önceliğe ve sağ ilişkilendirilebilir var.

1
+1 bir polyglot beklemiyordu.
ATaco

Pentagony yok, ancak Hexagony iyi uyuyor.
NieDzejkob

Bu bytecount zaten kullanılmış ... link
NieDzejkob

Yani, bytecount problemini çözmek için, lütfen bu cevabı 330 byte'a kadar doldurur musunuz? Gerisini ben hallederim.
NieDzejkob

[Bytecount çakışan sorunlar nedeniyle 332 baytla doldurulmuş cevap, bkz. bu sohbet iletisine bakın ]
user202729


8

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

Çevrimiçi deneyin!


Kenar notu:

  1. Java 5 ile yerel olarak test edilmiştir (uyarının yazdırılmaması için) - bkz. TIO debug sekmesi)
  2. Yapma. Hiç. Kullan. Java. 1. Genel olarak Java'dan daha ayrıntılıdır.
  3. Bu, zinciri kırabilir.
  4. Boşluk (7 gün ve 48 dakika) ile meydana getirilen boşluğun daha fazla Bu yanıt 7 gün ve 1 saat 25 dakika sonra daha, önceki .
  5. Büyük bytecount'ta yeni kayıt! Ben (yanlışlıkla?) Sekmeler yerine boşluk kullandığımdan, bayt sayısı gerekenden daha büyük. Benim makinede öyle 9550 bayt. (bu düzeltmeyi yazarken)
  6. Sıradaki sıra .
  7. Kod, geçerli haliyle, dizinin yalnızca ilk 20 terimini yazdırır. Ancak, ilk 1000 öğeyi basacak şekilde değiştirmek kolaydır ( 20girişi for (int i = 0; i < 20; ++i)değiştirilerek 1000).

Yuppi! Bu, OEIS sayfasında listelenenden daha fazla terim hesaplayabilir! (ilk kez, bir meydan okuma için Java kullanmam gerekiyor) OEIS'in bir yerde daha fazla şartları olmadığı sürece ...


Hızlı açıklama

Dizi tanımının açıklaması.

Dizisi simetri C grubu ile serbest düzlemsel polyenoid sayısı sormak 2v :

  • polenoid: (matematiksel polen hidrokarbon modeli) ağaçları (veya dejenere durumunda, tek köşe) ile altıgen kafes içine gömülebilir.

Örneğin, ağaçları düşünün

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

Birincisi altıgen kafes içine gömülemezken ikincisi olabilir. Bu belirli gömme üçüncü ağaçtan farklı olarak kabul edilir.

  • düzlemsel olmayan polenoid: iki örtüşen tepe noktası olacak şekilde ağaçların gömülmesi.

(2)ve (3)yukarıdaki ağaç düzlemseldir. Bununla birlikte, bu düzlemsel değildir:

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

(7 köşe ve 6 kenar vardır)

  • serbest polenoid: Rotasyon ve yansıma ile elde edilebilen bir polenoid varyantları, bir olarak sayılır.

  • Cı- 2v grubu: bunlar 2 dik yansıma uçakları ve daha fazla varsa polyenoid sadece sayılır.

Örneğin, 2 köşeli tek polenoid

O --- O

3 yansıma düzlemine sahiptir: Yatay -olan, dikey |olan ve bilgisayar ekranına paralel olan . Bu çok fazla.

Öte yandan, bu bir

O --- O
       \
        \
         O

2 yansıma düzlemine sahiptir: /ve .


Yöntemin açıklaması

Ve şimdi, sayının gerçekte nasıl sayılacağı yaklaşımı.

İlk önce formülü alıyorum a(n) = A000063(n + 2) - A000936(n) (OEIS sayfasında listelenmiştir) . Makalede açıklamayı okumadım.

[TODO bu kısmı düzelt]

Tabii ki, düzlemsel sayımı düzlemsel sayımı yapmaktan daha kolaydır. Kağıdın da yaptığı bu.

Geometrik olarak düzlemsel polenoidler (örtüşen köşeler olmadan) bilgisayar programlaması ile numaralandırılmıştır. Böylece geometrik olarak düzlemsel olmayan polenoidlerin sayıları erişilebilir hale gelir.

Yani ... program düzlemsel polenoid sayısını sayar ve toplamdan çıkarır.

Ağaç zaten düzlemsel olduğundan, açıkça yansıma düzlemine sahip. Böylece durum “2B gösteriminde yansıma eksenine sahip ağaç sayısını saymak” şeklinde azalır.

Saf yol, ndüğümlü tüm ağaçları oluşturur ve doğru simetriyi kontrol eder. Bununla birlikte, yalnızca yansıma eksenine sahip ağaç sayısını bulmak istediğimiz için, mümkün olan tüm yarı ağacı yalnızca bir yarıda oluşturabilir, bunları eksen boyunca aynalayabilir ve sonra doğru simetriyi kontrol edebiliriz. Dahası, üretilen polenoidler (düzlemsel) ağaçlar olduğu için, yansıma eksenine tam olarak bir kez dokunması gerekir.

İşlev public static Graph[] expand(Graph[] graphs, Point.Predicate fn)bir grafik dizisi alır, her biri ndüğümlere sahiptir ve bir grafik dizisi çıkarır, her biri birbirine n+1eşit olmayan düğümlere sahiptir (çeviri altında) - eklenen düğümün yüklemeyi yerine getirmesi gerekir fn.

2 muhtemel yansıma eksenini düşünün: Bir köşeden geçen ve kenarlarla ( x = 0) çakışan , ve bir kenarın ( 2x = y) dik kesicisi olan . Bunlardan sadece birini alabiliriz, çünkü oluşturulan grafikler zaten izomorfiktir.

Böylece, ilk eksen için x = 0, temel grafikten başlıyoruz, tek bir düğümden (1, 0)( tek durumda n) veya arasında bir kenar bulunan iki düğümden (1, 0) - (2, 0)( neşit durumda ise) oluşur ve daha sonra düğümleri genişletiriz y > 0. Bu, programın "Yansıma türü 1" bölümü tarafından yapılır ve sonra oluşturulan her grafik için, kendisini X ekseni x = 0( g.reflectSelfX()) üzerinden yansıtır (yansıtır ) ve sonra doğru simetriye sahip olup olmadığını kontrol eder.

Bununla birlikte, eğer n2'ye bölünebilirse, bu şekilde her grafiği iki kez saydık, çünkü ayna görüntüsünü eksen tarafından da oluşturduk 2x = y + 3.

(2 turuncu olanı not edin)

Eksen için benzer 2x = y, (ve sadece) halinde nbile, biz noktasından başlar (1, 1), grafikler bu şekilde elde 2*x > yve üzerinde her biri yansıtan 2x = yeksenine ( g.reflectSelfType2()), bağlantı (1, 0)ile birlikte (1, 1), ve doğru simetriye sahip olmadığını kontrol edin. Siz de 2'ye bölmeyi unutmayın.


Bu (ve diğeri) gönderildiğinde uyuduğumda, size şüphenin avantajını vereceğim ve henüz bir cevabı kabul etmeyeceğim.
Caird coinheringaahing

2
@cairdcoinheringaahing Son başvuru tarihinden 3 dakika önce
çevrildiniz

Ahh, bir sonraki sıra doğru kodlanmışsa ... (sonsuz olmasına rağmen) kodlanmış olabilir. Hesaplamanın kendisi --- oldukça --- çok kolaydır, bu yüzden yapmayın.
user202729

7

6. R , 71 bayt, A000072

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

Çevrimiçi deneyin!

Sonraki sıra


1
Tanrı aşkına, bu cevabı göndermeden önce bir sonraki sırayı kontrol etmedim.
Leaky Nun

Kolay bir sonraki sekans stratejik bir avantaj değil midir?
BlackCap

@BlackCap Üst üste iki kez veya en son yanıtlandıktan 1 saatten az bir sürede cevap alamazlar.
Outgolfer Erik,

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

Bu noktada @BlackCap olmayacak
Stephen


7

26. TI-BASIC, 274 bayt , 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 bağlantısında bulunan özyinelemeli formülü değerlendirir.

Sonraki Sıra


Agh site aşağı gittiğinde geri döndüğünde çılgın bir acele olacağını biliyordum. Ancak beni dövdü.
Silvio Mayolo,

Sitenin yıkıldığını bilmiyordum ...
Scott Milner




7

76. Pigme , 4147 bayt, 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                                         
}                                                                               

Sonraki Sıra

Kodu bu sayfada çalıştırabilirsiniz . Örneğin, yukarıdaki kodu kopyalayıp ekleyerek sıradaki 10. numarayı alabilirsiniz:

alert| A000035| 10

4
... sonraki sıra hesaplanamaz ...
HyperNeutrino

1
@HyperNeutrino Biliyorum: PI bunu bilerek yaptı
Peter Olson

Evil ...>. <Ama yine de, dizideki 4 elemanı kodlayacağım. Yeterince kolay xD OP, görünüşe göre onayladı ¯ \ _ (ツ) _ / ¯
HyperNeutrino
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.