Beberapa pembagi bilangan bulat positif benar-benar saling membenci dan mereka tidak suka berbagi satu angka atau lebih.
Bilangan bulat itu disebut Hostile Divisor Numbers ( HDN )
Contohnya
Angka 9566
memiliki 4
pembagi: 1, 2, 4783 and 9566
(seperti yang Anda lihat, tidak ada dua dari mereka yang berbagi angka yang sama ).
Jadi, 9566 adalah H ostile D ivisor N umber
Jumlah 9567
ini tidak HDN karena pembagi nya ( 1, 3, 9, 1063, 3189, 9567
) berbagi beberapa digit umum.
Berikut adalah beberapa HDN pertama
1,2,3,4,5,6,7,8,9,23,27,29,37,43,47,49,53,59,67,73,79,83,86,87,89,97,223,227,229,233,239,257,263,267,269,277,283,293,307,337...
Tugas
Daftar di atas berjalan dan tugas Anda adalah menemukan HDN ke - n
Memasukkan
Bilangan bulat positif n
dari 1
hingga4000
Keluaran
The nth
HDN
Uji Kasus
berikut adalah beberapa kasus uji 1-indeks
Harap sebutkan sistem pengindeksan yang Anda gunakan dalam jawaban Anda untuk menghindari kebingungan.
input -> output
1 1
10 23
101 853
1012 26053
3098 66686
4000 85009
Ini adalah kode-golf , sehingga skor terendah dalam byte menang.
EDIT
Kabar baik! Saya mengirimkan urutan saya ke OEIS dan ...
Nomor Pembagi Hostile sekarang adalah OEIS A307636
sumber
94699599289
kuadrat307733
, memiliki pembagi[1, 307733, 94699599289]
yang menunjukkan itu adalah HDN. Tampaknya memusuhi saya.49
? Faktor[1, 7, 49]
memenuhi syarat sebagai bermusuhan ... Atau, baik,4
:[1, 2, 4]
...1
dengan daftar pembagi[1]
. (Mungkin HDN besar lebih menarik?)49
memiliki pembagi[7, 7]
, yang tidak hanya berbagi angka tetapi juga angka yang sama.49
memiliki faktor[1, 7, 49]
Jawaban:
05AB1E ,
1210 byte-2 byte terima kasih kepada @Emigna .
1-diindeks
Cobalah secara online atau verifikasi sebagian besar kasus uji (dua kasus uji terakhir dihilangkan, karena waktu habis).
Penjelasan:
sumber
µNNÑ€ÙSDÙQ
untuk 10.µ
, jadi Anda menyelamatkan saya masalahnya. ;)Python 2 , 104 byte
Cobalah online!
Diindeks 0.
sumber
JavaScript (ES6), 78 byte
1-diindeks.
Cobalah online!
Versi lebih cepat, 79 byte
Cobalah online!
Bagaimana?
Diberikan bilangan bulatk > 0 , kita membangun string s sebagai gabungan dari semua pembagi k .
Karenak selalu merupakan pembagi dari dirinya sendiri, s diinisialisasi ke k (dipaksa ke string) dan pembagi pertama yang kita coba adalah d= k - 1 .
Untuk setiap pembagid dari k , kita menguji apakah setiap digit dari d dapat ditemukan di s dengan memutar d ke dalam satu set karakter dalam ekspresi reguler.
Contohnya
"956647832".match(/[1]/)
salah"9567".match(/[3189]/)
benarBerkomentar
Ini adalah versi tanpa
eval()
, agar mudah dibacasumber
Jelly , 10 byte
Cobalah online!
-1 byte berkat ErikTheOutgolfer
Mengambil input dari STDIN, yang tidak biasa untuk Jelly tetapi biasa
nfind
digunakan di mana .2 diindeks
sumber
nfind
itu mengubah pengindeksan lol⁼Q$
sama denganQƑ
.Perl 6 , 53 byte
Cobalah online!
1-diindeks.
/(.).*$0/
cocok dengan nomor apa pun dengan digit yang diulang.grep $_ %% *, 1 .. $_
mengembalikan daftar semua pembagi nomor yang$_
saat ini sedang diperiksa untuk keanggotaan dalam daftar.[~]
menggabungkan semua angka itu bersama-sama, dan kemudianR!~~
mencocokkan string di sebelah kanan dengan pola di sebelah kiri. (~~
Adalah operator pertandingan yang biasa,!~~
adalah negasi dari operator itu, danR
merupakan metaoperator yang bertukar argumen!~~
.)sumber
Python 2 (PyPy) ,
117114 byteMenggunakan pengindeksan 1
Cobalah online!
sumber
Bahasa Wolfram 103 byte
Menggunakan pengindeksan 1. Saya terkejut itu membutuhkan banyak kode.
sumber
(n=t=1;While[t<=#,If[!Or@@IntersectingQ@@@Subsets[IntegerDigits@Divisors@n,{2}],t++];n++];n-1)&
Saya tidak berencana untuk mengirim jawaban jadi saya akan meninggalkan ini di siniPowerShell , 112 byte
Cobalah online!
Membawa input 1-diindeks
$args[0]
, menyimpan ke dalam$a
, loop sampai hits0
. Setiap iterasi, kami nolkan array sepuluh elemen$z
(digunakan untuk menampung jumlah digit kami). Kemudian kami membuat daftar pembagi dengan1..++$n|?{!($n%$_)}
. Untuk setiap pembagi, kami melemparkannya ke string"$_"
, melemparkannyat
oCharArray
, dansort
angka-angka dengan-u
bendera nique (karena kami tidak peduli jika pembagi itu sendiri memiliki angka duplikat). Kami kemudian menambah jumlah digit yang sesuai di$z
. Kemudian, kami mengurangi$a
hanya jika$z
mengandung0
s dan1
s (yaitu, kami telah menemukan HDN). Jika kami telah menyelesaikanfor
loop kami , itu berarti kami menemukan jumlah HDN yang sesuai, jadi kami pergi$n
pada jalur pipa dan hasilnya tersirat.sumber
$a-=!($z-ge2)
sebagai gantinya$a-=!($z|?{$_-ge2})
Python 3 , 115 byte
1-diindeks
Cobalah online!
Ini menggunakan banyak rekursi; bahkan dengan peningkatan batas rekursi, itu tidak bisa dilakukan
f(30)
. Saya pikir itu mungkin golf lebih jauh, dan saya mencoba menemukan sesuatu untuk menggantikan(1-x%d)
dengan, tetapi tidak dapat menemukan apa pun (-~-x%d
memiliki prioritas yang salah). Setiap byte yang dapat dicukur sangat dihargai.Bagaimana itu bekerja
sumber
Brachylog (v2), 14 byte
Cobalah online!
Pengiriman fungsi; input dari kiri, output ke kanan. (TIO link berisi argumen baris perintah untuk menjalankan fungsi seolah-olah itu adalah program lengkap.)
Penjelasan
"Apakah ini nomor pembagi musuh?" kode keputusan-masalah :
Ini ternyata pada dasarnya sama dengan @ UnrelatedString, walaupun saya menulisnya secara independen.
"n solusi untuk bungkus masalah-keputusan ":
Ini adalah salah satu kasus di mana pembungkus yang diperlukan untuk menghasilkan keluaran ke-n secara signifikan lebih lama dari kode yang diperlukan untuk menguji setiap keluaran pada gilirannya :-)
Saya datang dengan bungkus ini secara independen dari @ UnrelatedString. Panjangnya sama dan bekerja dengan prinsip yang sama, tetapi entah bagaimana akhirnya ditulis agak berbeda. Itu memang memiliki ruang lingkup yang lebih potensial untuk perbaikan, karena kita bisa menambahkan batasan pada nilai apa yang kita lihat secara gratis dengan mengganti
A
dengan beberapa variabel kendala, tetapi tidak ada variabel kendala yang mungkin yang menyelamatkan byte. (Jika ada variabel kendala "nonnegative integer", Anda bisa menggantinyaA
, dan kemudian menyimpan byte melalui pembuatan yangℕ
tidak perlu.)sumber
Java 10,
149139138126125120119 byte-10 byte dengan menggunakan
.matches
bukan.contains
per digit, terinspirasi oleh jawaban JavaScript @Arnauld .-5 byte terima kasih kepada @ValueInk
-1 byte terima kasih kepada @ceilingcat
1-diindeks
Cobalah online.
Penjelasan:
sumber
i
dans
dalam pencarian regex Anda, Anda tidak perlu konversi string tambahan, dan hasilnya sama.Brachylog , 16 byte
Cobalah online!
Sangat lambat, dan dua kali lebih lama jika ini merupakan masalah keputusan . 1-diindeks.
sumber
Bahasa Wolfram (Mathematica) , 74 byte
Cobalah online!
sumber
Japt v2.0a0, 17 byte
Cobalah
Port jawaban Brachylog ini .
Kredit: total penghematan 4 byte berkat Shaggy yang juga menyarankan ada solusi yang lebih baik yang mengarah ke lebih banyak byte :)
Jawaban asli pendekatan 28 byte:
Cobalah
Port jawaban JavaScript ini .
sumber
«
pintasan sebelumnya :) Saya pikir jika Shaggy hanya meningkatkan skor saya dengan beberapa byte, saya harus (agak) layak dalam hal ini?Ikon , 123 byte
Cobalah online!
1-diindeks. Sangat lambat untuk input besar.
sumber
Perl 6 , 74 byte
Diindeks 0. Hanya tiga kasus pertama yang terdaftar di TIO karena terlalu lambat untuk menguji sisanya.
Cobalah online!
sumber
Ruby ,
110979284 byte-13 bytes dengan memanfaatkan cek regex JavaScript dari Arnauld .
-5 byte untuk menukar
times
loop untuk decrementer dan awhile
.-8 byte dengan membuang
combination
sesuatu yang lebih seperti jawaban lainnya.Cobalah online!
sumber
Perl 5
-p
, 66 byteCobalah online!
1 diindeks
sumber
J ,
8759 byte-28 byte berkat FrownFrog
Cobalah online!
asli
J , 87 byte
Cobalah online!
Astaga.
Ini sangat lama bagi J, tetapi saya tidak melihat cara yang bagus untuk menjatuhkannya.
penjelasan
Membantu mengenalkan kata kerja pembantu pasangan untuk melihat apa yang terjadi:
d
mengembalikan daftar semua pembagi argumennyah
memberitahu Anda daftar seperti itu bermusuhan. Ini merangkum dan menduplikasi setiap angka~.@":"0
, yang mengembalikan matriks persegi di mana angka yang lebih pendek diisi dengan spasi.-.&' '@,/
merata matriks dan menghapus spasi, dan akhirnya(-:~.)
memberitahu Anda jika bahwa angka memiliki mengulangi atau tidak.Dengan dua pembantu itu, kata kerja kami yang tidak disatukan secara keseluruhan menjadi:
Di sini kita menyimpan daftar yang kepalanya adalah "kandidat kita saat ini" (yang dimulai dari 1), dan yang ekornya adalah semua angka yang bermusuhan sejauh ini.
Kami menambah kepala daftar
>:@[
pada setiap iterasi, dan hanya menambahkan "kandidat saat ini" jika itu bermusuhanh@d@[ # [
. Kami terus melakukan ini sampai panjang daftar kami mencapai 1 + n:^:(#@] < 1 + [)^:_
.Akhirnya, ketika kita selesai, kita mengembalikan nomor terakhir dari daftar ini
[: {:
yang merupakan nomor bermusuhan ke-n.sumber