O banco foi invadido e todos os bandidos da máfia local têm um álibi incomum: eles estavam em casa jogando o Connect 4! Para ajudar na investigação, você é solicitado a escrever um programa para validar todas as placas do Connect 4 que foram confiscadas para verificar se as posições são de fato posições de um jogo válido do Connect 4 e não foram montadas às pressas assim que a polícia bateu na porta.
As regras para conectar 4: jogadores R
e Y
revezar-se para soltar peças de sua cor em colunas de uma grade 7x6. Quando um jogador coloca um ladrilho na coluna, ele cai para ocupar a posição mais baixa não preenchida nessa coluna. Se um jogador conseguir obter uma sequência horizontal, vertical ou diagonal de quatro peças de sua cor no tabuleiro, ele vence e o jogo termina imediatamente.
Por exemplo (com R
partida), a seguir é uma posição impossível do Connect 4.
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | |R| | | | |
| | |Y| | | | |
|R| |Y| | | | |
Seu programa ou função deve receber uma placa Connect 4 e retornar
- Um valor falso, indicando que a posição é impossível ou
- Uma cadeia de números de 1 a 7, o que indica uma possível sequência de movimentos que conduzem a que a posição (as colunas são numeradas
1
a7
partir da esquerda para a direita, e portanto a sequência de112
, por exemplo, indica um movimento vermelho na coluna1
, seguido por um movimento amarelo na coluna1
, seguido de um movimento vermelho na coluna2
). Você pode escolher uma numeração de coluna que não seja 1234567, se desejar, desde que você especifique em sua solução. Se você deseja retornar a lista em algum outro formato; por exemplo, como uma matriz[2, 4, 3, 1, 1, 3]
, isso também é bom, desde que seja fácil ver quais são os movimentos.
Você pode ler o quadro em qualquer formato razoável, incluindo o uso de letras que não sejam R
e Y
para os jogadores, mas você deve especificar qual jogador será o primeiro. Você pode assumir que o tabuleiro sempre será 6x7, com dois jogadores.
Você pode assumir que as posições que você recebe são pelo menos fisicamente possíveis de serem criadas em uma placa Connect 4 padrão; isto é, que não haverá peças 'flutuantes'. Você pode assumir que o quadro não ficará vazio.
Isso é código de golfe, então a resposta mais curta vence. Aplicam-se brechas padrão.
Exemplos
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | | --> 1234567 (one possible answer)
| | | | | | | |
|R|Y|R|Y|R|Y|R|
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | |R| | | | | --> false
| | |Y| | | | |
|R| |Y| | | | |
| | | | | | | |
| | |Y| | | | |
| | |R| | | | |
| | |Y| | | | | --> 323333 (only possible answer)
| | |R| | | | |
| |Y|R| | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | | --> false (this is the position arising after
| |Y|Y|Y|Y| | | the moves 11223344, but using those moves
| |R|R|R|R| | | the game would have ended once R made a 4)
| | | | | | | |
| | | | | | | |
|Y| | | | | | |
|R|Y| | | | | | --> 2134231211 (among other possibilities)
|R|R|Y| | | | |
|Y|R|R|Y| | | |
| | | | | | | |
| | | | | | | |
|Y| | | | | | |
|R|Y| | | | | | --> false (for example, 21342312117 does not
|R|R|Y| | | | | work, because Y has already made a diagonal 4)
|Y|R|R|Y| | |R|
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | | --> 112244553 or similar
|Y|Y| |Y|Y| | |
|R|R|R|R|R| | |