Latar Belakang
Anda adalah pegolf kode yang menarik dan beberapa orang mengajak Anda berkencan.
Anda tidak punya waktu untuk memikirkan hari mana tepatnya Anda tersedia, jadi Anda memutuskan untuk membuat fungsi menerima tanggal dan mengembalikan hari dalam minggu itu.
Anda kemudian mengambil hari-hari dalam seminggu, memasukkannya ke dalam program kalender Anda untuk melihat apakah ada orang lain yang sudah mengajak Anda kencan.
Aturan
- Menerima tanggal dalam format YYYY-MM-DD
- Mengembalikan susunan / daftar tanggal pada minggu itu. (Minggu adalah hari pertama)
- Tanggal dapat ditampilkan sebagai milidetik antara 1 Januari 1970 dan tanggal itu, dalam format tanggal "umum" 1 , atau objek tanggal.
- Urutan tanggal harus naik.
- (Meskipun Anda cukup pintar untuk memasukkan dukungan untuk daftar turun, program ini dapat bekerja paling cepat dengan daftar naik dan yang memiliki beberapa milidetik untuk cadangan?)
- Harus bekerja dengan pada hari apa pun sejak 1993. (Ya, Anda berusia 24 tahun pada saat penulisan!)
- Setiap jawaban Javascript mendapat lima tinggi!
Spesifikasi
Input sampel: whichDates(2017-08-29)
Output: (setara dengan)
console.log([
Date.parse('2017-08-27'),
Date.parse('2017-08-28'),
Date.parse('2017-08-29'),
Date.parse('2017-08-30'),
Date.parse('2017-08-31'),
Date.parse('2017-09-01'),
Date.parse('2017-09-02'),
]);
1 Format yang cukup terkenal. Seperti YYYY-MM-DD.
2 Ini adalah kode-golf ! Kode terpendek per bahasa menang, tetapi kode terpendek secara keseluruhan mendapat tanda centang emerald!
YYYY-MM-DD
(Saya tidak melihat alasan yang bagus mengapa itu harus ketat).Date.parse(2017-08-27)
?? haruskah iniDate.parse('2017-08-27')
?Jawaban:
Japt , 15 byte
Menguji
Penjelasan
Input string yang tersirat
U
.Konversikan
U
ke objek tanggal dan tetapkan kembali keU
.Buat array bilangan bulat dari
0
hingga6
, masing-masing melewati fungsi di manaX
elemen saat ini.Tetapkan tanggal
U
.Tambahkan tanggal
U
keX
.Kurangi hari saat ini di minggu
U
.Secara implisit menampilkan array yang dihasilkan.
sumber
Perl 6 , 47 byte
Cobalah online!
Kode ini hampir jelas. Pertama kita membuat objek Date
$d
dari string, yang kebetulan berada dalam format ISO yang bagus. Kita dapat melakukan aritmatika dengan tanggal (menambahkan integer = menambahkan bahwa berhari-hari, sama dengan mengurangkan). Begitu$d-$d.day-of-week
juga denganterakhirini (oh my god, minggu selalu dimulai dengan hari Senin untukku: D) minggu minggu. (.day-of-week
adalah 1 untuk Senin hingga 7 untuk Minggu.) Kami kemudian memetakan lebih dari 0 hingga 6 (^7
) dan menambahkannya ke hari Minggu, mendapatkan semua hari dalam seminggu. Angka yang kami pemetaan muncul di tempat bintang*
. Daftar ini kemudian dikembalikan.sumber
JavaScript (ES6),
736362 BytesSaya pikir saya juga akan mencobanya di JavaScript.
Sunting: Menggunakan pendekatan milidetik, sebagaimana diizinkan oleh prompt, saya menguranginya menjadi 62 byte.
Anda dapat melakukan
.map(x=>new Date(x))
pada array yang dikembalikan jika Anda ingin mengubahnya.Mempertahankan pendekatan tanggal ( 72 Bytes )
Ada bug dalam pengiriman awal saya, itu diperbaiki. Berkat pengamatan oleh susu, saya bisa menghapus bug dan masih menurunkan jumlah byte.
sumber
s=>[..."0123456"].map(i=>(x=new Date(s))-(x.getDay()-i)*8e7)
keys
dan gunakan indeks sebagai ganti elemen saat memetakan pada array. Tip 2: Untuk array sekecil ini, lebih pendek untuk menghasilkannya seperti yang saya lakukan.MATL ,
2221 byteOutput dalam
dd-mm-yyyy
format.Cobalah di MATL Online!
Penjelasan
sumber
JavaScript (ES6), 76 byte
Saya pikir saya akhirnya menemukan lingkungan yang paling tidak kondusif untuk bermain golf yang efisien: dari belakang bar saya, sambil menyajikan bir dengan tangan saya yang lain!
Coba online (Cuplikan untuk mengikuti)
Penjelasan
Fungsi anonim mengambil string (format
yyyy-(m)m-(d)d
) sebagai argumen melalui parameters
.Buat array 7 elemen dengan mengubah
8000000
notasi ilmiah menjadi string dan menghancurkannya, yang lebih pendek dari[...Array(7)]
.Peta di atas array, melewati setiap elemen melalui fungsi di mana
_
elemen saat ini, yang tidak akan digunakan, danx
indeks saat ini, berbasis 0.Konversikan
s
keDate
objek dan tetapkan ke variabeld
Tetapkan tanggal
d
.Dapatkan tanggal saat ini
d
.Kurangi angka hari kerja saat ini, 0-diindeks, untuk mendapatkan hari Minggu.
Tambah
x
.sumber
Bash + utilitas umum, 53
Cobalah online .
Ini mengasumsikan bahwa output dari tanggal GNU adalah format tanggal "umum", misalnya
Fri Sep 1 00:00:00 UTC 2017
.Penjelasan
sumber
Python 3,
133124126112 byte-9 byte terima kasih kepada Tn. Xcoder
+2 byte karena minggu ini dimulai dengan Minggu
-14 byte terima kasih kepada notjagan
Itu tidak berjalan baik seperti yang saya harapkan.
sumber
raw_input()
alih - alih diinput()
atas. (+4 byte).range
masih berfungsi di Python2 untuk hal kecil ini juga. Tanparaw_input
Anda mendapatkan kesalahan.Mathematica 20 byte?
Mathematica menyatakan daftar hari sebagai objek tanggal tunggal. Jika objek tanggal tersebut merupakan keluaran yang dapat diterima, fungsi murni 20 byte berikut ini akan berfungsi:
Contoh
sumber
Java 8 (
161154123122102 102 +1936 bytes)Cobalah online!
sumber
l
dan mengganti referensi denganLocalDate.parse(e)
.i
dalam loop body untuk menghemat 1 byte. Oh, danjava.util.function.*
impor tidak digunakan oleh lambda, jadi Anda tidak harus menghitungnya sebagai bagian dari solusi.Python 2, 115 Bytes atau 111 Bytes, tergantung pada format input.
Pada dasarnya, ini hampir kode yang sama dalam jawaban untuk Python3 yang ditulis oleh Sobsz , tetapi dibuat untuk bekerja di Python 2.
Jika input dalam bentuk
YYYY-MM-DD
:(Ini mengasumsikan input tidak dibungkus dengan tanda kutip tunggal untuk menunjukkan string sebagai input)
Perbedaan utama adalah bahwa kita perlu
raw_input
alih-alihinput
, kecuali kita secara eksplisit menentukan tanggal di'YYYY-MM-DD'
dalam apostrof untuk mengidentifikasinya sebagai string literal. Tanpa input string literal, kita mendapatkan Kesalahan Sintaks, karenanya penggunaanraw_input
untuk menerima tanggalYYYY-MM-DD
secara langsung tanpa memasukkannya ke dalam string literal.Hal ini tentu saja mengasumsikan bahwa input dimasukkan ke dalam seperti:
2017-08-29
.+4 dari jawaban Sobsz, lalu -1 karena kita tidak perlu tanda kurung untuk
print
pernyataan dan menyimpan byte dari tanda kurung penutup tidak ada di sana; total perbedaan +3 byte.Cobalah secara Online!
Jika input dalam bentuk
'YYYY-MM-DD'
:(Perhatikan bahwa kita harus memiliki tanggal yang disediakan di dalam tanda kutip agar jawaban ini berfungsi)
Kita dapat menyimpan 4 byte karena kita tidak memerlukan
raw_
dan ini secara efektif jawaban yang sama seperti yang disediakan oleh Sobsz, dikurangi satu byte karena kita tidak memerlukan tanda kurung di sekitarprint
perintah.Terima kasih kepada Tn. Xcoder karena menunjukkan yang satu ini, meskipun secara teknis ini adalah duplikat yang tepat, dikurangi satu byte, dari jawaban Sobsz .
sumber
raw_input()
dengan input dan mengelilingi input dengan tanda kutip untuk menghemat 4 byte. Tentu saja, itu mengubah solusi Anda menjadi duplikat: P