Esta é uma "contraparte" de outro quebra-cabeça, oito moedas para o rei justo no Puzzling.SE.
Você pode ler o quebra-cabeça acima como pano de fundo. Os detalhes sobre esse quebra-cabeça são os seguintes.
Um conjunto de 8 tipos de moedas de valores diferentes é criado; o rei deseja que você descubra o N máximo, de modo que qualquer número de preço de 0 a N possa ser pago com uma combinação de não mais que 8 moedas e sem encargos.
Por exemplo, (retirado da resposta de Glorfindel). Se um conjunto de moedas dos valores 1, 2, 5, 13, 34, 89, 233, 610 for fornecido, seu programa deverá gerar 1596, porque todo número entre 0 e 1596 (inclusive) pode ser representado pela soma de não mais que de 8 números da lista fornecida (os números podem se repetir), enquanto 1597 não pode ser representado dessa maneira.
De maneira matemática, se a entrada for um conjunto S composto por 8 números inteiros positivos, a saída N desejada satisfaz que, para qualquer número n entre 0 e N, existem x1, x2, x3, ..., x8, de modo que
Seu objetivo é escrever um programa, uma função ou um trecho que aceite 8 números como entrada e gerar o máximo de N, conforme descrito acima.
Regras:
- É permitida E / S flexível, para que seu programa possa receber a entrada da forma que for mais adequada. Você pode assumir que os números de entrada são classificados da maneira que melhor se adequar ao seu programa.
- Por favor, indique na sua resposta se o seu programa depende da ordem de entrada
- A entrada é um conjunto de 8 números inteiros positivos diferentes (sem zeros). A saída é um número inteiro não negativo.
- Caso não exista 1 no conjunto de entrada, seu programa deve gerar 0 porque qualquer número de 0 a 0 satisfaz o requisito.
- No caso de entrada inválida (o conjunto contém zero, números negativos ou duplicados), seu programa pode fazer qualquer coisa.
- As brechas padrão são proibidas.
- Seu programa deve ser executado dentro de alguns minutos em um computador moderno.
Casos de teste (principalmente extraídos das respostas da pergunta vinculada no Puzzling):
[1, 2, 3, 4, 5, 6, 7, 8] => 64
[2, 3, 4, 5, 6, 7, 8, 9] => 0
[1, 3, 4, 5, 6, 7, 8, 9] => 72
[1, 2, 5, 13, 34, 89, 233, 610] => 1596
[1, 5, 16, 51, 130, 332, 471, 1082] => 2721
[1, 6, 20, 75, 175, 474, 756, 785] => 3356
Este é um código de golfe , portanto, o programa ou trecho mais curto em cada idioma vence!