Awalan terbagi
Inspirasi
Diberikan bilangan bulat positif \$1 \le n \le 9\$, keluaran semua positif \$n\$-digit bilangan bulat \$i\$ yang mana hal berikut ini benar:
- Setiap digit dari \$1\$ke \$n\$muncul tepat sekali dalam \$i\$. Oleh karena itu, \$i\$Angka adalah permutasi dari angka dari \$1\$ke \$n\$.
- \$i\$dapat dibagi oleh \$n\$
- Menghapus digit paling kanan dari \$i\$menghasilkan integer lain \$i_{\text{trunc}(1)}\$yang dapat dibagi oleh \$n-1\$
- Menghapus digit paling kanan dari \$i_{\text{trunc}(1)}\$menghasilkan integer lain \$i_{\text{trunc}(2)}\$yang dapat dibagi oleh \$n-2\$
- Dan seterusnya, sampai \$i_{\text{trunc}(n-1)}\$, yang habis dibagi 1.
Misalnya, untuk \$n = 3\$, salah satu bilangan bulat tersebut adalah \$321\$, sebagai \$321\$dapat dibagi oleh \$3\$, \$32\$oleh \$2\$dan \$3\$ dengan 1.
Untuk \$n = 4, 5, 7\$, tidak ada bilangan bulat seperti itu. Dalam hal ini, Anda mungkin keluaran sesuatu yang tidak dapat bingung dengan output mungkin (misalnya 0, [], tidak ada, dll). Untuk \$n = 3, 6\$, Anda dapat mengeluarkan dua angka dalam format apa pun yang memisahkan dua angka dengan jelas satu sama lain.
Ini adalah kode-golf jadi kode terpendek dalam byte menang.
Jika Anda menggunakan metode tabel pencarian, poin brownies \${}^\dagger\$ diberikan jika Anda juga menyertakan versi yang menghitung keluaran yang benar.
\${}^\dagger\$Poin brownies mungkin atau mungkin tidak dalam bentuk suara positif
Kasus uji
Kasus-kasus ini lengkap, jadi Anda tidak akan pernah menerima (atau harus menangani) masukan yang tidak disertakan di sini.
n -> i
1 -> [1]
2 -> [12]
3 -> [123, 321]
4 -> []
5 -> []
6 -> [123654, 321654]
7 -> []
8 -> [38165472]
9 -> [381654729]
Jawaban
05AB1E , 8 byte
LœJʒηāÖP
Cobalah secara online!
Berkomentar :
L # push [1..n]
œ # push all permutations
J # join each permutation into a number
ʒ # filter those numbers on:
η # each prefix ...
Ö # ... is divisible ...
ā # ... by its index
P # take the product (all)
Python 2 , 68 byte
lambda n:[`s`[:n]for s in 321654,381654729,123654][380712>>n*2&3::2]
Cobalah secara online!
Menghasilkan daftar string.
71 byte
lambda n:[0,1,12,[123,321],0,0,[123654,321654],0,38165472,381654729][n]
Cobalah secara online!
Hanya hardcode lurus yang membosankan. Menghasilkan satu angka, atau daftar dua angka, atau 0 tanpa output.
Tak satu pun dari metode lain yang saya coba tampaknya lebih pendek dari ini. Misalnya, salah satu idenya adalah menghasilkan angka sebagai awalan dari satu angka, menghasilkan suka 123654/10**(6-i).
Metode objek memberikan panjang yang sama. Sayangnya kami tidak dapat menggunakan lebih pendek .popkarena membuat fungsi tidak dapat digunakan kembali karena mengubah daftar dengan setiap panggilan.
[0,1,12,[123,321],0,0,[123654,321654],0,38165472,381654729].__getitem__
Cobalah secara online!
Aliasing konstanta terpanjang juga memberikan panjang yang sama:
lambda n,c=381654729:[0,1,12,[123,321],0,0,[123654,321654],0,c/10,c][n]
Cobalah secara online!
J , 42 37 byte
Menghitung angka.
0({:#~0=[:+/#\|])@|:i.@!10&#.\@A.1+i.
Cobalah secara online!
1+i.1… ni.@!…@A.semua permutasi yang mungkin dari 1… n10&#.\mengubah setiap awalan permutasi menjadi angka0(…)@|:mengubah urutan matriks dan…#\|]1… n mod prefiks, misalnya1 2 3 | 1 12 1230=[:+/jumlahkan hasilnya; apakah itu 0?{:#~kemudian ambil awalan terakhir dari permutasi (permutasi itu sendiri)
Scala, 81 80 byte
| =>1.to(|).mkString.permutations.filter{i=>1 to|forall(r=>i.take(r).toInt%r<1)}
Cobalah di Scastie
Penjelasan:
| => //n, the input
1.to(|) //Range to n
.mkString //Turn it into a string
.permutations //Get all permutations
.filter{ i => //Filter them
1 to | forall(r => //For every r from 1 to n
i.take(r).toInt //The number made from i's first r digits
% r < 1 //Should be divisible by r
)
}
Arang , 25 byte
NθΦEXχθIι⬤…·¹θ›№ιIλ﹪I…ιλλ
Cobalah secara online! Tautan adalah untuk verbose versi kode. Terlalu lambat untuk n>5di TIO. Penjelasan:
Nθ
Masukan n.
ΦEXχθIι
Cantumkan semua bilangan bulat ihingga 10ⁿ, sehingga ...
⬤…·¹θ
... untuk setiap bilangan bulat ldari 1hingga n...
›№ιIλ﹪I…ιλλ
ladalah digit dari idan lawalan -karakter dari ihabis dibagi l.
Versi 28-byte yang sedikit lebih cepat:
NθΦEX⊕θθ⍘ι⊕θ⬤…·¹θ›№ιIλ﹪I…ιλλ
Cobalah secara online! Tautan adalah untuk verbose versi kode. Penjelasan: Menghasilkan digit dalam basis, n+1bukan basis 10, sehingga memungkinkan untuk diselesaikan n=6di TIO.
Versi 29-byte tercepat menggunakan tabel pencarian terkompresi:
§⪪”)‴a3HSGS⸿Dπ¬Z⦄O<ε≔<πUθ8”0N
Cobalah secara online! Tautan adalah untuk verbose versi kode.
Bahasa Wolfram (Mathematica) , 78 byte
(f=FromDigits)/@Select[Permutations@Range[s=#],f@#[[;;k]]~Mod~k~Sum~{k,s}<1&]&
Cobalah secara online!
-8 byte dari @att
Husk , 15 byte
mdföΛIṠz¦ŀmdḣPḣ
Cobalah secara online!
Jawabannya sama dengan pertanyaan lainnya, kecuali dengan parameter.
C (gcc) lm, 67 101 96 bytes
Menambahkan 34 byte untuk memperbaiki bug yang ditunjukkan oleh xnor .
Disimpan 5 byte berkat ceilingcat !!!
f(n){write(1,"321654",n-3&&n-6?0:n);n=n<4?123/exp10(3-n):n>7?381654729/exp10(9-n):n-6?0:123654;}
Cobalah secara online!
Solusi berbasis pencarian total. Jika ada dua solusi: mengeluarkan satu ke stdout, dan mengembalikan yang lain. Jika hanya ada satu jawaban, itu akan dikembalikan. Kembali \$0\$ jika tidak ada jawaban.
Putaran bonus untuk poin brownies
C (gcc) , 232.212 byte
Menyimpan 20 byte kekalahan berkat ceilingcat !!!
p;m;j;char b[9],c[9];d;i;f(n){for(d=0,i=n;i;)d+=9*d+i--;for(sprintf(c,"%d",d);d/++i;)if(sprintf(b,"%d",i),qsort(b,n,1,L"\xf06be0f\xd02917beǃ"),!strcmp(b,c)){for(p=0,m=n,j=i;j;j/=10)p|=j%m--;p||printf("%d ",i);}}
Cobalah secara online!
Menghitung angka yang benar melalui kalkulasi dan mengeluarkannya ke stdout. Tidak menghasilkan apa-apa jika tidak ada jawaban. Waktu habis di TIO untuk \$n=9\$tetapi semuanya ada di 3m36.499slaptop saya.
Jelly , 11 10 byte
-1 berkat koinheringaahing caird !
Ini adalah metode yang naif, mungkin ada metode yang lebih singkat.
Œ!JḍḌƤẠƲƇḌ
Tautan monadik menerima \$n\$yang menghasilkan 0jika tidak ada yang ditemukan atau daftar nomor yang valid.
Cobalah secara online! Atau lihat rangkaian pengujian .
Bagaimana?
Œ!JḍḌƤẠƲƇḌ - Link: n
Œ! - all permutations of [1..n]
Ƈ - filter keep those (p for p in Œ!) for which:
Ʋ - last four links as a monad f(p):
J - range of length = [1..n]
Ƥ - apply to prefixes (of p):
Ḍ - un-decimal
ḍ - divides? (vectorises)
Ạ - all truthy?
Ḍ - un-decimal
Perl 5 , 64 byte
sub{grep"@_"==y///c,1,12,123,321,123654,321654,$x=38165472,$x.9}
Cobalah secara online!
JavaScript (V8) , 97 byte
Fungsi rekursif yang menghitung dan mencetak bilangan bulat yang cocok.
f=(n,s='987654321'.slice(-n),d,p)=>p%d?0:s?[...s].map(v=>f(n,s.replace(v,''),-~d,[p]+v)):print(p)
Cobalah secara online!
JavaScript (ES6), 59 byte
Pengodean keras jelas lebih pendek.
n=>[,1,12,[321,123],,,[321654,123654],,q=38165472,q+[9]][n]
Cobalah secara online!
Bahasa Wolfram (Mathematica) , 71 byte
f[s_:0,l_:0]=0!=##2&&l∣s&&If[l<#,##~f[10s+i,l+1]~i~Do~{i,#},Print@s]&
Cobalah secara online!
Panggil sebagai f[][n]. Mencetak hasilnya.
Excel, 64 byte
=CHOOSE(A1,1,12,"123,321",,,"123654,321654",,38165472,381654729)
Masukan masuk A1. Jawaban hardcode lebih pendek dari perhitungan.