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,4
s'est effondré en 8
un 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]
?