Plus tôt, j'ai défini le processus d'écrasement d'un tableau
Dans un écrasement, nous lisons le tableau de gauche à droite. Si, à un moment donné, nous rencontrons deux éléments identiques dans une rangée, nous supprimons le premier et doublons le second.
Par exemple, voici le processus d'écrasement du tableau suivant
[5,2,2,4]
^
[5,2,2,4]
^
[5,2,2,4]
^
[5,4,4]
^
[5,4,4]
^
[5,8]
^
Notez que le même élément peut être réduit plusieurs fois. Dans l'exemple, il 2,2,4s'est effondré en 8un seul passage.
Il est maintenant facile de broyer des tableaux, ce qui est difficile, c'est de les écraser. Votre tâche consiste à prendre un tableau d'entiers positifs en entrée et à sortir le plus grand tableau pouvant former l'entrée lorsqu'il est écrasé à plusieurs reprises. Par exemple, le réseau [4]est formé par écrasement [2,2]qui est à son tour formé par écrasement[1,1,1,1] . Puisque nous ne pouvons pas avoir de valeurs non entières, [1,1,1,1]nous ne pouvons plus les écraser et c'est donc notre réponse.
Vous ne recevrez jamais de 0 dans votre tableau d'entrée car ces tableaux peuvent être étendus indéfiniment. Vous ne recevrez également jamais un cas avec deux du même nombre impair côte à côte, de tels cas ne peuvent pas être le résultat d'un écrasement.
C'est du code-golf donc les réponses seront notées avec la taille de leur source mesurée en octets, moins d'octets étant meilleurs.
Avant de commencer à répondre, je veux juste dire que ce défi est beaucoup plus difficile qu'il n'y paraît. Vérifiez votre intuition au fur et à mesure et assurez-vous que votre réponse passe tous les cas de test.
Cas de test
[] -> []
[5] -> [5]
[6] -> [3,3]
[8] -> [1,1,1,1,1,1,1,1]
[4,8] -> [1,1,1,1,1,1,1,1,1,1,2]
[2,8] -> [1, 1, 1, 1, 2, 1, 1, 1, 1]
[4,4] -> [1,1,1,1,1,1,1,1]
[1,>1,1,1,1,1,1,1,1,1,2], [2,>1,1,1,1,1,1,1,1,2], [2,1,>1,1,1,1,1,1,1,2], [2,2,>1,1,1,1,1,1,2], [2,2,1,>1,1,1,1,1,2], [2,2,2,>1,1,1,1,2], [2,2,2,1,>1,1,1,2], [2,2,2,2,>1,1,2], [2,2,2,2,1,>1,2], [2,2,2,2,2,>2], [2,2,2,2,4>], deuxième passage: [2,>2,2,2,4], [4,>2,2,4], [4,2,>2,4], [4,4,>4],[4,8>] . Espérons que cela clarifie les choses. Si vous souhaitez que du code pour regarder la question précédente a des réponses qui implémentent une fonction d'écrasement.
[4, 4]doit être supprimé, car nous ne pouvons jamais obtenir ce tableau après une séquence stretch => crush, car cela se terminera par[8]
[1,1,1,1,1,1,1,1,1,1,2]produire[4, 8]au lieu de[8, 4]? si cela est[1,>1,1,1,1,1,1,1,1,1,2],[2,1,>1,1,1,1,1,1,1,2],[2,>2,1,1,1,1,1,1,2],[4,1,>1,1,1,1,1,2],[4,2,1,>1,1,1,2],[4,2,>2,1,1,2],[4,>4,1,1,2],[8,1,>1,2],[8,2,>2],[8,4]?