Tantangan
Anda diberi array dari integer. Dengan gerakan, Anda dapat menambah atau mengurangi elemen array sebanyak 1 . Tugas Anda adalah untuk menyamakan array, yaitu membuat semua elemen array sama dengan melakukan beberapa gerakan . Tapi itu tidak cukup! Anda juga ingin membuat gerakan sesedikit mungkin .
Memasukkan
- Sebuah non-kosong array yang bilangan bulat
- Opsional, panjang dari .
Keluaran
- The jumlah minimum bergerak dibutuhkan untuk menyamakan array .
Aturan
- Aturan standar untuk pengiriman yang valid , I / O , celah berlaku.
- Ini adalah kode-golf , sehingga solusi terpendek (dalam byte) menang. Seperti biasa, jangan biarkan solusi yang sangat pendek dalam bahasa golf mencegah Anda untuk mengirim jawaban yang lebih panjang dalam bahasa pilihan Anda.
- Ini bukan aturan, tetapi jawaban Anda akan lebih baik diterima jika itu termasuk tautan untuk menguji solusi dan penjelasan tentang cara kerjanya.
Contohnya
Input --> Output
[10] --> 0
[-1, 0, 1] --> 2
[4, 7] --> 3
[6, 2, 3, 8] --> 9
[5, 8, 12, 3, 2, 8, 4, 5] --> 19
[1,10,100] --> 99
code-golf
array-manipulation
Delfad0r
sumber
sumber
Median
agak terlalu sulit untuk beberapa bahasa esoteris.JavaScript (Node.js) ,
5048 byteDisimpan 2 byte berkat Arnauld
Cobalah online!
Sortir array yang naik kemudian jumlah:
sumber
a=>a.sort((x,y)=>x-y).map(n=>r+=a.pop()-n,r=0)|r
.05AB1E , 4 byte
Cobalah online!
Penjelasan
sumber
ZL€αOW
adalah usaha saya ._.Perl 6 ,
2928 byte-1 byte terima kasih kepada nwellnhof
Cobalah online!
Penjelasan
sumber
X-
operan untuk menghemat satu byte.Japt, 7 byte
Cobalah
Penjelasan
sumber
JavaScript (ES6),
605655 byteDisimpan 1 byte berkat @Shaggy
Cobalah online!
Bagaimana?
Kecuali ada beberapa trik yang saya lewatkan, menghitung median di JS ternyata lebih lama. Mungkin sekitar 65 byte karena panggilan balik yang diperlukan untuk
sort()
menghindari jenis leksikografis default dan yang agak panjangMath.abs()
:Alih-alih itu, kami mencoba semua nilai dalam array asli sebagai nilai penyamaan .
sumber
r
dalam yang pertamamap
.Haskell , 34 byte
Cobalah online!
Menemukan jarak total semua elemen ke median, menguji setiap elemen dalam daftar sebagai median potensial dan mengambil hasil terkecil.
sumber
Jelly , 4 byte
Cobalah online!
Bagaimana itu bekerja
sumber
Python 2 , 46 byte
Cobalah online!
Mengambil panjang daftar
n
sebagai argumen. Menghitung jumlah setengah bagian atas dikurangi jumlah bagian bawah dengan mengiris daftar yang diurutkan menjadi elemen pertaman/2
dan terakhirn/2
.Ekspresi
l[-~n/2:l.sort()]
sama dengan komputasil.sort()
, yang mengubah daftar di tempat, lalu melakukanl[-~n/2:None]
, di mana pengirisan daftar mengabaikan batas atasNone
yangl.sort()
dihasilkan. Ini mungkin tampak seperti daftar diurutkan terlambat untuk diiris dengan benar, tetapi Python tampaknya mengevaluasi argumen slice sebelum "mengunci" daftar yang akan diiris.Python 2 , 47 byte
Cobalah online!
Metode membosankan menjumlahkan jarak setiap nilai dari median. Membawa panjang
n
sebagai argumen.Python , 51 byte
Cobalah online!
Urutkan daftar pada tempatnya, lalu berulang kali menambahkan entri terakhir (sisa tertinggi) dikurangi entri pertama (sisa terendah), dan berulang pada daftar tanpa elemen-elemen ini sampai hanya 0 atau 1 yang tersisa. Usings
pop
's mendapat panjang yang sama:l.pop()-l.pop(0)+f(l)
.The
l.sort()
terjebak di tempat di manaNone
ia mengembalikan tidak berpengaruh. Irisanl[None:1]
sama denganl[:1]
karenaNone
irisan irisan diabaikan.Python , 54 byte
Cobalah online!
Pemahaman daftar lucu yang mengabaikan argumen yang berulang dan mengubah daftar di tempat dengan berulang kali muncul elemen pertama dan terakhir. Kami memastikan bahwa pemahaman daftar dilakukan beberapa
len(l)//2
kali dengan mengulangi setiap elemen lainnya daril
melewatkan yang pertama, selesai denganl[1::2]
. Thel.sort()
memproduksiNone
dapat terjebak dalam terpakai argumen slice akhir.sumber
APL (Dyalog), 12 byte
Brute paksa dengan menguji setiap angka sebagai equalizer. Tidak yakin apakah diam-diam lebih pendek, tapi saya tidak bisa mengetahuinya.
TIO
sumber
TI-Basic,
186 byte-12 byte dari Misha Lavrov (saya belum pernah menggunakan TI-Basic untuk sementara waktu dan saya lupa daftar itu bisa melakukannya)
TI-Basic adalah bahasa tokenized . Semua token yang digunakan dalam jawaban ini adalah satu byte.
Mengambil input sebagai
{1,2,3,4}:prgmNAME
Ide dasarnya sama dengan sebagian besar jawaban lain: kurangi dengan median, lalu ambil jumlah.
Penjelasan:
sumber
sum(abs(Ans-median(Ans
juga berfungsi. (Dan "TI-84 Plus CE" tampaknya terlalu spesifik; ini akan bekerja setidaknya pada kalkulator 83-seri, dan mungkin juga 73 dan 82.)Rosda , 33 byte
Cobalah online!
Penjelasan:
sumber
R , 29 byte
Cobalah online!
sumber
Attache , 18 byte
Cobalah online!
Penjelasan
sumber
J , 15 byte
Pada dasarnya sama dengan solusi Shaggy Japt.
Cobalah online!
Bagaimana itu bekerja?
|@-/~"{
- Membuat tabel/~
perbedaan absolut|@-
dari setiap angka dengan yang lainnya"{
1#.
jumlah setiap baris[:<./
menemukan item terkecil (dikurangi minimum)sumber
Arang ,
1611 byteCobalah online! Tautan adalah untuk mengucapkan versi kode. Sunting: Disimpan 5 byte berkat @Arnauld. Penjelasan:
sumber
Visual C #, 138 byte
ungolfed:
Cobalah online!
sumber
C (gcc),
10093 byteSolusi brute-force, mencoba menyamakan dengan masing-masing elemen. Cobalah online di sini .
Berkat ceilingcat untuk bermain golf 7 byte.
Tidak Disatukan:
sumber
PHP, 78 byte
Urutkan array, lalu loop melalui salinan, popping elemen dari yang asli dan menjumlahkan perbedaan absolut, yang perlu dibelah dua untuk pengembalian.
Keluaran:
sumber
PHP, 69 byte
fungsi anonim. Cobalah online .
sumber
Input: *) A non-empty array a of integers *) Optionally, the length of a
.JavaScript (Node.js) , 52 byte
Cobalah online!
sumber
Java (JDK), 112 byte
Golf
Tidak disatukan
sumber
[1,1,4]
(mengembalikan 4, tetapi jawabannya adalah 3).Android Kotlin, 200 byte
Coba Online
sumber