Membantu! Saya sepertinya memiliki gaung yang mengganggu di beberapa array saya, dan saya ingin menyingkirkannya. Ketika ini terjadi, array asli berulang di suatu tempat di tengah menyebabkan nilai ditambahkan satu sama lain.
Misalnya, array [ 422, 375, 527, 375, 859, 451, 754, 451 ]
berisi gema itu sendiri seperti:
[ 422, 375, 527, 375, 859, 451, 754, 451 ] <-- array with echo (input)
[ 422, 375, 105, 0, 754, 451 ] <-- original array (output)
[ 422, 375, 105, 0, 754, 451 ] <-- echo of original array
Contoh 2:
[ 321, 526, 1072, 899, 6563, 798, 7038, 3302, 3032, 3478, 1806, 601 ] <-- input
[ 321, 526, 751, 373, 5812, 425, 1226, 2877, 1806, 601 ] <-- output
[ 321, 526, 751, 373, 5812, 425, 1226, 2877, 1806, 601 ]
Mungkin juga tidak ada gema dalam array, dalam hal ini mengembalikan array asli:
Contoh 3:
[ 623, 533, 494, 382 ] <-- input
[ 623, 533, 494, 382 ] <-- output
Tantangan:
Diberikan array yang mungkin berisi gema, hapus dan kembalikan array tanpa gema.
Memasukkan:
- Array, daftar, string yang dibatasi, kartu berlubang atau setara dengan platform Anda, yang mengandung tiga atau lebih bilangan bulat, dalam kisaran dengan setidaknya satu elemen .
- Gema tidak dapat dimulai pada elemen pertama atau setelah elemen terakhir.
- Gema hanya akan muncul sekali atau tidak sama sekali dalam input.
Keluaran:
- Array, daftar, dll bilangan bulat , dengan gema dihapus.
- Jika tidak ada gema, kembalikan array asli.
Aturan dan penilaian:
- Ini adalah kode-golf , jadi jawaban terpendek dalam byte untuk setiap bahasa menang.
- Aturan standar dan aturan I / O standar berlaku.
- Lubang terlarang (tentu saja).
- Berikan tautan dengan tes untuk kode Anda ( TIO.run , dll).
- Penjelasan yang jelas untuk jawaban Anda sangat dianjurkan.
Kasus uji:
Dengan gema:
[ 422, 375, 527, 375, 859, 451, 754, 451 ]
[ 422, 375, 105, 0, 754, 451 ]
[ 321, 526, 1072, 899, 6563, 798, 7038, 3302, 3032, 3478, 1806, 601 ]
[ 321, 526, 751, 373, 5812, 425, 1226, 2877, 1806, 601 ]
[ 4330, 3748, 363, 135, 2758, 3299, 1674, 1336, 4834, 2486, 4087, 1099, 4098, 4942, 2159, 460, 4400, 4106, 1216, 3257, 1638, 2848, 3616, 3554, 1605, 490, 1308, 2773, 3322, 3284, 4037, 7109, 4171, 5349, 2675, 3056, 4702, 4229, 1726, 5423, 6039, 8076, 6047, 7088, 9437, 4894, 1946, 7501, 5331, 3625, 5810, 6289, 2858, 6610, 4063, 5565, 2200, 3493, 4573, 4906, 3585, 4147, 3748, 3488, 5625, 6173, 3842, 5671, 2555, 390, 589, 3553, 3989, 4948, 2990, 4495, 2735, 1486, 3101, 1225, 2409, 2553, 4651, 10, 2994, 509, 3960, 1710, 2185, 1800, 1584, 301, 110, 969, 3065, 639, 3633, 3544, 4268 ]
[ 4330, 3748, 363, 135, 2758, 3299, 1674, 1336, 4834, 2486, 4087, 1099, 4098, 4942, 2159, 460, 4400, 4106, 1216, 3257, 1638, 2848, 3616, 3554, 1605, 490, 1308, 2773, 3322, 3284, 4037, 2779, 423, 4986, 2540, 298, 1403, 2555, 390, 589, 3553, 3989, 4948, 2990, 4495, 2735, 1486, 3101, 1225, 2409, 2553, 4651, 10, 2994, 509, 3960, 1710, 2185, 1800, 1584, 301, 110, 969, 3065, 639, 3633, 3544, 4268 ]
[ 24, 12, 52, 125, 154, 3, 567, 198, 49, 382, 53, 911, 166, 18, 635, 213, 113, 718, 56, 811, 67, 94, 80, 241, 343, 548, 68, 481, 96, 79, 12, 226, 255, 200, 13, 456, 41 ]
[ 24, 12, 52, 125, 154, 3, 567, 198, 25, 370, 1, 786, 12, 15, 68, 15, 88, 348, 55, 25, 55, 79, 12, 226, 255, 200, 13, 456, 41 ]
[ 1, 3, 2 ]
[ 1, 2 ]
[ 0, 1, 3, 2, 0 ]
[ 0, 1, 2, 0 ]
Tanpa gema:
[ 623, 533, 494, 382 ]
[ 623, 533, 494, 382 ]
[ 1141, 1198, 3106, 538, 3442, 4597, 4380, 3653, 1370, 3987, 1964, 4615, 1844, 5035, 2463, 6345, 4964, 4111, 5192, 8555, 5331, 3331, 4875, 6586, 5728, 4532, 5972, 2305, 3491, 6317, 2256, 2415, 5788, 4873, 6480, 2080, 5319, 4551, 6527, 5267, 4315, 2178, 2615, 5735, 5950, 6220, 7114, 6259, 5000, 4183, 6822, 6927, 7150, 8003, 5603, 3154, 8231, 5005, 5743, 6779, 4530, 4029, 5336, 6105, 4777, 6183, 6838, 5725, 6819, 8584, 3142, 3840, 3291, 4284, 2933, 4859, 2906, 5176, 2853, 2110, 2048, 4389, 4501, 2267, 2704, 431, 1495, 2712, 3008, 187, 3487, 630 ]
[ 1141, 1198, 3106, 538, 3442, 4597, 4380, 3653, 1370, 3987, 1964, 4615, 1844, 5035, 2463, 6345, 4964, 4111, 5192, 8555, 5331, 3331, 4875, 6586, 5728, 4532, 5972, 2305, 3491, 6317, 2256, 2415, 5788, 4873, 6480, 2080, 5319, 4551, 6527, 5267, 4315, 2178, 2615, 5735, 5950, 6220, 7114, 6259, 5000, 4183, 6822, 6927, 7150, 8003, 5603, 3154, 8231, 5005, 5743, 6779, 4530, 4029, 5336, 6105, 4777, 6183, 6838, 5725, 6819, 8584, 3142, 3840, 3291, 4284, 2933, 4859, 2906, 5176, 2853, 2110, 2048, 4389, 4501, 2267, 2704, 431, 1495, 2712, 3008, 187, 3487, 630 ]
[ 4791, 1647, 480, 3994, 1507, 99, 61, 3245, 2932, 8358, 6618, 1083, 5391, 3498, 4865, 1441, 3729, 5322, 5371, 6271, 2392, 1649, 5553, 9126, 3945, 2179, 3672, 2201, 4433, 5473, 4924, 6585, 6407, 3862, 6505, 1530, 5293, 4792, 6419, 6739, 3258, 3839, 3891, 7599, 2576, 5969, 5659, 6077, 5189, 1325, 4490, 5694, 6567, 6367, 5724, 5756, 6450, 5863, 4360, 2697, 3100, 3779, 4040, 4653, 1755, 3109, 2741, 3269 ]
[ 4791, 1647, 480, 3994, 1507, 99, 61, 3245, 2932, 8358, 6618, 1083, 5391, 3498, 4865, 1441, 3729, 5322, 5371, 6271, 2392, 1649, 5553, 9126, 3945, 2179, 3672, 2201, 4433, 5473, 4924, 6585, 6407, 3862, 6505, 1530, 5293, 4792, 6419, 6739, 3258, 3839, 3891, 7599, 2576, 5969, 5659, 6077, 5189, 1325, 4490, 5694, 6567, 6367, 5724, 5756, 6450, 5863, 4360, 2697, 3100, 3779, 4040, 4653, 1755, 3109, 2741, 3269 ]
[ 235, 121, 52, 1249, 154, 26, 5672, 1975, 482, 3817, 532, 9104, 1661, 171, 6347, 2124, 1122, 7175, 558, 8101, 667, 934, 798, 2404, 3424, 5479, 672, 4808, 956, 789, 123, 2255, 2549, 200, 126, 4562, 41 ]
[ 235, 121, 52, 1249, 154, 26, 5672, 1975, 482, 3817, 532, 9104, 1661, 171, 6347, 2124, 1122, 7175, 558, 8101, 667, 934, 798, 2404, 3424, 5479, 672, 4808, 956, 789, 123, 2255, 2549, 200, 126, 4562, 41 ]
[ 1, 1, 1, 1, 1 ]
[ 1, 1, 1, 1, 1 ]
[1, 2, 2, 2, 1]
; Output:[1, 1, 1, 1]
vs.[1, 2, 1]
[1, 2, 3, 1, 2, 3]
,[1, 2, 3, 0, 1, 2, 3]
,[0, 1, 3, 2, 0]
? Jawaban saat ini tidak menyetujui semua input ini.[1, 1, 1, 1]
vs.[1, 2, 1]
) dapat diterima. Saya awalnya punya aturan tentang yang harus dipilih, tetapi melepasnya di sandbox karena sepertinya hanya berlaku untuk sejumlah kecil tepi kasus.[0, 1, 3, 2, 0]
seharusnya[0, 1, 2, 0]
- Saya telah menambahkan ke dalam kasus uji. Jawaban yang diharapkan pada dua lainnya bisa jadi[1, 2, 3]
saya tidak akan mempertimbangkan kasus uji yang valid karena menurut aturanthe original array repeats itself somewhere in the middle
.[0,0,0]
(atau semua0
array ukuran) mewakili gema apa pun atau jika[0,0,0]
(tidak ada gema) juga akan menjadi jawaban yang valid untuk kasus khusus ini juga, karena tidak ada informasi yang cukup untuk menentukan yang mana ini. Saya akan memperbarui aturan untuk membatasi ini menjadi input yang valid, karena itu tidak akan membatalkan atau mengubah jawaban yang ada.Jawaban:
MATL , 16 byte
Cobalah online! Atau verifikasi semua kasus uji .
Penjelasan
Divisi polinomial untuk menang!
sumber
Haskell , 167 byte
Pertama, penting untuk memperhatikan bahwa jika ada gema hadir, maka array input adalah lilitan array lain dengan beberapa array bentuk
[1,1],[1,0,1],[1,0,0,1],...
.Ini berarti kita hanya perlu memeriksa ini untuk semua array ini. Tetapi konvolusi / dekonvolusi diskrit sama dengan perkalian polinomial / pembagian panjang, jadi ini hanyalah implementasi menggunakan polinomial, setiap kali mengembalikan hasil bagi jika memungkinkan.
Salah satu trik yang sedikit memperpendek semuanya adalah selain array di atas juga memeriksa
[1]
sebagai kasus dasar, karena jika tidak ada array lain bekerja, dekonvolusi dengan[1]
akan bekerja dan akan mengembalikan polinomial asli.Cobalah online!
sumber
JavaScript ,
211171145 byteCobalah online
40 byte dari Kevin Cruijssen
Lain 26 byte dari Arnauld
Kode golf pertama saya menjawab, membatalkan potensi offset, dan mengembalikan array asli atau baru bergantung pada apa yang ditemukannya. Jika ada yang tahu bagaimana membuatnya lebih pendek, tolong beri tahu saya, sepertinya ini permainan yang menyenangkan.
sumber
++
, mengubah&&
ke&
dalam cek pertama, mengubah baik.toString()
untuk+''
, dll) saya mendapat kode Anda ke 181 byte . Jika Anda belum melihatnya, Tip untuk bermain golf di JavaScript dan Tips untuk bermain golf dalam semua bahasa mungkin menarik untuk dibaca. :)function q(s)
bisas=>
): 171 byte . Selamat menikmati! :)Haskell,
112111110 byteCobalah online!
sumber
Bahasa Wolfram (Mathematica) ,
13112912011910298979695 byteCobalah online!
Byte1 byte berkat attinat : kita bisa menulis
L=Tr[1^#]
alih-alihL=Length@#
ketika argumennya adalah daftar angka.Penjelasan kode: Iterasi melalui penyusutan
d
(perbedaan antara panjang input dan output). Untuk setiap panjang daftar output, buat daftar yang tidak diketahuiv={x[1],x[2],...,x[L-d]}
dan tambahkan ke dirinya sendiri dengan bantalan kiri dan bantalan kanan ke panjangL
(PadLeft[v,L]+PadRight[v,L]
), kemudian atur jumlah ini sama dengan daftar input dan pecahkan untuk yang tidak diketahuix[1]...x[L-d]
. Pilih solusi terpendek, yang merupakan yang terakhir dihasilkan: teruslah menimpa variabelw
setiap kali solusi ditemukan.Versi tidak golf:
sumber
Tr[1^#]
bukannyaLength@#
Jelly ,
2524 byteCobalah online!
Tautan monadik yang mengambil dan mengembalikan daftar bilangan bulat. Secara teknis, hasil yang sukses bersarang dalam dua daftar lebih lanjut, tetapi ketika dijalankan sebagai program lengkap, output implisit ke stdout mengabaikan daftar yang berlebihan.
sumber
Python 2 ,
113123128127123122 byteCobalah online!
1 byte thx ke TFeld ; dan 1 byte thx ke Sebastian Kreft .
Pada setiap panggilan ke
f
, kami membuat gema panjang potensiallen(a)-i
. Bagian pertama hanyalahi
byte pertama dari; sisanya dihitung sehingga 'jumlah gema' akan benar untuk bagian 'tumpang tindih' dari jumlah gema (yaitu, jumlah gema benar hinggaa[:-i]
).Kemudian perbandingan yang sangat singkat, un-golf, memberikan:
sumber
e+=[v-e[-i]]
bisae+=v-e[-i],
i<=len(a)/2
Bahasa Wolfram (Mathematica) , 93 byte
Cobalah online!
Mengembalikan hadir gema terpendek dalam daftar.
sumber
{1,1,1}
dan terus{1,0,1}
.{1,1,1}
tidak ada gema, jadi Anda harus mengembalikan array asli. Karena{1,0,1}
saya akan mengatakan gema{1}
tetapi mengakui itu agak tidak jelas apa aturannya.PHP , 124 byte
Cobalah online!
Penjelasan:
Buat salinan array input dan loop melalui masing-masing kemungkinan offset gema. Untuk setiap kolom, kurangi nilai di posisi offset dari nilai yang sesuai di posisi awal untuk menentukan nilai yang diperlukan untuk menambah input. Jika itu valid (> 0 ), ganti konten kolom itu dengan nilai itu. Lanjutkan ke akhir dan jika tidak ada nilai yang tidak valid, itu adalah jawaban yang benar.
sumber
Python 3 , 111 byte
Cobalah online!
Solusi ini mengambil beberapa ide dari solusi @Chas Brown seperti struktur rekursif dan pembangunan array output. Sementara itu, ia juga membuat beberapa perubahan dalam kriteria penilaian serta menempatkan loop for ke dalam ekspresi generator untuk memungkinkan solusi single-line. Versi ungolfed ditampilkan sebagai berikut. Di sini, array
out
dihitung sampai ujung array input dan kemudian kita periksa apakahl
elemen terakhir semuanya nol. Jika demikian,len(arr)-l
elemen pertama dikembalikan sebagai jawaban jika semuanya non-negatif.Versi tidak digabungkan, non-rekursif
Cobalah online!
sumber
Arang , 62 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Asumsikan tidak ada gema.
Coba semua titik awal gema yang mungkin. Catatan: Saya mungkin salah membaca pertanyaan dan mungkin tidak mencoba ukuran gema yang cukup, dalam hal
⊘
ini tidak perlu.Mulailah dengan larik nol dengan ukuran yang sama dengan titik awal gema.
Untuk setiap elemen dalam array asli, kurangi elemen dalam array echo secara siklikal darinya. Setiap elemen dalam array gema dengan demikian membangun jumlah bergantian dari elemen-elemen yang terpisah.
Jika semua jumlah bolak-balik adalah nol, maka simpan ini sebagai titik awal yang memungkinkan. (Jadi jika ada lebih dari satu kemungkinan maka titik awal yang paling mungkin digunakan.)
Bangun array gema dengan mengurangi elemen setelah titik awal dari elemen yang dihitung sebelumnya yang sesuai.
Keluarkan ke string untuk output implisit pada baris terpisah.
sumber