Sua tarefa é simples: diga-me quem vence a batalha das letras.
As tropas
Existem três "tropas" diferentes nesta batalha, resumidas por esta tabela.
name | health | damage
A 25 25
B 100 5
C 10 50
Você pode usar três caracteres únicos para representar as tropas, mas deve especificar se não são essas letras.
A batalha
Suponha que tenhamos uma amostra de batalha:
ABC # army 1
CBA # army 2
Cada exército dispara repetidamente na unidade mais à esquerda, até que esteja morta; então eles se movem para a tropa à direita e repetem. Portanto, o exército 2 ataca A
no exército 1 até que A
esteja morto, então vá para B
, então C
. O Exército 1 ataca C
primeiro, então B
, então A
. Suponha que os exércitos atacem ao mesmo tempo e, assim, as tropas sempre dispararão se estiverem vivas antes da rodada e possam se matar ao mesmo tempo. Eles disparam em ordem da esquerda para a direita.
A batalha seria assim:
ABC
CBA
BC # A (25 hp) killed by C (-50 hp), B (100 hp) attacked by B (-5 hp) and A (-25 hp), has 70 hp
BA # C (10 hp) killed by A (-25 hp), B (100 hp) attacked by B (-5 hp) and C (-50 hp), has 45 hp
BC # B (70 hp) attacked by B (-5 hp) and A (-25 hp), has 40 hp
A # B (45 hp) killed by B (-5 hp) and C (-50 hp)
BC # B (40 hp) attacked by A (-25 hp), has 15 health
# A (25 hp) killed by B (-5 hp) and C (-50 hp), army 2 dead
Portanto, o exército 1 vence a batalha!
Entrada
Duas cordas, a primeira representando o exército 1 e o segundo exército 2. Elas não são necessariamente do mesmo tamanho (porque quem disse que seria uma luta justa?)
Resultado
Quaisquer três valores constantes únicos para representar o exército 1 vencendo, o exército 2 vencendo ou o improvável evento de empate. Sim, é possível que as últimas tropas se matem, terminando em empate.
Batalhas
ABC
CBA
Army 1
CCCCC
CCCCC
Tie
CABCAB
ABBABBA
Army 2
Aplicam-se brechas padrão . Você deve enviar um programa completo.
Este é o código-golfe , a solução mais curta vence.
A
batidasB
eC
gravatasB
eA
gravatasC
. Alterar um dosA
valores de para20
torná-lo empateB
.Respostas:
Pyth
14597 bytesUm pouco menos ingênuo do que antes.
Experimente online!
Explicações:
Vamos cortar o programa em várias partes.
O dicionário
Y
é:{'A': [25, 25], 'C': [10, 50], 'B': [100, 5]}
. Então:Neste ponto,
K
há uma lista de casais que representa o primeiro exército. Cada par desta lista é uma carta do exército e é(health, damage)
para essa carta.J
é exatamente o mesmo, mas para o segundo exército.g
é uma função que leva dois exércitos e causa o dano causado pelo segundo exército ao primeiro. Agora:Quando o loop while terminar
K
eJ
tiver seu valor final. Se ambos estão vazios, é um empate; caso contrário, o exército não vazio vencerá. Isso é tratado pelo último trecho de código:É isso aí!
fonte
Haskell ,
199193179176171 bytesExperimente online!
Truque pequeno: divida todas as estatísticas do exército por 5.
fonte
C #, 446 bytes
Versão formatada:
Produz 1 se exército1 vencer, 2 para exército2 e 0 para empate
fonte
int[]
que acho que você pode combiná-las, `` <= 0` é o mesmo que<1
certamente? Você precisa dotry-catch
?Javascript (ES6) -
316269 bytesEu tenho certeza que isso pode ser jogado como o inferno, mas é isso que eu criei :) Eu consegui raspar 47 bytes!
Saídas 0 para empate, 1 para o Time 1 e 2 para o Time 2.
Legível :
Demo :
fonte