Dengan bilangan bulat non-negatif, kembalikan perbedaan absolut antara jumlah digit genap dan jumlah digit ganjilnya.
Aturan Bawaan
Berlaku celah standar.
Anda dapat mengambil input dan memberikan output dengan metode Input / Output standar apa pun.
Anda dapat mengambil input sebagai String, sebagai Integer atau sebagai daftar digit.
Ini adalah kode-golf , jadi kode terpendek dalam byte di setiap bahasa menang!
Uji Kasus
Input ~> Output 0 ~> 0 (| 0-0 | = 0) 1 ~> 1 (| 1-0 | = 1) 12 ~> 1 (| 2-1 | = 1) 333 ~> 9 (| 0- (3 + 3 + 3) | = 9) 459 ~> 10 (| 4- (5 + 9) | = 10) 2469 ~> 3 (| (2 + 4 + 6) -9 | = 3) 1234 ~> 2 (| (2 + 4) - (1 + 3) | = 2)
code-golf
number
number-theory
Tuan Xcoder
sumber
sumber
Jawaban:
Jelly , 6 byte
Cobalah online!
Bagaimana itu bekerja
sumber
Raise -1 to A's digits, yielding 1 for even digits and 0 for odd ones.
umm, saya pikir Anda mengacaukan sesuatu sedikit atau sesuatu ...SHENZHEN I / O skrip MCxxxx, 197 (126 + 71) byte
Chip 1 (MC6000):
Chip 2 (MC4000):
sumber
<!-- -->
komentar kepada kami untuk mendapatkan kode tepat setelah daftar, alih-alih teks pengisi. Atau indentasi kode dengan 4 spasi lebih banyak.)Python 2, 39 byte
Mengambil bilangan bulat sebagai daftar. Cobalah online
-3 byte terima kasih kepada @ Mr.Xcoder
-1 byte terima kasih kepada @ovs
sumber
[i,-i][i%2]
sebagai gantii%2and i or -i
untuk 40 byte .(-1)**i*i
untuk 39 byteTI-Basic,
189 bytePenjelasan
Mengalikan setiap digit dalam daftar dengan -1 dengan kekuatannya, meniadakan setiap digit ganjil, sebelum menjumlahkannya.
sumber
C (gcc) ,
595857 byteCobalah online!
sumber
R,
3029 byted = scan()
mengambil nomor input satu demi satu digit.-1 byte terima kasih kepada @Giuseppe!
sumber
abs(sum((d=scan())-2*d*d%%2))
C #, 57 byte
Mengambil input sebagai
i
dan menjumlahkan bilangan bulat dengan mengubah peluang menjadi negatif.sumber
namespace System.Linq{
dan membuat fungsi yang sebenarnya. Lihat jawaban C # lainnya untuk referensiMain
. Satu-satunya alasan saya pikir saya akan menjawabnya. Oh wellMathematica, 20 byte
mengambil input dari daftar digit
thanx spesial ke @LLlAMnYP untuk memberi tahu saya tentang "aturan baru"
sumber
*
.Japt , 8 byte
Uji secara online!
Penjelasan
sumber
Neim , 7 byte
Penjelasan:
sumber
APL, 8 byte
Cobalah online!
Bagaimana?
¯1*⊢
- -1 n untukn
dalam⍵
[
4 5 9
→1 ¯1 ¯1
]⊢+.×
- Penggandaan yang diverifikasi dengano
, lalu jumlah[
+/ 4 5 9 × 1 ¯1 ¯1
→+/ 4 ¯5 ¯9
→¯10
]|
- nilai mutlaksumber
|⊢+.ׯ1*⊢
dengan spesifikasi input baru.JavaScript (ES6),
4338 byteMengambil input sebagai
string,array digit.Uji kasus
Tampilkan cuplikan kode
sumber
EDIT: Pendekatan yang lebih berpusat pada golf:
EXCEL,
423629 byteDisimpan 6 byte berkat Sihir Gurita Guci Disimpan 7 byte dengan menggunakan pendekatan '-1 ^ Dennis (yang, saya baru saja belajar, bekerja pada array di excel)
Mengambil daftar bilangan bulat di kolom A untuk input. Mungkin bisa di-golf lebih lanjut, atau dengan menggunakan versi string, mengambil string di A1 untuk input.
EXCEL, 256 byte
sumber
You may take input as a String, as an Integer or as a list of digits.
jawaban 42 byte Anda harus menjadi jawaban yang Anda gunakan.Julia 0,5 , 19 byte
Cobalah online!
sumber
Sekam , 7 byte
Cobalah online!
Mengambil daftar digit sebagai input.
Masih melewatkan built-in "abs", tapi hasilnya bagus :)
Penjelasan
Ṡ!¡_
adalah fungsi yang mengambil angkan
dan kemudian menerapkann-1
kali fungsi_
(negasi) ken
. Ini menghasilkann
ganjiln
atau-n
genapn
.ṁ
menerapkan fungsi ke setiap elemen daftar dan menjumlahkan hasilnya.≠0
mengembalikan perbedaan absolut antara angka dan 0.sumber
05AB1E , 6 byte
Terima kasih kepada Dennis untuk trik daya -1. Mengambil input sebagai daftar digit
Cobalah online!
Penjelasan
sumber
È2*<*O
seperti kasual kotor.PHP, 51 byte
menambahkan digit ke
$s
jika ganjil, kurangi jika genap. Jalankan sebagai pipa dengan-nR
.atau
menggunakan
-1
trik kekuatan Dennis .sumber
Mathematica, 67 byte
sumber
PHP , 54 byte
Cobalah online!
PHP , 57 byte
menyimpan jumlah genap dan ganjil dalam array
Cobalah online!
PHP , 57 byte
menyimpan jumlah genap dan ganjil dalam dua variabel
Cobalah online!
sumber
${1}
dan bahkan jumlah${0}
:while(~$n=$argn[$i++])${$n&1}+=$n;echo abs(${1}-${0});
for(;~$n=$argn[$i++];$s+=$n)$u+=($n&1)*$n;echo abs($s-2*$u);
danfor(;~$n=$argn[$i++];)$u+=(($n&1)-.5)*2*$n;echo abs($u);
merupakan cara yang menarikHaskell ,
474239382625 byte-1 berkat nimi
Terima kasih untuk Bruce
-1 terima kasih kepada xnor
Cobalah online!
sumber
s
:((*)=<<((-1)^))
.(\x->x*(-1)^x)
.Perl 6 , 28 byte
Cobalah online!
Mengambil daftar digit sebagai input.
$_
adalah argumen input..map(* % 2 * 2 - 1)
memetakan setiap digit ke salah satu1
atau-1
tergantung pada apakah masing-masing digit tersebut ganjil atau genap.Z*
zip daftar asli digit dengan daftar genap / ganjil menggunakan perkalian.sumber
Braingolf , 18 byte
Cobalah online!
Mengambil input sebagai daftar digit
Penjelasan
sumber
R,
7243 bytePertama,
d = scan()
mengambil nomor sebagai masukan, satu angka setelah yang lain (terima kasih kepada @Giuseppe komentar!)Kemudian,
b = d %% 2 <1
rekan untukb
sebuahTRUE
atauFALSE
nilai pada masing-masing indeks tergantung pada paritas angka. Oleh karena itu,b
nilai-nilaiTRUE
untuk nomor bahkan, dan!b
yangTRUE
untuk nilai-nilai aneh.Akhirnya,
abs(sum(d[b]) - sum(d[!b]))
lakukan pekerjaan.sumber
<1
satu byte lebih pendek dari==0
, tetapi perhatikan bahwa Anda dapat mengambil input sebagai daftar digit juga.Bash
14113999 BytesCobalah online!
sumber
Java (OpenJDK 8) , 55 byte
Cobalah online!
Implementasi naif.
sumber
C #, 67 byte
sumber
05AB1E , 7 byte
Cobalah online!
sumber
x86-64 Kode Mesin, 30 byte
Kode di atas mendefinisikan fungsi yang menerima daftar / array angka integer dan mengembalikan perbedaan absolut antara jumlah digit genapnya dan jumlah digit ganjilnya.
Seperti dalam C , bahasa assembly tidak mengimplementasikan daftar atau array sebagai tipe kelas satu, melainkan merepresentasikannya sebagai kombinasi dari sebuah pointer dan panjang. Oleh karena itu, saya telah mengatur agar fungsi ini menerima dua parameter: yang pertama adalah penunjuk ke awal daftar digit, dan yang kedua adalah integer yang menentukan panjang total daftar (jumlah total digit, satu-diindeks) .
Fungsi ini sesuai dengan konvensi pemanggilan Sistem V AMD64 , yang merupakan standar pada sistem Gnu / UNIX. Secara khusus, parameter pertama (pointer ke awal daftar) dilewatkan
RDI
(karena ini adalah kode 64-bit, itu adalah pointer 64-bit), dan parameter kedua (panjang daftar) diteruskan keESI
( ini hanya nilai 32-bit, karena itu lebih dari cukup angka untuk dimainkan, dan secara alami diasumsikan tidak nol). Hasilnya dikembalikan dalamEAX
register.Jika lebih jelas, ini akan menjadi prototipe C (dan Anda dapat menggunakan ini untuk memanggil fungsi dari C):
Mnemonik perakitan tidak dikumpulkan:
Berikut ini penjelasan singkat dari kode tersebut:
EAX
danEDX
register, yang akan digunakan untuk menyimpan jumlah total angka genap dan ganjil. TheEAX
Register dibersihkan olehXOR
ing dengan sendirinya (2 byte), dan kemudianEDX
register dibersihkan oleh tanda-memperpanjang EAX ke dalamnya (CDQ
, 1 byte).Kemudian, kita masuk ke loop yang berulang melalui semua digit yang dilewatkan dalam array. Ini mengambil digit, tes untuk melihat apakah itu genap atau ganjil (dengan menguji bit paling tidak signifikan, yang akan menjadi 0 jika nilainya genap atau 1 jika itu ganjil), dan kemudian melompat atau turun sesuai, menambahkan bahwa nilai ke akumulator yang sesuai. Di bagian bawah loop, kami mengurangi digit digit (
ESI
) dan melanjutkan looping selama tidak nol (yaitu, selama ada lebih banyak digit yang tersisa dalam daftar yang akan diambil).Satu-satunya hal yang rumit di sini adalah instruksi MOV awal, yang menggunakan mode pengalamatan paling kompleks yang dimungkinkan pada x86. * Dibutuhkan
RDI
sebagai register dasar (pointer ke awal daftar), skalaRSI
(penghitung panjang, yang berfungsi sebagai indeks) oleh 4 (ukuran bilangan bulat, dalam byte) dan menambahkan itu ke basis, dan kemudian kurangi 4 dari total (karena penghitung panjang berbasis satu dan kita perlu offset menjadi berbasis nol). Ini memberikan alamat digit dalam array, yang kemudian dimuat ke dalamECX
register.Setelah loop selesai, kami melakukan pengurangan odds dari evens (
EAX -= EDX
).Akhirnya, kita menghitung nilai absolut menggunakan trik umum — yang sama dengan yang digunakan oleh kebanyakan kompiler C untuk
abs
fungsi. Saya tidak akan merinci bagaimana trik ini bekerja di sini; lihat komentar kode untuk petunjuk, atau lakukan pencarian web.__
* Kode dapat ditulis ulang untuk menggunakan mode pengalamatan yang lebih sederhana, tetapi tidak membuatnya lebih pendek. Saya dapat membuat implementasi alternatif yang mengurangi
RDI
dan menambahnya setiap 8 kali melalui loop, tetapi karena Anda masih harus mengurangi penghitungESI
, ini ternyata 30 byte yang sama. Apa yang awalnya memberi saya harapan adalahadd eax, DWORD PTR [rdi]
hanya 2 byte, sama dengan menambahkan dua nilai yang terdaftar. Inilah implementasi itu, jika hanya untuk menyelamatkan siapa pun yang mencoba mengungguli saya beberapa usaha :-)sumber
TI-BASIC,
116 byteMengambil input sebagai daftar.
i²^Ans
menghemat dua byte lebih(-1)^Ans
karena kita tidak perlu tanda kurung.sumber
J, 14 byte
Cobalah online!
penjelasan
sumber