Pada episode terbaru QI , 5 kelipatan pertama dari 142857 digambarkan sebagai anagram dari nomor aslinya. Tentu saja, siapa pun yang memiliki lebih dari pengetahuan yang lewat tentang angka itu akan tahu bahwa angka-angka itu sebenarnya siklik, bukan hanya anagram. Tapi itu membuat saya berpikir.
Silakan tulis sebuah program atau fungsi yang menampilkan semua angka dari enam atau lebih sedikit digit yang memiliki faktor tepat yang merupakan anagram itu sendiri. Daftar harus dimulai dengan angka-angka berikut:
3105 (divisible by 1035)
7128 (divisible by 1782)
7425 (divisible by 2475)
8316 (divisible by 1386)
8712 (divisible by 2178)
9513 (divisible by 1359)
9801 (divisible by 1089)
Jika Anda suka, Anda dapat menemukan angka yang memiliki anagram yang merupakan faktor yang tepat dari angka tersebut, tetapi berhati-hatilah untuk tidak memasukkan angka nol di depan dari anagram Anda.
Ini adalah kode golf, jadi kode terpendek dalam byte yang tidak memecah celah standar menang.
Jawaban:
Mathematica (lingkungan REPL),
7574 byteTerima kasih kepada ngenisis untuk memperketat byte ini!
Sort/@IntegerDigits@Divisors@#
menghasilkan daftar angka yang diurutkan untuk setiap pembagi argumennya; nomor input itu sendiri adalah pembagi, jadi daftar digit yang diurutkan adalah yang terakhir.Most@#~MemberQ~Last
mendeteksi apakah daftar angka yang terakhir disortir juga muncul dalam daftar sebelum elemen terakhir. DanSelect[Range[10!],...]
hanya mempertahankan bilangan bulat tersebut hingga 3.628.800 yang lulus tes ini (yang terikat dipilih karena itu satu byte lebih pendek dari 10 6 ). Ini berjalan sekitar 5 menit di komputer saya, menghasilkan daftar 494 angka, yang terbesar adalah 3.427.191; ada 362 angka hingga 10 6 , yang terbesar adalah 989.901.sumber
IntegerDigits@Divisors@#
.Jelly , 12 byte
Cobalah online! (menggunakan lima digit atau lebih sedikit karena batas waktu TIO)
Verifikasi
Bagaimana itu bekerja
sumber
ÆḌṢ€ċṢµȷ#
untuk 10. Butuh waktu ~ 27 menit untuk berjalan pada inti i7 (bukan pada unix, tidak baiktime
); hasil terbesar adalah6671928
.Brachylog , 12 byte
Cobalah online!
Ini mungkin kehabisan waktu sebelum mencetak apa pun (dan jika tidak, ia hanya akan mencetak 3105).
Penjelasan
Ini mencetak angka-angka itu tanpa batas, karena penulis mengatakan itu dapat diterima bahwa program akan mencetak angka lebih besar dari 6 digit.
Ini terlalu lambat; Anda dapat menggunakan program ini (dan mengubahnya
8300
dengan yang lainN
) untuk mulai mencetak dari angka yang jauh lebih besar dariN
.Seperti @ ais523 tunjukkan, kita perlu potongan untuk menghindari mencetak angka beberapa kali jika beberapa faktornya adalah permutasi darinya.
sumber
JavaScript (ES6),
103…9694 byteFungsi anonim yang mengembalikan array bilangan bulat yang cocok.
Diformat dan dikomentari
Statistik pembagi
Untuk bilangan bulat 6 digit, masing-masing rasio dari
2
ke9
antara bilangan bulat yang cocokn
dan anagram yang ditemui setidaknya sekali. Tetapi beberapa dari mereka muncul hanya beberapa kali:Uji
Tes di bawah ini terbatas pada rentang
[1 ... 39999]
sehingga tidak perlu terlalu banyak waktu untuk menyelesaikannya.Tampilkan cuplikan kode
sumber
_=>[...Array(1e6).keys()].filter(n=>n&&![...Array(9)].every(_=>n%++i||(F=i=>[...i+''].sort()+'')(n/i)!=F(n),i=1))
.2
ke9
diperlukan (8
digunakan hanya dua kali untuk911736
dan931176
).Pyke, 14 byte
Coba di sini!
Haruskah menampilkan semua angka seperti ini tetapi waktu habis.
Uji algoritme di sini!
sumber
Perl 6 , 59 byte
Solusi brute force yang sangat lambat.
Ini mengembalikan urutan malas, jadi saya bisa memeriksa beberapa hasil pertama, tetapi tidak akan mencapai semua hasil dalam waktu yang wajar. (Haruskah saya menandainya sebagai non-bersaing?)
sumber
Pure Bash ,
128126122121120 byteCobalah online!
(Program ini cukup cepat - hanya butuh 14 menit untuk menjalankan semua angka 6 digit di MacBook saya. Sayangnya TIO habis karena memaksakan batas waktu berjalan 1 menit, yang hanya cukup waktu untuk melewati 5 digit angka atau lebih.)
Utilitas Bash + Unix, 117 byte
Ini lebih pendek dari versi bash murni, tetapi sedikit lebih lambat, mungkin karena sebagian besar forking terjadi.
sumber
05AB1E , 15 byte
Penjelasan:
Cobalah online! (ini tidak akan berhasil, itu akan habis)
sumber
Japt , 23 byte
Cobalah online! Perhatikan bahwa kode tertaut hanya menghitung hingga 1e4 karena 1e6 kali keluar pada TIO.
sumber
Python 2, 98 byte
sumber
10**6
?x%i==0
bisa sajax%i<1
.05AB1E ,
1210 byteWaktu habis pada TIO karena loop tak terbatas.
Menyimpan 2 byte karena kami dapat menampilkan lebih dari 6 digit angka menurut komentar OP.
Cobalah online!
Penjelasan
sumber
Batch, 263 byte
Lambat. Seperti dalam, membutuhkan waktu lebih dari satu hari untuk menyelesaikan PC saya. Penjelasan:
c
subrutin membagi dua argumen pertamanya. Jika sisanya adalah nol, itu kemudian menghitung hash hasil dengan menghitung jumlah dari kekuatan ke-8 dari 8 untuk setiap digit. Fungsi hash ini, dicuri dari jawaban bash, hanya bertabrakan pada anagram. (Ini akan bekerja untuk angka tujuh digit tapi saya tidak punya dua minggu.) Argumen ketiga dikurangi, dan subrutin keluar dengan hasil yang benar jika ini nol. Then
subroutine panggilanc
subroutine sekali untuk menghitung hash, maka delapan kali untuk membandingkan hash; jika menemukan tabrakan, ia mencetakn
dan keluar subrutin awal.sumber