Früher habe ich den Prozess des Zerquetschens eines Arrays definiert
In einem Schwarm lesen wir das Array von links nach rechts. Wenn wir an einem Punkt zwei gleiche Elemente in einer Reihe antreffen, entfernen wir das erste und verdoppeln das zweite.
Hier ist zum Beispiel der Prozess des Zerquetschens des folgenden Arrays
[5,2,2,4]
^
[5,2,2,4]
^
[5,2,2,4]
^
[5,4,4]
^
[5,4,4]
^
[5,8]
^
Beachten Sie, dass dasselbe Element mehrmals reduziert werden kann. In dem Beispiel 2,2,4
wurde 8
in einem einzigen Durchgang zusammengefasst.
Jetzt ist es ganz einfach, Arrays zu zerkleinern. Ihre Aufgabe ist es, ein Array positiver Ganzzahlen als Eingabe zu verwenden und das größte Array auszugeben, das die Eingabe bilden kann, wenn es wiederholt zerkleinert wird. Beispielsweise wird die Anordnung [4]
durch Zerkleinern gebildet, [2,2]
das wiederum durch Zerkleinern gebildet wird [1,1,1,1]
. Da wir keine ganzzahligen Werte haben [1,1,1,1]
können, können wir sie nicht weiter auflösen und sind somit unsere Antwort.
0
In Ihrem Eingabearray wird niemals ein angezeigt, da solche Arrays auf unbestimmte Zeit erweitert werden können. Sie werden auch niemals einen Fall mit zwei gleichen ungeraden Zahlen nebeneinander erhalten. Solche Fälle können nicht das Ergebnis einer Quetschung sein.
Dies ist Codegolf, daher werden Antworten mit der Größe ihrer Quelle in Byte bewertet, wobei weniger Byte besser sind.
Bevor Sie mit der Beantwortung beginnen, möchte ich nur sagen, dass diese Herausforderung wesentlich schwieriger ist, als es scheint. Überprüfen Sie Ihre Intuition und stellen Sie sicher, dass Ihre Antwort alle Testfälle besteht.
Testfälle
[] -> []
[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>]
, zweiter Durchlauf: [2,>2,2,2,4]
, [4,>2,2,4]
, [4,2,>2,4]
, [4,4,>4]
, [4,8>]
. Hoffentlich klärt das alles auf. Wenn Sie möchten, dass sich ein Code die vorherige Frage ansieht, gibt es Antworten, die eine Brechfunktion implementieren.
[4, 4]
sollte entfernt werden, da wir dieses Array nach einer Stretch => Crush-Sequenz nie mehr bekommen können, da dies mit[8]
[1,1,1,1,1,1,1,1,1,1,2]
produzieren[4, 8]
statt[8, 4]
? sollte dies sein[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]
?