Bu meydan okuma Tic Tac Toe oyunuyla ilgili, ancak bir torus oynandı.
Nasıl oynanır
Gerekli oyun tahtasını oluşturmak için düzenli bir Tic Tac Toe oyun tahtasından başlayabilirsiniz. Önce sol ve sağ kenara birleştirerek bir silindire katlayın. Sonra üst ve alt kenara birleştirerek torus içine katlayın. İşte böyle bir oyun tahtasının birkaç hamle oynadığı basit bir görselleştirmesi (Sick Paint becerileri!).
Bir torus üzerindeki Tic Tac Toe'nun kuralları normal Tic Tac Toe ile aynıdır. Her oyuncu sırayla Xs ve Os. Bir satırda aynı sembol, ilkinde bir sütun, bir köşegen veya bir köşegen içinde bir tane kazanır.
Bir torusun görselleştirilmesi oldukça zor olduğu için, tahtayı tekrar bir kağıda yansıtıyoruz. Şimdi oyunu normal Tic Tac Toe olarak oynayabiliriz. Aradaki tek fark, kırılmış bir köşegen içerisinde aynı 3 sembolle kazanabilmenizdir. Örneğin, Oyuncu 1 (X), aşağıdaki kartı kazanır. Bunu torus üzerindeki görünümü biraz değiştirerek kolayca görebilirsiniz.
Senin ilgi varsa, bir Torus üzerinde Tic Tac Toe oynayabilir Torus Games . Windows, Mac ve Android sürümü var.
Optimal Oyunlar
Bu meydan okumada en iyi oyunlara ilgi vardı. Optimal oyun, her iki oyuncunun da optimal bir strateji oynadığı bir oyundur. Normal bir Tic Tac Toe tahtasında optimal oyunlar her zaman berabere biter. Büyüleyici bir torus panosunda her zaman ilk oyuncu kazanır. Aslında, bir torus tahtası üzerindeki bir oyun asla berabere bitemez (oyuncular en iyi şekilde oynamazsa).
En uygun strateji gerçekten kolaydır:
- Sembolünüzü koyarak kazanabilirsiniz, yapın.
- Aksi halde rakibinizin bir satır / sütun / điagonal içinde iki sembolü varsa, onu engellemeyi deneyin. Aksi takdirde, ne istersen yap.
- Aksi takdirde ne istersen onu yap.
Her optimum oyun tam olarak 7 hamleden oluşur ve bu hamleler aşağıdaki şekilde tanımlanabilir:
- Oyuncu 1, gemide herhangi bir yere X yerleştirir (9 seçenek)
- Oyuncu 2, tahtanın herhangi bir yerine O yerleştirir (8 seçenek)
- Oyuncu 1, gemide herhangi bir yere X yerleştirir (7 seçenek)
- 2. Oyuncu hareketi zorlanabilir (1 seçenek), eğer değilse, O'yu herhangi bir yere yerleştirir (6 seçenek)
- Oyuncu 1 hamlesine zorlandı (1 seçenek)
- Oyuncu 2 bir çatala yakalandı (Oyuncu 1 iki farklı şekilde kazanabilir), bu nedenle Oyuncu 2, Oyuncu 1'i bir şekilde engellemeli (2 seçenek)
- Oyuncu 1 son hamlesini yapar ve kazanır (1 seçenek)
Öngörülen panomuzda 9 * 8 * 1 * 6 * 1 * 2 * 1 + 9 * 8 * 6 * 1 * 1 * 2 * 1 = 1728 farklı optimum oyun bulunmaktadır. Burada tipik bir optimal oyun görebilirsiniz:
Tahtanın her bir hücresini rakamlarla etiketlersek 0-8
, bu oyunu rakamlarla tanımlayabiliriz 3518207
. İlk önce bir X, hücre 3'teki (orta sıra, sol sütun), hücre 5'teki bir O'dan (orta sıra, sağ sütun), hücre 1'deki bir X'den (üst sıra, orta sütun), ...
Bu rakam gösterimini kullanarak otomatik olarak bir sipariş oluşturduk. Şimdi tüm 1728 optimal oyunlarını sıralayabiliriz ve listeyi alırız:
Game 0000: 0123845
Game 0001: 0123854
Game 0002: 0124735
Game 0003: 0124753
Game 0004: 0125634
...
Game 0674: 3518207
...
Game 1000: 5167423
Game 1001: 5167432
Game 1002: 5168304
...
Game 1726: 8765034
Game 1727: 8765043
Meydan okuma
Bu liste işinizin bir parçası. k
0 ile 1727 arasında bir sayı alacaksınız ve bu k
oyunu o sıralanan listenin rakamıyla göstermeniz gerekiyor.
k
Karşılık gelen oyunu hesaplayan sayıyı (tamsayı) alan bir fonksiyon veya program yazın . Girişi STDIN, komut satırı argümanı, prompt veya function argümanı üzerinden okuyabilir ve sonucu (7 basamak) okunabilir bir formatta (örn. 0123845
Veya [0, 1, 2, 3, 8, 4, 5]
) yazdırabilir veya bir dize (insan tarafından okunabilir format) veya bir tamsayı (hepsini içeren) kullanarak döndürebilirsiniz. 10 tabanındaki rakamlar) veya herhangi bir dizi / liste biçiminde.
Meydan okuma türü kod golf. Bu nedenle en kısa kod kazanır.