Tugas Anda adalah membangun nomor alami menggunakan jumlah yang paling sedikit dan hanya operator +
atau -
. Misalnya, nomor tujuh dapat ditulis 1+1+1+1+1+1+1=7
, tetapi juga dapat ditulis sebagai 11-1-1-1-1=7
. Yang pertama menggunakan 7
yang, sedangkan yang terakhir hanya menggunakan 6
. Tugas Anda adalah mengembalikan jumlah minimum yang dapat digunakan mengingat input dari beberapa nomor alami n
,.
Ini adalah kode golf, jadi kode terpendek yang valid dalam byte menang.
Uji kasus
Input => Output
0 => 2 (since 1-1=0)
7 => 6
121 => 6
72 => 15
1000 => 7
2016 => 21
code-golf
number-theory
codeputer
sumber
sumber
VALID OUTPUTS
. Itu pilihan Anda, tetapi umumnya orang lebih suka huruf tebal atau miring daripada SURAT MODAL (mereka membuatnya tampak seperti berteriak, bukannya menekankan). Berani adalah**bold text**
, dan huruf miring adalah*italics text*
. Anda juga dapat menggunakan### Text
untuk teks tebal. Bagaimanapun, selamat datang di PPCG!Jawaban:
JavaScript (ES6),
12712687 byteHarus bekerja sekitar 10
1415 saat Anda mulai berlari ke batas integer JavaScript. Penjelasan:Ini menggunakan
n*9
sihir dua kali; pertama, itu memberi saya panjang dari repunit berikutnya, kedua, jika dua digit pertaman*9
adalah55
atau lebih tinggi, maka kita perlu mengurangin
dari repunit berikutnya, jika tidak kita perlu mengurangi repunit sebelumnya (yang dihitung dengan mengurangi 1 dan membaginya dengan 10). Ini harus bekerja hingga 10 15 .sumber
Pyth,
1916 byteSuite uji
Algoritma brute force. String yang diperlukan dihasilkan dengan mengambil semua daftar yang unsur-unsurnya
['+', '-', '']
panjang sama dengan jumlah 1 yang diuji, menambahkan 1 untuk masing-masing, dan menyatukan ke string tunggal. String ini kemudian dievaluasi dan dibandingkan dengan input. Ini diulangi hingga string yang berhasil ditemukan.Beberapa string dengan pemimpin
+
atau-
diuji, tetapi ini bukan masalah. Akan tetapi jika inputnya negatif.Itu bisa berjalan hingga panjang 9 sebelum menjadi terlalu lambat.
Penjelasan:
sumber
JavaScript (ES6), 92 byte
Penjelasan
Fungsi rekursif. Ini menghasilkan semua permutasi yang mungkin
1
s dipisahkan oleh+
,-
atau tidak sama sekali. Ini dilakukan dengan menambah basa-3, mengubahnya menjadi array angka, mengubah setiap digit0
menjadi-
,1
menjadi+
dan2
menjadi string kosong, kemudian menyatukannya dengan1
s. String yang dihasilkan adalaheval
d sebagai pernyataan JavaScript yang mengembalikan hasil persamaan.Karena operator digabungkan dengan
1
s di antara (seperti+1+1+1+
), adalength - 1
1
s. Operator pertama diabaikan (karena+1
=1
,<nothing>1
=1
dan itu nomor sehingga tidak akan pernah ada terkemuka0
untuk-
) dan operator akhir juga diabaikan (dengan menambahkan.0
persamaan).Versi Output Lebih Tinggi, 96 byte
Versi lain tidak dapat mengembalikan output lebih tinggi dari ~ 10 karena batas tumpukan panggilan rekursi. Versi ini menggunakan loop untuk alih-alih rekursi, sehingga dapat mengembalikan output hingga ~ 33. Jumlah waktu yang dibutuhkan meningkat secara eksponensial, jadi saya tidak merekomendasikan untuk mengujinya.
sumber