KoTH noktaları ile mutasyona uğramış çubuklar


13

Temel kurallar (benimkinden farklı)

Hikaye

Yıl 4579, insanların artık her biri 1001 parmaklı 2 eli var. Çubuklar noktalara dayalı hale geldi. @Dennis'in @Martin'den daha fazla temsilcisi var ... Elle çizilmiş kırmızı daireler şimdi indirildi ... Jon Skeet her SE sitesinde 2 trilyon tekrar vurdu ... Evet korkutucu biliyorum

Chopsticks çözülmüş bir el oyunudur. Bu yüzden bunu aşmak için onu mutasyona uğrattım. Parmak miktarını arttırdım.

Oyunun kuralları

Bunun nasıl oynandığı

Herkes 2 el ile başlar. Her elin 1001 parmağı vardır. 1 (bir) parmak kadar olan her eli başlar her taraftan. Sıranız sırasında diğer oyuncuların eline "vurabilirsiniz". Vurmak için 1 elinizi ve vurmak için 1 elinizi seçin. Artık vurulan el, ilk başta parmak sayısı ve vurduğunuz eldeki parmak miktarına sahiptir.

EX

P1: 1,1 P2: 1,1. P1[0]vurur P2[1]. Şimdi parmaklar P1:1,1 P2:1,2. Şimdi P2[1]vurur p1[0]. Parmaklar artık P1: 3,1P2 1,2.

Bir el 1001 veya daha fazla parmağa kadar çıkarsa, o el dışarı çıkar. Sonra (kendi sırası için) elini uzatmış oyuncu "bölünebilir". Bölünme, elin elini alıp parmak miktarını yarıya indirdiğinde (yuvarladığında) ve diğer eline tekrar girmesini sağlar.

EX

P1: 1000,2P2 7,7. P2[0]vurur P1[0]. Skor P1: 0,2P2'dir 1,1. P1[1]sırayla böler ve skor P1: 1,1ve P2'dir 7,7.

Oyun, bir oyuncunun iki eli de eline geçtiğinde sona erer. Puanlar kazananın sahip olduğu parmak sayısına göre puanlanır. Daha fazla puan = daha iyi. Kaybeden puan kazanmaz.

Kullanılan başka kurallar da vardır, ancak bunlar burada kullanılanlardır.

Herkes herkesi oynuyor (robin)

Son Oyun

Kazandığınız her turda puanlarınızı toplayın. Sonra herkesin puan ortalama. Toplamınızı ortalama puanlara bölün ve nihai puanınızı alın. Çoğu puan kazanır.

Gerçek kurallar

Standart boşluklar

Lütfen değil oyunu çözmeye çalışın. Aslında çalıştırabilmeliyim: P

Botun hızlı çalıştığından emin olun. Yargılama süresinin uzunluğuyla, bu biraz zaman alacak

Programınızda gereken tüm kitaplıklar varsayılan python kitaplığında olmalıdır. Ayrıca içe aktarılması gerekenleri de listeleyin. İthalat sadece temel ithalat olacaktır (matematik için yapmam: import math)

Yanıtlar Python 3.x içinde çalışmalıdır

Handler

Botunuz bir playfonksiyona sahip kendi Python 3 dosyası olacaktır .

playher biri iki sayıdan oluşan iki listeden geçirilecektir. Bu sayı, her elde kaç parmak olduğunu gösterir. İlk liste sizin elinizdir.

Diğer oyuncunun eline vurmayı seçerseniz, iki bitlik bir liste döndürün. İlk bit, vurmak için kullandığınız elin dizinidir ( 0ilk 1için sonuncu için) ve ikinci bit ise rakibe vurduğunuz elin dizinidir.

Bölmeyi seçerseniz, diğer doğruluk değerlerini döndürün.

Tada!

Denetleyici burada bulunabilir . Her botu kendi dosyasına kaydedin ve her botun dosya adını (olmadan .py) listeleyin botnames.

Son not:

Siz ve diğer bot ilk önce sırayla gideceksiniz. Eğer oyun 100.000 (yüz bin) turda sona ermezse, oyun sona erer ve hiçbiri kazanmaz.

Denetleyici sonsuza dek süren hareketlere karşı korunmaz, ancak gereksiz ek yük güçlü bir şekilde kaşlarını çatacaktır.



"Standart KOTH kuralları" bir bağlantı olabilir mi? Ve belki de "Standart boşluklar".
trichoplax

My handler is very simple, your bot must do it's logic then adjust the the finger scores as needed, remember!Ne, yani KoTH için hesaplamalar yapan bizleriz?
HyperNeutrino

@HyperNeutrino opps sabitleme.
Christopher

4
Dennis Martin daha ünü var şimdi . Aman Tanrım, bu fazladan 996 parmak nereden geldi ?!
caird coinheringaahing

Yanıtlar:


6

CodingAndAlgorithms

Bu cevap aslında şimdiye kadarkinin aksine kodlama ve algoritmalar kullanıyor! reference: imgur (bundan önce gönderilen tüm cevapları da yener)

def play(A, B):
    if sum(A) == 1:
        return [A.index(1), B.index(max(B))]
    elif max(A) + max(B) > 1000:
        return [A.index(max(A)), B.index(max(B))]
    elif 0 in A:
        return 1
    elif 0 in B:
        return [A.index(min(A)), 1-B.index(0)]
    else:
        return [A.index(min(A)), B.index(min(B))]

Bu referansı aldım XD
Christopher

Bu kazandı. Asla kaybetmedi.
Christopher

