Dalam tantangan ini Anda akan menggunakan mendistribusikan produk melebihi jumlah dan perbedaan angka, seperti yang dijelaskan di sini .
Contohnya
Input | Output
-------------|-------------
23(12+42) | (23*12)+(23*42)
9(62-5) | (9*62)-(9*5)
4(17+8-14) | (4*17)+(4*8)-(4*14)
15(-5) | -(15*5)
2(3) | (2*3)
8(+18) | +(8*18)
8(-40+18) | -(8*40)+(8*18)
Spesifikasi
Input akan berupa string formulir n(_)
, dengan satu bilangan bulat unsigned positif n
diikuti oleh ekspresi yang diurung _
. Ungkapan ini _
akan terdiri dari jumlah dan perbedaan dari salah satu istilah bilangan bulat positif yang dipisahkan oleh +
dan -
tanda. Istilah pertama dapat didahului dengan +
tanda, -
tanda, atau tanpa tanda.
Dalam output, angka awal n
harus didistribusikan untuk melipatgandakan setiap persyaratan. Setiap istilah a
harus dikalikan dengan n
untuk menghasilkan ekspresi yang dipasteurisasi (n*a)
, dan istilah-istilah baru ini harus digabungkan dengan +
dan -
menandatanganinya dengan cara yang persis sama seperti istilah aslinya.
Input tidak valid
Ini adalah contoh input yang tidak harus Anda tangani.
3(5 plus 3)
6(5 13)
(5+8)(6+6)
(5+3)8
Kemenangan
Ini adalah kode-golf , jadi kode terpendek dalam byte menang.
sumber
8(-40+18)
Jawaban:
Pip, 28 byte
Penjelasan:
Objek Pola Pip sebagian besar mengikuti sintaks Python regex, tetapi
&
pola penggantian dipinjam dari sed.Baca lebih lanjut tentang Pip di repositori Github
sumber
JavaScript 65 byte
Ini akan mengambil input. Dapatkan + atau -, lalu digit, lalu ganti dengan urutan yang benar.
Penjelasan
Pemakaian
Ini hanya berfungsi di Firefox dan Safari Nightly mungkin Edge? karena menggunakan fitur ES6. Anda dapat menjalankannya dengan:
sumber
(.?)(\d+)
rusak. Ini gagal23(12+42)
, menghasilkan1(23*2)+(23*42)
.\D?
bisa digunakan sebagai ganti[+-]?
Python 2.7,
110108 BytesProgram ini mengambil input dari stdin, mencari kecocokan melawan -
([+-]?)(\d+)
regex dan membuat string keluaran.Mengujinya -
sumber
Retina , 40 byte
Setiap baris harus menuju ke file sendiri tetapi Anda dapat menjalankan kode sebagai satu file dengan
-s
bendera. Misalnya:Dua baris pertama mendorong pengali di sebelah setiap angka dalam bentuk yang diharapkan:
Dua baris terakhir menghapus bagian trailing yang tidak perlu:
sumber
sed, 105 byte
Hanya ingin melihat apakah ini bisa dilakukan dengan sed.
Mungkin sekolah yang agak tua, tetapi berhasil.
sumber
rs , 77 byte
Demo langsung dan semua kasus uji.
Ini adalah pertama kalinya macro rs benar-benar digunakan!
sumber
REGXY , 45 byte
Menggunakan REGXY, bahasa berbasis pengganti regex.
sumber
//
kerjanya? Saya kira itu loop ke atas sampai string berubah tetapi saya tidak dapat menemukan di halaman esolang mengapa.//
membuat loop tak terbatas seperti yangnothing
akan selalu cocok jadi kami selalu melompat kembali ke baris pertama.Perl, 36 byte
35 byte kode + 1 byte baris perintah
Pemakaian:
sumber
Pyth,
3938 byteSolusi regex yang mengerikan:
sumber
Ruby, 94 byte
sumber
CJam, 50 byte
Cobalah online
CJam tidak memiliki dukungan regex, atau apa pun di luar pencarian dan pemisahan string yang sangat nyaman untuk ekspresi parsing. Jadi ada beberapa tenaga kerja yang terlibat di sini.
Penjelasan:
sumber
gawk -
6058Fiuh ... sudah lama tidak bekerja dengan regexp.
sumber
Perl 5,
70605544 Bytes + 1 penaltiSolusi perl yang hanya menggunakan split dan 1 ekspresi reguler.
Juga menghitung input yang lebih panjang.
Uji
Versi yang mengambil parameter
Versi yang hanya menggunakan ekspresi reguler.
Yang ini bekerja melalui grup tangkap dalam tampilan positif dan pencocokan malas. Mungkin akan menggunakan tampilan positif di belakang jika Perl 5 mendukungnya, tetapi sayangnya. Butuh beberapa saat untuk mencari tahu bahwa ini agak mungkin dengan regex.
sumber
-p
opsi baris perintah (saya pikir ini adalah +1 char vs 9 untuk,<>
dan;print
) karenasplit
akan berfungsi$_
secara default (yang akan menjadi apa pun yang ada di dalamnya<>
) dan hasil cetak termasuk dalam loop juga ! Semoga itu bisa membantu!Retina ,
505143 byteSaya pikir ini mungkin program Retina pertama saya. Jika tidak, ini adalah program Retina pertamaku yang kompleks ini (tidak terlalu rumit, sungguh.) Setiap baris masuk dalam file sendiri.
Saya tidak benar-benar menguji ini dengan Retina, saya mengujinya menggunakan tester regex-replace beberapa kali, tetapi seharusnya berhasil.
Deskripsi untuk contoh pertama:
Karena ada sejumlah file, Retina menggunakan mode ganti. Ganti pertama (dua file pertama) menghapus nomor yang akan didistribusikan dan menambahkan pasangan distribusi
(23*12)
ke akhir, memberi23(+42)(23*12)
.+`
pada awalnya memberitahu Retina untuk berulang kali mengganti sampai polanya tidak cocok, dan karena ini cocok lagi, polanya menggantikan ini dengan23()(23*12)+(23*42)
. Ini tidak cocok lagi, jadi 2 file berikutnya digunakan untuk penggantian berikutnya. Kali ini, itu hanya menghapus23()
. Ini bekerja dengan baik: karena produk ditambahkan sampai akhir, saya tidak perlu melakukan sesuatu yang aneh jika nomor tidak memiliki tanda, karena satu-satunya yang bisa tanpa tanda adalah nomor pertama.EDIT:
$'
in replacement mewakili sisa string setelah pertandingan, jadi saya bisa menghapus trailing(.*)
s.sumber
k, 98 byte
Tidak terlalu bermain golf.
Membagi pada non-digit, menghapus parens, menghapus string kosong, lalu memegang
x
konstan sebagai string pertama, bergabung*
dengan setiap string yang tersisay
, tanda kurung, dan pindahkan tanda ke awal jika ada; ratakan output menjadi string tunggal.sumber