var QUESTION_ID=59014,OVERRIDE_USER=42963;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>
Jawaban:
Jelly , 8 byte
Berjalan secara lokal dalam waktu kurang dari delapan menit.
Cobalah online! (dimodifikasi untuk menemukan angka dengan enam digit atau kurang)
Bagaimana itu bekerja
sumber
Python 2, 85 byte
Mencetak daftar.
Saya pada dasarnya menggabungkan dua jawaban saya untuk tantangan sebelumnya:
Memeriksa apakah suatu angka dapat dibagi oleh masing-masing digitnya
(terima kasih kepada FryAmTheEggman untuk mengingatkan saya tentang ini).
Tentukan apakah semua angka desimal unik
Berkat xsot selama 1 byte disimpan dengan menggabungkan kondisi yang lebih baik.
sumber
print[n for n in range(1,9**9)if(n<10**len(set(`n`)))>any(n%(int(d)or.3)for d in`n`)]
Perl,
6147 byte46 byte kode + 1 byte parameter baris perintah.
Pemakaian:
Penjelasan
/(.).*\1|0/
mengembalikan 1 jika angka yang diuji mengandung karakter duplikat atau 0s/./$_%$&/rge
mengganti setiap digit dengan nilai angka yang diuji% digit. Misalnya, 15 -> 00, 16 -> 04 (karena 16% 6 = 4). Ini berarti bahwa setiap input yang dapat dibagi oleh semua digitnya akan terdiri dari semua 0s, jika tidak maka akan mengandung digit> 0. Untuk menganggap ini sebagai angka, kita * 1, yang berarti setiap angka yang diuji akan mengembalikan 0 untuk blok ini jika dapat dibagi dengan semua digitnya, jika tidak> 0.Dengan memisahkan kedua pernyataan ini dan cetakan dengan 'atau, jika salah satu dari dua kondisi pertama kembali> 0, kondisi tersebut cocok dan bagian selanjutnya dari ekspresi tidak akan dievaluasi. Jika dan hanya jika kedua kondisi sebelumnya adalah 0, hasil cetak akan dieksekusi. The
-l
bendera memastikan untuk menambahkan baris baru setelah setiap cetak.sumber
say
bukannyaprint
+-l
:-)say
diperlukan deklarasi eksplisit terlebih dahulu ?use feature 'say'
atauuse 5.012
gratis - Saya selalu menyebutkan kapan saya melakukannya, dan tidak ada yang pernah menantangnya. Saya telah melihat beberapa orang lain melakukan hal yang sama :)map
dansay
menurunkannya menjadi 43: Cobalah online!Pyth,
2221Terima kasih kepada Jakube untuk bermain golf dengan 1 byte format yang tidak perlu.
Sangat terinspirasi oleh jawaban CW ini untuk pertanyaan terkait.
Saya punya tempel hasilnya di sini , mulai dari saat dicetak baris baru, sekarang mencetak sebagai daftar pythonic.
Saya akan merekomendasikan untuk tidak mencobanya secara online kecuali jika Anda menggunakan angka yang lebih kecil dari 7 ... Saya telah menetapkannya menjadi 2 di tautan ini.
Filter dari
1
ke10^7-1
yang mencakup semua nilai yang diperlukan. Versi ini dapat menyebabkan kesalahan memori jika tidak dapat membuat daftarS^T7
, yang mirip denganlist(range(1,10**7))
di python 3 (Namun, itu berfungsi dengan baik untuk saya). Jika demikian, Anda dapat mencoba:Yang menemukan 548 angka Senin pertama. Ini juga menunjukkan cara lain untuk memeriksa
0
s dalam jumlah, alih-alih menggantinya dengan.3
ini menggunakan blok try-catch. Penghargaan untuk versi ini sepenuhnya jatuh ke Jakube. (Perhatikan bahwa ini masih sangat lambat untuk penerjemah online)sumber
.f&.{`Z.x!s%LZjZT0548
Ini sedikit lebih cepat (4x - 5x) daripada pendekatan while-loop Anda dan panjangnya juga hanya 21 byte.55, 66, 77, 88, 99
, semua angka dengan digit yang digandakan ...{
telah diubah, karena menggantinya dengan{I
tampaknya berfungsi.GS2 ,
2019 byteGS2 menggunakan berbagai byte, bukan hanya chracters ascii yang dapat dicetak. Saya akan menyajikan solusi saya dalam hex.
Inilah beberapa penjelasan. gs2 adalah bahasa berbasis stack, jadi tidak ada variabel. (selain dari 4 register, salah satunya saya gunakan di sini)
sumber
Python 3,
132128114111104 byteAda 548 Angka Senin.
sumber
1e8
bahkan bukan9**9
?'0' not
. Juga,i%int(k)==0
mungkin bisai%int(k)<1
?j=`i`
.if len(set(j))+2==len(j)+('0'in j)+all(i%int(k)<1 for k in j)
APL,
443937 byteTidak Disatukan:
Disimpan 7 byte berkat Moris Zucca!
sumber
TI-BASIC,
6059 byte∟D
adalah daftar digit, yang dihasilkan menggunakan matematika danrandIntNoRep(
perintah (permutasi acak semua bilangan bulat di antara1
dan1+int(log(X
inklusif). Saya menggunakan rantai pernyataan yang sedikit rumit untuk memeriksa apakah semua persyaratan terpenuhi:Untuk gagal angka yang memiliki digit berulang atau nol digit, saya ganti dengan nol
2X
, karenaX
tidak pernah habis dibagi2X
.Untuk kasus khusus 1 ~ 9 (karena
ΔList(
pada kesalahan daftar satu-elemen) Saya menggunakanIf
pernyataan di baris keempat untuk melewati pemeriksaan di baris kelima, secara otomatis menampilkan semuaX
≤9.Nomor output dipisahkan oleh baris baru.
sumber
Mathematica 105
IntegerDigits
putusn
menjadi daftar digit-nya,i
,.FreeQ[i,0]
memeriksa apakah tidak ada nol dalam daftar.Length[i]==Length[Union[i]]
memeriksa apakah tidak ada digit yang diulang.And@@(Divisible[n,#]&/@i)
memeriksa apakah setiap digit adalah pembagin
.sumber
9^9
atau1e8
atau sesuatuUnion
untuk memeriksa duplikat.Haskell, 77 byte
Contoh penggunaan (20 nomor pertama):
Cara kerjanya: beralihlah ke semua angka dari 1 hingga 9 ^ 9 dan periksa kondisinya. Angka saat
x
ini diubah menjadi representasi string (show x
) untuk beroperasi sebagai daftar karakter.sumber
R, 99 byte
Sedikit kurang golf:
sumber
Perl,
907570 bytesumber
^
dan$
sekitar di0
dalam Andagrep
, Anda dapat mengganti&&
sebelumnyas/./
dengan satu&
dan saya pikir yang terakhir|0
tidak dibutuhkan (walaupun hanya diuji up-to1e3
. ..) Baik dan benar-benar menghancurkan skor saya! :)CJam, 25 byte
Cobalah online . Perhatikan bahwa tautan online hanya beroperasi hingga 10.000. Saya tidak yakin apakah itu akan selesai online jika Anda cukup sabar. Itu belum mengujinya dengan versi offline CJam, tapi saya berharap itu akan berakhir.
Penjelasan:
sumber
C #,
230227Sudah lama sejak saya mengenang sehingga saya mungkin lupa beberapa trik untuk menurunkan bytecount. Akan membaik ketika saya memikirkan mereka ... Untuk saat ini:
Tidak Disatukan:
sumber
TI-BASIC,
5553 byteIni adalah suntingan yang relatif kecil jawaban Thomas Kwa , tetapi saya mengirimkannya sebagai jawaban baru karena saya pernah mendengar bahwa dia telah memberi hadiah pada golf atas jawaban TI-BASIC-nya.
Perubahan utama saya adalah dari
randIntNoRep(1,
kerandIntNoRep(0,
makna yang ada sekarang akan nol di setiap daftar yang dihasilkan dari digit.Karena sekarang ada nol di setiap rangkaian angka, ini memengaruhi jumlah sisanya. Biasanya jumlah sisanya adalah 0, tetapi sekarang, keberadaan nol tambahan menyebabkan satu kegagalan tes keterbagian kami.
Untuk mengatasi ini, saya berubah
2Xnot(
menjadiXnot(
. 2 awalnya ada di sana untuk membuat tes gagal pada 0, tetapi sekarang melewati nol. Angka-angka yang mengandung nol dalam digitnya, bagaimanapun, sekarang memiliki amin(ΔList(∟D
nol nol (karena ada 2 atau lebih nol dalam daftar mereka) sehingga perubahan ini tidak menyebabkan angka tambahan untuk lulus tes.Manfaat dari metode ini adalah, karena sekarang ada "dua digit" yang dihasilkan dari angka 1-9,
ΔList(
fungsinya tidak menghasilkan kesalahan, yang memungkinkan kita untuk menyingkirkan kondisi khusus untuk angka satu digit.sumber
05AB1E ,
302221181413129 byte-9 byte berkat bantuan dan dorongan dari @Enigma dan @ Mr.Xcoder . Terima kasih telah mengizinkan saya untuk mencari tahu sendiri, meskipun Anda sudah memiliki solusi 12-byte dalam pikiran ketika saya masih di 30. Belajar banyak tentang 05AB1E dari tantangan ini!
-3 byte terima kasih kepada @Grimy
Cobalah online (hanya menampilkan angka-angka di bawah 10 3 bukan 10 7 untuk mencegah batas waktu setelah 60 detik).
Penjelasan:
Versi byter 12 sebelumnya (salah satu jawaban 05AB1E pertama saya):
CATATAN: Hanya berfungsi dalam versi lawas 05AB1E.
Cobalah online (hanya menampilkan angka-angka di bawah 10 3 bukan 10 7 untuk mencegah batas waktu setelah 60 detik).
Penjelasan:
sumber
297
, yang tidak sesuai dengan urutan nomor Lynch-Bell.7°LʒÐÑÃÙQ
Julia, 88 byte
Ini hanya mengambil semua angka dari 1 hingga nomor Lynch-Bell terbesar dan memfilternya hanya ke nomor Lynch-Bell.
Tidak Disatukan:
sumber
Python 2, 101 byte
Anda dapat menghilangkan
print
di dalam juru bahasa sampai ke 96. Digunakan6**9
karena itu adalah 8 digit sedangkan angka Senin terbesar hanya 7 digit, sesuatu seperti9**9
mungkin akan memakan waktu lama, 6 ** 9 hanya membutuhkan waktu sekitar 10 detik.sumber
1e7
adalah float, range membutuhkan bilangan bulat.Perl, 97 byte
Butuh beberapa saat untuk menjalankan, tetapi menghasilkan output yang diperlukan, ubah ke
1e3
untuk contoh yang lebih cepat!sumber
y///c==grep{2>eval"$n=~y/$_//"}/./g
, dapatkah Anda menggunakan sesuatu seperti itu!/(.).*\1/
?MATLAB, 100
Dan dalam format yang lebih mudah dibaca:
Pada dasarnya ini dihitung melalui setiap angka di antara1 dan 1 × 107 dan memeriksa apakah itu nomor Senin. Setiap angka dikonversi ke string sehingga angka-angka dapat ditangani secara individual.
Cek adalah sebagai berikut:
Pertama periksa apakah ada duplikat. Dengan mengurutkan array, jika perbedaan antara digit berurutan adalah nol, maka ada duplikat
Periksa apakah ada nol. ASCII untuk 0 adalah 48, jadi kami memeriksa bahwa semua digit tidak sama dengan itu.
Periksa apakah dapat dibagi dengan semua digitnya. Kami memeriksa bahwa sisanya ketika membagi dengan setiap digit (dikonversi dari ASCII ke desimal, karenanya -48) adalah nol.
Akhirnya kami memastikan bahwa
all()
cek benar, dan jika demikian kami menambahkannya ke string output yang dipisahkan koma.MATLAB tidak memiliki STDOUT, jadi saya mencetak string hasil pada akhirnya menggunakan
disp()
Kode ini lambat! Saya masih menjalankannya untuk memastikan bahwa ia menemukan semua angka Senin dengan benar, tetapi sejauh ini terlihat bagus.
Memperbarui:
Kode selesai berjalan. Mencetak berikut ini:
Yang jika Anda menjalankan kode ini dengan itu sebagai input:
Yeilds 548.
sumber
Ruby, 79
Lebih menarik tetapi sedikit lebih lama dengan solusi regex:
Dalam setiap kasus, kami menggunakan kemampuan Ruby untuk beralih pada string seolah-olah mereka adalah bilangan bulat desimal:
?1.upto(?9*7)
sama dengan1.upto(9999999).map(&:to_s).each
. Kami menggabungkan string ke setiap digit bukan nol menggunakan operator modulo, dan mengevaluasi hasilnya, untuk memeriksa keterpisahan.Solusi Bonus Ruby 1.8 (membutuhkan
-l
tanda untuk hasil yang sesuai):1.8 memungkinkan iterator blok menjadi variabel global. Menetapkan untuk
$_
menjadikannya penerima implisit untuk operasi string. Kita juga dapat menginterpolasi array ke dalam ekspresi reguler dengan lebih mudah: pada 1.8,/[#{[1,2]}]/
dievaluasi menjadi/[12]/
.sumber
digits
fungsi pada integer , Anda dapat menyimpan byte dari hack eval karena Anda tidak lagi beroperasi pada string! 63 byte.Pip , 25 byte
Output setiap nomor pada jalurnya sendiri. Ini telah berjalan sekitar 10 menit dan mencapai 984312 sejauh ini, tapi saya cukup yakin itu benar.(Edit: Beberapa jam kemudian ... kode selesai, menghasilkan semua 548 dari mereka.)
Inilah rendition pseudocode Python-esque:
The
#=
Operator membandingkan dua iterables oleh panjang. Jika jumlah karakterU
niQ
ue dalama
sama dengan jumlah karakter dalama
, tidak ada pengulangan.Pemeriksaan dibagi-per-digit adalah dari salah satu program contoh Pip saya. Saya menulisnya setelah melihat tantangan sebelumnya , tetapi tidak mempostingnya di sana karena bahasanya lebih baru daripada pertanyaannya. Kalau tidak, pada 8 byte, itu akan menjadi jawaban yang menang untuk pertanyaan itu. Berikut penjelasan langkah demi langkah:
sumber
Couple hours later
Untung kinerja tidak diperhitungkan.Javascript (ES6),
1069083 byteAnak-anak, jangan coba ini di rumah; JS tidak akan senang dengan prospek perulangan melalui setiap digit setiap bilangan bulat dari satu hingga sepuluh juta dengan sebuah regex.
Regex pertama (props ke @ Jarmex) kembali
true
jika nomor tersebut berisi digit duplikat atau nol. Jika ini ternyatafalse
, program ini pindah ke kedua, yang menggantikan setiap digitj
dengani%j
. Hasilnya semua nol jika itu dapat dibagi dengan semua digit itu, dalam hal ini ia beralih keconsole.log(i)
.Saran diterima!
sumber
JavaScript (ES6), 76
Tes regexp untuk 0 atau angka berulang. Kemudian array digit diperiksa mencari modulo non-nol untuk setiap digit.
di sini adalah penjelasan dari 7 digit maks.
sumber
Ruby, 130 byte
... tidak termasuk spasi
Baru dalam pemrograman, hanya ingin berpartisipasi
sumber
C, 122 byte
Lebih cantik:
Untuk setiap kandidat
i
, kami mengulangi digit-digitnyaa
dalam urutan little-endian, melacak digit-digit yang terlihat dalam bit-bitm
. Jika loop selesai, maka semua digit adalah faktor darii
dan kami tidak melihat angka nol atau berulang, jadi cetaklah, jika tidak kita keluar lebih awal untuk melanjutkan loop luar.sumber
goto
perintah yang digunakan.CJam, 34 byte
sumber
Lua, 129 byte
Saya telah menghindari pendekatan string untuk digit-murni, yang tampaknya sedikit lebih cepat dan mungkin menyelamatkan saya beberapa byte juga. (Saya akan menguji teori itu, tetapi penanganan string Lua sangat verbose dibandingkan dengan beberapa bahasa lain.)
sumber
gawk, 99 byte
Saya bisa mengurangi bahwa untuk 97 jika saya akan menggunakan
END
bukannyaBEGIN
, tetapi kemudian Anda harus menekan Ctrl-D untuk memulai output aktual, menandakan bahwa tidak akan ada input.Saya bisa menguranginya menjadi 94 bahkan jika saya tidak akan menulis apa pun
BEGIN
atau bukanEND
, tetapi kemudian Anda harus menekan tombol kembali sekali untuk memulainya, yang dapat dihitung sebagai input.Ini hanya melewati digit dari setiap angka dan menguji jika kriteria terpenuhi.
Butuh 140 detik untuk diakhiri pada Core 2 Duo saya.
sumber
Jelly , 11 byte
Ini menggunakan
œ!
atom tua dua minggu . Sebenarnya cukup cepat untuk dijalankan di TIO.Cobalah online!
Bagaimana itu bekerja
sumber