var QUESTION_ID=66656,OVERRIDE_USER=16196;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/66656/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}#answer-list{padding-right: 100px}
<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, 9 byte
Ini adalah rantai monadik yang mengambil argumen baris perintah integer sebagai input. Ini menggunakan
(x+5+(x%4)**3%7)
algoritma saya .Coba di sini . Meskipun itu versi Jelly saat ini, itu juga berfungsi di versi ini , yang ada sebelum tantangan. (Terima kasih @Dennis!)
sumber
Mathematica,
45372724 bytePerbaikan berkat @ MartinBüttner (10 byte), dan @ChipHurst (3 byte lebih lanjut).
sumber
#+5[6,6,11][[#~Mod~4]]&
5[6, 6, 11][[0]]
:)CJam,
211211 byte@martin menemukan metode yang sangat sederhana!
Coba di sini .
EDIT: Terima kasih, Dennis!
sumber
5 6 6 11
trik yang sama dengan yang digunakan dalam jawaban lain, tetapi daftar ini dikodekan sebagai "digit 9587 pada basis 12" .gs2, 12 byte
Terjemahan jawaban CJam saya. Dikodekan dalam CP437 seperti biasa. Cobalah online !
sumber
JavaScript (ES6),
504920 byte (tidak ada bonus)Algoritma oleh @martin terbukti jauh lebih kecil, jadi saya mengikutinya.
Saya memilih pendekatan matematika karena JavaScript cenderung verbose. Kode ini cukup pendek sehingga bonus hanya membuatnya lebih lama.
Inilah jawaban saya sebelumnya (49 byte), dan jawaban asli saya (50 byte):
F=(a,b=a)=>((a+--a/4|0)-(b++/4+b|0))%7?F(++a,b):b
F=(a,b=a)=>(f=c=>(c--+c/4|0)%7)(a)-f(++b)?F(a,b):b
Mereka bekerja dengan mengambil tahun dan menghitung angka (0-6) untuk mewakili "hari awal tahun". Karena rentang tanggal untuk tantangan ini adalah dalam rentang tahun yang mengikuti aturan tahun kabisat sederhana (tidak ada yang terlewati pada tahun 2000), ini cukup mudah untuk dihitung. Maka itu hanya masalah membandingkan maju untuk menemukan tahun yang dimulai dengan nilai yang sama. Rekursi terbukti menjadi cara paling ringkas untuk melakukan ini.
sumber
Pyth,
141211 byteEmpat byte dalam string seharusnya
05 06 06 0B
.EDIT: Terima kasih, FryAmTheEggman!
EDIT: Terima kasih, Dennis!
sumber
JavaScript (ES6), 104 byte - 50% bonus = 52
Penjelasan
Uji
Tampilkan cuplikan kode
sumber
Kode mesin Z80, 12 byte
Prosedur Z80 untuk disimpan
0000h
, dipanggil dengan inputHL
, dan semua register lainnya dihapus:Tiga instruksi pertama adalah "NOP", tetapi diindeks sebagai data nanti dalam kode. Setelah kembali, output dalam
HL
.sumber
DE
dan karena itu Anda dapat menggunakannyaLD A, 3; AND E; LD L, A; LD L, (HL);
?Python 3,
14010010284.5154 * 0,5 = 77 byteSaya mungkin bisa menulis solusi yang lebih baik dengan algoritma Sakamoto, tetapi ini akan dilakukan untuk saat iniSaya benar. Berikut ini adalah implementasi menggunakan algoritma Sakamoto.
Penjelasan:
sumber
w="SMTWTFSuouehranneduit"
kemudian mencetakw[d(i)::7]
?Serius,
3517 byte[5,6,6,11]
Trik menyelamatkan hari.Cobalah online
Penjelasan:
Versi lama:
Cobalah online
Penjelasan:
Algoritma Sakamoto:
sumber
C, 31 byte
Setelah diedit ke pertanyaan yang membatasi rentang input hingga 1970-2090, ini menjadi sangat sepele:
Tanpa abad tanpa lompatan tahun, ada urutan 5,6,6,11 interval sederhana untuk pengulangan pertama pada hari yang sama.
Solusi lengkap untuk masalah asli (tidak dibatasi hingga 2090), 90 byte:
Program uji:
Uji coba:
sumber
R,
143136 * 0,5 = 68 byteGunakan
%A
untuk nama hari penuh alih-alih `% a, tergantung pada status yang diinginkan.R, 120 * 0,7 = 84 byte
R, 90 byte
Semua jawaban di atas adalah karya turunan berdasarkan jawaban @plannapus. Menggunakan
;
pemisah untuk menghindari perlunyasource
file atau menjalankannya sebagai skrip pada baris perintah.sumber
weekdays
, bagus.R, 145 byte -50% -> 72,5
Contoh:
R, 97 byte (tanpa bonus)
Diindentasi, dengan baris baru:
Kasus uji:
sumber
;
...y=scan;
dan menggunakanx=y<-scan()+1
I thinkas.POSIXlt(paste(y,1),,"%Y %j")$wday
fungsi tubuh Andascan
akan membaca di baris kedua sebagai input.x=y<-scan()+1
dengan 2014 sebagai stdin akan memberikan x = 2015 dan y = 2015 (yaitu tugas adalahy <- scan()+1
) dan jika Anda mencoba untuk melakukanx=1+y<-scan()
hal itu akan memberikan Anda sebuah kesalahan (Error in 1 + y <- scan() : target of assignment expands to non-language object
) karena itu mencoba untuk menetapkanscan()
ke1+y
....$wday
adalah nomor hari kerja: tapi di sini saya perlu nama hari kerja sehingga saya bisa mencetakAdvance Happy New Year, 2012 (Sun)
VBA, 130 * 0,50 = 65 Bytes
VBA membuat menemukan hari-hari minggu begitu mudah .... Kalau saja tidak begitu Verbose tentang hal itu.
sumber
PHP, 120
139byte - 50% = 60 bytePendekatan fungsional:
Mengambil satu input dari baris perintah, seperti:
Cara OOP tampaknya lebih panjang, seperti biasa (143 byte):
Suntingan
+1year
, saya sekarang hanya menambah tahun yang diberikan.-1-1
dalam suatu variabel.sumber
C, skor
5352 (104 byte)Ide dipinjam dari Toby Speight ; menambahkan tampilan bonus pada hari kerja.
Memperpendek string dengan menggeser kode karakter ke rentang yang lebih nyaman. Harus memilih jumlah pemindahan yang tepat (mis. 43) untuk membuat kode perhitungan hari kerja pendek
x*5/4%7
bekerja.sumber
" !!&"
.Mathematica, 145 * 50% =
7473,572,5 byteMenggunakan fungsi tanggal standar.
sumber
Pyth, 23 byte
Tidak memenuhi syarat untuk bonus apa pun.
Coba di sini .
Mirip dengan jawaban python murni.
sumber
Java,
(1-.2) * 323(1-.5) *350348339 =258,4175174169,5 byteUgh.
Tidak Disatukan:
Cobalah online!
Terima kasih kepada @Kenney karena telah menunjukkan bahwa saya dapat mempersingkat
new Long
danprintf
! : Dsumber
long y=new Long(a[0])
menyimpan 6 (12) byte, dan menggunakanprintf
menyimpan 3 (6) lainnya.GNU coreutils,
525149 byte(Program 98 byte - bonus 50%)
Input dari argumen command-line, dan output ke stdout.
Penjelasan
Uji coba:
Semua pengaturan lokal dapat
C
atauPOSIX
.Batasan: ini hanya berfungsi hingga tahun 2147485519 (meskipun pertanyaannya sekarang diubah untuk mengizinkan batas bawah).
sumber
MATL , 28 byte
Contoh
Kode dijelaskan
sumber
Perl 6 ,
7023 bytepemakaian:
sumber
J, 14 byte
sumber
Japt, 12 byte
Seperti dengan jawaban Pyth, empat byte dalam string seharusnya
05 06 06 0B
. Cobalah online!sumber
Jelly , 14 byte
Cobalah online!
Sampai hari ini, Jelly tidak memiliki pengindeksan array, jadi hal di atas harus dilakukan. Sejak komit terbaru, pengindeksan array telah diimplementasikan sebagai
ị
, memberikan solusi berikut ( 10 byte ).Cobalah online!
sumber
Pyth, 35 byte
Cobalah online.
sumber
C # (6.0) .Net Framework 4.6 173 Bytes - 30% = 121.1 Bytes
sumber
Javascript ES7, 17 byte
Ini pertama kalinya saya menggunakan JS. Saya menemukan ini menggunakan skrip Python, dan saya yakin itu optimal. Ini bekerja karena
0**3
0 mod 7,1**3
dan2**3
keduanya 1, dan3**3
6.sumber
**
sebuah ES7 fitur? Atau apakah Anda menggunakan Babel ?Python, 23 byte
Port jawaban JavaScript saya.
sumber
Pyth , 12 byte
Cobalah online! atau Periksa Test Suite.
Pyth , 18 byte
Pendekatan kedua ini terutama golf dari jawaban Pyth @ wizzwizz4 .
Cobalah online! atau Periksa Test Suite.
Penjelasan
sumber