Sebelumnya saya mendefinisikan proses penghancuran array
Dalam naksir kita membaca array kiri ke kanan. Jika pada suatu titik kita menemukan dua elemen yang sama dalam satu baris, kita menghapus yang pertama dan menggandakan yang kedua.
Sebagai contoh di sini adalah proses menghancurkan array berikut
[5,2,2,4]
^
[5,2,2,4]
^
[5,2,2,4]
^
[5,4,4]
^
[5,4,4]
^
[5,8]
^
Perhatikan bahwa elemen yang sama dapat diciutkan beberapa kali. Dalam contoh 2,2,4
itu runtuh menjadi 8
dalam satu pass.
Sekarang menghancurkan array itu mudah, yang sulit adalah menghancurkannya. Tugas Anda adalah mengambil array bilangan bulat positif sebagai input dan output array terbesar yang dapat membentuk input ketika dihancurkan berulang kali. Misalnya array [4]
dibentuk dengan menghancurkan [2,2]
yang pada gilirannya dibentuk oleh menghancurkan [1,1,1,1]
. Karena kita tidak dapat memiliki nilai [1,1,1,1]
- nilai non integer tidak dapat dihapus lebih lanjut dan dengan demikian adalah jawaban kami.
Anda tidak akan pernah menerima 0
dalam array input Anda karena array tersebut dapat diperluas tanpa batas waktu. Anda juga tidak akan pernah menerima kasing dengan dua nomor ganjil yang sama di sebelah satu sama lain, kasing seperti itu tidak bisa merupakan hasil penghancuran.
Ini adalah kode-golf sehingga jawaban akan dinilai dengan ukuran sumbernya yang diukur dalam byte dengan lebih sedikit byte yang lebih baik.
Sebelum Anda mulai menjawab, saya hanya ingin mengatakan bahwa tantangan ini jauh lebih sulit daripada yang terlihat. Periksa intuisi Anda saat Anda melanjutkan dan pastikan jawaban Anda melewati semua kasus uji.
Uji Kasus
[] -> []
[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>]
, kedua pass: [2,>2,2,2,4]
, [4,>2,2,4]
, [4,2,>2,4]
, [4,4,>4]
, [4,8>]
. Semoga itu jelas. Jika Anda ingin beberapa kode untuk melihat pertanyaan sebelumnya memiliki jawaban yang mengimplementasikan fungsi penghancuran.
[4, 4]
harus dilepas, karena kita tidak akan pernah mendapatkan array setelah urutan stretch => crush, karena ini akan berakhir dengan[8]
[1,1,1,1,1,1,1,1,1,1,2]
menghasilkan[4, 8]
bukan[8, 4]
? hal ini harus[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]
?