Eğer sıkılırsanız oynamak için eğlenceli bir oyun Diffy Oyunu . Oldukça basit ve zamanınızın büyük bir kısmını tüketebilen tek oyunculu bir oyundur.
Diffy oyunu aşağıdaki gibi çalışır: Negatif olmayan tam sayıların bir listesiyle başlarsınız, bu örnekte kullanacağız
3 4 5 8
Sonra bitişik sayılar arasındaki mutlak farkı alırsın
(8) 3 4 5 8
5 1 1 3
O zaman tekrar et. Bir döngü girdiğinizi farkedene kadar tekrar edersiniz. Ve sonra genel olarak oyun yeniden en baştan başlar.
3 4 5 8
5 1 1 3
2 4 0 2
0 2 4 2
2 2 2 2
0 0 0 0
0 0 0 0
Genellikle oyunun bir amacı yoktur, sadece kafanızdaki aritmetik işlemlerle zaman geçirirsiniz. Ancak bu oyunu oynamaktan zevk duyduğumda hedefim her zaman bir periyodu denemek ve seçmek ve o belirli periyodda geçen bir oyun kurmaya çalışmaktır.
Tüm oyunlar periyodik değildir, örneğin yukarıdaki sonuç periyodik değildir, çünkü sonunda tüm oyunların sıfır olduğu bir oyuna ulaşır ve bu nedenle başlangıç pozisyonuna asla geri dönemez. Aslında, oyunların büyük çoğunluğunun nadir bir mücevher olan birkaç oyunu yapmak için periyodik olmadığı görülüyor.
Belirli bir süre ile geçen bir oyun göz önüne alındığında, aynı süre ile sadece iki katına çıkarak tekrarlanan başka bir oyun yapmak çok önemlidir. Örneğin oyun:
1 0 1
Oyun ile tamamen aynı şekilde oynanır:
1 0 1 1 0 1
Aslında, ikisinin de gerçekten sonsuz tekrarlayan bir oyun olduğunu düşünebiliriz:
... 1 0 1 ...
Onları bu mücadelenin uğruna bir oyun olarak göreceğiz.
Benzer bir şekilde, tüm sekansı bir sabit ile çarpmak aynı zamanda zaman dilimini de önemsiz şekilde koruyacaktır; bu nedenle, aynı oyun olarak sabit bir faktöre göre farklılık gösteren iki oyunu bir kez daha sayacağız.
Sonsuz dizeler ... 1 0 1 ...
ve ... 0 1 1 ...
açıkça bir karakter tarafından değiştirilen aynı dizedir. Bunları farklı oyunlar olarak saymayacağız, ancak biri diğerine ulaştığında, oyunun süresini belirlerken bu döngünün sonu sayılmaz. Örneğin:
İki oyun
... 0 0 0 1 0 1 ... = A
... 0 0 1 1 1 1 ... = B
... 0 1 0 0 0 1 ... = A << 4
... 1 1 0 0 1 1 ... = B << 4
... 0 1 0 1 0 0 ... = A << 2
... 1 1 1 1 0 0 ... = B << 2
ve
... 0 0 1 0 1 0 ... = A << 1
... 0 1 1 1 1 0 ... = B << 1
... 1 0 0 0 1 0 ... = A << 5
... 1 0 0 1 1 1 ... = B << 5
... 1 0 1 0 0 0 ... = A << 3
... 1 1 1 0 0 1 ... = B << 3
Her ikisi de 6. periyodu olan oyunlardır. Döngülerinin hiçbir noktasında birbirleriyle hiçbir terim paylaşmazlar (birbirinden farklı ... 1 1 0 ...
ve ... 1 0 1 ...
birbirlerine ulaşırlar) ancak birbirlerinin farklı sürümleri oldukları için sayma sırasında aynı oyun olarak kabul edilirler.
Sonsuz bir dizgeyi yansıtmak (veya tersine çevirmek) esasen aynı davranışı verir, ancak mutlaka aynı süreyi vermez. Düşünün, örneğin
... 0 0 0 1 0 0 1 1 0 1 0 1 1 1 1 ...
ve onun yansıması
... 1 1 1 1 0 1 0 1 1 0 0 1 0 0 0 ...
Yeni neslin, karakterler arasında yarı yolda üretileceğini düşünürsek:
... 0 0 0 1 0 0 1 1 0 1 0 1 1 1 1 ...
... 0 0 1 1 0 1 0 1 1 1 1 0 0 0 1 ...
... 1 1 1 1 0 1 0 1 1 0 0 1 0 0 0 ...
... 0 0 0 1 1 1 1 0 1 0 1 1 0 0 1 ...
o zaman her ikisi de 3.5 eleman tarafından kaydırılmış pozisyonda olacaktı. Bununla birlikte, bir sonraki neslin bu yarım eleman ofseti ile üretileceğini düşünmüyoruz, bu yüzden biri 15 periyot veren 4 elementli bir kaymaya, diğeri ise 3 element kaymaya kadar olan bir periyot vererek 5.
Bu nedenle, döngüleri bir anlamda izomorfik olsa da, asimetrik bir dize ve yansımasının belirgin olduğunu düşünüyoruz. Elbette, aynı döngünün bir parçasını oluştururlarsa, o zaman sadece bir döngü olarak sayılır.
Bu kısıtlamalarla, küçük bir matematik aslında herhangi bir sonlu periyodda sınırlı sayıda Diffy döngüsü olduğunu gösterebilir. Dahası, sonlu bir periyodu olan her sonsuz dizi bir sonlu dize sonsuz tekrarıdır.
Dizelerin noktalardan daha büyük veya daha kısa olabileceğini unutmayın. Örneğin, 15 periyodu olan bir 5 uzunluğu ve 5 periyodu olan bir 15 nolu uzunluğu vardır.
Görev
n
Standart giriş yöntemleri ile n'nin 1'den büyük olduğu bir sayı verildiğinde , tam olarak bir periyod ile farklı Diffy döngülerinin sayısını belirler n
.
(Görünüşe göre, literatürde, 0
genellikle periyodik bir Diffy oyunu sayılmaz. Bu gri bir alan olduğu için çözmenizi istemeyeceğim n = 1
)
Bu kod golf , bu nedenle amaç kaynak kodunuzdaki bayt sayısını en aza indirmektir.
Test Kılıfları
2 -> 0
3 -> 1
4 -> 0
5 -> 1
6 -> 1
7 -> 3
8 -> 0
9 -> 4
10 -> 4
11 -> 3
12 -> 5
13 -> 5
14 -> 24
15 -> 77
16 -> 0
17 -> 259
18 -> 259
19 -> 27
20 -> 272
21 -> 811
22 -> 768
23 -> 91
24 -> 340
25 -> 656
İpuçları
Tüm Periyodik fark oyunları sadece sıfır ve tek bir sabit içerecektir, bu, her periyodik oyunun sadece sıfırlardan ve bazılardan oluşan farklı oyunlara izomorfik olacağı anlamına gelir.
010001->111001->000101->100111->010100->011110->010001
ve 110110->101101->011011->110110
farklı?