Kadang-kadang, ketika saya benar-benar bosan, saya suka mengambil jumlah array bilangan non-negatif. Saya hanya mengambil jumlah array panjang yang merupakan kekuatan dua. Sayangnya saya sering melakukan kesalahan. Untungnya saya melacak pekerjaan saya karena saya mengikuti cara berikut:
Saya menambahkan pasangan angka yang berdekatan sampai hanya ada satu yang tersisa. Sebagai contoh:
6 + 18 + 9 + 6 + 6 + 3 + 8 + 10
= 24 + 15 + 9 + 18
= 39 + 27
= 66
Tugas Anda adalah menentukan apakah saya telah membuat kesalahan di suatu tempat. Anda bisa mendapatkan input yang diteruskan ke fungsi Anda atau membaca dari standar masuk. Output dapat dicetak atau dikembalikan.
Input: Array / daftar / dll. bilangan bulat non-negatif, dan mungkin juga panjang array jika bahasa Anda membutuhkannya. Array itu adalah semua angka yang dibaca dari kiri ke kanan lalu atas ke bawah. Misalnya array di atas akan menjadi:
[[6, 18, 9, 6, 6, 3, 8, 10], [24, 15, 9, 18], [39, 27], [66]]
atau
[6, 18, 9, 6, 6, 3, 8, 10, 24, 15, 9, 18, 39, 27, 66]
jika Anda suka.
Keluaran: boolean tunggal yang menunjukkan apakah ada kesalahan atau tidak. Boolean dapat direpresentasikan menggunakan pemetaan apa pun asalkan semua input di mana kesalahan dibuat mengembalikan / mencetak hasil yang identik dan semua input yang tidak mengandung kesalahan mengembalikan / mencetak hasil yang identik. Ini harus berjalan tanpa mengatakan, tetapi dua output tidak bisa sama.
Beberapa Contoh Penjumlahan yang Benar:
6
5+6
=11
3 + 2 + 4 + 5
= 5 + 9
= 14
[0, 1, 2, 3, 1, 5, 6]
[[1, 2, 4, 8], [3, 12], [15]]
Beberapa Contoh Penjumlahan Tidak Benar:
5+4
=8
4 + 4 + 4 + 4
= 9 + 7
= 16
[[1, 2, 3, 4], [7, 3], [10]]
[3, 4, 5, 6, 7, 8, 9]
Ingatlah bahwa saya dapat membuat kesalahan dan masih mendapatkan jawaban yang benar. Jika saya melakukan kesalahan, itu tidak akan menghasilkan angka tambahan atau nomor hilang dalam array terakhir, hanya nomor yang salah.
Celah standar dilarang. Jawaban terpendek dalam setiap bahasa adalah pemenang. Jawaban yang lebih lama akan menang dalam kasus seri. Saya memiliki hak untuk memutuskan apa "bahasa yang sama" itu, tetapi saya akan mengatakan di muka bahwa suatu titik tidak dapat diperoleh dalam Python 2, dan Python 3.
[0,1,2,3,1,5,6]
tidak valid karena "Input: Array / daftar / etc. Dari bilangan bulat positif".Jawaban:
Jelly , 6 byte
Cobalah online!
Bagaimana itu bekerja
sumber
Python 2 , 51 byte
Cobalah online! Terima kasih kepada Rod untuk kasus uji.
Membuat seluruh daftar datar sebagai masukan. Grup elemen menjadi pasangan yang berdekatan menggunakan trik zip / iter , mengambil jumlah pasangan, dan memeriksa apakah hasilnya sama dengan bagian kedua dari daftar.
Sebuah metode rekursif datang dekat pada 55 byte:
Ini digunakan bahwa bilangan bulat input positif, yang sejak itu berubah dalam spesifikasi.
sumber
[0,0,1,1,1,1,1]
.Röda , 40 byte
Cobalah online!
Ini adalah fungsi anonim yang mengembalikan
0
jika tidak ada kesalahan dan tidak ada jika ada kesalahan.Penjelasan:
Berikut adalah versi yang lebih pendek (35 byte) tetapi bertentangan dengan aturan (saya pikir):
Cobalah online!
Ini adalah fungsi anonim yang membaca nilai dari aliran dan mendorong
TRUE
atauFALSE
untuk setiap baris yang benar.Saya tidak yakin apakah ini (nilai pengembalian berganda) diterima dalam aturan. Inilah pertahanan saya: di Reda, kondisi
if
danwhile
blok bukan nilai boolean, tetapi stream. Aliran "benar" kosong atau hanya berisiTRUE
s, dan aliran "falsy" berisi satu atau lebihFALSE
s. Dengan cara ini, fungsi ini mengembalikan nilai "boolean". Dan dapat digunakan sebagai kondisiif
pernyataan tanpa mengurangi operasi, dll.sumber
0
di dalamnya. Saya tidak yakin persis bagaimana Reda menangani itu, tetapi itu tidak pernah terdengar.if
kondisi. Jika beginilah cara Röda bekerja, itu sesuai dengan aturan kami, kecuali jika spec tantangan mengabaikan default secara eksplisit.Python 2 ,
6965 byteCobalah online!
Pengembalian:
Daftar Kosong sebagai
Falsy
Jumlah total sebagai
Truthy
sumber
Mathematica, 36 byte
Fungsi murni mengambil daftar bersarang sebagai input dan kembali
True
atauFalse
. Fungsi iniTr/@#~Partition~2&
mengambil jumlah berpasangan dari suatu daftar, yang kemudian diterapkan (/@#
) ke setiap sublist dari daftar input. Sublist pertama, kedua, ... dalam daftar yang dihasilkan seharusnya sama dengan sublist kedua, ketiga, ... di input asli;Most[...]==Rest@#
tes untuk properti ini.sumber
Python 2 , 80 byte
Cobalah online!
Tidak sebagus jawaban python lainnya, tapi saya merasa ingin mempostingnya. Ini hanya untuk menunjukkan mengapa saya tidak pandai golf dalam bahasa biasa .
sumber
JavaScript (ES6), 54 byte
Mengambil array yang diratakan.
sumber
05AB1E ,
1512 byteCobalah online!
Penjelasan
sumber
Haskell ,
827965 byte-14 byte terima kasih kepada nimi!
Bekerja dengan membandingkan jumlah setiap pasangan elemen dengan elemen yang sesuai pada baris berikutnya ke bawah. Beberapa byte mungkin bisa dipasangkan dari golf
f
, tapi saya tidak tahu di mana.sumber
p
:p(x:y:z)=x+y:p z
dan kemudian menggunakanzipWith(==)
bukannyazip
dan menggabungkan daftarBool
denganand
:f x=and.zipWith(==)(drop(length x`div`2+1)x)$p x
.Python 3 ,
6968 byteSaya tahu sudah ada dua jawaban python lain ... tapi yang ini dalam python 3, jadi ini eksotis.
Ini bekerja pada input yang diratakan.
Keluaran :
False
jika tidak ada kesalahan,True
jika ada kesalahan.sumber
Ruby, 50 byte
Membalikkan array, elemen apa pun dari babak pertama (posisi n) harus merupakan jumlah elemen di posisi n * 2 dan n * 2 + 1.
sumber
Brachylog ,
1613 byteCobalah online!
Ini sangat lama! Harus ada cara untuk tidak menempatkan predikat inline di sini.
Predikat berhasil (mencetak
true.
sebagai program) jika tidak ada kesalahan dibuat dan gagal (mencetakfalse.
sebagai program) sebaliknya.sumber
Python 2 , 64 byte
Cobalah online!
Fungsi yang tidak disebutkan namanya yang mengambil daftar daftar (satu per baris bekerja seolah-olah), dan mengembalikan Benar jika tidak ada kesalahan dibuat dan Salah sebaliknya.
Ini bekerja dengan menggunakan input tanpa entri terakhir
a[:-1]
,, untuk membentuk apa input tanpa entri pertama seharusnya dan memeriksa apa itu input==a[1:]
,.Formasi ini dicapai dengan memetakan fungsi penambahan tipe integer
int.__add__
,, pada pasangan angka yang dihasilkan oleh dua "irisan", satu irisan menjadi setiap item lainnya mulai dari indeks 0,,x[::2]
irisan lainnya menjadi setiap item lainnya mulai dari tanggal 1 indeksx[1::2]
,.sumber
Pip ,
2019 byteIni adalah fungsi anonim yang mengambil satu argumen, daftar daftar (misalnya
[[1 2 3 4] [3 7] [10]]
). Verifikasi semua kasus uji: Coba online!Penjelasan
Dalam fungsi Pip, dua argumen pertama ditugaskan ke
a
danb
.Sebagai contoh:
sumber
PHP,
9695 byte:menggunakan builtin:
fungsi rekursif kembali
true
ataufalse
.kerusakan untuk fungsi pertama:
solusi yang lebih lama (masing-masing 96 byte) menggunakan loop:
kerusakan untuk fungsi terakhir:
cuplikan berulang, 81 byte
menganggap array sudah ditentukan sebelumnya dalam
$a
; keluar dengan kesalahan jika salah.sumber
C, 54 byte:
Tidak Disatukan:
Tes dengan
Seperti yang Anda lihat,
f()
mengembalikan true untuk input yang tidak valid dan false (= 0) untuk input yang valid.Seperti biasa, rekursi lebih kecil byte daripada iterasi, begitu
f()
juga rekursif, meskipun dibutuhkan dua iterator sebagai argumen. Ia bekerja dengan berulang kali membandingkan jumlah dari dua bilangan bulat padas
satu bilangan bulat die
, mengabaikan batas level, dan melanjutkan sampai dua iterator bertemu. Saya juga telah menggunakan beberapa boolean zen bersama dengan fakta bahwa nilai integer non-nol dianggap benar dalam C untuk lebih memperpendek kode.sumber
R,
9277 byteFungsi anonim yang mengambil urutan angka datar sebagai input. Pengembalian
TRUE
atau yangFALSE
sesuai. Menggunakan pendekatan yang sama secara konseptual dengan jawaban python xnor.Solusi sebelumnya, menggunakan
rollapply
fungsi darizoo
paket, dan mengambil input sebagai daftar, misalnyalist(c(6, 18, 9, 6, 6, 3, 8, 10), c(24, 15, 9, 18), c(39, 27), c(66))
:sumber
JavaScript (ES6),
4644 byteMengambil input sebagai array yang diratakan. Pengembalian
NaN
untuk yang valid atau0
tidak valid.Uji
Tampilkan cuplikan kode
sumber
PHP, 102 Bytes
masukan juga parameter url dalam format
?0=[1,2,3]&1=[3,3]&2=[6]
ini menggunakan input ini[[int,int],[int]]
Kerusakan
sumber
Japt, 10 byte
Mengambil input sebagai array 2-D.
Cobalah
sumber