Jadi tugasnya sederhana, mengingat array angka dan hasil, Anda perlu menemukan operasi apa yang perlu Anda gunakan pada angka dari array, untuk mendapatkan hasil yang diminta.
Mari kita membuatnya sederhana untuk memulai, dan hanya mengizinkan operasi dasar seperti: penambahan, pengurangan, perkalian, dan pembagian.
Contoh:
Input : [5,5,5,5,5] 100
Output : 5*5*5-5*5
Untuk memberikan keuntungan pada bahasa seperti Java, permintaan adalah untuk mengimplementasikan fungsi, bukan seluruh program, dan hasilnya dapat dikembalikan melalui parameter atau dicetak ke konsol.
Kode dinilai berdasarkan jumlah byte, dan karena tantangan kode golf, skor terendah menang.
Persyaratan lain adalah Anda bisa mendapatkan tambahan -10 poin jika untuk array hanya berisi digid, mendukung solusi di mana Anda bisa membuat angka dari angka berikut. Yaitu
Input : [1,2,3,4,5] 0
Output : 12-3-4-5
Perhatikan bahwa, asalkan output adalah output yang diusulkan, beberapa kasus mungkin memiliki lebih dari satu solusi. Terserah Anda apakah Anda akan memberikan satu atau lebih solusi untuk tugas yang diberikan.
EDIT: Hasil harus valid dari sudut pandang matematika, maka pembagian adalah pembagian rasional, bukan bilangan bulat, dan operasi diutamakan sama seperti dalam matematika klasik (perkalian dan pembagian pertama kemudian penjumlahan dan pengurangan).
sumber
*
dan/
memiliki prioritas lebih dari+
dan-
? Dua contoh Anda saling bertentangan.Jawaban:
Pyth, 23 byte
Karena alasan keamanan,
*
dan/
tidak akan mengevaluasi secara online, tetapi secara teori mereka berfungsi.Test suite hanya dengan
+
dan-
.sumber
Oracle SQL 11.2,
322304270 byte: 1 adalah daftar digit
: 2 adalah hasil yang dicari
Tidak golf:
sumber
TSQL (sqlserver 2016)
310294280 byteKesempatan yang luar biasa untuk menulis kode jelek:
Golf:
Cobalah online
Dapat dibaca: (penyisipan titik desimal (.) Dan penghapusan yang sama diperlukan agar sql menerima bahwa 4/5 bukan 0 - penghapusan baik untuk orang yang mengujinya)
Solusi ini juga dapat menangani jenis input ini:
sumber
JavaScript (ES6),
165147 byteBersarang
eval
... indah.sumber
Python 3,
170155 byteBuat generator dengan semua perintah yang mungkin dari operator, gabungkan itu dengan angka, lalu evaluasi sampai kita mendapatkan jawabannya.
https://repl.it/C2F5
sumber
['+','-','*','/']
dengan'+-*/'
; karenastring
s dapat diubah, ia akan memperlakukannya seperti halnyaarray
dengan setiap elemen menjadi masing-masing karakter distring
- jadi itu akan bertindak seperti Anda memberikannya dengan array yang Anda miliki saat ini.Python,
195186 byteInilah cara yang mengerikan untuk melakukannya.
Fungsi
x
menerima argumen dari alist
dan aresult
-x([1,2,3,4,5], 15)
misalnya.Program memulai loop di mana kita mulai memilih secara acak apakah kita harus menambahkan di
"+", "-", "*", or "/"
antara setiap angka, atau jika kita harus menyatukannya bersama-sama. Ini sepertinya pilihan yang lebih ringkas daripada benar-benar melalui permutasi dan mencoba setiap kombinasi untuk menemukan setiap hasil, dan meskipun itu membutuhkan waktu lebih lama untuk berjalan dan jauh lebih efisien. (Untungnya itu bukan masalah dalam konteks ini!)Ini juga menambahkan "." ke setiap nomor untuk menghindari melakukan operasi bilangan bulat seperti
6/4 = 1
. Itu kemudianeval
ekspresi kita dan menentukan apakah hasilnya sama dengan apa yang kita harapkan, dan jika demikian, output ekspresi.Program ini tidak pernah keluar - ia akan terus mengeluarkan hasil sampai mati.
EDIT 1 : Hapus baris baru yang tidak perlu di mana
if
pernyataan satu baris dapat digunakan.sumber
Matlab, 234
238258byteSaya berasumsi berdasarkan keterbatasan jawaban lain bahwa urutan nomor array input dikelola oleh fiat.
Kode ini mengambil string dari angka
x
, mengatakanx = '12345'
dan hasilnyar
, mengatakanr = 15
dan kembali semua string ekspresi Anda dapat mengevaluasi untuk mendapatkanr
darix
menggunakan empat operator.Saya telah menggunakan dua cara panjang-ekuivalen yang berbeda untuk menghindari penggunaan
ones(length())
-jenis ataurepmat(length())
-jenis ekspresi:~~p(1,:)
yang mengembalikan nilai tidak-tidak dalamp
(yaitu, daftar1
s panjang gelombang yang sama sebagai dimensi pertamap
) dan0|p(:,1)
yang mengembalikan 0 atau ada-ada -a-value-in-p
(yaitu, daftar1
s panjang yang sama dengan dimensi keduap
).Matlab tidak memiliki metode
nchoosek
penggantian , jadi saya telah menduplikasi operator dengan jumlah kali yang benar, menghitung seluruh ruangnchoosek
untuk pilihan operator yang lebih besar, dan kemudian menggunakanunique
panggilan untuk membagi hasilnya ke apa yang seharusnya. (menghapus kombinasi setara seperti '*** +' dan '*** +'). Saya menambahkan spasi tambahan untuk mencocokkan panjang vektor input untuk tujuan penggabungan dan kemudian menyusun string operator dengan string input ke dalam kolom matriks. Saya kemudian mengevaluasi ekspresi kolomwise untuk mendapatkan hasil dan menemukan urutan operator yang sesuai dengan kolom tersebut dengan hasil yang sesuai dengan input kamir
.Tes:
x = '12345'
,r = 15
:Jika saya harus mengambil array nilai presisi ganda, saya perlu
x = num2str(x,'%d');
untuk mengubah angka menjadi string, menambahkan 21 (20 tanpa;
) ke skor saya. * Bytes tambahan adalah titik koma yang saya tinggalkan murni sehingga siapa pun yang menjalankan kode ini tidak akan melihat command prompt mereka meledak dengan array yang panjang. Karena edit saya menghasilkan setumpuk peringatan tentang logika dan operan usus besar sekarang, saya telah menghapus titik koma di versi baru.Sunting 2: Lupa untuk mengganti
2*n+2
dengank
.Jawaban lama:
sumber
JavaScript (ES6), 88 byte
Melemparkan sedikit keacakan campuran. Jauh lebih mudah daripada iterasi sistematis melalui kombinasi.
Test Suite
sumber
PHP, 108 byte
mengambil input dari argumen baris perintah dalam urutan terbalik. Jalankan dengan
-r
.kerusakan
sumber
Perl 5 dengan
-pa
, 46 byteCobalah online!
sumber