Sudah berapa lama ini?
Aturan
- Setiap pengajuan harus merupakan program lengkap.
- Program harus mengambil input sebagai dua tanggal yang dipisahkan koma dalam formulir
YYYY-MM-DD
, dan mencetak jumlah hari yang telah berlalu sejak tanggal kedua ke STDOUT seolah-olah hari ini adalah tanggal pertama (jika tanggal kedua akan di masa depan, output a angka negatif) ditambah baris baru tambahan opsional, dan tidak ada yang lain. Asumsikan kedua tanggal dalam kalender Gregorian. Program tidak boleh menulis apa pun kepada STDERR.
Perhatikan bahwa harus ada penerjemah agar pengajuan dapat diuji.
- Kiriman dinilai dalam byte , dalam penyandian yang sesuai (sudah ada), biasanya (tetapi tidak harus) UTF-8. Beberapa bahasa, seperti Folder , agak sulit untuk dinilai - jika ragu, silakan tanyakan di Meta .
- Ini kode-golf , jadi kode terpendek menang
Contohnya
Memasukkan:
2015-12-03,2015-12-01
Keluaran:
2
Memasukkan:
2015-12-03,2014-12-01
Keluaran:
367
Memasukkan:
2015-12-03,2013-12-03
Keluaran:
730
Cuplikan
Cuplikan Stack di bagian bawah posting ini menghasilkan katalog dari jawaban a) sebagai leaderboard dan b) sebagai daftar pemenang per 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 nama bahasa menjadi tautan yang kemudian akan muncul di cuplikan:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
var QUESTION_ID=65989,OVERRIDE_USER=46167;function answersUrl(e){return"http://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"http://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:
TeaScript , 24 byte
Menggunakan
Date.parse
untuk menguraikan tanggal, lalu dapatkan perbedaannya dan bagi.Cobalah online
Penjelasan && Tidak Disatukan
sumber
Utilitas Bash + GNU, 37
tr
mengganti koma dengan baris baru.date
membaca baris baru yang dipisahkan tanggal dan menampilkan jumlah detik sejak zaman Unix yang diwakili oleh tanggal masuk. Angka-angka ini kemudian diletakkan didc
tumpukan. Maka ini adalah masalah pengurangan dan pembagian sederhana oleh (24 * 60 * 60). Dalam hal ini,dc
evaluasi aritmatika RPN berbasis stack lebih baik daripadabc
atau bash$( )
, sebagian besar karena subrraksi-sebelum-divisi tidak memerlukan tanda kurung.Masukan melalui STDIN:
sumber
Julia, 67 byte
Tidak Disatukan:
sumber
-diff(d)[1]
Anda dapat menggunakan-(d...)
untuk menyimpan beberapa byte. Omong-omong, apa versi Julia yang Anda gunakan? Pada 1.2, saya harus mengimpor secara eksplisitDates
dan saya juga tidak bisa mengonversi hari menjadi bilangan bulat seperti ini.Scala,
16613912011692 bytePemakaian:
scala [source filename].scala [date1],[date2]
Catatan: Versi ketiga (120 byte) dan aktif menggunakan API yang tidak digunakan lagi. Itu masih mengkompilasi dan berfungsi dengan baik. Note2: Terima kasih kepada para komentator di bawah ini untuk saran hebatnya!
sumber
print
bukanprintln
.Object A extends App{...}
bagian dan menyimpannya sebagaia.scala
dan menjalankannya denganscala a.scala 2015-12-3,2015-12-1
;)Ruby,
6966655755 byte47 byte + 8 byte untuk opsi baris perintah. Terima kasih kepada Dane Anderson, menyelamatkan 2 byte.
57 byte
49 byte kode + 8 byte untuk opsi baris perintah. Disimpan 8 byte dengan saran manatwork.
65 byte
66 byte
69 byte
Uji secara online
Tidak disatukan
Pemakaian:
sumber
','
→?,
,'-'
→?-
,to_i/
→div
.ruby -naF[,-] -e 'p (Time.new(*$F[0,3])-Time.new(*$F[3,3])).div 86400' <<< '2015-10-11,2015-07-11'
adalah 59 karakter ketika saya menghitungnya.-e
) adalah gratis, semua yang lain harus dimasukkan dalam hitungan. Ada beberapa pendapat berbeda tentang apa tepatnya yang lainnya. Sebagai contoh, beberapa anggota menyertakan karakter pemisah opsi ruang dan kutipan di sekitar nilai parameter. Dalam pandangan saya hanya harus dihitung apa yang sebenarnya diteruskan ke penerjemah, karakter tambahan yang diperlukan oleh sintaks shell tidak. Tetapi tidak dapat mengingat suara apa pun yang diangkat untuk melarang penggunaan opsi.t=->l{Time.gm(*$F[l,3])};p (t[0]-t[3]).div 86400
Japt , 41 byte
Sejauh ini adalah yang terbaik yang bisa saya dapatkan karena semua variabel dan
$
dan kurung benar-benar membunuh jumlah byte.Cobalah online
Penjelasan
sumber
MATLAB,
4131 byteInput harus berupa larik sel yang dipisahkan koma.
datenum
mengubah sel input menjadi array numerik 2x1 dengan cap waktu.diff
mengambil perbedaan antara keduanya.Solusi lama, 41 byte :
Input harus berupa string yang dipisahkan koma:
Cara pemrograman yang aneh. Ini berfungsi karena casting implisit MATLAB antara tipe data.
Output dari
strsplit(input(''))
adalah sel string. Anda tidak dapat menggunakandiff
sel, tetapi untungnya,datenum
berfungsi, dan itu benar-benar memasukkan input sel kembali ke array numerik 2x1,diff
memungkinkan untuk digunakan.Anda dapat menentukan banyak pembatas di
strsplit
, tetapi koma adalah default. Juga, input defaultdatenum
adalah pada formatyyyy-mm-dd
. Karena alasan itu, banyak spesifikasi seperti: datenum (s, 'yyyy-mm-dd') dihindari, sehingga menghemat banyak byte.Sebagai catatan, ini akan menjadi 21 byte jika saya bisa menggunakan fungsi:
sumber
Javascript ES6, 63 byte
Diuji dalam chrome.
sumber
Date.parse
dan mengganti-
dengan/
2015-12-03
akan berfungsi tetapi2015-12-3
tidak akan (kecuali di Chrome). Pertanyaannya memang mengatakan bahwa tanggal akan dalam formatYYYY-MM-DD
jadi jika input benar-benar mengikuti bahwa itu akan kompatibel lintas-browser, namun contoh-contoh tampaknya mengatakan sebaliknya. Bagaimanapun, Anda dapat menggunakanDate.parse
alih-alihnew Date
menyimpan 2 byte:alert((p((a=prompt(p=Date.parse).split`,`)[0])-p(a[1]))/864e5)
PHP, 63
6477byteMenemukan bahwa pendekatan klasik lebih pendek daripada yang OOP:
Membaca string yang dipisahkan koma
STDIN
.Cara OOP lurus ke depan ( 77 byte ):
Suntingan
strtotime
bukanDateTime
.strtotime
dalam suatu variabel. Berkat Blackhole .sumber
<?=
sebagai gantinyaecho
.VBA, 69 byte
sumber
psql, 75 byte
(74 karakter kode + 1 opsi baris perintah karakter)
psql
adalah terminal interaktif PostgreSQL. Untuk menghormati "Setiap pengajuan harus merupakan program lengkap." aturan, kode membaca input itu sendiri.Contoh dijalankan:
sumber
MATL, 5 byte
Ini adalah sama dengan jawaban StewieGriffin, kecuali saya menggunakan
flip
kemudiandiff
daripadadiff
kemudian meniadakan hasilnya.Penjelasan lengkap, dengan fungsi Matlab yang sesuai:
sumber
o
untukdatenum
fungsi :-DPowerShell v2 +,
5044 BytesMembawa argumen input sebagai string, membaginya pada koma, lalu mem-pipe array melalui built-in alias
date
kependekan untukGet-Date
mengonversi string kami ke dalam format .NET datetime. Kedua tanggal tersebut kemudian disimpan secara bersamaan ke dalam$a
dan$b
. Kami kemudian menggunakan operator-pengurangan-kelebihan untuk mengurangi yang kedua dari yang pertama, dan output.Days
daripadanya.Golf 6 byte berkat TessellatingHeckler .
Secara teknis tidak bersaing, karena tidak memiliki juru bahasa online yang tersedia, karena implementasi FOSS dari PowerShell, Pash , ada di sekitar PowerShell v0.5. Itu belum mendukung
-split
, apalagi fungsionalitas .NET date.sumber
Excel, 25 byte
Excel secara otomatis menangani string sebagai tanggal.
sumber
Jolf , 33 byte
Hanya berfungsi di Chrome. Tidak bersaing, karena bahasa memperbarui pertanyaan pascatanggal. Saya akan menambahkan penjelasan yang lebih menyeluruh nanti.
"Penjelasan"
sumber
MATLAB, 59 byte
Pendekatan yang sangat mudah: input harus diberikan sebagai string dari jendela perintah. String input kemudian dibagi dan jumlah hari antara tanggal (dan tidak ada yang lain) dihitung dari nomor tanggal seri. Saya cukup yakin ada cara untuk menghindari kebutuhan untuk memanggil datenum dua kali ...
sumber
Python 2,
109113 bytesumber
T-SQL + SQLCMD, 51 byte
Diuji dengan SQL Server 2008R2. $ (I) diganti dengan input yang disediakan sebagai argumen baris perintah.
Contoh dijalankan:
sumber
Mathematica, 61 byte
Pengurangan tanggal dasar.
sumber
Perl,
9186 + 2 untuk bendera np, 88 bytegunakan Date :: Calc qw (Delta_Days); ($ a, $ b) = split (/, /); $ _ = Delta_Days (split (/ - /, $ b), split (/ - /, $ a))Contoh
sumber
jq, 50 byte
(49 karakter kode + 1 opsi baris perintah karakter)
Contoh dijalankan:
Tes online (Melewati
-R
URL tidak didukung - jadi input dilewatkan sebagai string "2015-12-3,2013-12-3").sumber
Mathematica, 56 byte
Sebagian besar (semua?) Fungsi tanggal akan mencoba mengurai input string ke dalam tanggal secara otomatis.
sumber
Japt , 13 byte
Cobalah
sumber
C # .NET , 148 byte
Coba Online
sumber