Tugas Anda adalah menulis sebuah program yang, pada input n, mengeluarkan ekspresi minimal setiap angka 1 hingga n secara berurutan. Program terpendek dalam byte menang.
Ekspresi minimal menggabungkan 1's dengan penjumlahan dan perkalian untuk menghasilkan angka yang diberikan, menggunakan sesedikit mungkin 1's. Misalnya, 23
dinyatakan 23=((1+1+1)(1+1)+1)(1+1+1)+1+1
dengan sebelas, yang minimal.
Persyaratan:
- Program harus mengambil sebagai input bilangan asli positif n.
- Output harus dalam format ini:
20 = ((1+1+1)(1+1+1)+1)(1+1)
- Output Anda mungkin tidak memiliki tanda kurung yang tidak perlu, misalnya
8 = ((1+1)(1+1))(1+1)
. - Tanda multiplikasi
*
adalah opsional. - Spasi adalah opsional.
- Anda tidak harus mengeluarkan semua persamaan yang mungkin untuk nilai yang diberikan: Misalnya, Anda memiliki pilihan untuk menghasilkan
4=1+1+1+1
atau4=(1+1)(1+1)
. Anda tidak harus mengeluarkan keduanya. - Program terpendek (dalam byte) di setiap bahasa menang.
1 = 1 2 = 1 + 1 3 = 1 + 1 + 1 4 = 1 + 1 + 1 + 1 5 = 1 + 1 + 1 + 1 + 1 6 = (1 + 1 + 1) (1 + 1) 7 = (1 + 1 + 1) (1 + 1) +1 8 = (1 + 1 + 1 + 1) (1 + 1) 9 = (1 + 1 + 1) (1 + 1 + 1) 10 = (1 + 1 + 1) (1 + 1 + 1) +1 11 = (1 + 1 + 1) (1 + 1 + 1) + 1 + 1 12 = (1 + 1 + 1) (1 + 1) (1 + 1) 13 = (1 + 1 + 1) (1 + 1) (1 + 1) +1 14 = ((1 + 1 + 1) (1 + 1) +1) (1 + 1) 15 = (1 + 1 + 1 + 1 + 1) (1 + 1 + 1) 16 = (1 + 1 + 1 + 1) (1 + 1) (1 + 1) 17 = (1 + 1 + 1 + 1) (1 + 1) (1 + 1) +1 18 = (1 + 1 + 1) (1 + 1 + 1) (1 + 1) 19 = (1 + 1 + 1) (1 + 1 + 1) (1 + 1) +1 20 = ((1 + 1 + 1) (1 + 1 + 1) +1) (1 + 1)
Berikut adalah beberapa kasus uji lagi: (ingat, bahwa ekspresi lain dengan angka 1 yang sama juga diperbolehkan)
157=((1+1+1)(1+1)(1+1)+1)(1+1+1)(1+1)(1+1)+1
444=((1+1+1)(1+1+1)(1+1)(1+1)+1)(1+1+1)(1+1)(1+1)
1223=((1+1+1)(1+1+1)(1+1+1)(1+1+1)(1+1+1)+1)(1+1+1+1+1)+1+1+1
15535=((((1+1+1)(1+1+1)(1+1+1)(1+1+1)+1)((1+1+1)(1+1)+1)+1)(1+1+1)+1)(1+1+1)(1+1+1)+1
45197=((((1+1+1)(1+1)(1+1)(1+1)+1)(1+1+1+1+1)(1+1)+1)(1+1+1)(1+1)(1+1)+1)(1+1+1+1+1)(1+1+1)+1+1
Semoga berhasil! - The Turtle 🐢
code-golf
math
arithmetic
Kura-kura
sumber
sumber
n=20
) dan 2) Anda katakan di awal bahwa kompleksitas integer, yang berbeda dari persamaan, harus berupa output, tetapi Anda tidak memasukkannya dalam salah satu contoh kecuali yang pertama.Jawaban:
Pyth, 60 byte
Demonstrasi
Kompiler online dapat mencapai 1223 sebelum waktu habis, berkat memoisasi fungsi otomatis Pyth.
Dalam abbrieviated notaion,
Ini menggunakan fungsi rekursif
'
, yang menghitung semua produk possum dan jumlah yang dapat memberikan output yang diinginkan, menemukan string terpendek dengan setiap operasi akhir, kemudian membandingkannya dengan1
menghitung dan mengembalikan yang pertama.Ini menggunakan fungsi helper
y
, yang mengurung ekspresi hanya jika perlu di-kurung.Offline, saya menjalankan program dengan input
15535
, dan itu hampir selesai. Hasil dicetak secara bertahap, sehingga mudah untuk melihat perkembangannya.Baris terakhir dari output:
Dalam notasi singkat,
sumber
CJam,
1051029896 byteCobalah online di juru bahasa CJam .
Uji coba
Penerjemah online terlalu lambat untuk kasus uji yang lebih besar. Bahkan dengan Java interpreter, test case yang lebih besar akan memakan waktu yang lama dan membutuhkan memori yang signifikan.
Dengan waktu yang cukup, itu akan menghasilkan solusi ini untuk kasus uji berikutnya:
sumber
Julia, 229 byte
Ini sebenarnya cukup cepat. Menetapkan fungsi
f
dan menjalankan@time f(15535)
memberikan output (hanya dua baris terakhir)dan untuk
@time f(45197)
, itu memberiJadi, apa yang dilakukan kodenya? Sederhana -
C
memegang nomor satu saat iniC
untuk nomor tersebut,K
adalah susunan indikator yang melacak apakah ekspresi itu, pada dasarnya, jumlah atau produk, untuk tujuan berurusan dengan tanda kurung, danE
menahanE
penekanan itu sendiri. Bekerja terus dari awals=1
hinggan
, kode mencari representasi minimal angkas
dalam hal nilai yang lebih rendah, dengan mencari jumlah atau produk. Jika produk, maka memeriksa dua komponen dan menempatkan tanda kurung di sekitar mereka jika jumlahnya. Pemeriksaan itu dilakukan dalam fungsiF
, untuk menghemat byte (karena harus dilakukan dua kali, untuk dua faktor).sumber