Kibrit çöpü oyunu programı

Neden anlamadım?

97^3 diyemez mi sonrasında? Veya daha büyük bir asal^1 gibi.

Ben de anlamadım.

Yerden çektiklerimizi geri diğerinin elinden mi alıyoruz oyunda?

Bir milyon çöp var, ben 999979 dedim ve aldım yerde 21 çöp kaldı.

Sıra ikinciye geçtiğinde 97^3 adet çöp yerden nasıl çekecek?

Sanırım oyun kurallarını kavrayamıyorum.

Pardon ben yanlış anlamışım. Yok yok doğru sorun yok.

Geriye 999979 kaldı gibi anlamışım.

Edit: 16 kalırsa da yenilir. 2^4

Evet,yenileceği ihtimalleri çıkardığımızda sınırlı bir kümeye dönüşüyor.

Hem de çok hızlı bir şekilde.

Yani olasılıklar çok hızlı hesaplanabilir hale geliyor. Yapması gereken tek şey yerde kalanın asal sayı olmamasını sağlamak.

İkinci olarak da asal üstleri çıkardığınızda oluşan sayıya denk getirmemek.

Yani hala oyun bir matematik problemi gibi oldu. Bu tablolarla mantıklı kararlarla oynayabilir bir robt oluşabilecek gibi duruyor. Sonra oyunu oynatıp istatistiklerine de bakılaiblir.

EDIT:

Oyun bir anda 1-21 arasında asal kuralına dönüştü.

İlk oyuncuya hangi kalan avantaj sağlayacaksa o rakamı tercih edip belki ikinci oyuncuyu sıkıştırabilir.

1 Beğeni

Doğrudan CPU gücüne ihtiyaç duyan işlemlerde bir dinamik bağlantı kitaplığı'ndaki fonksiyonu kullanmak, o fonksiyon ile aynı işlemi yapan bir Python fonksiyonunu kullanmaktan daha fazla hız sağlar.

Aşağıdaki kodları prime.c isminde bir dosyada tutuyor olalım:

#include <math.h>

int is_prime(unsigned long long n) {
    for (unsigned long long i = 2; i < (unsigned long long)pow(n, .5) + 1; i++) {
        if (n % i == 0) {
            return 0;
        }
    }
    return 1;
}

Şimdi bir dll oluşturalım:

gcc -shared -o prime.dll prime.c

Şimdi bir tane Python scripti oluşturalım:

# Dinamik bağlantı kitaplığını yüklemek için ctypes'ı import edelim.
import ctypes

# kütüphaneyi yükleyelim.
lib = ctypes.CDLL("./prime.dll")
# Fonksiyonun ismi `is_prime` idi. Bu fonksiyonun argüman tipini tanımlayalım.
lib.is_prime.argtypes = [ctypes.c_longlong]


# Şimdi aşağıdaki gibi bir fonksiyon oluşturalım:
def is_prime(n: int):
    return lib.is_prime(n) == 1

Şimdi de aynı fonksiyonu Python'da yazalım:

def asal(n: int):
    for i in range(2, int(n ** 0.5) + 1):
        if n % i == 0:
            return False
    return True

Şimdi bu iki fonksiyonun 15 basamaklı bir asal sayının asal sayı olup olmadığını ne kadar sürede bulduklarına bakalım.

import timeit

t1 = timeit.timeit(stmt=lambda: is_prime(n=999998727899999), number=1)
t2 = timeit.timeit(stmt=lambda: asal(n=999998727899999), number=1)
print(f"C: {t1}\nPython: {t2}")

Çıktı:

C: 0.31493809999665245
Python: 1.8097498999995878

Bu örnek için C’de yazılmış fonksiyon, Python ile yazılmış fonksiyondan aşağı yukarı 6 kat daha hızlı çalışıyor.

Bu türden değişiklikler yaparak da oyunu biraz daha hızlandırabilirsiniz.

3 Beğeni

Güzel yaklaşım. Farklı uygulamalarda faydalı olabilir. Ama biz 1 milyonla sınırlandırıldık. Yüksek performanslı bir uygulamada dili değiştireceksek, zaten yolu C ye doğru alırız.

Asıl merak ettiğim bu oyunun matematik modellemesi ile avantaj durumları.

Hazır halaya dahil olmuşken, en büyük asalı verdik ve geriye 21 çöp kaldı ihtimal tablosu ile hangi oyuncunın kazanacağını hesaplayan yada tercih yapmasını destekleyen bir şeyler de karalayabilir misin?

Bu gün bir oyuncak buldum kendime onu bırkalayacağım ilgilenme fırsatım olmayabilir ama bu bir matematik problemi ve çözümlenebilir gibi duruyor üzerinde kod fikirlerinizi görmek isterim. Sanırım, asal hesaplama ve tablodan bakma kısmında çok takıldık diğer aşamaya geçmek lazım.

Bilmem, oyun binlerce kez oynatılabilir; oyunun tıkanacağı durumlar öngörülüp oralarda oyun yeniden başlatılabilir böylece bitebilen oyunlar kaydedilir: a ve b kişilerinin yapmış oldukları hamlelerin hepsi tek tek kaydedilir ve yapmış oldukları hamleler sonucunda nasıl bir sonuç gelişmiş izlenebilir. Aşağıda paylaştığım kodlar, binlerce kez bu oyunu oynatıyor ve her oyunda kullanıcıların hamleleri ve bu hamlelerin nasıl bir sonuca vardığı kaydediliyor. Yani, veri üreten bir kod. Sonraki iş, bu verileri gruplandırmak ve sınıflandırmak ile ilgili olsa gerek.

import random
import ctypes
import pandas as pd

lib = ctypes.CDLL("./prime.dll")
lib.is_prime.argtypes = [ctypes.c_longlong]


def is_prime(n: int):
    return lib.is_prime(n) == 1


def get_prime(n: int):
    x = random.randint(2, n)
    while not is_prime(x):
        x = random.randint(2, n)
    return x


def get_values(remained: int):
    p = get_prime(remained)
    n = random.randint(1, remained)
    while p ** n >= remained:
        p = get_prime(remained)
        if p == remained:
            return p, 1
        n = random.randint(1, remained)
    return p, n


def run_tests(test_number: int, countdown_number: int, output: str):
    tests = {}
    for j in range(test_number):
        i = 0
        tests[f"Test-{j}"] = {"a": [], "b": []}
        remained = countdown_number
        index = ""
        while remained > 0:
            p, n = get_values(remained)
            remained -= p ** n
            if remained == 1:
                remained = countdown_number
                tests[f"Test-{j}"] = {"a": [], "b": []}
                continue
            index = list(tests[f"Test-{j}"])[i % 2]
            tests[f"Test-{j}"][index] += [(p, n)]
            i += 1
        tests[f"Test-{j}"]["winner"] = index

    df = pd.DataFrame.from_dict(tests)
    df = df.transpose()
    df.to_excel(output)


run_tests(test_number=1000, countdown_number=21, output="tests.xlsx")
1 Beğeni

Veri setini transpose edip kaydetsek daha okunaklı aslında. Yukardaki kodu değiştirdim biraz:

