Indeks keseimbangan urutan adalah indeks sedemikian rupa sehingga jumlah elemen pada indeks yang lebih rendah sama dengan jumlah elemen pada indeks yang lebih tinggi. Misalnya, dalam urutan A:
A[0]=-7 A[1]=1 A[2]=5 A[3]=2 A[4]=-4 A[5]=3 A[6]=0
3 adalah indeks keseimbangan, karena:
A[0]+A[1]+A[2]=A[4]+A[5]+A[6]
6 juga merupakan indeks kesetimbangan, karena:
A[0]+A[1]+A[2]+A[3]+A[4]+A[5]=0
(jumlah elemen nol adalah nol) 7 bukan indeks kesetimbangan, karena itu bukan indeks urutan A. yang valid
Idenya adalah untuk membuat program yang diberi urutan (array), mengembalikan indeks keseimbangannya (ada) atau -1 jika tidak ada indeks keseimbangan.
Python - 72 karakter
Mengambil input yang dipisahkan koma
sumber
runhugs FILE.hs
untuk menjalankan programFILE.hs
.Haskell (
9583)Membaca daftar dalam gaya Haskell dari stdin, mis.
dan mengembalikan daftar gaya indeks Haskell, misalnya.
Hasilnya
[]
, jika tidak ada indeks.Tolong beritahu saya, jika spec Anda ingin perilaku yang berbeda.
Suntingan:
sumber
C - 96
Perhatikan bahwa ini mencetak indeks ekuilibrium dalam urutan terbalik.
Penggunaan sampel:
sumber
Ruby (
8377)Sunting: Versi lebih pendek seperti yang disarankan oleh Ventero:
Input adalah satu nomor per baris, output adalah daftar indeks yang dipisahkan koma dalam tanda kurung.
sumber
p (0...a.size).select{|x|eval"#{a[0..x]*?+}==#{a[x..-1]*?+}"}
(perhatikan bahwa ini untuk Ruby 1.9, karena menggunakan karakter literal sebagai string)map
dan ampersand. Dan Anda tidak perlu operator percikan di depan$<
baik, jadi semuanya baris akan terlihat seperti ini:a=$<.map &:to_i
. ;)JavaScript (161)
http://jsfiddle.net/6qYQv/1/
sumber
scala, 108
sumber
J (12 karakter)
Kata kerja monadik dalam notasi diam-diam yang mengembalikan vektor indeks ekuilibrium. Ruang yang dimasukkan hanya untuk keterbacaan.
Untuk menjelaskan ini, pertama-tama perhatikan definisi eksplisitnya;
y
adalah parameter formal:+
menambahkan argumennya./
adalah kata keterangan yang menyisipkan kata kerja di sebelah kiri di antara anggota argumen yang benar, misalnya+/ 1 2 3 4
sama dengan1 + 2 + 3 + 4
.\
adalah kata keterangan yang menggunakan kata kerja di sebelah kirinya untuk semua awalan, awalan dari argumen yang benar. Misalnya, dengan<
menggambar kotak di sekitar argumennya,<\ 1 2 3 4
menghasilkanJadi,
+/\
hitung untuk setiap awalan dari argumen yang tepat jumlahnya.\.
seperti\
tetapi beroperasi pada sufiks alih-alih awalan. Jadi,+/\.
hitung vektor jumlah sufiks.=
melakukan perbandingan item-wise argumennya. Misalnya,1 1 3 3 = 1 2 3 4
hasil1 0 1 0
.(+/\. y) = (+/\ y)
menghasilkan satu untuk semua indeks di mana jumlah suffix sama dengan jumlah awalan, atau, keseimbangan dibuat.I.
kembalikan vektor indeks di mana vektor berisi satu.sumber
Python 2, 70
Idenya adalah untuk melacak jumlah yang berjalan
s
dan memeriksa apakah itu setengah dari jumlah array tanpa elemen saat ini, dan karena itu sama dengan jumlah array setelah elemen saat ini. Jika demikian, kami memperbarui indeks keseimbangan ke indeks saat ini. Indeks keseimbangan terakhir dicetak, atau nilai awal-1
jika tidak ada.Sebenarnya, kita menyimpan bit-melengkapi indeks keseimbangan sehingga kita dapat menginisialisasi ke 0 sebagai gantinya.
sumber
Python - 114
Python - 72
Mencetak apakah indeks yang diberikan adalah indeks keseimbangan, tidak mencetak indek bilangan bulat di mana array seimbang.
sumber
PHP, 134 karakter
Saya memiliki rasa gatal bahwa ini jauh dari golf PHP yang optimal, tetapi hanya kehabisan tenaga (otak). Setidaknya lebih pendek dari dengan array_sum dan array_splice :-)
sumber
PHP (81)
for($i=count($a)-1,$c=0;$i+1&&$c!=(array_sum($a)-$a[$i])/2;$c+=$a[$i--]);echo $i;
http://3v4l.org/qJvhO
Karena tidak ada input yang ditentukan, ini perlu diinisialisasi dengan array sebagai variabel
$a
.sumber