Introdução
Após uma longa batalha, você conseguiu derrotar uma Esfinge em um concurso de enigmas. A Esfinge, impressionada com sua habilidade, deseja lhe dar uma recompensa proporcional à sua esperteza e evoca uma tira de pergaminho mágico dividida em oito caixas, cada uma contendo um numeral.
"Enrugue o pergaminho", diz a Esfinge, "de modo que as caixas se sobreponham, e essas caixas se fundirão por adição ou multiplicação. Quando uma caixa permanecer, seu valor será sua recompensa em moedas de ouro".
Tarefa
Você deve escrever um programa ou função que tenha como entrada uma lista / matriz / qualquer um dos oito números naturais e retorne / imprima a recompensa máxima possível obtida por meio de uma série de operações de 'vinco'.
Mecânica
A operação 'vinco' é realizada em algum número de células e com +
ou *
como operador. As primeiras n células da lista são dobradas e mescladas com as células de destino usando o operador. Quaisquer células que não são consumidas na operação de mesclagem são deixadas sem modificação.
Aqui está um exemplo de vincagem usando n = 3 células:
usando qualquer adição, o que resultaria nisso:
ou multiplicação, o que resultaria nisso:
Nota: Por simplicidade, vincar com menos de 1 célula não é permitido, assim como vincar com um número de células maior ou igual ao comprimento da lista. No entanto, uma lista pode dobrar em mais da metade da contagem de células.
Uma lista de 8 células pode ser dobrada por 5, resultando em uma nova lista de comprimento 5:
[0,1,2,3,4,5,6,7]
dobrada por 5 células usando o +
operador [9,9,9,1,0]
.
Pontuação
Regras padrão de código de golfe - o código que produz a saída correta e possui o menor número de bytes ganha.
Bônus: Se o seu código também retorna / imprime a sequência de operações de dobra que leva à recompensa máxima, multiplique sua pontuação por 0,8. A saída de exemplo pode parecer com:
crease 5 +
crease 2 *
crease 2 +
crease 1 *
Exemplos
Teste seu código usando essas entradas e resultados, na forma de input - maximum reward
:
[0, 1, 2, 3, 4, 5, 6, 7] - 7560
[0, 9, 0, 3, 2, 6, 1, 5] - 1944
[0, 1, 0, 3, 0, 2, 0, 4] - 36
[6, 0, 9, 1, 9, 0, 7, 3] - 11907
[0, 5, 2, 0, 1, 3, 8, 8] - 2560
fonte
Respostas:
Pitão, 31 bytes
Isso define uma função
y
, que calcula o valor do vinco.Demonstração.
Isso usa o método recusivo, obtendo o máximo da pontuação de todos os sucessores possíveis.
O caso base da recursão é implementado concatenando a entrada para os valores classificados dos possíveis sucessores e, em seguida, finalizando a lista resultante. Se houver apenas 1 elemento na entrada, não haverá sucessores e, portanto, o final da lista é o único elemento na entrada.
fonte
C #,
275272 bytesÉ simplesmente uma função recursiva que percorre todos os ramos e retorna a melhor pontuação.
Recuado para maior clareza:
fonte