Acabei de enviar uma resposta a esta pergunta e, em seguida, observei algumas notícias sobre a mania da loteria MegaMillions que está acontecendo agora nos EUA. Este artigo dizia que um indivíduo comprou US $ 20.000 em ingressos de uma só vez (são 20.000 conjuntos de números para confirmar!) Para tentar testar sua sorte.
Isso me levou a pensar em como determinar rapidamente se eles ganharam ou não algum prêmio, e não apenas um jackpot, em uma grande quantidade de ingressos comprados.
O desafio então é o seguinte:
Visão geral:
Escreva uma função ou programa que aceite uma sequência de números como argumento (STDIN ou leia a partir de um arquivo, sua escolha) e retorne os números dos tickets com pelo menos o pagamento mínimo concedido.
Detalhes do código:
- A entrada consistirá em uma série de linhas, uma para cada ingresso comprado. Os números vencedores serão prefixados com 0, enquanto os números sorteados serão prefixados com um número incrementado começando em 1. (veja o exemplo)
- A entrada deve ser um conjunto completamente aleatório de números a cada vez, incluindo empates e números vencedores.
- A entrada deve aceitar qualquer número de tickets n em que 1 <= n <= 20.000. (Suponha que nenhum bilhete seja executado.)
- Cada linha de entrada terá 7 números por linha. Um para o prefixo mencionado acima, 5 para as bolas padrão e um adicional para a bola 'match'. (veja detalhes da loteria abaixo)
- A entrada pode ser delimitada da maneira que você desejar (espaço em branco, ponto e vírgula, etc.)
- O resultado deve ser uma lista de todos os empates vencedores e o valor vencedor. (Então você sabe qual entregar.)
- A listagem de saída deve ser ordenada pelo valor da vitória. (Quem se importa se você ganhou US $ 2 em um bilhete, se você também ganhou US $ 10.000 em outro ???)
- Quando mais de um ticket ganha a mesma quantia, a ordem desses tickets é irrelevante.
- A saída também deve fornecer uma lista do valor total ganho.
Detalhes da loteria:
- As regras padrão para o jogo MegaMillions serão aplicadas, já que é o que há de mais quente no momento.
- Os sorteios consistem em seis números de dois grupos de números separados - cinco números diferentes de 1 a 56 e um número (a bola da partida) de 1 a 46.
- O jackpot é ganho combinando todos os seis números vencedores em um desenho.
Os prêmios por ganhos que não são do jackpot são concedidos da seguinte forma (veja a imagem abaixo).
(Principal) + (Correspondência) = (Pagamento)
5 + 1 = Jackpot
5 + 0 = $ 250.000
4 + 1 = $ 10.000
4 + 0 = $ 150
3 + 1 = $ 150
3 + 0 = $ 7
2 + 1 = $ 10
1 + 1 = $ 3
0 + 1 = $ 2Suponha que o jackpot atual seja de US $ 1.000.000 (um milhão).
- Assuma apenas um vencedor do jackpot, a menos que seu sorteio aleatório faça o mesmo sorteio do jackpot mais de uma vez (você está trapaceando?) .
- Suponha que não haja regras multiplicadoras / da Califórnia em jogo.
Detalhes do Desafio:
- Isso é código de golfe, então o código mais curto vence.
- Em caso de empate, aceitarei a resposta mais votada. Eu sei que isso é um pouco subjetivo, mas o ponto principal ainda é o placar.
Exemplo:
Entrada:
0 2 4 23 38 46 23
1 17 18 22 23 30 40
2 2 5 24 37 45 23
3 4 23 38 40 50 9
4 2 4 23 38 46 17
5 5 16 32 33 56 46
Resultado:
4 - $250,000
3 - $7
2 - $3
Total Winnings: $250,010
Respostas:
Python, 239 caracteres
Supondo que os números de entrada sejam separados por vírgula.
fonte
1e4
, etc. (eu deveria ter sabido desde o início!)VBA (
660535 caracteres)Supondo que delimitador é um espaço (
" "
) ...fonte
Select Case
emChoose()
Choose()
... Isso é uma coisa boa para postar em codegolf.stackexchange.com/questions/5175/...Debug.?r& "Total Winnings:" &Format(q,"$#,##0")
e remover os espaços em branco em concatenationsFor i=1 To 5
ou como loop que pode ser condensado paraFor I=1To 5
Javascript, 353 bytes
ungolfed:
Provavelmente poderia derrubar alguns caracteres que: D
fonte