Gambaran
Diberi daftar angka, temukan operasi paling sedikit untuk menghasilkan 100
Memasukkan
String angka, yang mungkin atau tidak dalam urutan numerik. Urutan digit tidak dapat diubah, namun ditambah (+) atau minus (-) operator dapat ditambahkan antara masing-masing sehingga jumlah total sama dengan 100.
Keluaran
Jumlah operator ditambahkan, diikuti oleh urutan penuh digit dan operator. Keduanya dapat dipisahkan oleh spasi, tab, atau urutan baris baru.
Contohnya
sah
Input: 123456789
Keluaran:3 123–45–67+89
Input Tidak Valid : 123456789
Output:
6
1+2+34-5+67-8+9
(Ada beberapa cara untuk menyelesaikan ini dengan operasi yang lebih sedikit)
code-golf
integer
integer-partitions
expression-building
CyberJacob
sumber
sumber
+
dan-
? Bisakah kita berasumsi bahwa kita akan selalu dapat membuat100
dari input?299399
, apakah-299+399
akan valid?Jawaban:
JavaScript (ES6),
153176 byteEDIT: Dalam mode non-ketat, JS menginterpretasikan ekspresi numerik 0-awalan sebagai oktal (misalnya
017
diuraikan sebagai 15 dalam desimal). Ini adalah versi tetap yang mendukung angka nol di depan.sumber
2-017-2+117
. Tetapi017
adalah notasi oktal di JS, yang memberikan 15 dalam desimal. Jadi kode saya saat ini hanya ditemukan2-0-17-2+117
. Saya akan mencoba mengatasi masalah itu hari ini.3**(l=s.length,l-1)
=>3**~-(l=s.length)
MATL ,
3736 byteKasing uji membutuhkan waktu sekitar 6 detik dalam TIO.
Cobalah online!
Bagaimana itu bekerja
sumber
299399
tidak memiliki solusi dan karenanya bukan input yang valid (operator ditentukan untuk "di antara" digit, input yang akan membutuhkan di-299+399
mana-
tidak di antara digit).-299+399
, dan dalam hal ini saya perlu sedikit perubahan dalam kode saya . Saya sudah meminta OP untuk klarifikasi123456789
harus memiliki hitungan operator4
tidak3
.299399
merupakan input yang tidak valid karena, seperti OP juga telah mengklarifikasi, setiap input harus memiliki setidaknya satu solusi[Python 2],
164158 byteCobalah online!
Ambil N sebagai string angka; mengembalikan tuple (numOps, expressionString).
Pada dasarnya pendekatan yang sama dengan yang lain; menggunakan itertools.product untuk membangun "kasus" individu misalnya untuk N == '1322', sebuah "kasus" akan
('-','','+')
, dan akan mengevaluasi '1-32 + 2'.Melempar ValueError jika input tidak valid (tapi saya pikir OP tidak menjamin input tidak valid).
sumber
PHP,
166171 byteJalankan sebagai pipa dengan
-nR
atau uji secara online .menggunakan angka yang diformat untuk mengurutkan hasil ->
dapat mencetak blanko terkemuka (dan mungkin gagal untuk input dengan lebih dari 99 digit; menambah angka pada
%2d
untuk memperbaiki).tidak lebih dari 10 digit, 161 byte
kerusakan
sumber
Jelly , 32 byte
Program lengkap yang ditampilkan menggunakan operator Jelly (
_
bukan-
).Catatan: Untuk tampil
-
dalam output alih-alih_
(bukan keharusan) tambahkan⁾_-y
antaraF
danṄ
(⁾_-
adalah pasangan karakter literal['_','-']
dany
merupakan atom "translate" diad).Bagaimana?
Cobalah online!
sumber
Mathematica, 136
146149156165166bytePengembalian
{3, 123-45-67+89}
misalnya.Kasing tes membutuhkan waktu sekitar 0,09 detik untuk diselesaikan.
sumber
Python 2 ,
256230208205172171170165 byte, metode berulanglen(a)
olehw
z-=1;d=z
olehd=z=z-1
Cobalah online!
Penjelasan kecil Menggunakan representasi dalam basis 3, kode interleave digit dengan operator {'+', '-', concatenation} sesuai dengan semua kemungkinan kombinasi.
Python 2 , 167 byte, metode rekursif
Cobalah online!
Beberapa output
sumber
list(input())
dengan justinput()
, karena sebuah string sudah dapat menyimpan 6 byte; gantib.count('+')+b.count('-')
denganlen(b)-len(a)
untuk menyimpan 12 byte; dan gantichr(r+43)
denganchr(r+43)*(d>0!=r-1)
dan kemudian Anda dapat menghapus barisb=b[:-1].replace(',','')
untuk menghemat net 15 byte ((d>0!=r-1)
setara dengan(d>0 and 0!=r-1)
).Brachylog , 36 byte
Cobalah online!
Lebih dari setengahnya adalah untuk mendapatkan format output yang benar. Logika inti yang sebenarnya hanya:
15 byte
Cobalah online!
Ini mengembalikan daftar seperti [123, –45, –67,89]. Ekspresi adalah jumlah dari elemen, dan jumlah operator adalah 1 kurang dari panjang daftar.
~cLhℕ∧100~+L
hampir berfungsi untuk 12 byte ( Coba online! ) - tetapi terlalu lambat untuk menangani input 9 digit penuh pada TIO, dan yang lebih penting, gagal untuk input seperti10808
- Brachylog terlalu pintar untuk membagi angka untuk memimpin nol, jadi tidak t melihat partisi [108, -08].sumber
Haskell ,
180178 byteCobalah online! Penggunaan:
g "123456789"
hasil(3,"123-45-67+89")
.#
membuat daftar semua istilah yang mungkin,?
mengevaluasi suatu istilah dang
menyaring istilah-istilah yang mengevaluasi ke 100 dan mengembalikan yang dengan jumlah minimum operan.sumber
Jelly , 27 byte
Cobalah online!
Tidak bisa mengatakan saya tidak mengambil beberapa petunjuk dari jawaban Jonathan Allan yang lebih tua. ;-)
Dibandingkan dengan jawabannya, yang ini hanya dua byte lebih pendek (30), bukan lima, jika kita membuat perbandingan yang adil karena pembaruan bahasa:
Jika kita membandingkan cara lain (versi yang lebih baru dan bukan yang lebih lama), perbedaannya sama (menjadi 29 byte, terlihat di bawah):
sumber