Diberikan daftar kosong dari bilangan bulat non-negatif, pertimbangkan menulis ulang itu sebagai masalah aritmatika di mana:
- Tanda plus (
+
) disisipkan di antara pasangan angka yang meningkat dari kiri ke kanan (alias dari awal daftar hingga akhir). - Tanda minus (
-
) disisipkan di antara pasangan angka yang menurun dari kiri ke kanan. - Tanda multiplikasi (
*
) disisipkan di antara pasangan angka yang sama.
Mengatakan dengan cara lain: setiap sublist a,b
menjadi a+b
jika a<b
, a-b
jika a>b
, dan a*b
jika a==b
.
Misalnya, daftarnya
[12, 0, 7, 7, 29, 10, 2, 2, 1]
akan menjadi ungkapan
12 - 0 + 7*7 + 29 - 10 - 2*2 - 1
yang dievaluasi menjadi 75
.
Tulis program atau fungsi yang mengambil dalam daftar tersebut dan mengevaluasinya, mencetak atau mengembalikan hasilnya.
- Urutan operasi penting. Perkalian harus dilakukan sebelum penambahan atau pengurangan.
- Jika daftar input memiliki satu nomor, itu yang harus dievaluasi. misalnya
[64]
harus memberi64
. - Penggunaan
eval
atauexec
atau konstruksi serupa diizinkan.
Berikut ini beberapa contoh tambahan:
[list]
expression
value
[0]
0
0
[1]
1
1
[78557]
78557
78557
[0,0]
0*0
0
[1,1]
1*1
1
[2,2]
2*2
4
[0,1]
0+1
1
[1,0]
1-0
1
[1,2]
1+2
3
[2,1]
2-1
1
[15,4,4]
15-4*4
-1
[9,8,1]
9-8-1
0
[4,2,2,4]
4-2*2+4
4
[10,9,9,12]
10-9*9+12
-59
[1,1,2,2,3,3]
1*1+2*2+3*3
14
[5,5,4,4,3,3]
5*5-4*4-3*3
0
[3,1,4,1,5,9,2,6,5,3,5,9]
3-1+4-1+5+9-2+6-5-3+5+9
29
[7637,388,389,388,387,12,0,0,34,35,35,27,27,2]
7637-388+389-388-387-12-0*0+34+35*35-27*27-2
7379
Kode terpendek dalam byte menang. Tiebreaker adalah jawaban sebelumnya.
code-golf
math
number
arithmetic
Hobi Calvin
sumber
sumber
Jawaban:
Python 2, 63 byte
Membangun dan
eval
s string ekspresi. Simbol aritmatika dipilih dengan membandingkan angka sebelumnyap
dengan yang sekarangx
. Simbol ditambahkan diikuti oleh nomor saat ini.Nomor pertama ditangani dengan trik pintar dari Sp3000. Nilai awal dari
p
diatur ke string, yang lebih besar dari angka apa pun dan karena itu menyebabkan-
sebelum angka pertama. Tetapi,s
diinisialisasiprint-
pada saat yang sama yang membuat hasil dimulai denganprint--
(terima kasih kepada xsot untuk menyimpan 2 byte dengan menginisialisasi denganprint
.)sumber
print
ke string dan menggunakanexec
alih-aliheval
.Pyth,
312619171615 byteEkspresi dengan
*
tidak akan mengevaluasi online, tetapi mereka secara teoritis akan berfungsi.2 byte, terima kasih kepada Maltysen.
Test suite (dengan evaluasi).
Kasus-kasus lain (tanpa evaluasi).
Sejarah
M+G@"*-+"->GH<GHv+sgMC,JsMQtJ\x60e
M+G@"*-+"->GH<GHv+sgVQtQ\x60e
vtssVm@"*-+"->Zd<~Z
vtssVm@"*-+"._-~Z
vssVm@"*-+"._-~k
vsm+@"*-+"._-~k
sumber
+
dan-
online)--safe
switch, yang menggantikaneval
denganast.literal_eval
.Jelly ,
18161514 byteTidak menggunakan eval bawaan. Cobalah online! atau verifikasi semua kasus uji .
Bagaimana itu bekerja
sumber
eval
sebagai atom ...MATL , 12 byte
Ini menggunakan ide yang sangat bagus dari @ aditsu untuk run-length encoding.
Cobalah online!
Penjelasan
sumber
CJam, 20
Cobalah online
Penjelasan:
sumber
JavaScript (ES6), 54
eval
menerima daftar ekspresi yang dipisahkan koma dan mengembalikan nilai yang terakhir.Uji
sumber
Julia,
7657 bytePertama kali saya bermain golf Julia, jadi mungkin ada perbaikan yang jelas. Cobalah online!
Dennis menghemat satu ton byte.
sumber
!
.Pyth -
232220 byteSeperti Kenny, perkalian tidak berfungsi secara online.
Test Suite tanpa melakukan eval .
sumber
R, 92 byte
Kemungkinan masih ada beberapa golf bagus yang bisa dilakukan di sini.
Tidak Disatukan:
sumber
Brachylog ,
3432 byteCobalah online!
sumber
TI-BASIC, 146 byte
Saya akan memformatnya dengan baik ketika tidak di ponsel. Tidur luput dari saya, jadi Anda dapatkan ini. Nikmati.
sumber
Javascript ES6,
6462 karaktersumber
a
parameter?a[i+1]...a[i+1]
=>a[++i]...a[i]
- 2 karakter lebih pendek, tapi saya keliru mengganti seluruh kode yang dijatuhkana=>
).Java, 384 byte
Tidak dicoba coba online
sumber
int a=l.length
,&&
=>&
, menempatkanint i=0
pada "garis" yang sama sepertiint n=l[0],m
.if(i<l.length-2&&l[i+1]!=l[i+2])n+=l[i+1];else{m=l[i+1];while(i<l.length-2&&l[i+1]==l[i+2])m*=l[(i++)+1];n+=m;
, Anda bisa mengganti ini dengan konten di dalamelse
blokir.Javascript ES6, 79 karakter
sumber
Perl, 49 byte
48 byte kode +1 untuk
-p
Pemakaian
Catatan
Saya belajar di sini bahwa Anda dapat menangkap lookahead di PCRE, meskipun sedikit tidak intuitif (
(?=(\d+))
bukan((?=\d+))
). Masuk akal setelah membaca meskipun karena Anda akan menangkap pertandingan panjang nol (lookahead) dengan yang terakhir, dan bukannya menangkap pertandingan dengan yang pertama).Terima kasih kepada @ninjalj karena telah menghemat 8 byte!
sumber
-e
gratis, menambahkanp
membuatnya-pe
menjadi +1 ? Akan diperbarui untuk saat ini, tetapi jika Anda dapat menemukan sumber saya bisa mengutip / menautkan untuk maju, itu akan luar biasa!$&.qw(* - +)[$&<=>$1]
di bagian penggantis///
operator.Sebenarnya, 30 byte
Sayangnya, karena perintah eval (
≡
) hanya mengevaluasi literal pada TIO, program ini tidak berfungsi pada TIO.Penjelasan:
sumber
R ,
12044 byteCobalah online!
Algoritma ini mirip dengan jawaban ini , tetapi saya baru menyadarinya setelah mengkode jawaban saya. Jauh lebih baik daripada jawaban asli saya yang digunakan
eval(parse)
.Sepenuhnya memanfaatkan operasi vektor R - melakukan
*
operasi pertama menggunakanrle(x)$values ^ rle(x)$lenghts
dan dot-produk dengan vektor inisign( diff( rle(x)$values ) )
(didahului dengan1
).sumber
05AB1E (warisan) ,
171615 byte-2 byte terima kasih kepada @Emigna .
Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
sumber
>
dengan memindahkan+
ke ujung string.Ć
dan¨
, jika Anda menggunakannya‚ζ
sebagai gantinyaø
‚ζ
adalah alternatif penyelesaian yang sempurna, karena ruang diabaikan dalam eval. Terima kasih lagi. :)PHP, 103 byte
Tantangan yang rapi. Ini jadi lebih lama dari yang diharapkan. Saya pikir menggunakan
array_map
atau serupa tidak akan meningkatkan jumlah byte, karena fungsi anonim masih mahal di PHP.Berjalan dari baris perintah, akan meminta daftar yang dipisahkan koma, seperti:
sumber
PowerShell v2 +, 62 byte
Mengambil input sebagai argumen baris perintah yang dipisahkan oleh ruang, yang akan dikonversi menjadi array otomatis
$args
. Kami beralih melalui setiap elemen, menggunakan variabel pembantu$o
setiap iterasi untuk mengingat apa entri kami sebelumnya. Kami menggunakan diindeks-string untuk menarik keluar operator yang tepat, dilakukan dengan melakukan matematika pada nilai-nilai Boolean secara implisit-dikonversi (misalnya, jika entry sebelumnya lebih kecil, yang[]
mengevaluasi ke1+2*0
sehingga'*+-'[1]
berarti+
dipilih).Senar bersambung dibiarkan di atas pipa. Kami mengumpulkan semua orang potongan bersama-sama (misalnya,
3-
,1+
,4-
, dll) dengan-join
operasi, concatenate pada jumlah akhir (implisit dikonversi ke string), dan pipa untukiex
(alias untukInvoke-Expression
dan mirip denganeval
).sumber
Japt , 25 byte
Ingin memotongnya lebih pendek, tapi saya tidak bisa membuat versi eval-less bekerja.
Cobalah online!
sumber
Japt
-x
,2119 byteCobalah
Penjelasan
sumber