Untuk bilangan bulat positif N yang diberikan, tulislah program lengkap untuk menemukan M natural minimal sehingga produk digit M sama dengan N. N kurang dari 1.000.000.000. Jika tidak ada M, cetak -1. Kode Anda tidak boleh lebih dari 10 detik untuk kasus apa pun.
Sample Inputs
1
3
15
10
123456789
32
432
1296
Sample Outputs
1
3
35
25
-1
48
689
2899
1
memberi1
adalah ujian yang penting.Jawaban:
Golfscript,
45 4340 karakterMengganti versi yang tidak mengelompokkan bilangan prima kecil menjadi kekuatan dan menyimpan 8 karakter saat melakukannya. Catatan: 12 = lantai (9 log 10 / log 5).
Ucapan Terima Kasih: dua karakter disimpan dengan membuat trik dari @mellamokb; 3 disimpan dengan petunjuk dari @Nabb.
sumber
12345
beri saya -1, jadi mungkin itu harus berfungsi123456789
juga jika saya bisa menunggu cukup lama.Javascript (
84787674727068)http://jsfiddle.net/D3WgU/7/
Sunting: Gagasan input / output yang dipinjam dari solusi lain, dan logika output yang lebih pendek.
Sunting 2: Disimpan 2 karakter dengan menghapus kawat gigi yang tidak dibutuhkan dalam
for
lingkaran.Sunting 3: Disimpan 2 karakter dengan menulis ulang
while
lingkaran sebagaiif
pernyataan dengani++
.Sunting 4: Disimpan 2 karakter dengan bergerak di sekitar dan mengurangi operasi
i
.Sunting 5: Konversikan jika pernyataan ke format terner menyimpan 2 karakter lagi.
Sunting 6: Simpan 2 karakter dengan pindah
i--
ke bagian terner yang sebenarnya, hapus++i
.sumber
prompt
hal yang sama.m?m:1
=>m||1
JavaScript,
8872787469684 karakter lebih panjang, tetapi sebenarnya skrip yang dapat dieksekusi (sebagai lawan dari fungsi).Sunting: Menggunakan ide dari JavaScript lain, saya dapat menguranginya menjadi ini:Akhirnya! Solusi 69 karakter, hanya menggunakan 1 untuk loop;)Oke, mencukur satu koma.
sumber
awk (
6361595857)sumber
Perl
(75)(72)terinspirasi oleh kode javascript mellamokb; dimaksudkan untuk dijalankan dengan parameter
sumber
GolfScript (
6057)Edit
Ok, saya pikir versi ini memberikan output yang benar untuk setiap kasus sekarang :-)
Edit 2
Mencukur 3 karakter per saran dari Peter.
sumber
1
memberi1
adalah kasus ujian yang penting adalah bahwa itu adalah kasus khusus yang tidak menyenangkan - satu-satunya angka di mana angka1
muncul di output. Dan itu merusak kode Anda, saya khawatir.[
- jika Anda tidak memiliki[
di stack ketika Anda mengevaluasi]
itu mengambil semua yang ada di stack. Dan Anda mungkin dapat menyimpan dua karakter di dekat akhir dengan tidak membungkus-1
dalam array dan memindahkan final$
.Haskell
sumber
(show m)
ke$show m
.m<-[1..9^9]
.... kalau tidak itu adalah daftar yang tak terbatas ... jadi-1
tidak akan pernah terjadi .... koreksi saya jika saya salah.Windows PowerShell, 87
sumber
Perl (68)
Ini tampaknya seperti trik mengagumkan yang menggunakan @mellamokb di javascript untuk menghindari loop bersarang akan menerjemahkan dengan baik untuk perl tetapi keluar jauh lebih verbose karena Anda tidak dapat menggunakan
foreach
gaya lingkaran lagi. Sayang sekali bahwa perl tidak berpikirmap
bahwa loop lainredo
akan berguna.sumber
scala 106 chars:
Tes & Doa:
Waktu respons: segera, <1dt pada 2Ghz CPU.
sumber
Jelly ,
181310 byteCobalah online!
Solusi 13-byte:
Cobalah online!
Penjelasan dengan input
N
:Solusi 18-byte:
Cobalah online!
Tautan terakhir hanya untuk mengganti 0 (nilai falsey default Jelly, karena semua daftar diindeks satu) dengan -1. Jika Anda menganggap 0 nilai falsey OK, programnya adalah 8 byte .
sumber
$ƊƲµ
. (2) Karena string-1
dan angka-1
identik saat output, menggunakan nomor menyimpan 2 byte. (3)P
adalah singkatan×/
. (4) Gagal input3125
._¬$
harus bekerja lebih’¹¬?
o-
bahkan lebih pendek.µ
saya hanya bisa menggunakan_¬
tanpa$
yang disimpan 2 byte! Tapi kemudian saya sadar bahwao-
saya bisa menghilangkanµ
seluruhnya dan menghemat 3 byte!Ruby (100)
sumber
Python 2 , 89 byte
Cobalah online!
Hanya karena belum ada jawaban Python. Benar-benar menyakitkan karena tidak memiliki konversi tipe implisit antara string dan int.
sumber