Tugas
Diberikan dua bilangan bulat positif n dan d sebagai input, tentukan apakah n dapat dibagi habis oleh d , yaitu, jika ada bilangan bulat q sedemikian rupa sehingga n = qd
.
Anda dapat menulis program atau fungsi dan menggunakan salah satu metode standar kami untuk menerima input dan memberikan output.
Outputnya harus berupa nilai true atau falsy ; benar jika n dapat dibagi oleh d , dan sebaliknya falsy.
Kode Anda hanya harus menangani bilangan bulat yang dapat diwakilinya secara asli, asalkan berfungsi untuk semua bilangan bulat 8-bit yang ditandatangani. Namun, algoritme Anda harus berfungsi untuk bilangan bulat besar yang sewenang-wenang.
Anda dapat menggunakan bahasa pemrograman apa pun , tetapi perhatikan bahwa celah ini dilarang secara default.
Ini adalah kode-golf , sehingga jawaban terpendek yang valid - diukur dalam byte - menang.
Uji kasus
n, d output
1, 1 truthy
2, 1 truthy
6, 3 truthy
17, 17 truthy
22, 2 truthy
1, 2 falsy
2, 3 falsy
2, 4 falsy
3, 9 falsy
15, 16 falsy
Papan peringkat
Cuplikan Stack di bagian bawah posting ini menghasilkan katalog dari jawaban a) sebagai daftar solusi terpendek per bahasa dan b) sebagai leaderboard keseluruhan.
Untuk memastikan bahwa jawaban Anda muncul, silakan mulai jawaban Anda dengan tajuk utama, menggunakan templat Penurunan harga berikut:
## Language Name, N bytes
di mana N
ukuran kiriman Anda. Jika Anda meningkatkan skor Anda, Anda dapat menyimpan skor lama di headline, dengan mencoretnya. Contohnya:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Jika Anda ingin memasukkan beberapa angka dalam tajuk Anda (mis. Karena skor Anda adalah jumlah dari dua file atau Anda ingin membuat daftar hukuman penterjemah secara terpisah), pastikan bahwa skor sebenarnya adalah angka terakhir di tajuk:
## Perl, 43 + 3 (-p flag) = 45 bytes
Anda juga dapat membuat nama bahasa menjadi tautan yang kemudian akan muncul di cuplikan:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
<style>body { text-align: left !important} #answer-list { padding: 10px; width: 290px; float: left; } #language-list { padding: 10px; width: 290px; float: left; } table thead { font-weight: bold; } table td { padding: 5px; }</style><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="language-list"> <h2>Shortest Solution 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> <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> <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><script>var QUESTION_ID = 86149; var ANSWER_FILTER = "!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe"; var COMMENT_FILTER = "!)Q2B_A2kjfAiU78X(md6BoYk"; var OVERRIDE_USER = 48934; var answers = [], answers_hash, answer_ids, answer_page = 1, more_answers = true, comment_page; function answersUrl(index) { return "https://api.stackexchange.com/2.2/questions/" + QUESTION_ID + "/answers?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + ANSWER_FILTER; } function commentUrl(index, answers) { return "https://api.stackexchange.com/2.2/answers/" + answers.join(';') + "/comments?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + COMMENT_FILTER; } function getAnswers() { jQuery.ajax({ url: answersUrl(answer_page++), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { answers.push.apply(answers, data.items); answers_hash = []; answer_ids = []; data.items.forEach(function(a) { a.comments = []; var id = +a.share_link.match(/\d+/); answer_ids.push(id); answers_hash[id] = a; }); if (!data.has_more) more_answers = false; comment_page = 1; getComments(); } }); } function getComments() { jQuery.ajax({ url: commentUrl(comment_page++, answer_ids), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { data.items.forEach(function(c) { if (c.owner.user_id === OVERRIDE_USER) answers_hash[c.post_id].comments.push(c); }); if (data.has_more) getComments(); else if (more_answers) getAnswers(); else process(); } }); } getAnswers(); var SCORE_REG = /<h\d>\s*([^\n,<]*(?:<(?:[^\n>]*>[^\n<]*<\/[^\n>]*>)[^\n,<]*)*),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/; var OVERRIDE_REG = /^Override\s*header:\s*/i; function getAuthorName(a) { return a.owner.display_name; } function process() { var valid = []; answers.forEach(function(a) { var body = a.body; a.comments.forEach(function(c) { if(OVERRIDE_REG.test(c.body)) body = '<h1>' + c.body.replace(OVERRIDE_REG, '') + '</h1>'; }); var match = body.match(SCORE_REG); if (match) valid.push({ user: getAuthorName(a), size: +match[2], language: match[1], link: a.share_link, }); else console.log(body); }); valid.sort(function (a, b) { var aB = a.size, bB = b.size; return aB - bB }); var languages = {}; var place = 1; var lastSize = null; var lastPlace = 1; valid.forEach(function (a) { if (a.size != lastSize) lastPlace = place; lastSize = a.size; ++place; var answer = jQuery("#answer-template").html(); answer = answer.replace("{{PLACE}}", lastPlace + ".") .replace("{{NAME}}", a.user) .replace("{{LANGUAGE}}", a.language) .replace("{{SIZE}}", a.size) .replace("{{LINK}}", a.link); answer = jQuery(answer); jQuery("#answers").append(answer); var lang = a.language; lang = jQuery('<a>'+lang+'</a>').text(); languages[lang] = languages[lang] || {lang: a.language, lang_raw: lang.toLowerCase(), user: a.user, size: a.size, link: a.link}; }); var langs = []; for (var lang in languages) if (languages.hasOwnProperty(lang)) langs.push(languages[lang]); langs.sort(function (a, b) { if (a.lang_raw > b.lang_raw) return 1; if (a.lang_raw < b.lang_raw) return -1; return 0; }); for (var i = 0; i < langs.length; ++i) { var language = jQuery("#language-template").html(); var lang = langs[i]; language = language.replace("{{LANGUAGE}}", lang.lang) .replace("{{NAME}}", lang.user) .replace("{{SIZE}}", lang.size) .replace("{{LINK}}", lang.link); language = jQuery(language); jQuery("#languages").append(language); } }</script>
Jawaban:
Jelly , 1 byte
Ini membuat saya berjam-jam bermain golf.
Cobalah online!
sumber
Brain-Flak ,
727064625846 byteMengambil dividen dan pembagi (dalam urutan itu) sebagai input dan mencetak pembagi (benar) atau tidak sama sekali. Karena setiap tumpukan memiliki angka nol implisit, nol, output kosong harus dianggap palsu.
Meskipun tidak stack-clean, solusi ini hanya menggunakan satu stack.
Cobalah online!
Terima kasih kepada @WheatWizard untuk bermain golf 2 byte!
Bagaimana itu bekerja
Perhitungan modulus, 42 byte
Program lengkap di atas dapat dimodifikasi secara sepele untuk menghitung modulus saja.
Seperti sebelumnya, metode ini bukan stack-clean, tetapi hanya menggunakan satu stack. Modulus 0 akan membiarkan stack kosong, yang kira-kira setara dengan meninggalkan 0 ; setiap tumpukan berisi nol tanpa batas.
Cobalah online!
Bagaimana itu bekerja
Bandingkan dua loop dari tester keterbagian dan kalkulator modulus.
Satu-satunya perbedaan adalah lokasi
{(<()>)}{}
, yang menukar d dan r jika d = 0 . Untuk menghitung modulus, kami melakukan swap ini setelah menurunkan d dan menambah r .Perubahan ini tidak mempengaruhi hasil jika a% b> 0 , tetapi jika a% b = 0 , ia meninggalkan (n, d, r) = (0, b, 0) - daripada (n, d, r) = (0, 0, b) - di tumpukan.
Jadi, untuk mendapatkan modulus, kita hanya perlu pop n dan d dengan
{}{}
.Perhitungan modulus stack-clean, 64 byte
Algoritma modulus 42-byte bukanlah stack-clean, sehingga tidak dapat digunakan seperti pada semua program. Versi berikut muncul dividen dan pembagi (dalam urutan itu) dari tumpukan aktif dan mendorong modulus sebagai imbalan. Tidak memiliki efek samping lain.
Solusi ini sebagian besar didasarkan pada catatan 72-byte @ WheatWizard sebelumnya, tetapi menghemat 6 byte dengan tidak pernah mengganti tumpukan.
Cobalah online!
Bagaimana itu bekerja
sumber
kode mesin x86_32, 8 byte
Ini adalah jawaban golf kode pertama saya, jadi semoga saya mengikuti semua aturan.
Ini pertama kali memanggil cdq untuk menghapus register edx, kemudian melakukan pembagian yang ditandatangani pada register ecx, yang menyimpan sisanya di edx. Tes edx, garis edx akan mengatur bendera nol jika edx adalah nol, dan sete menempatkan 0 untuk false jika edx tidak nol, dan menempatkan 1 untuk true jika edx adalah 0.
Ini hanya potongan kode yang memberikan kontribusi terhadap jumlah byte, tetapi untuk pengujian, di sini adalah kode C yang saya tulis dengan inline perakitan karena lebih mudah dengan cara ini untuk menangani I / O.
sumber
Hexagony,
15, 13, 1210 byteBahasa berbasis segi enam favorit semua orang! : D
TL; DR bekerja menggunakan sulap, solusi yang tidak diformat dalam mengurangi jumlah byte:
Disimpan 2 byte berkat layout layout @ MartinEnder.
@FryAmTheEggman menghemat 1 byte dengan menggunakan sudut-sudut yang lebih kreatif
@MartinEnder dan @FryAmTheEggman menghasilkan solusi 10 byte yang tidak mencetak apa pun untuk nilai palsu.
Solusi saya (15):
Tidak diformat:
Diformat:
Solusi @Martin Ender (13):
Tidak diformat:
Diformat:
Penjelasan:
Pertama, kami mendapatkan input dan mengambil modulus.
Kemudian, ia memeriksa apakah modulusnya 0 atau tidak. Jika ya, IP berubah 60 derajat ke kiri, memantul dari cermin, mengatur sel menjadi 1 dan mencetak.
Kemudian, IP berlanjut ke baris keempat. Saat mencapai
>
, alih-alih berbelok ke kanan (karena nilai sel sekarang 1). Itu berjalan oob, dan kembali di sudut kanan bawah menuju NW. IP mengenai<
, pergi di sepanjang baris atas, dan kembali di sudut kanan untuk menekan@
, menghentikan program.Jika modulus berubah menjadi positif, IP berubah 60 derajat ke kanan. Setelah keluar sudut kanan bawah, itu berlanjut di tepi kiri bawah karena aturan pembungkus Hexagony. The
'
digunakan kembali untuk membuat IP pergi ke sel dengan 0 di dalamnya. IP kemudian melakukan perjalanan di sepanjang baris keempat, membungkus ke yang kedua, mencetak hit, dan tercermin ke dalam<
. Sisa jalan menuju@
sama.Itu sihir yang serius.
@ Solusi FryAmTheEggman (12):
Tidak diformat:
Diformat:
Penjelasan:
Seperti solusi lain, itu mendapat input dan mengambil modulus.
Kemudian, IP dibelokkan ke sudut bawah. Jika modulus positif, ia berada di tepi kiri atas. Tidak
?
memiliki input lagi, sehingga mengatur sel ke 0.!
Kemudian mencetak 0, dan@
mengakhiri program.Hal-hal yang jauh lebih sulit ketika modulus adalah 0. Pertama-tama, ia akan dikurangi, kemudian reset ke 0, kemudian atur ke 1, kemudian dicetak. Kemudian, angka 1 dikurangi menjadi 0. Setelah itu, program berjalan seperti pada awalnya sampai ia mencoba melakukannya
0%0
. Itu membuatnya membuang kesalahan diam dan berhenti.Saya sangat suka trik kesalahan diam, tetapi cara yang lebih sederhana adalah dengan mengganti
(
dengan/
sehingga IP melewati pertama kali, tetapi akan tercermin ke@
dalam yang kedua.Solusi kolaboratif (10):
Tidak diformat:
Diformat:
Program ini dimulai sama dengan semua program lain, mendapatkan input dan memodifikasinya.
Jika inputnya 0, IP berbelok ke kiri saat hits
<
. Itu akan dibelokkan ke dalam1!@
, yang mencetak 1 dan berhenti.Jika input positif, IP berbelok ke kanan saat hits
<
. Keluar melalui sudut, dan berjalan di sepanjang tepi kanan atas menekan @ tanpa mencetak.sumber
Brain-flak
102, 98,96 byteEww. Kotor. Saya mungkin memposting penjelasan, tetapi saya sendiri hampir tidak memahaminya. Bahasa ini menyakiti otak saya.
Cobalah online!
Terima kasih kepada pengguna github @Wheatwizard untuk datang dengan contoh modulus. Saya mungkin tidak bisa mengetahuinya sendiri!
Juga, jawaban yang lebih pendek ada di sini .
Penjelasan yang mungkin salah:
Sisanya cukup mudah.
sumber
The rest is pretty straightforward.
Ya, sepertinya begitu.Javascript (ES6)
171211 bytesumber
d=a=>b=>a%b<1
diikuti olehd(32,2)
di konsol JS ... Saya hanya mendapatkan responsfunction b=>a%b<1
d(32)(2)
. Karenad(32)
memberifunction b=>a%b<1
, Anda kemudian harus memanggil fungsi itu denganb
nilai AndaVim, 11 penekanan tombol
Tidak buruk untuk bahasa yang hanya menangani string. : D
sumber
<C-Left>
harus dilakukan Tidak dapat mengujinya karena mengaktifkan windows di mac> _>B
bukanb
(danCtrl
+Right
adalah setaraW
) - perbedaannya adalah dengan karakter non-kata, tetapi dalam kasus ini itu melakukan yang sama persis hal :) vimdoc.sourceforge.net/htmldoc/motion. html # <C-Kiri >Mathematica -
17 133 byteTerima kasih kepada @MartinEnder karena menghemat satu ton byte!
sumber
Divisible[]
.Retina, 12 byte
Membawa input yang dipisahkan ruang dalam unary, ingin
111111111111 1111
memeriksa apakah 12 jika dapat dibagi 4 . Mencetak 1 (benar) atau 0 (salah).Cobalah online!
FryAmTheEggman menyimpan dua byte.Ups, tulis ulang jawaban saya untuk mengambil argumen dengan urutan yang benar. (Kemudian Fry mengalahkan saya dalam komentar. Saya lambat di regex!)sumber
^(1+)\1* \1$
akan berhasil.Batch, 20 byte
Keluaran
1
pada kesuksesan,0
kegagalan.sumber
C #,
271312 BytesTerima kasih kepada TuukkaX karena menunjukkan lambda anonim dapat diterima. Terima kasih kepada David Conrad karena telah menunjuk saya pada kari yang bahkan tidak saya sadari adalah suatu hal.
Singkat dan manis, karena kita hanya berurusan dengan bilangan bulat yang bisa kita gunakan
<1
alih-alih==0
dan menyimpan seluruh byte.sumber
(a,b)=>a%b<1;
. +1.a=>b=>a%b<1;
(catatan: Anda harus menyebutnya sebagaif(a)(b)
bukanf(a,b)
)brainfuck, 53 byte
Mengambil input sebagai byte, output adalah nilai byte
0x00
atau0x01
. Ini adalah algoritma DivMod yang diikuti oleh negasi Boolean .Cobalah online - Memiliki banyak tambahan
+
di akhir sehingga Anda dapat melihat output di ASCII.sumber
Brain-Flak ,
8886 byteIni adalah versi yang lebih padat dari algoritme uji keterbelahan Brain-Flak asli ditulis oleh
keterbagianDr Green Eggs dan Iron ManDJMcMayhem dan saya sendiri.Berikut ini penjelasan singkat tentang cara kerjanya:
Cobalah secara Online!
sumber
LOLCODE,
7464 bytesumber
O RLY?
Saya tidak tahu itu! berubah.BTW
di sini adalah tips golf.C, 60 Bytes
sumber
+1
dari saya. Selain itu, kami mengizinkan fungsi, sehingga Anda dapat dengan mudah mempersingkat iniint f(a,b){return !(a%b);}
atau bahkan mungkin lebih pendek.int f(a,b){return!(a%b);}
adalah 25 byte, dan jika Anda menggunakan kompiler yang tepat Anda bahkan dapat melakukannyaf(a,b){return!(a%b);}
selama 21 byte.#define f(a,b)!(a%b)
( tautan ideone )Dyalog APL , 3 byte
Apakah nol sama dengan sisa divisi?
sumber
R,
2220 byteSeperti biasa, membaca dua angka dari input yang diakhiri oleh baris kosong.
Perbarui: terima kasih Jarko Dubbeldam karena mencukur 2 byte (walaupun fakta bahwa editnya ditolak, itu sangat membantu!).
sumber
Java 8, 11 byte
Apa sih, ada versi JS dan C # ini, mengapa bukan versi Java juga?
Pemakaian:
sumber
a->b->a%b<1
Ini menimbulkan kesalahan sintaks, bukan?Python, 16 byte
sumber
lambda a,b:1.*a/b==a/b
, tapi cukup terkesan. Ini adalah bagian kode yang sangat rumit ...GolfScript, 3 byte
Penjelasan:
Cobalah online!
sumber
CJam,
64 byteDisimpan 2 byte berkat Dennis
Cobalah online
sumber
Brachylog , 2 byte
Cobalah online!
sumber
Julia, 9 byte
Cobalah online!
sumber
Fortran 95, 78 byte
sumber
MarioLANG,
121109107 byteDisimpan 14 byte berkat Martin Ender
Cobalah online!
Penjelasan
Algoritma ini hanya untuk terus mengurangi
d
darin
untuk melihat apakah Anda dapat melakukannya berkali-kali dan tidak memiliki sisa.Pertama, input dikumpulkan.
n
ada di sel pertama,d
di kedua.Ini pada dasarnya adalah loop utama. Ini mengurangi sel pertama dan kedua, dan meningkatkan ketiga.
Ini adalah hasil akhir. Jika setelah kenaikan / penurunan, sel pertama adalah 0, maka kami telah menghilangkannya
n
. Jika setelah ini, sel kedua (d
) adalah0
, kemudiand
masukn
secara merata. Kami menambah dan mencetak (1
). Kalau tidak, kembali ke sel pertama (yang0
) dan cetak.Perulangan ini terjadi jika sel kedua
0
setelah kenaikan dan penurunan. Ini menyalin sel ketiga ke sel kedua. Bagian di bawah adalah untuk memotong loop jika sel tidak0
.sumber
Tcl, 34 byte
Usaha saya yang pertama / * * sukses / di codegolf! Kode ini harus dieksekusi di shell Tcl, jika tidak maka tidak akan berfungsi.
Satu byte terima kasih kepada @Lynn.
Empat byte terima kasih kepada @Lynn dan @LeakyNun (sekarang saya mengerti apa yang dia maksud)!
sumber
?1:0
?$a%$b==0
kembali?exp $a%$b==0
?exp $a%$b<1
mungkin?PHP,
2322 bytemencetak 1 untuk string benar, kosong (= tidak ada) untuk false
panggilan dari cli dengan
n
dand
sebagai argumen10 byte untuk PHP kuno:
<?=$n%$d<1
sumber
<?=!($A%$B)
. Nilai-nilai dapat dikirimkan sebagai bagian dari Anda$_SESSION
,$_COOKIE
,$_POST
,$_GET
atau (jika saya tidak salah) lebih$_ENV
.for PHP<5.4 with register_globals=On
. Tapi saya akan menambahkannya untuk referensi.for PHP<5.4 with register_globals=On
", karena Anda harus menghitung byte dariphp.ini
file Anda yang berisiregister_globals=On
. Namun, PHP4.1 adalah kasus khusus. Ini adalah versi terakhir di manaregister_globals=On
nilai default, dan sebagian besar fungsi tersedia dari PHP4.1 dan lebih tinggi. Versi ini juga memungkinkan penggunaan fungsi-fungsi lain, sepertiereg
dansplit
tanpa peringatan.J, 3 byte
Pemakaian:
Akan kembali
1
. Dan sama dengan pseudocode10 MOD 2 EQ 0
Perhatikan ini sangat mirip dengan jawaban APL , karena J sangat terinspirasi oleh APL
sumber
PowerShell v2 +, 20 byte
Dibawa input sebagai dua argumen baris perintah
$args
,-join
s mereka bersama-sama menjadi string dengan%
sebagai pemisah, pipa itu keiex
(kependekan dariInvoke-Expression
dan mirip denganeval
). Hasilnya adalah salah0
atau tidak nol, jadi kami mengambil Boolean bukan!
dari hasil itu, yang berarti salah satu$TRUE
atau$FALSE
(bilangan bulat nol di PowerShell benar). Bahwa Boolean ditinggalkan di jalur pipa dan hasilnya tersirat.Versi alternatif, juga masing-masing 20 byte
Konsep yang sama, hanya sedikit cara penataan input yang berbeda. Terima kasih kepada @DarthTwon untuk menyediakan ini.
Contohnya
sumber
param($a,$b)!($a%$b)
dan!($args[0]%$args[1])
Haskell,
1311 byteIni mendefinisikan fungsi baru
(!) :: Integral n => n -> n -> Bool
. Karenamod n m
mengembalikan hanya angka positif jikan
danm
positif, kita dapat menyimpan byte dengan menggunakan1>
alih-alih0==
.Pemakaian:
sumber
((1>).).mod
.