Giriş
Orta-kare metodu yalancı rasgele sayıların üretilmesi için kullanılır. Bununla birlikte, bu uygulamada iyi bir yöntem değildir, çünkü süresi genellikle çok kısadır ve bazı ciddi zayıflıkları vardır. Bu nasıl çalışıyor? Bir örnek verelim:
Tohum için seçiyoruz 123456
:
Seed 123456
Kare tohum (tohum × tohum), eşittir:
Seed² 15241383936
6 basamaklı bir sayı ile başladık . Bu, kare tohumun 12 haneli bir sayı vermesi gerektiği anlamına gelir . Aksi takdirde, telafi etmek için önde gelen sıfırlar eklenir:
Seed² 015241383936
Daha sonra sayının orta kısmını tohumla aynı boyutta alırız:
Seed² 015241383936
^^^^^^
Sonra bu bizim olan yeni tohum : 241383
. Yukarıda gösterilenle aynı işlemi tekrarlıyoruz. Aşağıdakileri alıyoruz:
0: 123456
015241383936
| |
1: 241383
058265752689
| |
2: 265752
070624125504
| |
3: 624125
389532015625
| |
4: 532015
283039960225
| |
5: 039960
001596801600
| |
6: 596801
Ve bu bir süre sonra devam ediyor ... Şimdi orta kare yönteminin ne olduğunu biliyoruz, meydan okumaya geçelim:
Görev
Her tohum vardır bir dönem . Bir n- basamaklı tohumun süresi 8 n'den uzun olamaz . Örneğin, tohum 82
. Bu, aşağıdaki sırayı verir:
82 > 72 > 18 > 32 > 02 > 00 > 00 > 00 > 00 > 00
|____|____|____|____|____|____|____|____|____|___...
0 1 2 3 4 5 6 7 8 9
Aynı basamağı tekrar eklemeden önce , sürenin 5'e eşit olduğunu görebilirsiniz . Göreviniz, başında sıfır bulunmayan 0'dan büyük bir tohum verildiğinde tohumun periyodunu çıktılamaktır . Yani, bu durumda, çıktı almanız gerekir 5
.
Başka bir örnek: 24
aşağıdakileri veren:
24 > 57 > 24
|____|____|___...
0 1 2
Gördüğünüz gibi, tüm diziler bitmiyor 0
. Bu döngünün süresi 1'dir .
Test senaryoları
Input > Output
24 > 1
82 > 5
123456 > 146
8989 > 68
789987 > 226
İçin dizileri ile pastebins 123456 , 8989 , 789.987
Bu kod golf , yani en az bayt ile gönderme kazanır!
Girişin hiçbir zaman eşit olmayan sayıda basamağa sahip olmayacağını varsayabilirsiniz.
24
(dönem 2 ile söyleyebilirim), periyodik82
olduğunu sonunda periyodik (dönem 1 ile).