a b winner
Test-0 [(13, 1), (5, 1)] [(3, 1)] a
Test-1 [(2, 1)] [(19, 1)] b
Test-2 [(7, 1), (11, 1)] [(3, 1)] a
Test-3 [(2, 3), (2, 1)] [(3, 2), (2, 1)] b
Test-4 [(2, 1)] [(19, 1)] a
Test-5 [(11, 1), (2, 1)] [(3, 1), (5, 1)] b
Test-6 [(7, 1), (2, 3), (2, 1)] [(2, 1), (2, 1)] a
Test-7 [(2, 2)] [(17, 1)] b
Test-8 [(5, 1), (7, 1), (3, 1)] [(2, 2), (2, 1)] a
Test-9 [(3, 1), (3, 1), (5, 1)] [(7, 1), (3, 1)] a
Test-10 [(2, 1)] [(19, 1)] a
Test-11 [(2, 1)] [(19, 1)] b
Test-12 [(2, 1)] [(19, 1)] b
Test-13 [(5, 1), (2, 2), (3, 1)] [(2, 1), (7, 1)] a
Test-14 [(5, 1), (7, 1), (3, 1)] [(2, 2), (2, 1)] a
Test-15 [(17, 1), (2, 1)] [(2, 1)] a
Test-16 [(3, 1), (2, 2), (3, 1), (2, 1)] [(5, 1), (2, 1), (2, 1)] a
Test-17 [(19, 1)] [(2, 1)] b
Test-18 [(2, 3)] [(13, 1)] b
Test-19 [(13, 1), (3, 1)] [(3, 1), (2, 1)] b
Test-20 [(5, 1), (11, 1)] [(5, 1)] a
Test-21 [(2, 2)] [(17, 1)] b
Test-22 [(2, 4), (3, 1)] [(2, 1)] a
Test-23 [(2, 4)] [(5, 1)] b
Test-24 [(19, 1)] [(2, 1)] b
Test-25 [(2, 2)] [(17, 1)] b
Test-26 [(2, 2)] [(17, 1)] b
Test-27 [(7, 1), (11, 1)] [(3, 1)] a
Test-28 [(3, 2), (2, 1)] [(3, 1), (7, 1)] b
Test-29 [(19, 1)] [(2, 1)] b
Test-30 [(2, 1)] [(19, 1)] a
Test-31 [(2, 3)] [(13, 1)] b
Test-32 [(19, 1)] [(2, 1)] b
Test-33 [(3, 2), (7, 1)] [(3, 1), (2, 1)] b
Test-34 [(11, 1), (7, 1)] [(3, 1)] a
Test-35 [(2, 3)] [(13, 1)] b
Test-36 [(19, 1)] [(2, 1)] b
Test-37 [(2, 3)] [(13, 1)] b
Test-38 [(2, 1), (3, 1), (11, 1)] [(3, 1), (2, 1)] a
Test-39 [(17, 1)] [(2, 2)] a
Test-40 [(5, 1), (5, 1)] [(11, 1)] a
Test-41 [(11, 1), (3, 1)] [(7, 1)] a
Test-42 [(2, 1)] [(19, 1)] b
Test-43 [(5, 1), (5, 1)] [(11, 1)] a
Test-44 [(2, 1)] [(19, 1)] b
Test-45 [(2, 2), (2, 1)] [(2, 1), (13, 1)] b
Test-46 [(2, 1)] [(19, 1)] b
Test-47 [(11, 1), (3, 1)] [(2, 2), (3, 1)] b
Test-48 [(13, 1), (2, 2)] [(2, 1), (2, 1)] b
Test-49 [(2, 2), (2, 1)] [(3, 2), (2, 2), (2, 1)] b
Test-50 [(3, 1), (11, 1)] [(7, 1)] a
Test-51 [(3, 2), (2, 1)] [(2, 3), (2, 1)] b
Test-52 [(2, 2)] [(17, 1)] b
Test-53 [(3, 1), (11, 1)] [(2, 2), (3, 1)] b
Test-54 [(2, 4), (2, 1)] [(3, 1)] a
Test-55 [(5, 1), (2, 1), (2, 1)] [(2, 3), (2, 2)] a
Test-56 [(7, 1), (11, 1)] [(3, 1)] a
Test-57 [(2, 1)] [(19, 1)] b
Test-58 [(19, 1)] [(2, 1)] b
Test-59 [(2, 4)] [(5, 1)] b
Test-60 [(2, 3), (2, 1)] [(3, 2), (2, 1)] a
Test-61 [(2, 3), (2, 1)] [(11, 1)] a
Test-62 [(2, 2)] [(17, 1)] b
Test-63 [(7, 1), (3, 1)] [(2, 3), (3, 1)] b
Test-64 [(2, 2)] [(17, 1)] b
Test-65 [(13, 1), (2, 1)] [(2, 2), (2, 1)] b
Test-66 [(13, 1), (3, 1)] [(5, 1)] a
Test-67 [(13, 1), (2, 1)] [(2, 2), (2, 1)] b
Test-68 [(5, 1), (2, 1)] [(11, 1), (3, 1)] b
Test-69 [(17, 1), (2, 1)] [(2, 1)] a
Test-70 [(2, 1)] [(17, 1), (2, 1)] b
Test-71 [(17, 1), (2, 1)] [(2, 1)] a
Test-72 [(13, 1)] [(2, 3)] a
Test-73 [(2, 2)] [(17, 1)] b
Test-74 [(2, 2)] [(17, 1)] b
Test-75 [(19, 1)] [(2, 1)] a
Test-76 [(2, 2), (2, 2), (2, 1)] [(5, 1), (2, 2), (2, 1)] b
Test-77 [(5, 1)] [(3, 2), (7, 1)] b
Test-78 [(19, 1)] [(2, 1)] a
Test-79 [(3, 2), (7, 1)] [(3, 1), (2, 1)] a
Test-80 [(5, 1)] [(11, 1), (5, 1)] b
Test-81 [(11, 1), (3, 1)] [(2, 1), (5, 1)] b
Test-82 [(2, 1), (2, 2), (2, 1)] [(7, 1), (2, 1), (2, 2)] a
Test-83 [(2, 1)] [(19, 1)] b
Test-84 [(13, 1), (2, 1)] [(2, 2), (2, 1)] b
Test-85 [(2, 2)] [(17, 1)] b
Test-86 [(11, 1), (2, 1), (2, 1)] [(3, 1), (3, 1)] a
Test-87 [(19, 1)] [(2, 1)] b
Test-88 [(5, 1), (3, 1)] [(13, 1)] a
Test-89 [(2, 2)] [(17, 1)] b
Test-90 [(7, 1), (2, 1), (2, 2)] [(3, 1), (2, 1), (3, 1)] b
Test-91 [(2, 3)] [(13, 1)] b
Test-92 [(5, 1), (2, 3), (2, 1)] [(2, 1), (2, 2)] a
Test-93 [(3, 1), (11, 1)] [(7, 1)] a
Test-94 [(19, 1)] [(2, 1)] b
Test-95 [(3, 1), (13, 1)] [(5, 1)] a
Test-96 [(2, 3), (2, 1)] [(11, 1)] a
Test-97 [(2, 2)] [(17, 1)] b
Test-98 [(3, 1), (13, 1)] [(3, 1), (2, 1)] b
Test-99 [(17, 1), (2, 1)] [(2, 1)] a
Test-100 [(2, 4), (2, 1)] [(3, 1)] a
1 Beğeni

get_values fonksiyonunu şöyle değiştiriyorum:

