Acabo de enviar una respuesta a esta pregunta , y luego miré algunas noticias sobre la moda de la lotería MegaMillions que está ocurriendo ahora en los Estados Unidos. Este artículo informativo afirma que una persona compró boletos por un valor de $ 20,000 al mismo tiempo (¡eso es 20,000 conjuntos de números para confirmar!) Para probar y probar su suerte.
Eso me llevó a pensar en cómo uno podría determinar rápidamente si habían ganado o no algún premio, no solo un premio gordo, en una gran cantidad de boletos que habían comprado.
El desafío entonces es este:
Visión general:
Escriba una función o programa que acepte una cadena de números como argumento (STDIN, o lea desde un archivo, su elección), y devuelva los números de los boletos con al menos el pago mínimo otorgado.
Detalles del código:
- La entrada consistirá en una serie de líneas, una por cada boleto comprado. Los números ganadores tendrán el prefijo 0, mientras que los números sorteados tendrán el prefijo un número incrementado que comienza en 1. (ver ejemplo)
- La entrada debe ser un conjunto de números completamente aleatorio cada vez, incluidos sorteos y números ganadores.
- La entrada debe aceptar cualquier número de tickets n donde 1 <= n <= 20,000. (Suponga que no se ejecuta ningún ticket 0).
- Cada línea de entrada tendrá 7 números por línea. Uno para el prefijo mencionado anteriormente, 5 para las bolas estándar y uno adicional para la bola de 'partido'. (ver detalles de la lotería a continuación)
- La entrada se puede delimitar de la forma que desee (espacios en blanco, punto y coma, etc.)
- El resultado debe ser una lista de todos los sorteos ganadores y la cantidad ganadora. (Entonces ya sabes a quién entregar)
- La lista de salida debe ordenarse por cantidad de ganancias. (¿A quién le importa si ganó $ 2 en un boleto si también ganó $ 10,000 en otro ???)
- Cuando más de un boleto gana la misma cantidad, el orden de esos boletos es irrelevante.
- El resultado también debe dar una lista de la cantidad total ganada.
Detalles de la lotería:
- Se aplicarán las reglas estándar para el juego MegaMillions , ya que eso es lo que está de moda en este momento.
- Los sorteos consisten en seis números de dos grupos separados de números: cinco números diferentes del 1 al 56 y un número (la bola del partido) del 1 al 46.
- El premio gordo se gana haciendo coincidir los seis números ganadores en un sorteo.
Los premios por premios que no son de jackpot se otorgan de la siguiente manera (ver imagen a continuación)
(Principal) + (Igualar) = (Pago)
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 = $ 2Suponga que el bote actual es de $ 1,000,000 (un millón).
- Asumir único ganador del premio mayor, a menos que su sorteo tira del mismo bote recoger más de una vez (estás engañando?) .
- Suponga que no hay multiplicador / las reglas de California están en juego.
Detalles del desafío:
- Este es el código de golf, por lo que gana el código más corto.
- En caso de empate, tomaré la respuesta más votada. Sé que esto es algo subjetivo, pero el punto principal sigue siendo el puntaje.
Ejemplo:
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
Salida:
4 - $250,000
3 - $7
2 - $3
Total Winnings: $250,010
Respuestas:
Python, 239 caracteres
Suponiendo que los números de entrada están separados por comas.
fuente
1e4
, etc. (¡debería haberlo sabido desde el principio!)VBA (
660535 caracteres)Suponiendo que delimitador es un espacio (
" "
) ...fuente
Select Case
enChoose()
Choose()
... Esto es algo bueno para publicar en codegolf.stackexchange.com/questions/5175/…Debug.?r& "Total Winnings:" &Format(q,"$#,##0")
y eliminando espacios en blanco en las concatenacionesFor i=1 To 5
bucle o similar que se pueda condensarFor I=1To 5
Javascript, 353 bytes
sin golf:
Probablemente podría eliminar algunos caracteres de eso: D
fuente