先ほど、配列を粉砕するプロセスを定義しました
クラッシュでは、配列を左から右に読み取ります。ある時点で2つの同じ要素が連続して出現した場合、最初の要素を削除し、2番目の要素を2倍にします。
例は、次の配列を粉砕するプロセスです
[5,2,2,4]
^
[5,2,2,4]
^
[5,2,2,4]
^
[5,4,4]
^
[5,4,4]
^
[5,8]
^
同じ要素を複数回折りたたむことができることに注意してください。この例で2,2,4は8、1回のパスで折りたたまれました。
配列の粉砕は簡単になりましたが、難しいのは配列を粉砕することです。あなたの仕事は、正の整数の配列を入力として受け取り、繰り返し押しつぶされたときに入力を形成できる最大の配列を出力することです。たとえば、配列[4]は粉砕によって形成され、粉砕[2,2]は粉砕によって形成され[1,1,1,1]ます。非整数値を持つ[1,1,1,1]ことはできないため、これ以上クラッシュさせることはできず、それが答えです。
この0ような配列は無期限に拡張できるため、入力配列でa を受け取ることはありません。また、同じ奇数の番号が2つ並んでいるケースを受け取ることはありません。そのようなケースは、粉砕の結果ではありません。
これはコードゴルフであるため、回答はバイト単位で測定されたソースのサイズでスコアリングされ、バイト数は少ない方が良いです。
答えを始める前に、この挑戦は見かけよりもはるかに難しいと言いたいだけです。進むにつれて直観を確認し、答えがすべてのテストケースに合格することを確認します。
テストケース
[] -> []
[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>]、第二のパス:[2,>2,2,2,4]、[4,>2,2,4]、[4,2,>2,4]、[4,4,>4]、[4,8>]。うまくいけばそれで解決するでしょう。いくつかのコードに前の質問を見てもらいたい場合は、クラッシュ関数を実装する回答があります。
[4, 4]、我々はストレッチした後、その配列を得ることはできないとして、削除する必要があります=>クラッシュシーケンス、これはとなってしまいますので、[8]
[1,1,1,1,1,1,1,1,1,1,2]プロデュース[4, 8]するの[8, 4]ですか?これはする必要がありますか[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]?