Tantangan:
Diberikan larik angka bilangan bulat non-negatif dalam kisaran0 to Infinity
, Periksa apakah semuanya bilangan prima atau tidak. (Anda dapat mengambil input sebagai string juga jika Anda mau)
Memasukkan:
Input: Array angka
Output: Array dengan setiap elemen diganti oleh salah satu dari ini:
-1 -----> If 0, 1
1 -----> If it is a prime number greater than 1
the highest factor -----> If that number is not prime
Mengembalikan -1 (0, 1), 1 (untuk bilangan prima> = 2) atau faktor tertinggi dari angka yang diberikan (untuk bukan bilangan prima)
Contoh:
[1, 2, 3, 4, 10, 11, 13] ---> [-1, 1, 1, 2, 5, 1, 1]
[100, 200, 231321, 12312, 0, 111381209, 123123] ---> [50, 100, 77107, 6156, -1, 1, 41041]
catatan:
Input akan selalu valid, yaitu hanya terdiri dari angka dan desimal yang tidak diuji. Array dapat kosong, jika demikian, kembalikan array kosong.
Larangan:
Ini adalah kode-golf sehingga kode terpendek dalam byte untuk setiap bahasa menang.
Papan Kepemimpinan:
Berikut ini adalah Stack Snippet untuk menghasilkan leaderboard biasa dan gambaran umum pemenang berdasarkan bahasa.
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 + 2 (-p flag) = 45 bytes
Anda juga dapat membuat tautan nama bahasa yang kemudian akan muncul di cuplikan papan peringkat:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
var QUESTION_ID=163882,OVERRIDE_USER=8478;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 ,
76 byteTautan monadik yang menerima daftar bilangan bulat non-negatif dan menyimpan daftar bilangan bulat yang lebih besar dari atau sama dengan -1.
Cobalah online!
Bagaimana?
Perhatikan bahwa:
ÆḌ
,, menghasilkan daftar pembagi yang tepat dalam urutan menaikṪ
,, ke daftar kosong menghasilkan nolsumber
Jelly ,
98 byteDisimpan 1 byte berkat @Dennis
Cobalah online! atau jalankan semua test case
Berkomentar
Kami mengambil keuntungan dari kenyataan bahwa keduanya
nan
daninf
menjadi0
di Jelly ketika bitwise TIDAK diterapkan pada mereka.sumber
~~
.:ÆfṂ€$~~
menghemat satu byte dengan menghilangkan tautan pembantu.$
adalah apa yang saya cari. :) terima kasih!R,
6862 byteSolusi yang hanya menggunakan basis R, tanpa perpustakaan! Terima kasih kepada Giuseppe untuk bermain golf 6 byte.
Penggunaan
scan
membaca dalam daftar angka yang dipisahkan ruang,%%
untuk mengidentifikasi faktor-faktor mana.v
kemudian berisi vektor semua faktor dalam urutan menaik (termasuk 1 dan n). Ini memiliki properti bagus yang ketika kitarev
ersev
, nomor yang kita inginkan akan berada di tempat kedua, menghindari panggilan mahal kelength
atautail
(jikan
prime,v
berisin 1
, selain itu berisin (factors in descending order) 1
).Contoh output (tautan TIO di sini ):
Jika menurut Anda suatu daftar bukan tipe pengembalian yang dapat diterima, maka tukar
Map
untuksapply
dan tambahkan 3 byte.sumber
!
05AB1E ,
1198 byte-3 byte terima kasih kepada @Emigna , ubah
©d1-®+
keDd<+
dan۬ۈ
keε¨à
.Hanya jawaban 05AB1E kedua saya,
jadi pasti bisa.Cobalah online.
Penjelasan:
sumber
Dd<+
harus bekerja©d1-®+
. Anda juga tidak perluï
karena mereka masih int. Anda bisa memilikinya di footer untuk hasil yang terlihat lebih bagus.1-
bukannya<
itu sangat bodoh .. Terima kasih untukD
bukan©...®
! Dan saya memang sudah memasukkanï
footer sekarang.Ñε¨àDd<+
J , 21 byte
Cobalah online!
Penjelasan:
(>&1)"0
Apakah setiap angka lebih besar dari 1?@.
jika tidak, kembali_1:
(%{.@q:)
jika 2 atau lebih besar, bagi%
angkanya dengan{.
faktor prima pertamaq:
sumber
Japt , 6 byte
Setelah bermain golf, akhirnya hampir identik dengan, dan sesingkat, solusi Jonathan.
Cobalah
Penjelasan
sumber
-m
Python 3 , 62 byte
Cobalah online!
Karena
0
dan1
range(1,n)
kosong, maka kode akan dievaluasimax([]+[-1]) = -1
. Untuk bilangan prima, satu-satunya pembagi dalam [1, n) adalah1
, yang merupakan output yang diinginkan.Kelapa , 50 byte
Cobalah online!
sumber
Java 8,
10510387 byteMemodifikasi input-array alih-alih mengembalikan yang baru untuk menghemat byte.
Cobalah online.
Penjelasan:
sumber
Haskell,
5249 byteCobalah online!
sumber
Sekam , 8 byte
Cobalah online!
Penjelasan
sumber
Attache , 23 byte
Cobalah online!
29 byte, pointfree:
@(Max&-1@Last@ProperDivisors)
24 byte, juga pointfree:
@(Max&-1@`@&-2@Divisors)
Ini hanya mendapatkan pembagi kedua ke terakhir
n
kemudian mengambil maks dan-1
. Elemen kedua-untuk-terakhir dalam array dengan kurang dari dua elemen adalahnil
, danMax[-1, nil]
ini-1
.@
cukup mengubah fungsi ini menjadi vektor, membuatnya berlaku untuk setiap atom.sumber
Bahasa Wolfram (Mathematica) , 33 byte
Cobalah online!
sumber
R +
numbers
,8879 byteBerkat komentar untuk beberapa saran terutama tentang cara membuat pengiriman.
Menggunakan produk dari semua faktor utama kecuali yang terkecil, dan fakta bahwa produk elemen vektor kosong didefinisikan sebagai
1
.Cobalah online!
sumber
library
panggilan dan menggunakannumbers::primeFactors
secara langsung.Brachylog , 10 byte
Cobalah online!
Penjelasan berikut sebagian besar diutarakan secara imperatif demi singkatnya, dan tidak secara akurat mencerminkan sifat deklaratif Brachylog.
Saya memutuskan untuk belajar Brachylog sehingga saya bisa bersenang-senang dengan kode golf sambil berharap untuk mempelajari beberapa perilaku Prolog aktual melalui osmosis, dan saya sangat menikmatinya sejauh ini, bahkan jika saya tidak sepenuhnya yakin bagaimana caranya. karakter kontrol eksekusi bekerja.
sumber
.∨
alih-alih|∧
(saya kira Anda lupa.
), tetapi itu adalah jumlah byte yang sama. Selamat datang di PPCG (dan Brachylog yang lebih penting: p)!Stax ,
1413 byteJalankan dan debug itu
Penjelasan (tidak dikemas):
Pseudocode di dalam peta:
sumber
Pyth, 12 byte
Coba di sini
Penjelasan
sumber
J , 14 byte
Cobalah online!
Untuk setiap angka, ganti maksimum (n, 1).
Tambahkan nomor yang dinegasikan ke daftar faktor prima (daftar kosong untuk 1), dan bagi nomor dengan item pertama dalam daftar.
Juga 14 byte
Cobalah online!
Bagilah setiap angka dengan faktor prima pertama. 0 menimbulkan kesalahan domain
q:
, dan kami mencari item ke-0 dalam daftar kosong untuk 1 - itu juga kesalahan. Untuk nomor yang salah, kembalikan −1.sumber
Japt ,
14118 byteCobalah online!
Mencukur tiga byte sial itu berkat Shaggy .
sumber
k
mengembalikan faktor primaN
- jadi ini menjadi 8 byte:®/k v)ªÉ
JavaScript (Node.js) ,
6155 byte-6 byte terima kasih kepada @shaggy
Cobalah online!
Penjelasan:
Ini masih untuk kode lama belum perbarui ini.
Ramah ES5 juga:
sumber
Utilitas Bash + GNU, 49
Penjelasan
factor
membaca angka input dari STDIN, satu per baris dan output dalam format<input number>: <space-separated list of prime factors (ascending)>
sed
memproses ini sebagai berikut:/:$/c-1
Angka input 0 dan 1 tidak memiliki faktor prima dan diganti dengan-1
/: \w+$/c1
Angka dengan satu faktor prima (sendiri) prima. Ganti ini dengan1
s%: %/%
Ganti:
dengan/
. Ini membangun ekspresi aritmatika untuk membagi nomor input (non-prima) dengan faktor prima terkecil untuk memberikan faktor terbesary/ /#/
Hapus daftar faktor (tidak dibutuhkan) lainnya (dengan berkomentar)bc
Mengevaluasi dan menampilkan secara hitungCobalah online!
sumber
-r
, dan untuk dua yang pertamas
dapat Anda gunakan/regex/cvalue
untuk golf satu byte, menyederhanakan regex ini lebih lanjut dapat menghemat lebih banyak, dan Anda dapat menyimpan byte dalam dua regex terakhir dengan hanya mengganti:
dengan/
, dan kemudian mengomentari bagian yang tidak diinginkan, seperti itu, tio.run/##JYlBCoMwFET3c4qABhdSfuZ/…Python 2 ,
6159 byteCobalah online!
Perbaikan
sumber
JavaScript (Node.js) , 37 byte
Cobalah online!
Rekursif, stack overflow untuk input besar
JavaScript (Node.js) , 41 byte
Cobalah online!
sumber
Pari / GP , 37 byte
Cobalah online!
sumber
Racket , 105 byte
Cobalah online!
sumber
Befunge-98 (FBBI) , 39 byte
Cobalah online!
Berakhir dengan
&
ketika tidak ada lagi angka. Hal ini menyebabkan program berhenti selama 60 detik hingga TIO mengakhiri program. Ini tidak dapat dihindari untuk Befunge-98, setidaknya di TIO karena kedua penerjemah melakukan ini. Setelah bermain, Anda dapat menghentikan program setelah sedikit untuk melihat apa yang akan dihasilkan jika Anda menunggu sebentar.Pada dasarnya, untuk setiap angka baru, jika angka 0, itu mengubahnya menjadi 1. Kemudian menempatkan -1 ke tumpukan diikuti oleh angka yang dimulai dari 1 dan menghitung hingga mencapai nomor input, dalam hal ini mencetak angka kedua pada tumpukan (-1 untuk input 0 atau 1, dan faktor tertinggi untuk yang lain). Setiap kali melalui loop, kami menambahkan nilai iterator ke stack di belakangnya jika (
input % iterator == 0
). Ini berarti bahwa ketika kita mendapatkan input, kita hanya perlu membuang iterator dan mencetak. Kemudian, kami menghapus tumpukan dengann
dan kembali ke fungsi input baca.Saya dapat memperluas penjelasan nanti, kita akan melihat ...
sumber
Retina 0.8.2 , 33 byte
Cobalah online!Tautan termasuk kasus uji yang tidak terlalu lambat. Penjelasan:
Ulangi setiap nomor input.
Kasus khusus 0 dan 1.
Konversi ke unary (tidak mempengaruhi -1).
Ganti setiap angka dengan faktor layak terbesarnya dalam desimal.
sumber
tinylisp , 75 byte
Cobalah online!(Berisi 4 byte tambahan untuk memberikan fungsi anonim nama sehingga kita dapat menyebutnya di footer.)
Tidak dikelompokkan / penjelasan
Perhatikan bahwa mengembalikan 1 untuk primen dan faktor terbesar kurang dari n untuk komposit n dapat digabungkan menjadi kembali n / p dimana hal adalah faktor utama terkecil n .
sumber