introduction
Après une longue bataille, vous avez réussi à vaincre un Sphinx dans un concours d'énigmes. Le Sphinx, impressionné par votre habileté, souhaite vous donner une récompense à la mesure de votre intelligence et crée une bande de parchemin magique divisée en huit cases contenant chacune un chiffre.
"Pliez le parchemin", dit le Sphinx, "de telle sorte que les boîtes se chevauchent, et ces boîtes fusionneront soit par addition soit par multiplication. Quand une boîte restera, sa valeur sera votre récompense en pièces d'or."
Tâche
Vous devez écrire un programme ou une fonction qui prend en entrée une liste / tableau / n'importe lequel des huit nombres naturels, et retourne / imprime la récompense maximale possible pouvant être obtenue par une série d'opérations de «pli».
Mécanique
L'opération de «pli» est effectuée sur un certain nombre de cellules et avec +
ou *
comme opérateur. Les n premières cellules de la liste sont repliées et fusionnées avec leurs cellules de destination à l'aide de l'opérateur. Toutes les cellules qui ne sont pas consommées dans l'opération de fusion ne sont pas modifiées.
Voici un exemple de rainage utilisant n = 3 cellules:
en utilisant l'une ou l'autre addition, ce qui entraînerait ceci:
ou la multiplication, ce qui entraînerait ceci:
Remarque: Par souci de simplicité, le rainage avec moins de 1 cellule est interdit, tout comme le rainage avec un nombre de cellules supérieur ou égal à la longueur de la liste. Cependant, une liste peut être augmentée de plus de la moitié de son nombre de cellules.
Une liste de 8 cellules peut être augmentée de 5, résultant en une nouvelle liste de longueur 5:
[0,1,2,3,4,5,6,7]
augmentée de 5 cellules en utilisant l' +
opérateur donnerait [9,9,9,1,0]
.
Notation
Règles de golf de code standard - le code qui produit une sortie correcte et qui a le moins de victoires d'octets.
Bonus: si votre code retourne / imprime également la séquence d'opérations de pli qui mène à la récompense maximale, multipliez votre score par 0,8. La sortie d'exemple pourrait ressembler à:
crease 5 +
crease 2 *
crease 2 +
crease 1 *
Exemples
Testez votre code à l'aide de ces entrées et résultats, sous la forme 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
la source
Réponses:
Pyth, 31 octets
Ceci définit une fonction,
y
qui calcule la valeur du pli.Manifestation.
Celui-ci utilise la méthode récursive, en prenant le maximum du score de chaque successeur possible.
Le cas de base de la récursivité est implémenté en concaténant l'entrée aux valeurs triées des successeurs possibles, puis en prenant la fin de la liste résultante. S'il n'y a qu'un seul élément dans l'entrée, il n'y a pas de successeurs, et donc la fin de la liste est le seul élément dans l'entrée.
la source
C #,
275272 octetsC'est simplement une fonction récursive qui traverse chaque branche et renvoie le meilleur score.
En retrait pour plus de clarté:
la source