Beberapa bilangan bulat positif dapat ditunjukkan memiliki sifat yang disebut keterbagian rantai. Untuk angka yang dapat dibagi rantai oleh n , itu harus memenuhi tiga persyaratan:
Setiap digit membagi angka yang dibentuk oleh n digit yang mengikutinya.
Misalnya, angka 7143 adalah rantai-terbagi oleh 2 karena 7 membagi 14 dan 1 membagi 43. Yaitu tidak dapat dibagi rantai oleh 3 karena 7 tidak membagi 143.
Setiap urutan diperhitungkan untuk dapat dibagi tidak harus memiliki nol di depan.
Misalnya, angka 14208 tidak dapat dibagi rantai oleh 2 karena 08 memiliki nol di depan. Namun, rantai-dibagi oleh 3, karena 208 tidak memiliki nol di depan.
Semua digit dalam angka harus unik.
Sebagai contoh, nomor 14280 adalah rantai-dibagi oleh 2, 3 dan 4. Jika penjelasan saya tentang pembagian rantai tidak jelas, silakan ajukan pertanyaan di komentar.
Memasukkan
Input ke program terdiri dari bilangan bulat tunggal n
, diikuti oleh spasi, kemudian angka yang memiliki digit tertentu diganti dengan garis bawah. Misalnya, berikut ini adalah input yang mungkin:
3 6__2__4508
n akan lebih besar dari 1. Jumlahnya tidak akan sepenuhnya menjadi garis bawah. Anda tidak dijamin bahwa digit pertama bukan garis bawah. Digit pertama tidak akan pernah menjadi 0. n tidak akan pernah lebih besar atau sama dengan jumlah digit dalam angka.
Keluaran
Keluarkan angka tersebut, dengan digit yang digantikan oleh bilangan bulat sedemikian rupa sehingga angka yang dihasilkan dapat dibagi rantai oleh n . Jika ada lebih dari satu cara melengkapi nomor yang dapat dibagi-rantai, ada yang dapat digunakan sebagai output. Jika tidak ada angka yang bisa menyelesaikannya, output no answer
. Sebagai contoh, output dari contoh input dapat berupa:
6132794508
Ini kode golf, jadi kode terpendek menang.
n
lebih besar dari atau sama dengan jumlah digit dalam angka itu, jumlahnya adalah rantai yang dapat dibagi?Jawaban:
Bash + coreutils, 197 byte
Keluaran:
Penjelasan
${2//_/{0..9\}}
menggantikan semua garis bawah dengan{0..9}
.eval
ed untuk memperluas semua ekspresi penjepit ini.grep
gulma semua kemungkinan di mana ada diulang digit.sumber
Python -
239267Lambat, tapi pendek. Cukup bandingkan setiap permutasi N-digit yang mungkin dengan pola yang diberikan dan periksa semua persyaratan. Saya sudah mengujinya hanya dengan 7 atau 8 digit. Harus bekerja untuk 9 atau 10 juga, tetapi akan memakan waktu cukup lama.
Sunting: Saya menambahkan output default yang hilang "tidak ada jawaban".
sumber
MathematicaRuby,349224229 byteIni adalah implementasi yang sangat naif. Saya menghitung jumlah garis bawah, dan kemudian cukup membuat daftar semua digit-permutasi panjang itu, untuk memaksa setiap kombinasi yang mungkin. Ini akan berkinerja buruk untuk jumlah garis bawah yang lebih besar, tetapi ini adalah kode golf dan bukan kode tercepat. :)
Sunting: Mengaitkan ini dari Mathematica. Lihat riwayat edit untuk versi aslinya.
Sunting: Memperbaiki kasus garis bawah terkemuka terkemuka.
sumber
Tuples
tidak memaksakan kendala itu.Permutations
akan, asalkan tidak ada digit berulang dalam set input. Dan Anda dapat mengubah hanya angka yang belum digunakan. (Meskipun, sekali lagi, ini dapat memperpanjang kode Anda.)Tuples
karena itu lebih pendek.Jawa, 421
Kurang bermain golf, dengan penjelasan:
sumber