Kart oyununda kişisel olarak Hollandalı 'Oorlog' adıyla bildiğim bir yön için bir simülasyon oluşturalım ('Savaş' anlamına gelir).
'Oorlog' nasıl çalışır?
İki deste kart (her biri iki Joker dahil) oynayan oyuncu sayısı arasında eşit olarak bölünür. Her oyuncu kendi stokunu karıştırır, önlerine baş aşağı koyar ve tüm oyuncular aynı anda stokun ilk kartını açar.
Bu 'savaşı' kazanan, aşağıdaki kurallara göre kartların değerleri ile belirlenir: Joker / Ace King'i yener; Kral Kraliçeyi yener; Kraliçe Jack'i yener; Jack 10'u yendi; 10 yenilgi 9; .... Buna ek olarak, hem 2 hem de 3 Ace / Joker'i yendi. Son kural, 2 veya 3'ün Ace veya Joker'i, Ace veya Joker'in başka bir kartı geçtiği ve bunun da 2 veya 3'ü geçtiği bir döngüye yol açabilir. Bu durumda, 2 veya 3 savaşı kazanır.
(Bu kart oyununda uygun değil.)
İki veya daha fazla oyuncu eşit en yüksek karta sahip olduğunda, bir 'savaş'a sahiptir. Bu, bir kartı baş aşağı yerleştirdikleri anlamına gelir ve her biri stoklarından yeni bir kart açar ve yine en yüksek karta sahip olanı görür. Bu, tek bir oyuncu tüm savaşı kazanana kadar devam eder.
(Bu savaşın tüm kartları savaşı kazanan oyuncunun atma yığınına gider. Sonra herkes yeni bir kart açar. Bir oyuncunun stoğu kartların dışında kaldığında, atma yığınlarını baş aşağı çevirir ve bu yeni stoğa devam ederler. Bu, bir oyuncu tüm kartlarından çıkana ve daha fazla kart alan oyuncu kazanana kadar devam eder.)
Üç oyuncu ile 'savaşlar' örneği:
- 4, 8, Jack:
Jack kazanır. - 7, As, Kraliçe:
Ace kazanır. - 10, 10, Kral:
Kral kazanır. - 3, Joker, 2:
3 kazanır. - Ace, Joker, 2:
2 kazanır. - 3, Kraliçe, As:
3 galibiyet. - Kraliçe, Kraliçe, 9:
Kraliçe ve Kraliçe bir 'savaş' yaşıyor, bu yüzden iki yeni kartla devam ediyor: 4, 8;
8 kazanç. - 4, 4, 4:
Herkesin bir 'savaşı' var, bu yüzden üç yeni kartla devam ediyor: 8, As, 2;
2 galibiyet. - Jack, 5, Jack:
Jack ve Jack bir 'savaş' yaşıyor, bu yüzden iki yeni kartla devam ediyor: 5, 5;
5 & 5 de eşittir, bu yüzden 'savaş' iki yeni kartla tekrar devam eder: 10, King;
Kral kazanır. - Joker, Joker, Ace:
Hepsinde bir 'savaş' var, bu yüzden üç yeni kartla devam ediyor: 9, 7, 9;
9 ve 9 da eşittir, bu yüzden 'savaş' iki yeni kartla devam eder: Jack, 3;
Jack kazanır.
Kod meydan okuma üzerine:
Giriş:
Bir diziyle STDIN veya bir diziyi simüle eden bir dize (çağrınız - diliniz dizileri desteklese bile). Bu dizi, bir savaşın kartlarını kronolojik sırayla içerir (bunun daha iyi anlaşılması için test durumlarına bakın).
Çıktı:
STDOUT savaşı kazanan oyuncunun endeksidir.
İstediğin seçebilirsiniz sıfır endeksli (yani 0
, 1
ya 2
) ya da tek endeksli çıktı (yani 1
, 2
,3
).
Zorluk kuralları:
- Giriş, bir diziyi temsil eden tek bir dizi / dize olacaktır. Yani basitleştirmek için bir dizi diziniz olamaz. Ayrıca savaşa katılmayan kartlar için vekil eşyalarınız olamaz.
- Yüz kartları için harf gösterimi yerine sayı gösterimlerini kullanıyoruz. Yani Ace / Joker =
1
; Jack =11
; Kraliçe =12
; ve Kral =13
. - Bu mücadelede her zaman 3 oyuncu ile oynadığımızı varsayabiliriz .
- İlk üçü 'savaşın' başladığını gösterir. İki veya daha fazla oyuncu 'savaş' olduğunda dizideki devam eden kartlar savaşlarını gösterir (bunun daha iyi anlaşılması için test senaryolarına bakın).
Genel kurallar:
- Bu kod-golf etiketli , bayt en kısa cevap kazanır.
Bu kodsuz golf dillerinin girmemesi gerektiği anlamına gelmez. 'Her' programlama dili için mümkün olduğunca kısa bir kod-golf cevabı bulmaya çalışın. - Lütfen çıktı için hangi dizin oluşturmayı (sıfır veya tek dizinli) kullandığınızı belirtin.
Test senaryoları:
Test case 1: [4, 8, 11] -> 2 (or 3)
Test case 2: [7, 1, 12] -> 1 (or 2)
Test case 3: [10, 10, 13] -> 2 (or 3)
Test case 4: [3, 1, 2] -> 0 (or 1)
Test case 5: [1, 1, 2] -> 2 (or 3)
Test case 6: [3, 12, 1] -> 0 (or 1)
Test case 7: [12, 12, 9, 4, 8] -> 1 (or 2)
Test case 8: [4, 4, 4, 8, 1, 2] -> 2 (or 3)
Test case 9: [11, 5, 11, 5, 5, 10, 13] -> 2 (or 3)
Test case 10: [1, 1, 1, 9, 7, 9, 11, 3] -> 0 (or 1)
Test case 11: [13, 13, 4, 1, 3] -> 1 (or 2)
Test case 12: [13, 4, 13, 2, 3] -> 2 (or 3)