No futebol de associação (também conhecido como futebol), uma disputa de pênaltis é a segunda medida de desempate que pode ser usada em uma partida que não pode terminar em um empate, após o prolongamento (por exemplo, horas extras na associação de futebol).
Em uma disputa de pênaltis, o árbitro principal joga uma moeda para determinar em qual gol o tiroteio acontece e, em seguida, joga outra moeda para determinar qual time começa primeiro. No entanto, a única coisa relevante para esse desafio é o que acontece então, descrito abaixo.
Cada equipe tem 5 pênaltis disponíveis no início e o placar da penalidade é 0-0. Se, a qualquer momento, as penalidades remanescentes de uma equipe não forem suficientes para alterar a equipe vencedora, o tiroteio será interrompido.
Se não houver penalidades restantes, mas os pontos de ambas as equipes forem iguais, uma penalidade adicional será concedida a ambas as equipes. Isso é repetido até que os pontos não sejam iguais.
Após o desempate, a equipe com a maior pontuação de penalidade vence o jogo.
Desafio
Seu desafio é, dadas duas listas A
e B
representando quais penalidades o time A e o time B marcaram respectivamente, para determinar se eles representam um pênalti válido. Um desempate é válido se o estado representado pela entrada puder ser alcançado, independentemente de a equipe vencedora poder ser determinada. Observe que é possível testar os dois cenários (início do Time A, início do Time B), pois, se o estado descrito na entrada estiver acessível para pelo menos um cenário, a entrada será válida. Se os comprimentos das listas forem diferentes, a equipe representada pela mais longa começa primeiro (só pode ter mais um elemento que o outro e a equipe da lista mais curta não pode começar, pois a equipe da lista mais longa aplicaria duas penalidades seguidas, pois a lista mais curta será esgotada prematuramente).
Exemplos detalhados
Você pode pular para a seção Regras abaixo, apenas para ajudar a solucionar o desafio.
Suponha que você receba essa disputa como entrada, onde -
significa que nenhum gol foi marcado e X
significa que um gol foi marcado (é inválido):
Team A: - X X X X
Team B: - - - - X
Assuming team A starts first:
Team A: - (0 - 0) (max possible score 4 - 5)
Team B: - (0 - 0) (max possible score 4 - 4)
Team A: X (1 - 0) (max possible score 4 - 4)
Team B: - (1 - 0) (max possible score 4 - 3)
Team A: X (2 - 0) (max possible score 4 - 3)
Team B: - (2 - 0) (max possible score 4 - 2)
Team A: X (3 - 0) (max possible score 4 - 2)
Team A already has a higher score than B could ever have, but the input hasn't
ended yet, so it's invalid if team A is first.
Assuming team B starts first:
Team B: - (0 - 0) (max possible score 5 - 4)
Team A: - (0 - 0) (max possible score 4 - 4)
Team B: - (0 - 0) (max possible score 4 - 3)
Team A: X (1 - 0) (max possible score 4 - 3)
Team B: - (1 - 0) (max possible score 4 - 2)
Team A: X (2 - 0) (max possible score 4 - 2)
Team B: - (2 - 0) (max possible score 4 - 1)
Team A already has a higher score than B could ever have, but the input hasn't
ended yet, so it's invalid if team B stars first.
The input is invalid no matter which team starts first, so it's considered
invalid.
Pelo contrário, aqui está um exemplo válido:
Team A: X X X
Team B: - - -
Assuming team A starts first:
Team A: X (1 - 0) (max possible score 5 - 5)
Team B: - (1 - 0) (max possible score 5 - 4)
Team A: X (2 - 0) (max possible score 5 - 4)
Team B: - (2 - 0) (max possible score 5 - 3)
Team A: X (3 - 0) (max possible score 5 - 3)
Team B: - (3 - 0) (max possible score 5 - 2)
It can be determined that team A wins, however the input has ended, so it's
valid if team A starts first. Therefore, the input is valid.
Outro exemplo, desta vez com multas extras:
Team A: X - X - - - X -
Team B: - X X - - - X X
Assuming team A starts first:
Team A: X (1 - 0) (max possible score 5 - 5)
Team B: - (1 - 0) (max possible score 5 - 4)
Team A: - (1 - 0) (max possible score 4 - 4)
Team B: X (1 - 1) (max possible score 4 - 4)
Team A: X (2 - 1) (max possible score 4 - 4)
Team B: X (2 - 2) (max possible score 4 - 4)
Team A: - (2 - 2) (max possible score 3 - 4)
Team B: - (2 - 2) (max possible score 3 - 3)
Team A: - (2 - 2) (max possible score 2 - 3)
Team B: - (2 - 2) (max possible score 2 - 2)
First 5 penalties result in a tie, so we move on to extra penalties.
Team A: -, Team B: - (2 - 2)
Team A: X, Team B: X (3 - 3)
Team A: -, Team B: X (3 - 4)
It can be determined that team B wins, however the input has ended, so it's
valid if team A starts first. Therefore, the input is valid.
Aqui está uma entrada válida em que é muito cedo para determinar o vencedor:
Team A: X X - -
Team B: - X - X
Assuming team A starts first:
Team A: X (1 - 0) (max possible score 5 - 5)
Team B: - (1 - 0) (max possible score 5 - 4)
Team A: X (2 - 0) (max possible score 5 - 4)
Team B: X (2 - 1) (max possible score 5 - 4)
Team A: - (2 - 1) (max possible score 4 - 4)
Team B: - (2 - 1) (max possible score 4 - 3)
Team A: - (2 - 1) (max possible score 3 - 3)
Team B: X (2 - 2) (max possible score 3 - 3)
The input has ended before the winner can be determined, so it's valid if team A
starts first. Therefore, the input is valid.
Finalmente, aqui está uma entrada em que os comprimentos das listas diferem:
Team A: - - -
Team B: X X - X
Since team B shot more penalties, it starts first:
Team B: X (0 - 1) (max possible score 5 - 5)
Team A: - (0 - 1) (max possible score 4 - 5)
Team B: X (0 - 2) (max possible score 4 - 5)
Team A: - (0 - 2) (max possible score 3 - 5)
Team B: - (0 - 2) (max possible score 3 - 4)
Team A: - (0 - 2) (max possible score 2 - 4)
Team B: X (0 - 3) (max possible score 2 - 4)
It can be determined that team B wins, however the input has ended, so it's
valid.
Regras
- O time que atira primeiro pode ser A ou B, não se pode presumir que um sempre atire primeiro.
- As listas terão o mesmo comprimento ou diferirão em um.
- Você pode escolher dois valores distintos e consistentes para representar penalidades marcadas / não marcadas.
- As listas também podem ser representadas como números inteiros convertidos da base bijetiva 2, strings ou formato de lista nativa do seu idioma. Se um formato bijetivo de base 2 for escolhido, as regras de entrada se aplicarão aos números convertidos em bijective base 2 (portanto, dígitos
1
e2
podem significar pontuação e sem pontuação ou sem pontuação e pontuação respectivamente). Binário regular não é permitido , pois não é possível determinar a presença de zeros à esquerda na representação binária pretendida. - Isso é código-golfe , então a solução mais curta vence. No entanto, não desanime de responder, mesmo que pareça que seu idioma não possa "superar os especializados".
Casos de teste
Nesses casos de teste, a 0
representará uma meta sem objetivo e a 1
representará uma meta.
Formato:
[Team A], [Team B]
Entradas válidas:
[], []
[0], [0]
[0], [1]
[1], [1]
[0], []
[1, 1, 1, 1], [0, 0, 1, 1]
[0, 1, 1, 1, 1], [0, 1, 1, 0]
[0, 0, 0, 0, 1], [0, 0, 0, 1, 0]
[0, 0, 0, 0, 1], [0, 0, 0, 1]
[1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1]
[1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1]
[0, 1, 1, 1, 1], [0, 1, 1, 0, 1]
[1, 1, 1], [0, 0, 0]
[1, 1, 1, 1], [0, 0, 1]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Entradas inválidas:
[0, 1, 1, 1, 1], [0, 1, 1, 0, 0]
[0, 0, 0, 0, 0, 1], [0, 0, 0, 0, 1, 0]
[0, 0, 0, 0, 0, 1], [0, 0, 0, 0, 1]
[1, 1, 1, 0], [0, 0, 0]
[1, 1, 1, 1], [0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
[1, 0, 1, 0, 1], [0, 1, 0, 1, 0, 1]
[0, 0, 0, 0, 1], [0, 1, 1, 1, 0]
[[0,0],[1,1]]
(ou qualquer caso de teste em que uma das duas listas internas tenha 2 itens) seja verdade, pois o jogo ainda está em andamento (assim como os casos de teste com [[0],[1]]
ou [[0],[]]
ainda estão em andamento)?