Risk'teki bir savaş için iki zar atma listesi verildiğinde, programınız veya işleviniz her oyuncunun kaç asker kaybettiğini vermelidir.
Arka fon
Bunu okumak zorunda değilsiniz, çünkü sadece arka plan. Durdurulmadan devam etmek için "Görev" alt başlığına atlayın.
Risk oyununda , bir oyuncu başka bir oyuncuya saldırabilir (aslında, bu kazanmak için gereklidir). Bir savaşın sonucu zar atar. Her savaş, her oyuncunun 2
ordu parçalarını kaybedebileceği bir alt savaşlar dizisi olarak gerçekleşir.
Bir alt savaşta, defans oyuncusu ve saldırgan her biri, sayıları bu zorlukla ilgisi olmayan koşullara göre değişebilen birkaç zar atar. Saldırganın en değerli ölümü, savunucunun en değerli ölümü ile karşılaştırılır. Saldırganın ölümü savunanın ölümünden daha yüksekse, savunma oyuncusu bir taş kaybeder. Aksi takdirde, saldırgan tek bir parçayı kaybeder.
Daha sonra, her iki oyuncunun da en az iki zarı varsa, iki oyuncunun ikinci en yüksek değerli zarı karşılaştırılır. Yine, eğer saldırganın ölümü savunanın ölümünden daha yüksekse, savunma oyuncusu bir taş kaybeder. Aksi takdirde, saldırgan tek bir parçayı kaybeder.
(Defans bağları kazanır. Hem savunma oyuncusu hem de saldırgan a atarsa 4
, saldırgan bir parçayı kaybeder.)
Wikipedia makalesinin bu alt savaşında, saldırganın zarları kırmızı ve savunucunun zarları beyazdır. Saldırganın en yüksek zarı 4
ve savunmacının en yüksek zarı 3
. Saldırgan daha yüksek olduğu için defans oyuncusu bir parçasını kaybeder. İkincisi 3
, saldırgan ve 2
savunma oyuncusu içindir. Saldırgan yine yüksek olduğu için defans oyuncusu başka bir taş kaybeder. Böylece bu alt savaşta, saldırgan hiçbir parçayı kaybetmez ve defans oyuncusu da 2
parçayı kaybeder .
Üçüncü en yüksek parçaların karşılaştırılmadığına dikkat edin. Çünkü savunanın tek bir alt savaşta ikiden fazla zarı yoktur, bu yüzden karşılaştırılacak en yüksek üçüncü parça yoktur.
Görev
Hem saldırganın hem de Risk alt savaşının savunucusunun uygun olmayan bir şekilde ayrılmamış zar atışları (1 ila 6 dahil tamsayılar) göz önüne alındığında, her oyuncunun kaybettiği ordu parçalarının sayısını çıktılayın. Beş olasılığı göstermek için farklı çıktılara sahip olduğu sürece çıktı herhangi bir uygun biçimde olabilir. Sorunuzda bu farklı çıktıların neler olduğunu belirtmelisiniz.
Çıktı aşağıdaki gibi belirlenir: def=0
ve ile başlayın atk=0
. Saldırganın zar atışları listesinin en büyük değeri, savunucunun zar atışları listesinin en büyük değerinden büyükse, artırın def
. Aksi takdirde, artırın atk
.
Her iki zar atma listesinin uzunluğu en az ise 2
, o zaman: saldırganın zar atma listesinin ikinci en büyük değeri listenin ikinci en büyük değerinden büyükse, artırın def
ve aksi takdirde artırın atk
.
Son olarak, program veya fonksiyon aşağıdaki 5 çıkış olasılığının her biri için benzersiz bir tanımlayıcı çıkarmalıdır:
╔═══╦═══╗
║atk║def║
╠═══╬═══╣
║ 1 ║ 0 ║
║ 0 ║ 1 ║
║ 2 ║ 0 ║
║ 1 ║ 1 ║
║ 0 ║ 2 ║
╚═══╩═══╝
Misal
Defans: [3, 2]
Saldırgan: [2, 4, 1]
Maksimum defans oyuncusu 3
ve maksimum saldırgan 4
. 4>3
, yani def=1
ikinci defans oyuncusu 2
ve ikinci defans oyuncusu 2
. Not(2>2)
, öyle atk=1
. Çıkış daha sonra olabilir [1,1]
.
Test Durumları
Defender
Attacker
Output (as [def,atk])
-----
[1]
[1]
[0,1]
-----
[6,6]
[1,1,1]
[0,2]
-----
[1,2]
[5,2,3]
[2,0]
-----
[5]
[3,4]
[0,1]
-----
[4]
[4,5]
[1,0]
-----
[1,3]
[1,2,3]
[1,1]
-----
[4]
[4,5,6]
[1,0]
-----
[4,5]
[6,2]
[1,1]
-----
[5]
[6,1,3]
[1,0]
-----
[5,5]
[4,4,1]
[0,2]
-----
[2,5]
[2,2]
[0,2]
-----
[6,6]
[4,4,3]
[0,2]
-----
[2,1]
[4,3]
[2,0]
-----
[4]
[1,5]
[1,0]
-----
[1]
[5,2]
[1,0]
-----
[6,2]
[4]
[0,1]
-----
[4,2]
[2,5,5]
[2,0]
-----
[2]
[6,6,2]
[1,0]
-----
[6]
[2,6]
[0,1]
-----
[3,1]
[1]
[0,1]
-----
[6,2]
[3,5,2]
[1,1]
-----
[4,2]
[1,1]
[0,2]
-----
[4,3]
[5,4,1]
[2,0]
-----
[5,6]
[1,2]
[0,2]
-----
[3,2]
[4,4]
[2,0]
-----
[2]
[6,3,4]
[1,0]
-----
[1,4]
[6,2,4]
[2,0]
-----
[4,2]
[2,5,4]
[2,0]
-----
[5]
[6,2,1]
[1,0]
-----
[3]
[2,5,4]
[1,0]
-----
[5,4]
[2]
[0,1]
-----
[6,3]
[2,6,5]
[1,1]
-----
[3,1]
[4]
[1,0]
-----
[4]
[6,6,5]
[1,0]
-----
[6,3]
[4,2]
[0,2]
-----
[1,6]
[5,4]
[1,1]
-----
[3,6]
[4,4]
[1,1]
-----
[5,4]
[5,1,1]
[0,2]
-----
[6,3]
[5,4]
[1,1]
-----
[2,6]
[1,2]
[0,2]
-----
[4,2]
[3,5,5]
[2,0]
-----
[1]
[1,2,1]
[1,0]
-----
[4,5]
[1,6]
[1,1]
-----
[1]
[3,5,1]
[1,0]
-----
[6,2]
[6,2]
[0,2]
Örnek uygulama
Python 2 veya 3
def risk(atk_rolls,def_rolls):
# set the rolls in descending order, e.g. [5,3,2]
atk_rolls = sorted(atk_rolls,reverse = True)
def_rolls = sorted(def_rolls,reverse = True)
# minimum length.
minlen = min(len(atk_rolls),len(def_rolls))
atk_lost = 0
def_lost = 0
# compare the highest-valued rolls
if atk_rolls[0]>def_rolls[0]:
def_lost += 1
else:
atk_lost += 1
if minlen == 2:
# compare the second-highest-valued rolls
if atk_rolls[1] > def_rolls[1]:
def_lost += 1
else:
atk_lost += 1
return [def_lost, atk_lost]
Özellikler
- Giriş, yalnızca savunanın atışlarını ve saldırganın atışlarını açıkça kodlayan herhangi bir form olarak alınabilir .
- Çıktı, yukarıda listelenen beş olasılıktan her biri için benzersiz bir çıktı sağlayan herhangi bir biçimde olabilir.
- Savunucunun atışları kümedeki bir liste
1
veya2
tamsayılardır[1,2,3,4,5,6]
. Saldırganın rulo listesi vardır1
için3
sette tamsayılar[1,2,3,4,5,6]
. - Bu kod golf olduğundan , her dilde en kısa kod kazanır! Do not golf dillerinde cevaplar diğer dillerdeki gönderme cevaplar sizi vazgeçirmek izin verin.