In precedenza ho definito il processo di frantumazione di un array
In una cotta leggiamo l'array da sinistra a destra. Se ad un certo punto incontriamo due dello stesso elemento di fila rimuoviamo il primo e raddoppiamo il secondo.
Ad esempio, ecco il processo di compressione del seguente array
[5,2,2,4]
^
[5,2,2,4]
^
[5,2,2,4]
^
[5,4,4]
^
[5,4,4]
^
[5,8]
^
Si noti che lo stesso elemento può essere compresso più volte. Nell'esempio è 2,2,4
stato compresso in 8
un unico passaggio.
Ora schiacciare le matrici è facile, ciò che è difficile le sta schiacciando. Il tuo compito è prendere una matrice di numeri interi positivi come input e produrre la matrice più grande che può formare l'input quando viene schiacciata ripetutamente. Ad esempio l'array [4]
è formato dalla frantumazione [2,2]
che a sua volta è formata dalla frantumazione[1,1,1,1]
. Dal momento che non possiamo avere valori non interi non [1,1,1,1]
possono essere ulteriormente decompressi e quindi è la nostra risposta.
Non riceverai mai un 0
nel tuo array di input perché tali array possono essere espansi indefinitamente. Inoltre non riceverai mai un caso con due dello stesso numero dispari uno accanto all'altro, tali casi non possono essere il risultato di uno schiacciamento.
Questo è code-golf quindi le risposte verranno valutate con la dimensione della loro sorgente misurata in byte con meno byte migliori.
Prima di iniziare a rispondere, voglio solo dire che questa sfida è significativamente più difficile di quanto sembri. Controlla l'intuizione mentre procedi e assicurati che la tua risposta superi tutti i casi di test.
Casi 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>]
, secondo passaggio: [2,>2,2,2,4]
, [4,>2,2,4]
, [4,2,>2,4]
, [4,4,>4]
, [4,8>]
. Spero che questo chiarisca. Se desideri che un codice per esaminare la domanda precedente abbia delle risposte che implementano una funzione di compressione.
[4, 4]
dovrebbe essere rimosso, poiché non potremo mai ottenere quell'array dopo una sequenza di stiramento =>, poiché questo finirà con[8]
[1,1,1,1,1,1,1,1,1,1,2]
produrre[4, 8]
invece di[8, 4]
? questo dovrebbe essere[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]
?