Tebrikler! Sanırım ikinci sıraya yerleşmek zorunda kalacağım. Kodlama ve algoritmalarınız benimkinden daha güçlüydü
Value Ink

3

CautionBot

def play(s,o):
 if max(s)+max(o)>1000 and (all(s) or max(s)+min(o)<1001):
  return [s.index(max(s)),o.index(max(o))]
 else:
  return [s.index(min(s)),o.index(min(filter(bool,o)))]if all(s) else 'split'

İkaz çok fazla soruna neden olmak istemez, bu yüzden iki eline sahipse rakibin ellerinin küçüklerine daha küçük eliyle vurur, aksi takdirde böler. Ancak, WarningBot aptal değildir, bu yüzden bir sonraki dönüşü hemen kaybetmeden rakiplerin elini çıkarabilirse, normal hareketi yerine bunu yapar.


Gayri resmi olarak bu kazanıyor
Christopher

Güzel! İşlerin buradan nasıl geçtiğini göreceğiz çünkü biri daha iyi bir strateji geliştirdiğinde şaşırmayacağım. Ben sadece vanilya Chopstick stratejisi olarak anladığım şeyi (öldürülmekten kaçınmak için korkak ve sık sık bölünmüş) yeni kurallara en iyi şekilde uyacak şekilde (korkak olun ve öldürmekten kaçınmak için alçaktan vurun), her iki eliniz de yasadışı) lol
Value Ink

3

Ekolayzer

def play(s, o):
    if not all(s):
        return 1
    else:
        return [s.index(max(s)), o.index(min(filter(bool, o)))]

Ekolayzerde bir el eksikse, bölünecektir. Aksi takdirde, rakiplerine kendi en büyük eliyle en küçük ele vurur.


Bu mutasyona uğramış kurallara göre, AFAIK sadece bir el dışarıdaysa bölünebilir.
Değer Mürekkebi

Oh evet, bunu düzeltirim.
LyricLy

"Equalizer'ın eli yoksa ..." yani elinde elleri yoksa zaten kaybetti mi? Ama bu sadece nitpicking, telafi etmek için +1 almak
Value Ink

3

saldırgan

def play(s, o):
    return [s.index(max(s)),o.index(max(o))]if all(s)else 1

Başka bir başlangıç ​​botu olan Aggressor, eğer her iki eli de boş değilse, rakibin ellerinin büyüklerine kendi elleriyle daha büyük vurur; aksi takdirde bölünür.


2

RandomBot

import random

def play(s, o):
    return [random.randint(0,1)for i in'  ']if all(s)else 1

Sadece işleri başlatmak için, elleri boş değilse rastgele bir vuruş yapan bir bot; aksi takdirde böler.

Golf oynadı çünkü neden olmasın: 3


Bunu
Christopher

@Christopher Üzgünüm, yorumunu görmedim. --- Bir kez düzelttiğinizde bunu sileceğim. --- Bunu sileceğim çünkü aptal xD
HyperNeutrino

@Christopher Not: Bunu geçerli bir gönderim olarak düzenledim. Ben de başka bir çözüm ekleyeceğim; kontrolörün düzgün çalışmadığını söyle :)
HyperNeutrino

Güzel onları deniyor
Christopher

@Christopher Denetleyici düzgün çalışıyor mu?
HyperNeutrino

2

Hata

Evet, botun adı bu.

def play(s, o):
    if max(s)+max(o)>1000:
        return [s.index(max(s)),o.index(max(o))]
    if 0 in s:return ''
    return [s.index(max(s)),o.index(min(o))]

Buna diğer botlarla test ederek geldim. Ancak simülasyonlarımda sürekli ikinci sırada. Sonunda bir bot daha yapacağım.

Düzenleme: CautionBot yenerek herhangi bir bot yazmak gibi görünüyor ve benim ekstra test bu ikinci en kötü değil ikinci en iyi olduğunu gösteriyor gibi görünüyor.


1

maratoncu

Aggressor'un "HyperNeutrino" tarafından sağlanan kodunu, rakiplerinin küçük ellerine küçük elleriyle vurmak için değiştirdim. Tabii ki çok aptalca bir strateji ama grafiğin tepesinde olmayı reddedemiyorum! (Bu grafik kayıp olsa da)

İş yerinde olduğu için test edemediğim için bu kodun hatasız çalışıp çalışmadığından emin değilim. Ancak, kusursuz çalışmalıdır.

def play(s, o):
     return [s.index(min(s)),o.index(min(o))]if all(s)else 1

Güzel ilk cevap! Harika bir soru
Christopher

Teşekkürler :) Oldukça gergindim, çünkü yaptığım gibi başka birinin kodunu değiştirmeye izin verilip verilmediğinden emin değildim. Sanırım bunu açıkça ortaya koyduğun sürece. Ve en büyük rakiplere karşı en büyük eli oynayacak birini yapmaya çalışacaktım ama HyperNeutrino beni tam olarak bu dövdü! haha
Ürdün

Evet. Bu SE tweaking kodu genellikle kullanılır: P
Christopher

Güzel cevap! Endişe edeceğim bir şey (şu anda test edemiyorum), boş bir ele vurmaya çalıştığınızda denetleyicinin nasıl tepki vereceğini veya bunun kuralları nasıl etkilediğini bilmiyorum.
Value Ink

1
Bu, Ekolayzer'e çok benzer, ancak Ekolayzer, varsa rakibin boş eline çarpmadığından emin olur. @LyricLy
HyperNeutrino
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.