Bu mücadelede, oyunun mahkumun ikilemi olduğu bir bot yazacaksınız. İşte yakalamak: önceki oyunların geçmişine erişiminiz olmayacak. Bunun yerine, rakibin kendisine erişiminiz olacak. Bu versiyonda, her iki oyuncu da işbirliği yaparlarsa +2 puan alırlar, her ikisi de arızalanırsa +1 puan alırlar, biri işbirliği yaparsa ancak biri arızalanırsa +1 puan alır, diğeri ise puan alamaz. Her bir gönderi, kendisi de dahil olmak üzere, diğer tüm gönderilere karşı 10 defa oynanacaktır. Kazanan, en çok puan alan sunum.
Denetleyici : Bir javascript işlevi yazmalısınız.
function submissionName(them) {
/* Your code here */
}
Denetleyici name
, sonuçları görüntülemek için işlevin özelliğini kullanır , bu nedenle bu biçimde değilse (ve bunun yerine f = x => ...
ya da f = function() { ... }
) puanınızı görmek zorlaşır ve kendi işlevinize erişemezsiniz.
İşlev bir parametreyi kabul eder: them
Rakibin işlevi budur. Ardından, rakibin tepkisine girdi olarak belirli işlevler verileceğini görmek için bu işlevi çağırabilir. Bu verilere dayanarak, sırasıyla işbirliği veya kusur için 'C' veya 'D' döndürmelisiniz.
Örnekler (yarışacak):
function cooperate(them) {
return 'C';
}
function defect(them) {
return 'D';
}
function nice(them) {
// Do whatever they would do when faced with a cooperator
return them(wrap(_ => 'C'));
}
Kontrolör burada mevcuttur
Kurallar :
- Rakibin kodunu göremezsiniz. Tüm işlevler
toString()
, çağrıldığında aynı görünmeleri için sarılır . Rakibi incelemenin tek yolu (kendin olabilir) onları test etmektir. - İşleviniz deterministik olmak zorunda değildir. Durumu yalnızca kendi işlevinizde olan özellikleri ayarlayarak kaydedebilirsiniz
submissionName.state = {};
. Ancak, maçlar arasında (aynı oyuncuların maçları arasında bile),toString()
ve aranarak durum temizlenireval
. Bu nedenle önceki maçların hatırası yok. - Her bir maçta hangi fonksiyonun ilk olarak çağrıldığı sıra rastgeledir.
- Kodunuz bir hata atarsa, rakibiniz kusurluyken kooperasyon yapmış gibi ele alınacaktır. İlk koşan sizseniz, rakibin kodu bile aranmaz. Bu, siz arama sırasında hata, rakibinizin kodunda meydana gelse bile olur
them
. Yığın taşması hatalarına karşı dikkatli olun, özellikle de kodunuz çağırırsathem(wrap(submissionName))
, aynısını yapabilir. - Değişkeye veya işleve EXCEPT denildiğinde
self
kapsam dahilinde olan başka bir değişkene erişemezsiniz . Bu fonksiyon, rakibi kontrolörün bir fonksiyonu nasıl çağırdığından ayırt edilemeyecek şekilde çağırmanıza izin verir. Sen hiç yazamayabilir , vb (Sen gibi işlevleri kullanabilir ancak,).eval
wrap
Math
window
Math.random()
- Bir
Error
veya başka bir yöntem kullanarak yığın izlemesine erişemezsiniz .
Çok uzun süren bir not: lütfen içinde sıkışıp kalmaktan kaçının while
Sonsuza dek döngü. Her iki yarışmacının birleşik süresi, belirli bir turda 1 saniyeyi geçmemelidir. Bunu zorlamak için 1000 ms ile 2000 ms arasında rastgele bir zaman aşımı seçilir (bu, bilerek belirli bir süre bekleyerek oyun oynamaktan kaçınmaktır) ve çalışanın yürütmek için daha uzun sürmesi durumunda bir hata atılır. Bu durumda, hatanın nedeni şu şekilde belirlenir: yürütme, 1000 ms sonra rastgele bir anda duraklatılır ve o anda arama yığını denetlenir. Şu anda bir döngüde olan (veya bir yığın taşması hatasını önlemek için ayarlanmış bir özyineleme anlamında döngü benzeri özyineleme) olarak adlandırılan rakip olarak suçlanacak. Aynı yarışmacı birkaç defa "çok uzun süren" bir hataya neden olduğu için suçlanırsa, o yarışmacı diskalifiye edilir.
them
için kullanılan fonksiyon deterministik olmalı mı / kuralları takip etmeli mi? Örneğin function me(them){let log=0;them(x=>{++log;return 'C';})
; günlük
StackOverflow
hataya neden olması gerektiği ve asla bitmeyen sonsuz bir döngüye yol açması gerektiğidir. Bir sonuç verebilirse StackOverflow
, bir try-catch ifadesi eklediğinizden emin olun. 1 saniye içinde bir
them(() => 'C')
bir hatayla sonuçlanmayacaktır, çünkü rakip aradığında them
, () => 'C'
işlevi çağırır . İhtiyaçlar sarılı olan tek şey try-catch
eğer arama olurdu them
bazı fonksiyonun bir parametre olduğunu aramaları ile them
bazı fonksiyonun bir parametre ile bu çağrılar them
vb (sonsuz). Örneğin them(t => t(() => 'C'))
, rakip oynadıklarını düşünürse, rakibin oynayacağı her şeyi oynardı nice
. stackoverflow
Hata olasılığı yoktur .