Terinspirasi oleh pertanyaan ini pada Math.SE .
Dimulai dengan 1
Anda dapat berulang kali melakukan salah satu dari dua operasi berikut:
Gandakan jumlahnya.
atau
Susun ulang digitnya dengan cara apa pun yang Anda inginkan, kecuali tidak boleh ada angka nol di depan.
Mengambil contoh dari pos Math.SE yang tertaut, kita dapat mencapai 1000
melalui langkah-langkah berikut:
1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 125, 250, 500, 1000
Nomor mana yang dapat Anda jangkau dengan proses ini dan apa solusi terpendek?
Tantangan
Dengan bilangan bulat positif N
, tentukan urutan bilangan bulat terpendek yang mungkin dicapai N
dengan proses di atas, jika memungkinkan. Jika ada beberapa solusi optimal, output salah satunya. Jika tidak ada urutan seperti itu, Anda harus menampilkan daftar kosong.
Urutan mungkin dalam format string atau daftar yang nyaman, tidak ambigu.
Anda dapat menulis sebuah program atau fungsi, mengambil input melalui STDIN (atau alternatif terdekat), argumen baris perintah atau argumen fungsi dan mengeluarkan hasilnya melalui STDOUT (atau alternatif terdekat), nilai pengembalian fungsi atau parameter function (out).
Ini adalah kode golf, jadi jawaban tersingkat (dalam byte) menang.
Uji Kasus
Berikut adalah daftar semua nomor yang dapat dijangkau hingga dan termasuk 256. Kolom pertama adalah nomor (input Anda), kolom kedua adalah jumlah langkah optimal (yang dapat Anda gunakan untuk memeriksa validitas solusi Anda) dan yang ketiga kolom adalah salah satu urutan optimal untuk sampai ke sana:
1 1 {1}
2 2 {1,2}
4 3 {1,2,4}
8 4 {1,2,4,8}
16 5 {1,2,4,8,16}
23 7 {1,2,4,8,16,32,23}
29 10 {1,2,4,8,16,32,23,46,92,29}
32 6 {1,2,4,8,16,32}
46 8 {1,2,4,8,16,32,23,46}
58 11 {1,2,4,8,16,32,23,46,92,29,58}
61 6 {1,2,4,8,16,61}
64 7 {1,2,4,8,16,32,64}
85 12 {1,2,4,8,16,32,23,46,92,29,58,85}
92 9 {1,2,4,8,16,32,23,46,92}
104 15 {1,2,4,8,16,32,64,128,256,512,125,250,205,410,104}
106 14 {1,2,4,8,16,32,64,128,256,265,530,305,610,106}
107 14 {1,2,4,8,16,32,23,46,92,29,58,85,170,107}
109 18 {1,2,4,8,16,32,23,46,92,184,368,386,772,277,554,455,910,109}
116 12 {1,2,4,8,16,32,23,46,92,29,58,116}
122 7 {1,2,4,8,16,61,122}
124 16 {1,2,4,8,16,32,23,46,92,29,58,85,170,107,214,124}
125 11 {1,2,4,8,16,32,64,128,256,512,125}
128 8 {1,2,4,8,16,32,64,128}
136 18 {1,2,4,8,16,32,23,46,92,184,148,296,592,259,518,158,316,136}
140 15 {1,2,4,8,16,32,64,128,256,512,125,250,205,410,140}
142 16 {1,2,4,8,16,32,23,46,92,29,58,85,170,107,214,142}
145 17 {1,2,4,8,16,32,23,46,92,184,368,736,376,752,257,514,145}
146 18 {1,2,4,8,16,32,64,128,256,512,125,250,205,410,104,208,416,146}
148 11 {1,2,4,8,16,32,23,46,92,184,148}
149 16 {1,2,4,8,16,32,64,128,182,364,728,287,574,457,914,149}
152 11 {1,2,4,8,16,32,64,128,256,512,152}
154 17 {1,2,4,8,16,32,23,46,92,184,368,736,376,752,257,514,154}
158 16 {1,2,4,8,16,32,23,46,92,184,148,296,592,259,518,158}
160 14 {1,2,4,8,16,32,64,128,256,265,530,305,610,160}
161 13 {1,2,4,8,16,32,23,46,92,29,58,116,161}
163 18 {1,2,4,8,16,32,23,46,92,184,148,296,592,259,518,158,316,163}
164 18 {1,2,4,8,16,32,64,128,256,512,125,250,205,410,104,208,416,164}
166 20 {1,2,4,8,16,32,23,46,92,184,368,736,376,752,257,514,154,308,616,166}
167 17 {1,2,4,8,16,32,23,46,92,184,148,296,269,538,358,716,167}
169 23 {1,2,4,8,16,32,64,128,256,512,125,250,205,410,104,208,416,461,922,229,458,916,169}
170 13 {1,2,4,8,16,32,23,46,92,29,58,85,170}
176 17 {1,2,4,8,16,32,23,46,92,184,148,296,269,538,358,716,176}
182 9 {1,2,4,8,16,32,64,128,182}
184 10 {1,2,4,8,16,32,23,46,92,184}
185 16 {1,2,4,8,16,32,23,46,92,184,148,296,592,259,518,185}
188 23 {1,2,4,8,16,32,23,46,92,184,148,296,592,259,518,185,370,740,470,940,409,818,188}
190 18 {1,2,4,8,16,32,23,46,92,184,368,386,772,277,554,455,910,190}
194 16 {1,2,4,8,16,32,64,128,182,364,728,287,574,457,914,194}
196 23 {1,2,4,8,16,32,64,128,256,512,125,250,205,410,104,208,416,461,922,229,458,916,196}
203 16 {1,2,4,8,16,32,64,128,256,265,530,305,610,160,320,203}
205 13 {1,2,4,8,16,32,64,128,256,512,125,250,205}
208 16 {1,2,4,8,16,32,64,128,256,512,125,250,205,410,104,208}
209 19 {1,2,4,8,16,32,23,46,92,184,368,736,376,752,257,514,145,290,209}
212 8 {1,2,4,8,16,61,122,212}
214 15 {1,2,4,8,16,32,23,46,92,29,58,85,170,107,214}
215 11 {1,2,4,8,16,32,64,128,256,512,215}
218 9 {1,2,4,8,16,32,64,128,218}
221 8 {1,2,4,8,16,61,122,221}
223 14 {1,2,4,8,16,32,23,46,92,29,58,116,232,223}
227 20 {1,2,4,8,16,32,23,46,92,184,148,296,592,259,518,158,316,361,722,227}
229 20 {1,2,4,8,16,32,64,128,256,512,125,250,205,410,104,208,416,461,922,229}
230 16 {1,2,4,8,16,32,64,128,256,265,530,305,610,160,320,230}
232 13 {1,2,4,8,16,32,23,46,92,29,58,116,232}
233 22 {1,2,4,8,16,32,23,46,92,184,368,736,376,752,257,514,154,308,616,166,332,233}
235 19 {1,2,4,8,16,32,23,46,92,184,148,296,269,538,358,716,176,352,235}
236 19 {1,2,4,8,16,32,23,46,92,184,148,296,592,259,518,158,316,632,236}
238 19 {1,2,4,8,16,32,64,128,256,512,125,250,205,410,104,208,416,832,238}
239 25 {1,2,4,8,16,32,23,46,92,184,368,736,376,752,257,514,154,308,616,166,332,233,466,932,239}
241 16 {1,2,4,8,16,32,23,46,92,29,58,85,170,107,214,241}
244 8 {1,2,4,8,16,61,122,244}
247 21 {1,2,4,8,16,32,23,46,92,184,148,296,592,259,518,158,316,632,362,724,247}
248 17 {1,2,4,8,16,32,23,46,92,29,58,85,170,107,214,124,248}
250 12 {1,2,4,8,16,32,64,128,256,512,125,250}
251 11 {1,2,4,8,16,32,64,128,256,512,251}
253 19 {1,2,4,8,16,32,23,46,92,184,148,296,269,538,358,716,176,352,253}
256 9 {1,2,4,8,16,32,64,128,256}
Jika Anda ingin lebih banyak data pengujian, berikut adalah tabel yang sama hingga dan termasuk 1.000 .
Angka apa pun yang tidak muncul pada tabel ini harus menghasilkan daftar kosong (asalkan angkanya dalam kisaran tabel).
sumber
Jawaban:
Pyth, 43 byte
Demonstrasi.
Ini dimulai dengan menghasilkan semua kemungkinan urutan ganda atau mengatur ulang. Namun, karena saya benar-benar ingin melihatnya selesai, saya menambahkan hubungan pendek.
Entah itu berjalan sampai menemukan solusi, atau untuk sejumlah iterasi yang sama dengan input, pada titik mana ia menyerah dan kembali
[]
.Ini dijamin untuk iterasi yang cukup. Pertama, kita tahu bahwa banyak iterasi ini cukup untuk semua n <= 1000, berkat hasil contoh. Untuk angka yang lebih besar, argumen berikut ini berlaku:
Pertama, setiap langkah proses harus mempertahankan atau menambah jumlah digit.
Kedua, tiga angka yang semuanya menata ulang satu sama lain tidak akan pernah bisa muncul dalam urutan terpendek, karena akan lebih cepat untuk hanya melakukan penataan ulang tunggal dari yang pertama ke yang terakhir.
Ketiga, semua kelipatan 3 tidak dapat dijangkau, karena penggandaan maupun penataan ulang tidak dapat menghasilkan kelipatan 3 dari yang bukan kelipatan 3.
Dengan demikian, urutan terpanjang yang mungkin berakhir pada angka yang diberikan sama dengan jumlah dua kali jumlah set digit dengan kurang dari atau sama dengan banyak digit input, dan di mana digit tidak menjumlahkan kelipatan 3.
Jumlah digit tersebut ditetapkan untuk setiap jumlah digit:
Selain itu, kita tahu dari contoh-contoh bahwa tidak ada urutan terpendek yang berakhir dengan angka 3 digit lebih panjang dari 26. Jadi, batas atas panjang urutan adalah:
Dalam setiap kasus, batas atas lebih rendah dari angka apa pun dengan jumlah digit
Jumlah set digit tidak dapat tumbuh lebih dari faktor 10 ketika jumlah digit bertambah satu, karena angka baru dapat dipisahkan menjadi grup dengan digit terakhir, masing-masing tidak dapat memiliki lebih banyak set daripada yang ada dengan lebih sedikit angka.
Dengan demikian, batas atas akan lebih rendah dari angka mana pun dengan banyak digit untuk semua kemungkinan jumlah digit lebih besar dari atau sama dengan 4, yang melengkapi bukti bahwa sejumlah iterasi yang sama dengan input selalu cukup.
sumber
SWI-Prolog, 252 byte
Contoh:
a(92,Z).
keluaranZ = [1, 2, 4, 8, 16, 32, 64, 46, 92]
Saya belum memeriksa apakah ini bekerja untuk N> 99 karena waktu yang diperlukan, tetapi saya tidak melihat alasan mengapa itu tidak berhasil.
sumber
Julia,
306245218 byteMasih berusaha bermain golf ini. Akan memberikan versi yang tidak diklik setelah saya selesai.
sumber
Haskell, 246 byte
Saya tidak sepenuhnya yakin apakah ini bekerja, itu tidak jika urutan yang pertama menyimpang lebih rendah (untuk diurutkan lebih rendah) selalu lebih pendek, seperti misalnya
[1,2,4,8,16,32,64,128,256,512,125,250,500,1000]
lebih pendek dari
[1,2,4,8,16,32,64,128,256,512,251,502,250,500,1000]
yang saya uji benar hingga 1000.
sumber
C # 655 byte
Panggilan dengan (LinqPad):
Belum menguji angka di atas 99. Jika Anda punya waktu -> semoga berhasil ;-)
sunting: versi yang tidak disatukan:
sumber
CJam, 83
Cobalah online
Saya sudah duduk di ini untuk waktu yang lama, itu tidak terlalu pendek atau cepat, dan saya tidak yakin saya memiliki energi / motivasi untuk memperbaikinya, jadi saya hanya mempostingnya.
sumber