Büyük API Paskalya Yumurtası Avı esinlenerek !
özet
Senin görevin mümkün olan en az adım kullanarak "Collatz alanı" (daha sonra açıklanacak) önceden belirlenmiş bir tamsayı aramaktır.
Giriş
Bu meydan okuma, umarım burada herkesin en azından duyduğu ünlü Collatz varsayımına dayanır. Print the Super Collatz numaralarından alınan bir özet .
Collatz Sırası Eğer herhangi bir pozitif tamsayı ile başlar bu örnek için biz 10 kullanacaktır ve buna adımların bu grubu uygulamak nerede (ayrıca 3x + 1 sorun olarak adlandırılır) 'dir:
if n is even: Divide it by 2 if n is odd: Multiply it by 3 and add 1 repeat until n = 1
C(m,n)
İki sayı arasındaki Collatz mesafesim
ve n
bu meydan okuma amacıyla, Collatz grafiğindeki iki sayı arasındaki mesafe (Krediler @tsh'den bu kavramı anlatmak için @tsh) aşağıdaki gibi tanımlanır: ( 21
ve 13
örneklerini kullanarak) ):
Collatz dizisini m
(bu durumda 21
) yazın:
21, 64, 32, 16, 8, 4, 2, 1
Collatz dizisini n
(bu durumda 13
) yazın:
13, 40, 20, 10, 5, 16, 8, 4, 2, 1
Şimdi sadece dizilerden birinde kaç sayı göründüğünü sayın. Bu, arasındaki Collatz mesafesi olarak tanımlanır.m
ven
. Bu durumda 8
, yani,
21, 64, 32, 13, 40, 20, 10, 5
Yani Collatz arasındaki mesafe 21
ve 13
as C(21,13)=8
.
C(m,n)
aşağıdaki güzel özelliklere sahip:
C(m,n)=C(n,m)
C(m,n)=0 iff. m=n
Umarım tanımı C(m,n)
artık açıktır. Collatz bölgesinde yumurta avı yapmaya başlayalım!
Oyunun başında, bir denetleyici, tek boyutlu koordinatı ile ifade edilen bir paskalya yumurtasının konumuna karar verir: Aralıktaki bir tam sayı [p,q]
(diğer bir deyişle,p
ve q
her ikisi de dahil olmak üzere ).
Yumurtanın pozisyonu oyun boyunca sabit kalır. Bu koordinatı şu şekilde göstereceğiz:r
.
Şimdi bir başlangıç tahmini 0 yapabilirsiniz ve kontrolör tarafından kaydedilecektir. Bu senin 0. turun. Eğer o kadar şanslıysanız, ilk etapta (yani bir 0 = r) doğru anladınız, oyun biter ve skorunuz 0
( skor ne kadar düşükse o kadar iyidir). Aksi takdirde, 1. tura girersiniz ve yeni bir tahmin yaparsınız 1 , doğru olana kadar devam eder, yani bir n = r ve puanınız olacaktır n
.
0. turdan sonraki her tur için kontrolör size verilen geri bildirimlerden birini verir, böylece verilen bilgilere dayanarak daha iyi bir tahmin yapabilirsiniz. Lets sen şu anda varsayıyorum n
inci turda ve dolayısıyla tahminin bir olduğunu n
- "Buldun!" bir n = r ise, bu durumda oyun sona erer ve skor yaparsınız
n
. - "Yakınız :)" C (a n , r) <C (a n-1 , r) ise
- C (a n , r) = C (a n-1 , r) ise "yumurtanın etrafında dönüyorsunuz"
- "Sen daha uzaktasın :(" eğer C (a n , r)> C (a n-1 , r)
Bazı baytları kaydetmek için, yanıtları yukarıda verilen sırayla "Doğru", "Daha Yakın", "Aynı", "Daha Uzak" olarak adlandıracağım.
İşte ile bir örnek oyun p=1,q=15
.
- a 0 = 10
- a 1 = 11, yanıt: "Yakından"
- a 2 = 13, yanıt: "Uzak"
- a 3 = 4, yanıt: "Uzak"
- a 4 = 3, yanıt: "Yakından"
- Bir 5 = 5, yanıtı: "Aynı"
- a 6 = 7, yanıt: "Doğru"
Skor: 6
.
Meydan okuma
Oyunu en iyi skorla oynamak için belirleyici bir strateji tasarlayın p=51, q=562
.
Yanıtlar algoritmaları ayrıntılı olarak açıklamalıdır. Algoritmayı açıklamaya yardımcı olan herhangi bir kodu ekleyebilirsiniz. Bu codegolf değildir, bu yüzden okunaklı kod yazmanız önerilir.
Cevaplar, olası tüm vakalar için elde edebilecekleri en kötü puanı içermeli r
ve en düşük puanı alan puanları kazanmalıdır. Beraberlik durumunda, mümkün olan herkes için daha iyi bir ortalama puanı olan algoritmalarr
s (cevaplara da dahil edilmesi gerekir) kazanır. Başka kravat kırıcı yok ve sonunda birden fazla kazananımız olabilir.
gözlük
- Tekrarlamak için,
r
aralıkta yatar[51,562]
. - Varsayılan boşluklar uygulanır.
Ödül (İlk cevap gönderildikten sonra eklenir)
Kişisel olarak tüm tahminlerin menzil içinde yapıldığı ve [51,562]
yine de oldukça düşük bir en kötü skoru olduğu bir cevaba ödül verebilirim .