def get_values(remained: int):
    p = get_prime(remained)
    n = random.randint(1, remained // p)
    while p ** n >= remained:
        p = get_prime(remained)
        if p == remained:
            return p, 1
        n = random.randint(1, remained // p)
    return p, n

Tüm kodlar:

import random
import ctypes
import pandas as pd

lib = ctypes.CDLL("./prime.dll")
lib.is_prime.argtypes = [ctypes.c_longlong]


def is_prime(n: int):
    return lib.is_prime(n) == 1


def get_prime(n: int):
    x = random.randint(2, n)
    while not is_prime(x):
        x = random.randint(2, n)
    return x


def get_values(remained: int):
    p = get_prime(remained)
    n = random.randint(1, remained // p)
    while p ** n >= remained:
        p = get_prime(remained)
        if p == remained:
            return p, 1
        n = random.randint(1, remained // p)
    return p, n


def run_tests(test_number: int, countdown_number: int, output: str):
    tests = {}
    for j in range(test_number):
        i = 0
        tests[f"Test-{j}"] = {"a": [], "b": []}
        remained = countdown_number
        index = ""
        while remained > 0:
            p, n = get_values(remained)
            remained -= p ** n
            if remained == 1:
                remained = countdown_number
                tests[f"Test-{j}"] = {"a": [], "b": []}
                continue
            index = list(tests[f"Test-{j}"])[i % 2]
            tests[f"Test-{j}"][index] += [(p, n)]
            i += 1
        tests[f"Test-{j}"]["winner"] = index

    df = pd.DataFrame.from_dict(tests)
    df = df.transpose()
    df.to_excel(output)

Artık testi 1000000 çöp sayısı için de yapabiliriz, bir önceki get_values fonksiyonunda, sayı büyüdüğü için döngüden çıkması da buna bağlı olarak zorlaşıyordu. Yukardaki fonksiyon ile bu zorluğu ortadan kaldırdık.

çöp sayısı 1000000 için 10000 tane testi kısa sürede oluşturabiliriz. Ama 1 milyon çöp sayısı için 10 bin test (satır sayısı) bence az. 1 milyon tane çöp için 100 milyon tane test veya 1 milyar tane test, veya daha fazla?

run_tests(test_number=10000, countdown_number=1000000, output="tests.xlsx")

İlk 100 sonuç:

a b winner
Test-0 [(703897, 1), (131759, 1), (37021, 1), (3301, 1), (523, 1), (37, 1), (2, 1)] [(91711, 1), (24329, 1), (6133, 1), (1277, 1), (3, 1), (7, 1)] a
Test-1 [(623881, 1), (57637, 1), (701, 1), (53, 1), (2, 1), (2, 1)] [(292249, 1), (25457, 1), (2, 2), (11, 1), (3, 1)] a
Test-2 [(150383, 1), (21773, 1), (1609, 1), (67, 1), (13, 1)] [(809399, 1), (16189, 1), (563, 1), (2, 1), (2, 1)] b
Test-3 [(204751, 1), (37369, 1), (5011, 1), (761, 1), (853, 1), (29, 1), (19, 1), (7, 1)] [(660013, 1), (78577, 1), (9511, 1), (1433, 1), (1447, 1), (137, 1), (79, 1), (3, 1)] a
Test-4 [(429733, 1), (333161, 1), (21751, 1), (757, 1), (251, 1), (137, 1), (2, 1)] [(154571, 1), (58411, 1), (1069, 1), (83, 1), (43, 1), (31, 1)] a
Test-5 [(608989, 1), (65419, 1), (89, 1), (2, 1)] [(324637, 1), (857, 1), (7, 1)] a
Test-6 [(338563, 1), (508969, 1), (1699, 1), (29, 1), (2, 1)] [(148781, 1), (1879, 1), (67, 1), (11, 1)] a
Test-7 [(405521, 1), (302189, 1), (37307, 1), (251, 1), (19, 1)] [(147299, 1), (100999, 1), (6329, 1), (79, 1), (7, 1)] b
Test-8 [(547727, 1), (30983, 1), (3301, 1), (877, 1), (43, 1), (3, 1), (2, 1)] [(341123, 1), (68351, 1), (6197, 1), (1279, 1), (107, 1), (2, 2), (3, 1)] a
Test-9 [(102149, 1), (5387, 1), (1259, 1), (263, 1), (7, 1)] [(678989, 1), (204521, 1), (6547, 1), (839, 1), (37, 1), (2, 1)] b
Test-10 [(587579, 1), (90793, 1), (10193, 1), (367, 1), (17, 1), (2, 1)] [(235621, 1), (72269, 1), (3037, 1), (109, 1), (13, 1)] a
Test-11 [(300431, 1), (121333, 1), (6971, 1), (347, 1), (19, 1)] [(467017, 1), (102461, 1), (1367, 1), (37, 1), (17, 1)] b
Test-12 [(244901, 1), (87973, 1), (33013, 1), (12211, 1), (241, 1), (47, 1)] [(575611, 1), (43627, 1), (1667, 1), (521, 1), (181, 1), (7, 1)] b
Test-13 [(145577, 1), (593, 1), (19, 1), (5, 1)] [(841913, 1), (11621, 1), (257, 1), (13, 1), (2, 1)] b
Test-14 [(776173, 1), (31721, 1), (8663, 1), (929, 1)] [(155657, 1), (25841, 1), (1013, 1), (3, 1)] b
Test-15 [(518779, 1), (169531, 1), (75079, 1), (16193, 1), (467, 1), (11, 1), (3, 1)] [(161033, 1), (41981, 1), (15749, 1), (1123, 1), (47, 1), (2, 2)] a
Test-16 [(975439, 1), (5059, 1), (2207, 1), (293, 1), (43, 1), (2, 1)] [(14741, 1), (1249, 1), (881, 1), (79, 1), (5, 1), (2, 1)] b
Test-17 [(231701, 1), (21101, 1), (83, 1), (3, 1)] [(746209, 1), (853, 1), (43, 1), (7, 1)] b
Test-18 [(595093, 1), (146977, 1), (29297, 1), (311, 1), (17, 1), (2, 1)] [(162901, 1), (63599, 1), (1699, 1), (79, 1), (5, 2)] a
Test-19 [(339887, 1), (110821, 1), (15791, 1), (1723, 1), (23, 1)] [(465373, 1), (62563, 1), (3727, 1), (89, 1), (3, 1)] b
Test-20 [(821519, 1), (18229, 1), (149, 1)] [(159979, 1), (113, 1), (11, 1)] b
Test-21 [(256931, 1), (25667, 1), (5717, 1), (673, 1), (59, 1), (2, 1)] [(668273, 1), (38333, 1), (2239, 1), (2081, 1), (17, 1), (2, 3)] a
Test-22 [(565427, 1), (181553, 1), (49597, 1), (1399, 1), (37, 1)] [(76963, 1), (101863, 1), (22531, 1), (577, 1), (53, 1)] b
Test-23 [(639631, 1), (116381, 1), (26003, 1), (5651, 1), (761, 1), (109, 1), (2, 1)] [(176401, 1), (23447, 1), (11071, 1), (107, 1), (257, 1), (179, 1)] a
Test-24 [(601309, 1), (155167, 1), (5701, 1), (4703, 1), (317, 1), (37, 1)] [(174311, 1), (51349, 1), (6217, 1), (673, 1), (199, 1), (17, 1)] b
Test-25 [(721261, 1), (66959, 1), (29347, 1), (971, 1), (397, 1), (2, 1)] [(155473, 1), (22817, 1), (2383, 1), (383, 1), (7, 1)] a
Test-26 [(732689, 1), (16561, 1), (10987, 1), (257, 1), (2, 1)] [(222493, 1), (15679, 1), (1229, 1), (103, 1)] a
Test-27 [(544613, 1), (175391, 1), (47807, 1), (7879, 1), (173, 1), (5, 1)] [(122027, 1), (95507, 1), (6277, 1), (313, 1), (5, 1), (3, 1)] b
Test-28 [(914257, 1), (4457, 1), (619, 1), (59, 1)] [(77951, 1), (2287, 1), (359, 1), (11, 1)] b
Test-29 [(744313, 1), (60631, 1), (24229, 1), (127, 1), (29, 1)] [(155707, 1), (14713, 1), (193, 1), (53, 1), (5, 1)] b
Test-30 [(405947, 1), (75689, 1), (509, 1), (499, 1), (89, 1), (2, 1)] [(504947, 1), (11527, 1), (739, 1), (47, 1), (2, 1), (3, 1)] b
Test-31 [(734911, 1), (44131, 1), (2371, 1), (19, 1), (29, 1), (5, 1)] [(207973, 1), (10259, 1), (191, 1), (89, 1), (19, 1), (3, 1)] b
Test-32 [(521981, 1), (5297, 1), (13, 1), (2, 1)] [(472391, 1), (311, 1), (5, 1)] a
Test-33 [(968479, 1), (11689, 1), (3137, 1), (433, 1), (73, 1), (13, 1), (3, 1), (2, 1), (3, 1)] [(7603, 1), (8089, 1), (257, 1), (89, 1), (73, 1), (29, 1), (23, 1), (5, 1)] a
Test-34 [(584399, 1), (51131, 1), (14537, 1), (383, 1), (2, 1)] [(224951, 1), (109397, 1), (15193, 1), (5, 1), (2, 1)] b
Test-35 [(22277, 1), (1699, 1), (31, 1), (13, 1), (3, 1)] [(808601, 1), (166207, 1), (1021, 1), (127, 1), (19, 1), (2, 1)] b
Test-36 [(537599, 1), (45497, 1), (7793, 1), (499, 1), (13, 1), (3, 1)] [(206249, 1), (188863, 1), (11839, 1), (1559, 1), (73, 1), (11, 1), (2, 1)] b
Test-37 [(846421, 1), (2341, 1), (487, 1), (173, 1), (2, 1)] [(149333, 1), (919, 1), (313, 1), (11, 1)] a
Test-38 [(41927, 1), (66683, 1), (85669, 1), (38707, 1), (179, 1), (11, 1), (5, 1)] [(535859, 1), (48281, 1), (84919, 1), (81197, 1), (16553, 1), (5, 1), (3, 1), (2, 1)] b
Test-39 [(516053, 1), (100501, 1), (23563, 1), (7681, 1), (1433, 1), (241, 1), (61, 1), (2, 1), (3, 1)] [(318691, 1), (24917, 1), (5843, 1), (167, 1), (757, 1), (79, 1), (2, 2), (2, 1), (2, 1)] b
Test-40 [(708559, 1), (36067, 1), (227, 1), (113, 1), (5, 1), (2, 1)] [(253501, 1), (1429, 1), (83, 1), (11, 1), (3, 1)] a
Test-41 [(885793, 1), (6451, 1), (2203, 1), (61, 1), (2, 2)] [(104459, 1), (607, 1), (337, 1), (83, 1), (2, 1)] b
Test-42 [(492563, 1), (87679, 1), (383, 1), (19, 1)] [(417821, 1), (1427, 1), (89, 1), (19, 1)] b
Test-43 [(751921, 1), (138793, 1), (12143, 1), (67, 1), (29, 1)] [(76913, 1), (18397, 1), (1693, 1), (41, 1), (3, 1)] b
Test-44 [(413681, 1), (355039, 1), (4721, 1), (4759, 1), (113, 1), (5, 2), (2, 1)] [(165343, 1), (52673, 1), (3217, 1), (349, 1), (41, 1), (37, 1)] a
Test-45 [(870823, 1), (3593, 1), (233, 1), (23, 1), (2, 1)] [(123979, 1), (1277, 1), (67, 1), (3, 1)] a
Test-46 [(975427, 1), (3863, 1), (127, 1), (2, 1)] [(20411, 1), (167, 1), (3, 1)] a
Test-47 [(548761, 1), (120299, 1), (27103, 1), (10151, 1), (709, 1), (151, 1), (2, 1), (2, 1)] [(241993, 1), (28621, 1), (14303, 1), (7621, 1), (223, 1), (47, 1), (11, 1), (3, 1)] b
Test-48 [(367879, 1), (255613, 1), (5689, 1), (601, 1), (97, 1), (2, 2)] [(251737, 1), (117071, 1), (1249, 1), (17, 1), (41, 1), (2, 1)] b
Test-49 [(842203, 1), (71699, 1), (37, 1), (19, 1), (11, 1)] [(64489, 1), (21517, 1), (11, 1), (11, 1), (3, 1)] b
Test-50 [(510989, 1), (198463, 1), (9187, 1), (991, 1), (233, 1), (29, 1), (2, 1)] [(193507, 1), (75571, 1), (10909, 1), (79, 1), (37, 1), (3, 1)] a
Test-51 [(658663, 1), (49603, 1), (5981, 1), (17, 1), (3, 2), (2, 1)] [(273709, 1), (11743, 1), (263, 1), (7, 1), (3, 1)] a
Test-52 [(996187, 1), (1619, 1), (139, 1), (13, 1), (2, 1)] [(1933, 1), (67, 1), (37, 1), (3, 1)] a
Test-53 [(429791, 1), (66491, 1), (14869, 1), (1231, 1), (313, 1), (17, 1), (3, 1)] [(372299, 1), (82483, 1), (29423, 1), (1693, 1), (1151, 1), (211, 1), (23, 1), (2, 1)] b
Test-54 [(676763, 1), (92479, 1), (7829, 1), (139, 1), (3, 1)] [(151007, 1), (71387, 1), (383, 1), (2, 3), (2, 1)] b
Test-55 [(422927, 1), (136993, 1), (3119, 1), (281, 1), (11, 1), (2, 1)] [(434689, 1), (1453, 1), (383, 1), (101, 1), (41, 1)] a
Test-56 [(888689, 1), (5689, 1), (73, 1), (2, 1)] [(103919, 1), (1607, 1), (19, 1), (2, 1)] b
Test-57 [(887449, 1), (3163, 1), (13, 1), (13, 1), (2, 1)] [(108109, 1), (863, 1), (359, 1), (29, 1)] a
Test-58 [(128033, 1), (2129, 1), (67, 1), (13, 1)] [(862481, 1), (6329, 1), (907, 1), (41, 1)] a
Test-59 [(38747, 1), (20593, 1), (577, 1), (19, 1)] [(772619, 1), (156631, 1), (10733, 1), (79, 1), (2, 1)] b
Test-60 [(417173, 1), (325447, 1), (29017, 1), (11261, 1), (1021, 1), (3, 2), (3, 1)] [(72547, 1), (111301, 1), (26981, 1), (5039, 1), (199, 1), (2, 1)] a
Test-61 [(764947, 1), (15541, 1), (31, 1), (29, 1), (2, 1)] [(216577, 1), (2861, 1), (7, 1), (5, 1)] a
Test-62 [(525979, 1), (75997, 1), (5651, 1), (3823, 1), (2161, 1), (29, 1), (2, 1)] [(283463, 1), (68399, 1), (30493, 1), (3823, 1), (149, 1), (29, 1), (2, 1)] b
Test-63 [(616639, 1), (28559, 1), (8081, 1), (211, 1)] [(305971, 1), (39251, 1), (1277, 1), (11, 1)] b
Test-64 [(85829, 1), (3541, 1), (3797, 1), (443, 1), (47, 1), (2, 2), (2, 1)] [(805027, 1), (75743, 1), (24749, 1), (227, 1), (569, 1), (11, 1), (11, 1)] a
Test-65 [(402379, 1), (10687, 1), (1709, 1), (439, 1), (43, 1), (13, 1)] [(195967, 1), (376081, 1), (12301, 1), (97, 1), (229, 1), (53, 1), (2, 1)] b
Test-66 [(562871, 1), (92189, 1), (19309, 1), (599, 1), (17, 1), (19, 1)] [(270287, 1), (52837, 1), (1607, 1), (173, 1), (89, 1), (3, 1)] b
Test-67 [(219053, 1), (1151, 1), (173, 1), (11, 1), (2, 1)] [(776983, 1), (1997, 1), (461, 1), (167, 1), (2, 1)] a
Test-68 [(77141, 1), (37951, 1), (8537, 1), (619, 1), (67, 1)] [(803921, 1), (52009, 1), (15583, 1), (4007, 1), (163, 1), (2, 1)] b
Test-69 [(817561, 1), (9463, 1), (1399, 1), (353, 1)] [(166703, 1), (3923, 1), (569, 1), (29, 1)] b
Test-70 [(457711, 1), (246941, 1), (115151, 1), (17581, 1), (163, 1), (2, 1)] [(91081, 1), (60811, 1), (10169, 1), (353, 1), (37, 1)] a
Test-71 [(885187, 1), (15299, 1), (2251, 1), (107, 1), (2, 1)] [(88259, 1), (7649, 1), (1187, 1), (59, 1)] a
Test-72 [(601813, 1), (48473, 1), (23431, 1), (11003, 1), (659, 1), (23, 1), (2, 1)] [(108079, 1), (185569, 1), (20147, 1), (757, 1), (41, 1), (3, 1)] a
Test-73 [(467963, 1), (5119, 1), (1259, 1), (307, 1), (19, 1), (11, 1)] [(341863, 1), (180007, 1), (2741, 1), (263, 1), (421, 1), (5, 2), (2, 1)] b
Test-74 [(932227, 1), (44101, 1), (83, 1), (13, 1), (3, 1)] [(21169, 1), (2393, 1), (2, 1), (3, 2)] a
Test-75 [(365471, 1), (25589, 1), (1571, 1), (29, 1), (23, 1)] [(604189, 1), (2659, 1), (383, 1), (79, 1), (7, 1)] b
Test-76 [(516713, 1), (61031, 1), (13619, 1), (1489, 1), (23, 1), (11, 1), (7, 1), (2, 1)] [(383153, 1), (20533, 1), (3181, 1), (149, 1), (79, 1), (5, 1), (5, 1)] a
Test-77 [(807571, 1), (5791, 1), (2459, 1), (139, 1), (19, 1), (2, 1)] [(176063, 1), (7741, 1), (199, 1), (3, 2), (5, 1), (2, 1)] b
Test-78 [(267713, 1), (320053, 1), (9439, 1), (2203, 1), (547, 1), (2, 1)] [(336143, 1), (57503, 1), (5581, 1), (353, 1), (463, 1)] a
Test-79 [(499879, 1), (108079, 1), (5273, 1), (1483, 1), (137, 1), (43, 1), (2, 2)] [(362303, 1), (17837, 1), (4649, 1), (277, 1), (31, 1), (3, 1), (2, 1)] b
Test-80 [(111337, 1), (247183, 1), (911, 1), (359, 1), (359, 1), (23, 1), (2, 1)] [(587201, 1), (49663, 1), (2689, 1), (269, 1), (2, 1), (2, 1)] a
Test-81 [(586121, 1), (37369, 1), (1931, 1), (239, 1), (17, 1), (3, 1)] [(260581, 1), (102667, 1), (10601, 1), (349, 1), (109, 1), (11, 1), (2, 1)] b
Test-82 [(578573, 1), (82217, 1), (8237, 1), (359, 1), (7, 1), (2, 1)] [(308809, 1), (19009, 1), (2551, 1), (233, 1), (3, 1)] a
Test-83 [(521693, 1), (71233, 1), (51577, 1), (241, 1), (2, 1)] [(222113, 1), (130439, 1), (2699, 1), (3, 1)] a
Test-84 [(681689, 1), (27539, 1), (17, 1), (3, 1), (2, 1)] [(265037, 1), (25703, 1), (7, 1), (3, 1)] a
Test-85 [(65657, 1), (403649, 1), (37853, 1), (15541, 1), (3739, 1), (2, 1)] [(313151, 1), (115249, 1), (39623, 1), (3917, 1), (1619, 1)] a
Test-86 [(110311, 1), (6067, 1), (6211, 1), (103, 1), (157, 1), (3, 1)] [(780917, 1), (89101, 1), (5791, 1), (1193, 1), (79, 1), (67, 1)] a
Test-87 [(520313, 1), (65551, 1), (281, 1), (197, 1), (31, 1), (5, 1), (2, 1)] [(409333, 1), (4049, 1), (11, 2), (101, 1), (7, 1), (3, 2)] a
Test-88 [(631247, 1), (1669, 1), (229, 1), (149, 1), (2, 1), (2, 1)] [(365587, 1), (571, 1), (409, 1), (131, 1), (2, 1), (2, 1)] b
Test-89 [(792023, 1), (38039, 1), (6121, 1), (311, 1), (7, 1)] [(137443, 1), (25127, 1), (919, 1), (7, 1), (3, 1)] b
Test-90 [(86113, 1), (29303, 1), (2389, 1), (3, 1)] [(787079, 1), (87187, 1), (7687, 1), (239, 1)] a
Test-91 [(160357, 1), (66601, 1), (37321, 1), (229, 1), (733, 1), (41, 1), (2, 2)] [(723071, 1), (6569, 1), (4099, 1), (787, 1), (157, 1), (29, 1), (2, 1)] b
Test-92 [(872161, 1), (40177, 1), (5741, 1), (79, 1), (83, 1), (31, 1), (2, 1)] [(42943, 1), (37489, 1), (1069, 1), (181, 1), (37, 1), (7, 1)] a
Test-93 [(882239, 1), (21599, 1), (41, 1), (2, 4), (2, 1)] [(95923, 1), (157, 1), (2, 4), (7, 1)] a
Test-94 [(141131, 1), (112241, 1), (1229, 1), (557, 1), (79, 1), (2, 1)] [(731257, 1), (13093, 1), (181, 1), (127, 1), (103, 1)] a
Test-95 [(828361, 1), (131639, 1), (3697, 1), (449, 1), (43, 1), (13, 1), (2, 1)] [(26729, 1), (6481, 1), (2269, 1), (241, 1), (71, 1), (5, 1)] a
Test-96 [(659453, 1), (114679, 1), (7103, 1), (6733, 1)] [(189421, 1), (11821, 1), (10753, 1), (37, 1)] b
Test-97 [(994051, 1), (971, 1), (71, 1), (17, 1), (2, 1)] [(2699, 1), (2153, 1), (19, 1), (17, 1)] a
Test-98 [(156677, 1), (467, 1), (1031, 1), (3, 1)] [(802031, 1), (38501, 1), (1223, 1), (67, 1)] a
Test-99 [(290141, 1), (31769, 1), (2287, 1), (23, 1), (2, 1)] [(654209, 1), (20921, 1), (641, 1), (7, 1)] a
2 Beğeni

Hep asalların 1 üzeri mi kullanılmış? bana sanki öyle geldi. yani n’ler hep bir oysaki uygun bir n değeri farklı yöne götürebilir mi?

İkinci konu:

1 milyona kadar gitmeyelim.

  1. En büyük ikinci asal sayıyı söylerse yerde 21 çöp kalıyor.

Sıra b ye geçiyor. Kalan oyunun ihtimallerini analiz etmek daha kolay sanki.

Elinize sağlık.

n’lerin alacağı değerler asal sayıların büyüklüklerine bağlı.

def get_values(remained: int, limit: int):
    p = get_prime(limit)
    n = random.randint(1, remained // p + 1)
    while p ** n >= remained:
        p = get_prime(limit)
        if p == remained:
            return p, 1
        n = random.randint(1, remained // p + 1)
    return p, n

Evet, çünkü p = get_prime(remained) ifadesi, p değerlerinin, remained / 2 etrafında dolaşmasına neden olur. Yani aşağıdaki kodu çalıştırdığımızda, sonuçlar çoğu kez random.randint’e verilen min ile max değerlerinin ortasındaki değere yaklaşmaya çalışır. (Ortalama etrafında dönen değerler, gerçekleşme ihtimali en yüksek değerlerdir.)

Aşağıdaki kod ile bahsettiğim bu durumu görebiliriz.

import random
for i in range(10):
    print(random.randint(1, pow(10, i)), pow(10, i) / 2)

Çıktı:

1 0.5
4 5.0
92 50.0
371 500.0
5961 5000.0
38652 50000.0
830998 500000.0
9316091 5000000.0
78901367 50000000.0
202069021 500000000.0

O halde, get_prime’ın değerlerini mümkün olduğunca küçük tutmak lazım.

run_tests(test_number=100, countdown_number=10000, output="test.xlsx", limit=100)
a b winner
Test-0 [(53, 2), (43, 2), (47, 1), (43, 2), (53, 1), (2, 2), (67, 1), (2, 5), (23, 1), (11, 1)] [(53, 2), (17, 1), (89, 1), (73, 1), (71, 1), (31, 1), (79, 1), (17, 1), (41, 1), (29, 1)] b
Test-1 [(37, 1), (59, 2), (71, 1), (47, 1), (7, 2), (43, 1), (97, 1), (29, 1), (67, 1), (31, 2), (29, 1), (13, 1)] [(71, 1), (53, 2), (83, 1), (29, 2), (19, 2), (89, 1), (59, 1), (71, 1), (71, 1), (61, 1), (31, 1), (23, 2)] a
Test-2 [(89, 1), (31, 1), (89, 1), (79, 1), (5, 1), (83, 1), (37, 1), (59, 1), (97, 1), (67, 1), (3, 1), (2, 1)] [(53, 2), (43, 2), (29, 2), (59, 2), (79, 1), (59, 1), (97, 1), (11, 2), (13, 1), (2, 3), (2, 1)] a
Test-3 [(83, 1), (67, 1), (71, 1), (79, 1), (79, 2), (5, 3), (5, 1), (29, 1), (89, 1), (37, 1), (29, 1), (2, 1)] [(61, 1), (47, 2), (61, 1), (79, 1), (71, 1), (19, 1), (89, 1), (89, 1), (59, 1), (19, 2), (43, 1), (2, 1)] b
Test-4 [(47, 2), (31, 2), (53, 1), (61, 1), (71, 1), (29, 2), (61, 1), (5, 1), (7, 1)] [(17, 3), (23, 2), (59, 1), (97, 1), (61, 1), (61, 1), (7, 1), (2, 1), (2, 1)] b
Test-5 [(89, 2), (37, 1), (89, 1), (41, 1), (89, 1), (53, 1), (19, 2), (41, 1), (19, 1), (73, 1), (41, 1), (71, 1), (13, 1)] [(3, 5), (53, 1), (17, 2), (47, 1), (29, 1), (83, 1), (37, 1), (71, 1), (61, 1), (83, 1), (47, 1), (67, 1), (41, 1)] b
Test-6 [(59, 1), (41, 2), (67, 2), (97, 1), (59, 1), (31, 1), (53, 2), (19, 1), (29, 1), (37, 1), (29, 1), (2, 1), (2, 1)] [(97, 1), (37, 1), (61, 1), (19, 1), (83, 1), (61, 1), (73, 1), (61, 1), (83, 1), (59, 1), (7, 1), (3, 2), (7, 1)] b
Test-7 [(47, 2), (89, 1), (43, 1), (23, 1), (73, 1), (41, 1), (79, 1), (67, 1), (71, 1), (31, 1), (89, 1), (71, 1), (73, 1), (79, 1), (67, 1), (37, 1)] [(17, 2), (11, 3), (67, 2), (41, 1), (13, 2), (73, 1), (11, 1), (67, 1), (79, 1), (31, 1), (29, 1), (47, 1), (89, 1), (37, 1), (67, 1), (7, 1), (2, 1)] b
Test-8 [(67, 1), (61, 1), (31, 1), (97, 1), (67, 1), (59, 1), (61, 1), (3, 6), (89, 1), (31, 1), (89, 1), (17, 1), (41, 1), (5, 1)] [(11, 3), (73, 2), (79, 1), (37, 1), (11, 3), (59, 1), (29, 1), (37, 1), (17, 1), (71, 1), (97, 1), (47, 1), (89, 1), (3, 1)] b
Test-9 [(79, 2), (29, 1), (79, 1), (31, 2), (73, 1), (67, 1), (2, 1)] [(83, 1), (79, 1), (43, 1), (31, 2), (37, 2), (13, 1)] a
Test-10 [(71, 2), (89, 1), (83, 1), (31, 1), (11, 1), (71, 1), (61, 1), (3, 1)] [(29, 2), (89, 1), (53, 1), (59, 2), (73, 1), (71, 1), (2, 1)] a
Test-11 [(73, 1), (71, 1), (5, 5), (43, 1), (61, 1), (59, 1), (83, 1), (2, 10), (23, 1), (2, 1)] [(59, 2), (83, 1), (37, 1), (97, 1), (37, 2), (53, 1), (2, 8), (53, 1), (7, 1)] a
Test-12 [(7, 3), (59, 1), (43, 1), (2, 7), (29, 2), (97, 1), (97, 1), (53, 1), (13, 2), (29, 1), (2, 3), (17, 1), (3, 1)] [(19, 2), (67, 2), (29, 2), (29, 2), (29, 1), (19, 1), (53, 1), (13, 1), (73, 1), (11, 3), (61, 1), (2, 1)] a
Test-13 [(13, 1), (43, 1), (97, 2), (11, 1)] [(19, 2), (29, 1), (79, 1), (53, 1), (2, 1)] b
Test-14 [(89, 1), (37, 2), (73, 1), (19, 1), (79, 1), (31, 2), (59, 1), (43, 2), (97, 1), (29, 1), (7, 1), (79, 1), (97, 1), (17, 2), (13, 2), (83, 1), (19, 1), (11, 1)] [(67, 1), (47, 1), (59, 2), (17, 1), (19, 1), (89, 1), (97, 1), (97, 1), (83, 1), (53, 1), (17, 2), (83, 1), (5, 2), (37, 1), (29, 1), (53, 1), (53, 1), (3, 1)] b
Test-15 [(83, 2), (73, 1), (53, 1), (61, 1), (7, 1), (2, 1)] [(53, 2), (61, 1), (29, 1), (3, 1), (13, 1)] a
Test-16 [(17, 3), (29, 1), (89, 1), (53, 1), (67, 1), (31, 1), (29, 1), (97, 1), (5, 1), (29, 1), (29, 1), (3, 1), (3, 1)] [(61, 2), (31, 1), (67, 1), (41, 1), (41, 1), (61, 1), (23, 2), (47, 1), (47, 1), (29, 1), (5, 1), (2, 2)] a
Test-17 [(83, 2), (41, 1), (97, 1), (89, 1), (31, 2), (71, 1), (37, 2), (3, 3), (2, 1)] [(83, 1), (17, 1), (73, 1), (73, 1), (83, 1), (47, 1), (71, 1), (7, 1)] a
Test-18 [(67, 1), (29, 2), (37, 1), (89, 1), (19, 2), (61, 1), (67, 1), (31, 1), (71, 1), (73, 1), (71, 1), (31, 1), (29, 1), (5, 4), (71, 1), (5, 1), (3, 2), (2, 1)] [(79, 2), (67, 1), (59, 1), (73, 1), (73, 1), (97, 1), (17, 2), (13, 1), (7, 2), (7, 1), (19, 1), (79, 1), (11, 2), (67, 1), (29, 1), (61, 1), (97, 1), (11, 1), (7, 1)] b
Test-19 [(79, 1), (47, 1), (89, 2), (5, 1), (2, 2), (2, 1)] [(41, 1), (43, 2), (31, 1), (17, 1), (2, 2)] a
Test-20 [(7, 4), (67, 1), (79, 1), (41, 2), (47, 1), (29, 1), (61, 1), (11, 1), (61, 1), (29, 1), (13, 1)] [(31, 2), (7, 2), (59, 2), (17, 2), (5, 1), (2, 4), (19, 1), (73, 1), (23, 2), (97, 1), (2, 1)] b
Test-21 [(3, 8), (31, 2), (83, 1), (29, 1), (89, 1), (19, 1), (67, 1), (67, 1), (11, 1)] [(41, 2), (19, 1), (19, 1), (61, 1), (11, 2), (71, 1), (89, 1), (47, 1), (5, 1)] b
Test-22 [(43, 1), (61, 1), (71, 2), (37, 1), (43, 1), (83, 1), (89, 1), (11, 1)] [(61, 2), (13, 2), (2, 4), (2, 9), (61, 1), (67, 1), (43, 1), (3, 1)] b
Test-23 [(53, 1), (73, 2), (59, 2), (67, 1), (97, 1), (73, 1), (53, 1), (43, 1), (71, 1), (2, 3), (41, 1), (23, 1)] [(47, 1), (97, 1), (19, 1), (43, 1), (83, 1), (83, 1), (89, 1), (89, 1), (73, 1), (31, 1), (2, 1), (5, 1)] b
Test-24 [(29, 2), (71, 2), (23, 2), (97, 1), (71, 1), (47, 1), (73, 1), (89, 1), (37, 1), (43, 1), (53, 1), (97, 1), (43, 1), (31, 1), (5, 1)] [(67, 1), (67, 1), (47, 2), (73, 1), (23, 1), (23, 1), (67, 1), (67, 1), (29, 1), (11, 1), (83, 1), (97, 1), (83, 1), (2, 2)] a
Test-25 [(79, 2), (5, 3), (11, 2), (83, 1), (23, 1), (53, 1), (73, 1), (11, 3), (97, 1), (97, 1), (83, 1), (71, 1), (83, 1), (29, 1), (43, 1), (7, 1)] [(61, 1), (43, 1), (61, 1), (5, 3), (97, 1), (79, 1), (2, 1), (31, 1), (43, 1), (5, 4), (53, 1), (61, 1), (59, 1), (83, 1), (17, 1)] a
Test-26 [(53, 1), (83, 1), (23, 1), (47, 1), (83, 1), (31, 1), (2, 1)] [(97, 2), (73, 1), (59, 1), (71, 1), (59, 1), (7, 1)] a
Test-27 [(73, 1), (41, 1), (41, 1), (89, 1), (31, 1), (83, 1), (2, 1)] [(97, 2), (71, 1), (19, 1), (79, 1), (11, 1), (11, 1), (37, 1), (3, 1)] b
Test-28 [(89, 2), (67, 1), (83, 1), (79, 1), (61, 1), (79, 1), (71, 1), (89, 1), (29, 1), (41, 1), (5, 1)] [(83, 1), (23, 2), (59, 1), (23, 2), (2, 5), (53, 1), (41, 1), (53, 1), (89, 1), (7, 1)] a
Test-29 [(73, 1), (97, 1), (61, 1), (89, 1), (41, 1), (2, 1)] [(97, 2), (89, 1), (67, 1), (67, 1), (3, 1), (2, 1)] b
Test-30 [(97, 1), (89, 2), (97, 1), (67, 1), (5, 1), (79, 1), (71, 1), (23, 1), (7, 1)] [(37, 1), (19, 1), (37, 2), (73, 1), (31, 1), (47, 1), (47, 1), (7, 1), (3, 1)] b
Test-31 [(11, 2), (73, 1), (31, 2), (73, 1), (89, 1), (83, 1), (2, 5), (3, 1)] [(83, 2), (97, 1), (23, 2), (23, 1), (31, 2), (53, 1), (13, 1)] a
Test-32 [(73, 2), (67, 1), (37, 2), (71, 1), (29, 2), (5, 2), (19, 1), (67, 1), (53, 1), (3, 1)] [(29, 2), (79, 1), (29, 2), (79, 1), (59, 1), (97, 1), (61, 1), (79, 1), (17, 1), (3, 1)] a
Test-33 [(71, 1), (53, 2), (13, 3), (83, 1), (89, 1), (2, 1), (7, 1), (2, 1)] [(67, 2), (29, 1), (97, 1), (79, 1), (41, 1), (3, 1), (2, 1)] a
Test-34 [(83, 1), (83, 1), (89, 1), (37, 1), (41, 1), (7, 2), (97, 1), (23, 1), (2, 2), (5, 1), (2, 1)] [(83, 2), (89, 1), (41, 2), (5, 4), (53, 1), (7, 2), (73, 1), (23, 1), (2, 1), (3, 1)] a
Test-35 [(83, 1), (59, 1), (43, 2), (83, 1), (31, 1), (71, 1), (23, 1), (2, 1)] [(29, 2), (79, 2), (73, 1), (23, 2), (73, 1), (29, 1), (13, 1)] a
Test-36 [(61, 2), (73, 1), (71, 2), (53, 1), (53, 1), (37, 1), (13, 2), (83, 1), (31, 1), (67, 1), (67, 1), (17, 1)] [(61, 1), (19, 1), (97, 1), (23, 1), (43, 1), (71, 1), (89, 1), (11, 1), (7, 1), (79, 1), (71, 1), (17, 1)] b
Test-37 [(89, 1), (59, 2), (67, 1), (2, 3), (3, 1)] [(61, 1), (79, 2), (13, 1), (37, 1)] a
Test-38 [(43, 2), (53, 1), (61, 1), (31, 1), (23, 2), (71, 1), (31, 1), (53, 1)] [(83, 2), (41, 1), (71, 1), (79, 1), (67, 1), (97, 1), (71, 1), (7, 1)] b
Test-39 [(29, 1), (89, 1), (97, 1), (73, 1), (41, 1), (47, 1), (23, 1), (31, 1), (41, 1), (97, 1), (41, 1), (41, 1), (73, 1), (89, 1), (2, 5), (2, 1)] [(89, 2), (89, 1), (11, 1), (11, 2), (31, 1), (59, 1), (59, 1), (53, 1), (23, 1), (83, 1), (59, 1), (61, 1), (53, 1), (23, 2), (2, 1)] a
Test-40 [(67, 1), (97, 2), (13, 2), (47, 1), (37, 1)] [(73, 1), (61, 1), (59, 1), (71, 1), (7, 1)] b
Test-41 [(41, 2), (41, 1), (37, 1), (3, 1)] [(89, 2), (17, 2), (23, 1), (3, 1), (2, 1)] b
Test-42 [(73, 1), (59, 2), (59, 2), (71, 1), (41, 2), (3, 1)] [(89, 1), (97, 1), (79, 1), (59, 1), (29, 2), (43, 1), (2, 1)] b
Test-43 [(83, 1), (97, 2), (43, 1), (13, 2), (2, 3), (5, 1), (2, 1)] [(79, 1), (71, 1), (37, 1), (71, 1), (19, 1), (2, 2)] a
Test-44 [(41, 1), (83, 2), (17, 2), (71, 1), (5, 1), (83, 1), (47, 1), (2, 1)] [(13, 3), (73, 1), (79, 1), (53, 1), (67, 1), (97, 1), (5, 1), (2, 1)] b
Test-45 [(71, 2), (11, 2), (31, 2), (83, 1), (47, 1), (29, 2), (2, 1), (2, 1)] [(47, 2), (59, 1), (5, 2), (23, 2), (67, 1), (11, 1), (2, 1)] a
Test-46 [(53, 1), (47, 1), (61, 2), (53, 1), (83, 1), (41, 1), (83, 1), (19, 1), (37, 1), (23, 1), (2, 1)] [(61, 1), (11, 3), (53, 2), (5, 1), (47, 1), (59, 1), (37, 2), (79, 1), (61, 1), (17, 1)] a
Test-47 [(89, 1), (59, 2), (37, 1), (97, 1), (31, 1), (47, 1), (71, 1), (19, 1), (41, 1), (43, 1), (61, 1), (67, 1), (13, 1)] [(61, 2), (79, 1), (67, 1), (41, 2), (19, 1), (31, 1), (61, 1), (23, 1), (59, 1), (83, 1), (29, 1), (47, 1), (3, 1)] b
Test-48 [(61, 1), (73, 1), (89, 1), (23, 1), (73, 1), (23, 2), (43, 1), (17, 1), (47, 1), (23, 1), (2, 1), (3, 1)] [(43, 2), (11, 1), (61, 2), (89, 1), (97, 1), (47, 2), (31, 2), (53, 1), (17, 1), (7, 1), (3, 1)] a
Test-49 [(73, 1), (11, 1), (71, 1), (73, 1), (19, 1), (3, 2), (2, 1)] [(97, 2), (17, 2), (31, 1), (3, 1), (5, 1), (5, 1)] a
Test-50 [(97, 2), (61, 1), (89, 1), (29, 1), (83, 1), (41, 1), (3, 1), (5, 1), (2, 1)] [(31, 1), (53, 1), (89, 1), (43, 1), (17, 1), (31, 1), (11, 1), (3, 1)] a
Test-51 [(17, 1), (5, 2), (29, 1), (61, 2), (53, 2), (47, 1), (67, 1)] [(19, 1), (11, 3), (41, 2), (97, 1), (71, 1), (79, 1), (7, 1)] b
Test-52 [(89, 2), (61, 1), (19, 2), (97, 1), (43, 1), (71, 1)] [(29, 2), (83, 1), (19, 2), (41, 1), (23, 1), (97, 1)] b
Test-53 [(97, 1), (83, 2), (73, 1), (89, 1), (43, 2), (79, 1), (23, 1), (5, 1), (43, 1), (19, 1), (97, 1), (29, 1)] [(71, 1), (73, 1), (29, 1), (89, 1), (71, 1), (79, 1), (41, 1), (67, 1), (47, 1), (41, 1), (97, 1), (3, 1)] b
Test-54 [(23, 1), (71, 1), (61, 1), (19, 1), (43, 2), (61, 1), (41, 1), (83, 1), (43, 1), (53, 1), (17, 1), (37, 1), (43, 1), (29, 1), (53, 1), (97, 1), (83, 1), (5, 2), (11, 1), (17, 1)] [(97, 1), (79, 2), (67, 1), (89, 1), (41, 1), (89, 1), (31, 1), (61, 1), (11, 1), (43, 1), (83, 1), (23, 1), (71, 1), (7, 2), (79, 1), (19, 1), (83, 1), (97, 1), (7, 1), (3, 1)] b
Test-55 [(7, 1), (3, 3), (67, 1), (3, 2), (53, 2), (2, 1)] [(83, 2), (29, 1), (73, 1), (71, 1), (17, 1)] a
Test-56 [(47, 1), (5, 4), (67, 1), (67, 2), (89, 1), (73, 1), (37, 1), (11, 1), (71, 1), (5, 1), (83, 1), (53, 1), (31, 1), (29, 1), (2, 2)] [(61, 2), (89, 1), (11, 1), (59, 1), (43, 1), (31, 1), (37, 1), (43, 1), (83, 1), (37, 1), (17, 1), (61, 1), (47, 1), (2, 2), (3, 1)] b
Test-57 [(31, 2), (71, 1), (61, 1), (31, 1), (43, 1), (29, 1), (83, 1), (61, 1), (47, 1), (73, 1), (37, 1)] [(71, 2), (43, 2), (89, 1), (73, 1), (73, 1), (2, 10), (71, 1), (53, 1), (83, 1), (89, 1), (47, 1), (11, 1)] b
Test-58 [(43, 1), (97, 1), (67, 1), (41, 2), (71, 1), (53, 1), (59, 1), (79, 1), (67, 1), (97, 1), (37, 1)] [(37, 2), (97, 1), (59, 2), (41, 1), (47, 2), (61, 1), (89, 1), (97, 1), (97, 1), (67, 1), (41, 1)] b
Test-59 [(31, 2), (37, 2), (83, 1), (47, 1), (41, 1), (59, 1), (67, 1), (41, 1), (59, 2), (23, 2), (19, 1), (5, 1)] [(59, 1), (53, 2), (17, 1), (67, 1), (5, 1), (71, 1), (61, 1), (17, 1), (97, 1), (83, 1), (7, 1), (5, 1)] b
Test-60 [(29, 1), (83, 1), (23, 2), (97, 1), (89, 1), (61, 1), (23, 1), (13, 1), (3, 1)] [(47, 1), (59, 2), (37, 1), (73, 2), (79, 1), (29, 1), (53, 1), (13, 1), (3, 1), (2, 1)] b
Test-61 [(43, 2), (37, 2), (67, 2), (2, 2), (97, 1), (97, 1), (59, 1), (79, 1), (13, 1), (31, 1), (71, 1), (73, 1), (53, 1), (7, 1)] [(29, 2), (23, 1), (7, 1), (61, 1), (47, 1), (31, 1), (29, 1), (23, 2), (47, 1), (5, 1), (29, 1), (29, 1), (31, 1)] a
Test-62 [(79, 2), (23, 1), (67, 1), (29, 2), (29, 1), (67, 1), (2, 3)] [(41, 2), (29, 2), (19, 1), (67, 1), (73, 1), (41, 1), (2, 1)] b
Test-63 [(59, 2), (67, 1), (83, 1), (3, 4), (97, 1), (61, 2), (47, 1), (5, 3), (19, 1), (3, 1)] [(23, 1), (5, 1), (43, 2), (89, 1), (89, 1), (41, 1), (89, 1), (67, 1), (5, 1), (19, 1)] b
Test-64 [(37, 1), (67, 1), (89, 1), (67, 1), (83, 1), (2, 1)] [(97, 2), (61, 1), (71, 1), (89, 1), (5, 2)] a
Test-65 [(97, 1), (29, 2), (5, 4), (13, 1), (47, 2), (83, 1), (13, 2), (41, 1), (2, 1)] [(71, 2), (17, 2), (19, 1), (11, 2), (71, 1), (17, 2), (3, 4), (3, 2)] a
Test-66 [(97, 1), (37, 1), (71, 1), (31, 1), (83, 1), (3, 2)] [(97, 2), (97, 1), (47, 1), (53, 1), (53, 1), (11, 1), (2, 1)] b
Test-67 [(67, 2), (89, 1), (43, 2), (79, 1), (71, 1), (79, 1), (29, 1), (17, 1), (73, 1), (97, 1), (13, 1)] [(59, 1), (71, 1), (43, 2), (29, 2), (37, 1), (89, 1), (47, 1), (19, 1), (73, 1), (19, 1), (11, 1)] b
Test-68 [(61, 1), (11, 2), (61, 2), (71, 1), (43, 2), (71, 1), (97, 1), (5, 1)] [(37, 2), (67, 1), (23, 2), (97, 1), (43, 2), (61, 1), (29, 1), (3, 1)] b
Test-69 [(89, 2), (31, 1), (73, 1), (23, 1), (79, 1), (2, 1)] [(97, 1), (41, 2), (47, 1), (43, 1), (3, 1)] a
Test-70 [(71, 2), (59, 1), (13, 3), (5, 3), (2, 2), (41, 1), (43, 2), (71, 1), (7, 1)] [(89, 1), (89, 1), (97, 1), (53, 1), (2, 6), (61, 1), (71, 1), (79, 1), (3, 1)] b
Test-71 [(53, 1), (37, 1), (67, 2), (3, 6), (53, 1), (3, 1), (97, 1), (23, 1), (31, 2), (61, 1), (2, 9), (97, 1), (89, 1), (61, 1), (89, 1), (41, 1), (23, 1), (7, 1)] [(7, 1), (89, 1), (41, 2), (89, 1), (97, 1), (47, 1), (83, 1), (17, 1), (83, 1), (37, 1), (97, 1), (71, 1), (83, 1), (37, 1), (31, 1), (11, 1), (13, 1), (2, 1)] b
Test-72 [(41, 2), (47, 1), (97, 1), (29, 1), (53, 1), (79, 1), (97, 1), (97, 1), (13, 1), (41, 1), (67, 1), (97, 1), (7, 2), (23, 1), (19, 1), (3, 1)] [(23, 2), (43, 2), (7, 1), (71, 1), (67, 2), (31, 1), (19, 1), (43, 1), (61, 1), (79, 1), (79, 1), (79, 1), (61, 1), (61, 1), (43, 1), (7, 1)] a
Test-73 [(61, 1), (73, 1), (89, 1), (17, 1), (89, 1), (59, 1), (17, 1), (53, 1), (79, 1), (5, 3), (73, 1), (83, 1), (97, 1), (11, 1), (5, 1), (2, 1)] [(83, 2), (37, 2), (97, 1), (73, 1), (73, 1), (53, 1), (79, 1), (97, 1), (37, 1), (83, 1), (53, 1), (73, 1), (83, 1), (5, 1), (3, 1)] a
Test-74 [(43, 1), (97, 1), (71, 1), (61, 1), (59, 1), (67, 1), (67, 1), (2, 6), (31, 1), (23, 2), (79, 1), (89, 1), (47, 1), (3, 1)] [(89, 2), (17, 2), (37, 1), (41, 1), (41, 1), (59, 1), (59, 1), (17, 1), (43, 1), (13, 1), (83, 1), (67, 1), (23, 1)] a
Test-75 [(73, 2), (2, 10), (23, 2), (29, 1), (5, 3), (67, 1), (79, 1), (61, 1), (71, 1), (13, 1)] [(89, 1), (47, 2), (47, 1), (71, 1), (29, 1), (83, 1), (73, 1), (53, 1), (19, 1)] a
Test-76 [(53, 2), (83, 1), (2, 2), (97, 1), (11, 2), (97, 1), (83, 1), (43, 1), (19, 1)] [(13, 1), (79, 2), (97, 1), (61, 1), (97, 1), (2, 4), (83, 1), (31, 1), (5, 1)] b
Test-77 [(53, 2), (89, 1), (47, 1), (13, 2), (23, 1), (79, 1), (3, 1)] [(47, 2), (5, 4), (13, 2), (31, 2), (53, 2), (5, 1), (3, 1)] b
Test-78 [(83, 1), (79, 2), (17, 1), (17, 1), (23, 2), (47, 1), (29, 2), (37, 1), (13, 1)] [(97, 1), (97, 1), (97, 1), (17, 1), (37, 2), (19, 2), (79, 1), (47, 1), (11, 1)] b
Test-79 [(73, 2), (89, 1), (73, 1), (53, 2), (73, 1), (29, 2), (23, 1), (73, 1), (2, 2), (2, 1)] [(89, 1), (79, 1), (67, 1), (43, 1), (79, 1), (79, 1), (59, 1), (61, 1), (11, 2), (7, 1)] a
Test-80 [(97, 1), (47, 1), (37, 2), (83, 1), (29, 1), (37, 1)] [(79, 1), (53, 2), (73, 2), (79, 1), (5, 1), (37, 1)] b
Test-81 [(3, 4), (97, 1), (19, 1), (73, 1), (79, 1), (31, 1), (41, 1), (47, 1), (31, 1), (43, 1), (97, 1), (41, 1), (89, 1), (3, 2), (37, 1), (89, 1), (97, 1), (3, 1)] [(79, 2), (7, 3), (83, 1), (53, 1), (43, 1), (97, 1), (89, 1), (59, 1), (73, 1), (83, 1), (59, 1), (97, 1), (13, 1), (31, 2), (23, 2), (97, 1), (71, 1), (5, 1)] b
Test-82 [(61, 1), (11, 2), (53, 2), (41, 1), (83, 1), (79, 1), (37, 1), (61, 1), (13, 1), (2, 1)] [(79, 2), (61, 1), (89, 1), (97, 1), (47, 1), (71, 1), (67, 1), (13, 1), (7, 1)] a
Test-83 [(59, 2), (73, 1), (89, 1), (79, 1), (13, 2), (79, 1), (37, 1), (89, 1), (23, 2), (29, 2), (43, 1), (71, 1), (89, 1), (13, 1)] [(61, 1), (89, 1), (53, 2), (29, 2), (67, 1), (17, 1), (43, 1), (71, 1), (71, 1), (53, 1), (79, 1), (97, 1), (17, 1), (3, 1)] b
Test-84 [(53, 2), (83, 2), (41, 1), (11, 1), (13, 1), (3, 1)] [(73, 1), (41, 1), (97, 1), (13, 1), (7, 1), (3, 1)] b
Test-85 [(5, 4), (89, 1), (19, 1), (79, 1), (7, 1), (79, 1), (89, 1), (73, 1), (59, 1), (67, 1), (79, 1), (29, 1), (43, 1), (23, 1), (83, 1), (97, 1), (89, 1), (43, 1), (41, 1), (7, 1)] [(79, 2), (29, 2), (71, 1), (2, 7), (67, 1), (79, 1), (89, 1), (83, 1), (83, 1), (97, 1), (53, 1), (73, 1), (37, 1), (59, 1), (47, 1), (89, 1), (43, 1), (71, 1), (29, 1)] a
Test-86 [(13, 2), (31, 1), (41, 1), (79, 2), (97, 1), (71, 1), (3, 2)] [(59, 1), (53, 2), (3, 3), (17, 2), (47, 1), (79, 1), (29, 1), (2, 1)] b
Test-87 [(17, 1), (23, 1), (71, 1), (7, 3), (19, 1), (37, 2), (37, 1), (73, 1), (11, 1), (19, 1), (3, 1), (2, 1)] [(5, 1), (67, 1), (43, 2), (23, 2), (73, 2), (97, 1), (41, 1), (71, 1), (13, 1), (5, 1), (5, 1), (2, 1)] b
Test-88 [(67, 2), (67, 2), (43, 1), (43, 1), (7, 1), (17, 1), (7, 1)] [(79, 1), (5, 4), (53, 1), (41, 1), (71, 1), (31, 1), (5, 1)] a
Test-89 [(83, 2), (19, 1), (67, 1), (67, 1), (73, 1), (83, 1), (41, 1), (43, 1), (71, 1), (29, 1), (17, 2), (41, 1), (7, 1)] [(41, 2), (31, 1), (61, 1), (41, 1), (47, 1), (47, 1), (2, 7), (71, 1), (37, 1), (83, 1), (37, 1), (17, 1)] a
Test-90 [(71, 2), (67, 1), (43, 1), (79, 1), (89, 1), (5, 1), (5, 1)] [(67, 2), (71, 1), (73, 1), (29, 1), (3, 1), (2, 2), (2, 1)] b
Test-91 [(61, 1), (97, 1), (29, 1), (79, 1), (19, 1), (17, 1), (47, 1), (37, 1), (11, 2), (53, 1), (37, 1), (11, 1)] [(73, 1), (59, 2), (71, 2), (43, 1), (83, 1), (53, 1), (47, 1), (83, 1), (59, 1), (67, 1), (7, 3), (19, 1)] a
Test-92 [(61, 1), (71, 2), (31, 1), (61, 1), (89, 1), (71, 1), (89, 1), (97, 1), (43, 1), (47, 1), (83, 1), (83, 1), (67, 1), (79, 1), (7, 1), (2, 1)] [(23, 2), (47, 2), (31, 1), (47, 1), (97, 1), (3, 4), (23, 1), (89, 1), (59, 1), (23, 2), (61, 1), (13, 2), (89, 1), (29, 1), (7, 1)] a
Test-93 [(73, 2), (83, 1), (59, 2), (97, 1), (13, 1)] [(29, 1), (79, 1), (29, 2), (41, 1), (7, 1)] b
Test-94 [(73, 2), (79, 1), (13, 1), (5, 1)] [(79, 1), (67, 2), (2, 2), (2, 1)] b
Test-95 [(3, 2), (89, 2), (31, 1), (67, 1), (23, 1), (61, 1), (97, 1), (83, 1), (13, 1), (11, 1)] [(31, 2), (97, 1), (67, 1), (53, 1), (41, 1), (83, 1), (71, 1), (17, 2), (11, 1), (11, 1)] b
Test-96 [(71, 2), (73, 1), (97, 1), (79, 1), (71, 1), (67, 1), (71, 1), (17, 1)] [(47, 2), (11, 3), (83, 1), (47, 1), (67, 1), (3, 6), (5, 1), (13, 1)] b
Test-97 [(71, 2), (19, 1), (13, 1), (2, 1)] [(17, 3), (5, 1), (7, 1)] a
Test-98 [(47, 2), (83, 1), (67, 2), (29, 1), (71, 1), (13, 2), (43, 1), (97, 1), (79, 1), (79, 1)] [(43, 2), (47, 1), (67, 1), (67, 1), (89, 1), (67, 1), (59, 1), (71, 1), (17, 2), (47, 1)] b
Test-99 [(83, 2), (17, 1), (7, 2), (83, 1), (23, 1), (97, 1), (5, 3), (71, 1), (17, 1), (53, 1), (13, 1), (2, 1)] [(3, 2), (19, 2), (3, 4), (83, 1), (71, 1), (97, 1), (13, 1), (41, 2), (83, 1), (71, 1), (11, 1)] a

Veritabanı yerine doğrudan listeyi import etmek daha hızlı ve kullanışlı geleceğini düşündüğüm için asalusliste.py diye bir dosya oluşturdum. İçinde asallar ve üsleri olmak üzere iki boyutlu bir liste var. Sayı küçüldükçe belki listeyi de temizlemek gerekir, sıralamayı pek iyi yaptığım söylenemez bu konuda.

Listeye ulaşmak için tıklayınız.

Edit: Hatta listeyi üç sütunlu hale getirip değerlerini de ekledim, hazır hesaplamışken tekrar tekrar hesaplamasın program.

1 Beğeni

Eksikliklerle birlikte şu hale indi. numpy konusunda biraz eksiğim var, daha etkin kullanılabilir.

import asalusliste
import numpy as np

kalancop = 1000000
asal_us_deger = np.array(asalusliste.asal_us)

def asal(n):
  for i in range(2,int(n**0.5)+1):
    if (n%i) == 0:
      return False
  return True

def tablo_kucult():
   # kalan çöplerin üstündeki değerleri numpy diziden sil
   pass

def kalan_kontrol():
   # kalan çöpler listede var mı diye kontrol
   # varsa return değeri alma
   pass
      

def kullanici_kontrol(p,n):
    #  işlem yapmak yerine numpy dizisinde var mı yok mu kontrol?
    if asal(p) and n>=0 and p**n<=kalancop:
        return True
    else:
        return False
    
def sistem_sayi(copler):
    # kalan asal tablosundan kontrollü bir seçim yapacak
    rast = np.random.choice(asal_us_deger)
    # rast söylenirse eğer kalan kontrol yapacak? (bir sonraki hamle)
    return rast[0],rast[1],rast[2]

print("""Bir masa üzerine 1.000.000 (bir milyon) kibrit çöpü bırakılmıştır. 
      İki kişi bu kibrit çöpleri ile aşağıdaki kurala göre oyun oynuyorlar. 
      Sırası gelen oyuncu bir asal sayı p ve negatif olmayan bir n sayısı seçip masa üzerinden p^n tane kibrit çöpünü alabiliyor. 
      (örneğin 8, 1, 25, 5 ,49, 125 vs) 
      En son kibrit çöpünü alan oyuncu oyunu kazanıyor.""")

while kalancop>0:
    p,n = map(int,input("Bir asal ve bir üs giriniz aralarında boşlukla.").split())
    if kullanici_kontrol(p,n):
        kalancop -= p**n
        print(f"Girdiğiniz sayılar {p} ^ {n} ve kalan çöp sayısı {kalancop}")
    else:
        print("Geçersiz, lütfen yeniden girin")
        continue
    
    sp,sn,sd= sistem_sayi()
    kalancop -= sd
    print(f"Söylediğim sayılar {sp} ^ {sn} ve kalan çöp sayısı {kalancop}")

Öğrenmek istediklerim

Örneğin [[2,2,4],[2,3,8],[3,2,9]] gibi bir listeden son elemanları 5 den büyük olanları listeden nasıl silerim.

Bir iç listede bulunan değerin liste indexini nasıl öğrenirim. Yani örnekteki 8 i aratıp liste den 1 indexini almak gibi.

1 Beğeni

Öğrendiklerimi de ekledikten sonra son hali şudur. Biraz biraz çalışmaya başladı. Bir kaç hamle ilerisini görecek hale nasıl getiririm diye düşünmek lazım.

import asalusliste
import numpy as np
import random

kalancop = 1000000
asal_us_deger = np.array(asalusliste.asal_us)

def asal(n):
  for i in range(2,int(n**0.5)+1):
    if (n%i) == 0:
      return False
  return True

def tablo_kucult(copler):
   # kalan çöplerin üstündeki değerleri numpy diziden sil
   global asal_us_deger
   mask = asal_us_deger[:, -1] <= copler
   filtrele = asal_us_deger[mask]
   asal_us_deger = filtrele

def kalan_kontrol(sayi):
   # kalan çöpler listede var mı diye kontrol
   # varsa return değeri alma
   indexler = np.where(asal_us_deger[:, -1] == sayi)
   return indexler[0]
      

def kullanici_kontrol(p,n):
    #  işlem yapmak yerine numpy dizisinde var mı yok mu kontrol?
    if asal(p) and n>=0 and p**n<=kalancop:
        return True
    else:
        return False
    
def sistem_sayi(copler):
    # kalan asal tablosundan kontrollü bir seçim yapacak
    if kalan_kontrol(copler):
       index = kalan_kontrol(copler)[0]
       return asal_us_deger[index][0],asal_us_deger[index][1],asal_us_deger[index][2]
    rast = random.choice(asal_us_deger)
    # rast söylenirse eğer kalan kontrol yapacak? (bir sonraki hamle)
    return rast[0],rast[1],rast[2]

print("""Bir masa üzerine 1.000.000 (bir milyon) kibrit çöpü bırakılmıştır. 
      İki kişi bu kibrit çöpleri ile aşağıdaki kurala göre oyun oynuyorlar. 
      Sırası gelen oyuncu bir asal sayı p ve negatif olmayan bir n sayısı seçip masa üzerinden p^n tane kibrit çöpünü alabiliyor. 
      (örneğin 8, 1, 25, 5 ,49, 125 vs) 
      En son kibrit çöpünü alan oyuncu oyunu kazanıyor.""")

while kalancop>0:
    p,n = map(int,input("Bir asal ve bir üs giriniz aralarında boşlukla.").split())
    if kullanici_kontrol(p,n):
        kalancop -= p**n
        print(f"Girdiğiniz sayılar {p} ^ {n} ve kalan çöp sayısı {kalancop}")
        tablo_kucult(kalancop)
    else:
        print("Geçersiz, lütfen yeniden girin")
        continue
    
    sp,sn,sd= sistem_sayi(kalancop)
    kalancop -= sd
    print(f"Söylediğim sayılar {sp} ^ {sn} ve kalan çöp sayısı {kalancop}")
1 Beğeni

Oyunu oynayan/oynatan var mi?

Minimax ile 100k’ya kadar cozdum sanirim. Bir takim kazanan hamleler:

100k: 65536
10k: 4096
1000: 256
100: 64

“Niye hep 2^n” derseniz, hamle sayisini minimize ediyorum. (Yoksa max. recursion depth’i geciyor, nasil artiriyorduk hatirlamiyorum) 100’u 4 ile kazanmak da mumkun.

Cok daha hizli calisacagini tahmin ettigim bir yontem daha var, onu da bir dahaki bos vaktimde kurcalayacagim.

Algoritma tokusturmak veya test etmek isteyen olursa bot haline getirip bir yerlere koyabilirim.

2 Beğeni

Diger algoritmayi da cikarttim.

Memoizasyonlu minimax’tan cok daha hizli olmadi. Hatta algoritmik kompleksitelerinin esit oldugunu dusunuyorum (O(n^2) veya daha dogrusu onunla O(n π(n) arasinda bir yerde)

1,000,000 copu ~10 dakikada cozdu.

Bu arada cevaplarda o kadar cok duzen/oruntu (pattern) var ki, cok daha hizli cozumlerin uretilebilecegini dusunuyorum. Matematik bilgimi asiyor ama.

1 Beğeni

Maalesef ben örüntüyü buldum ve benim için tadı kaçtı oyunun. Ama yazarken öğrendiğim şeyler (numpy dizileri vs) yine de yararlı oldu. Sorunun matematiksel örüntüsünü spoiler şeklinde yazıyorum. İsteyen bakabilir veya kendi keşfetmek isteyebilir.

Çözüm Örüntüsü

Oyunun bir noktasında 6 ya bölünebilmeyi yakalayan oyunu kazanıyor. Yani kalan çöp sayısı 6 nın katıysa ve hamle sırası rakipteyse oyunu kazanır. Dolayısı ile oyuna ilk başlayan yerde 6 nın katı şekilde bir sayı bırakır ve aynı örüntüye devam ederse oyunu kazanmış olur.

Oyun olarak bakinca tekrar ilginclesiyor. (Asallari veya hamleleri uretip birakmaktan ziyade.)

Mesela kazanan minimum hamle sayisi sormak, veya oyuna 10,000 hamle limiti koymak gibi.

Belki bir kaç kural eklenerek veya değiştirilerek dediğiniz gibi ilginçleşebilir.

Hatta benim bulduğum örüntüye yasak getirilinebilir. :slight_smile:

Neden?

Google: Chiper.
Google: cryptography

Sebep;

Kriptografide p**n katsayılı polinomlar kullanılarak en büyük asal sayılar ile tahmin edilmez değerler üretilmeye çalışılan bir yöntem vardır.

Dünyanın geri kalanın en büyük asal sayı peşinde koşması nedeni budur.

Aksi halde kaba kuvvet atakları ve tahmin yöntemleri ile p**n polinomları dahi çözülebilir hale gelmektedir.

Hele ki sizde p**n kadar eksilen bir kümeye düşürürseniz tahmin sayıları hızla azaltılabilir. Bu nedenle buradan patternler bulmak mümkün olur.

Başta anlatmak istedim ama sanırım bazan çok yönlü düşünemeyip daha önce deneyimlememiş biri ile empati kuramıyorum.

Biraz daha açıklayıcı yazmam gerekecek not aldım kendime.