Diberikan representasi tekstual (nama lengkap tidak peka huruf atau singkatan 3 karakter) sebulan mengembalikan jumlah hari dalam sebulan.
Sebagai contoh, december
, DEC
, dan dec
semua harus kembali 31.
Februari dapat memiliki 28 atau 29 hari.
Asumsikan input adalah sebulan di salah satu bentuk yang benar.
code-golf
date
code-challenge
polyglot
hello-world
unicode
rosetta-stone
code-golf
ascii-art
kolmogorov-complexity
code-golf
math
approximation
code-golf
array-manipulation
code-golf
math
sequence
code-golf
array-manipulation
decision-problem
code-golf
ascii-art
random
card-games
code-golf
number
integer
base-conversion
code-golf
quine
binary
code-golf
graph-theory
classification
code-golf
math
number
code-golf
math
geometry
code-golf
tips
ruby
qw3n
sumber
sumber
december
,DEC
, dandec
harus semua kembali 31" - Apakah itu niat?Jawaban:
Pyke , 9 byte
Coba di sini!
Atau 15 byte jika semua format input diperlukan
Coba di sini!
sumber
FEB
.Apr
,Jun
,Sep
, danNov
) tetapi juga berpikir bahwa itu memerlukan klarifikasi kecil di OP (lihat saya pertanyaan ).JavaScript (ES6),
48 47 44 4342 byteDemo
Tampilkan cuplikan kode
Bagaimana?
Operasi-operasi ini mengarah ke tabel pencarian 8 entri, yang tidak akan sangat menarik jika nilai-nilai didistribusikan secara acak. Tetapi hasil apa pun yang lebih besar dari 2 dipetakan hingga 31 hari. Karena itu, hanya 3 entri pertama yang perlu disimpan secara eksplisit.
sumber
.substr(0,3)
tidak diperlukan. Jadi, setelah dipikir-pikir, ini mungkin bukan pendekatan terbaik.substr
?slice
!Javascript (ES6),
3633 byte-3 byte terima kasih kepada @JustinMariner dan @Neil
Maaf @Arnauld, menyalahgunakan keanehan JavaScript lebih pendek dari konversi basis mewah Anda.
Bagaimana itu bekerja
Untuk beberapa alasan, JavaScript memungkinkan memasukkan tanggal di luar bulan yang ditentukan. Kode menghitung berapa hari di luar bulan tanggal untuk menentukan berapa hari di dalam bulan. Contoh:
"FEB31"
→Thu Mar 02 2000
→31 - 2 % 31
→29
"October31"
→Tue Oct 31 2000
→31 - 31 % 31
→31
Uji kasus
Tampilkan cuplikan kode
sumber
31
. Tampaknya berfungsi di Chrome sebagainew Date("feb31")
contoh.+31
penghematan tiga byte secara keseluruhan. Namun semua ini tidak berfungsi di Firefox.Python 2 ,
464538 byte-1 byte terima kasih kepada @totallyhuman
Cobalah online!
sumber
Bash , 21 byte
Cobalah online!
Mengambil input sebagai argumen baris perintah dan menghasilkan dengan baris baru tambahan. Hitungan hari untuk Februari tergantung pada tahun berjalan
Membutuhkan util-linux 2,29 versi
cal
, yang merupakan salah satu yang tersedia di TIO . Juga tergantung pada lokal, jadi LC_TIME harus diubah pada sistem non-Inggris (terima kasih @Dennis untuk klarifikasi).Ide pemipaan melalui
xargs
untuk memangkascal
output adalah dari jawaban SO ini .sumber
Proton , 50 byte
Cobalah online!
-14 byte terima kasih kepada Jonathan Frech
Tiga puluh hari telah September, April, Juni, dan November. Yang lainnya punya selai kacang. Semua kecuali nenekku; dia punya sepeda roda tiga merah, tapi aku mencurinya. muahahahahaha
(Saya sudah menunggu untuk menceritakan lelucon itu (sumber: profesor matematika saya) untuk waktu yang lama di situs ini: D: D: D)
sumber
'sepaprjunnov'
alih-alih daftar string.C # (.NET Core) ,
52 + 13 = 6538 + 24 = 62 byteCobalah online!
+24 untuk
using D=System.DateTime;
Ucapan Terima Kasih
-3 byte terima kasih kepada Grzegorz Puławski.
sumber
using System;
? Atau bisakah Anda mengecualikannya dari jumlah byte?using D=System.DateTime;
danm=>D.DaysInMonth(1,D.Parse(1+m).Month)
seperti di sini: tio.run/##jc5BSwMxEAXgs/…Python 3 , 60 byte
Cobalah online!
Porting solusi Proton saya
-10 byte terima kasih untuk benar-benar manusia
sumber
Tanggal Shell / GNU ,
39, 26 byteDi mana
$1
nama bulannya.Cobalah online!
sunting: Terima kasih Dennis untuk menyimpan banyak byte!
sumber
AWK ,
4544 byteCobalah online!
sumber
Python 3 -
93868482 byteVarian jawaban (menunjukkan progres waktu, dan byte untuk masing-masing, dengan tautan TIO):
Jawaban Asli (93 byte)
-7 byte terima kasih kepada Jonathan Frech. (86 byte)
-2 byte lebih banyak berkat pengujian saya sendiri lebih lanjut dari
monthrange
hasil, dengan nilai kedua selalu menjadi nilai yang lebih tinggi. (84 byte) 1-2 lebih banyak dengan menggunakan
import calendar as c
dan merujuk denganc.monthrange
. (82 byte, revisi saat ini )Jelas tidak sebaik jawaban HyperNeutrino yang tidak menggunakan built-in, tetapi ini masih berfungsi.
Catatan kaki
1 : Uji kasus melalui TIO.run yang menunjukkan bukti bagaimana saya menangani
monthrange
nilai - nilai itu, untuk berbagai kasus uji bulan.sumber
import ...,calendar as c
sehingga tidak harus mengetik 'kalender' dua kali.Perl 5 , 47 +1 (
-p
) = 48 byteCobalah online!
sumber
($_)=/.(..)/;
bukannya$_=substr$_,1,2;
dan()
sekitar"eprunov"=~/$_/i
bisa dihapus.Haskell ,
656362 byteCobalah online!
Pendekatan pencocokan pola. Baris pertama adalah menangani case-insensitivity. Kemudian kita kembali
28
jika huruf ketiga lebih kecil dari C (angka 3),30
jika huruf kedua lebih besar dari C dan yang ketiga lebih besar dari M, atau31
sebaliknya.Sunting: -1 byte terima kasih kepada Leo
Alternatif (
6564 byte)Cobalah online!
sumber
c<3
alih - aliha==6
(Februari adalah bulan pertama jika Anda memesannya dengan huruf ketiga, diikuti Desember)APL (Dyalog) , 32 byte *
Fungsi awalan Tacit. Asumsikan
⎕IO
( I ndex O rigin)0
, yang merupakan default pada banyak sistem.Cobalah online!
⍠1
kasus tidak sensitif1
mengembalikan panjang⎕S
PCRE S earch untuk'.p|un|no|f'
any-char, "p" atau "un" atau "no" atau "f"⊃⍨∘⊃
dan gunakan elemen pertama dari itu (0 jika tidak ada) untuk memilih31 28 30
daftar iniDemikian:
Ap r, S ep , J un , dan No v akan memilih angka pada indeks 2, yaitu 30
F eb akan memilih angka pada indeks 1, yaitu 28
yang lain akan memilih angka pada indeks 0, yaitu 31
* Menggunakan Klasik dan menghitung
⍠
sebagai⎕OPT
.sumber
Templat Mediawiki, 19 byte
sumber
MATL , 22 byte
Cobalah online!
Penjelasan
sumber
Bahasa Wolfram (Mathematica) ,
4630 byteCobalah online!
Akan memberi salah satu
28
atau29
untuk Februari tergantung pada apakah tahun ini adalah tahun kabisat.Bagaimana itu bekerja
Semua perintah date dalam Mathematica akan menafsirkan input seperti
April
,APR
,ApRiL
, dan sebagainya sebagai hari pertama bulan sesuai dalam tahun berjalan. (Sebagai bonus, masukan seperti"February 2016"
atau{2016,2}
juga berfungsi seperti yang diharapkan.)#~NextDate~"Month"
memberikan hari pertama bulan setelah itu, danDayCount
memberikan jumlah hari di antara dua argumennya. Jumlah hari antara 1 April dan 1 Mei adalah 30, jumlah hari pada April.sumber
Java 8 , 47 byte
Cobalah online!
Akhirnya menggunakan ide yang sama dengan jawaban Herman Lauenstein JS , di mana pengaturan tanggal ke 31 mendorong ke bulan berikutnya. Java memang membutuhkan satu tahun, jadi itu sudah diatur ke
1
.sumber
Retina ,
323128 byteCobalah online! Sunting: Disimpan 1 byte berkat @RobertBenson. Disimpan 3 byte berkat @ovs.
sumber
q / kdb +, 36 byte
Larutan:
Contoh:
Penjelasan:
Ada sejuta cara untuk menguliti kucing. Saya pikir sedikit berbeda dengan yang lain. Ambil huruf ke-2 dan ke-3 dari input, kecilkan, kemudian cari di dalam string
"ebeprunov"
. Jika mereka berada di lokasi 0, maka ini adalah Februari, jika mereka berada di lokasi> 0 mereka adalah 30 hari, jika mereka tidak berada dalam string, mereka adalah 31 hari.sumber
Excel VBA,
4743 BytesFungsi jendela langsung VBE anonim yang mengambil input, seperti nama bulan, singkatan, atau nomor, dari rentang
[A1]
dan menampilkan panjang bulan itu di tahun 2001 ke fungsi jendela langsung VBE.Versi lama
sumber
PHP,
3833 + 132 + 1 byteDisimpan 5 byte berkat Titus
Jalankan sebagai pipa dengan
-nF
Cobalah online!
sumber
.' 1'
, sepertinya berfungsi pada TIO tanpa itu!<?=date(t,strtotime($argn));
(dijalankan sebagai pipa dengan-nF
).' 1'
, tetapi tidak berhasil. Setelah melihat komentar Anda, saya mencoba mencari tahu kesalahan saya. Karena saya menjalankannya pada tanggal 31 di bulan itu, ia mengambil hari ke-31 (saat ini) untuk setiap bulan yang saya masukkan, yang akan membuatnya melampaui bulan saat ini. 31 Februari berubah menjadi 3 Maret, sehingga kode mengembalikan 31 (jumlah hari pada bulan Maret). Karena itu, setiap bulan mengembalikan 31. Jadi, ia berfungsi tanpa.' 1'
pada hari apa pun <= 28 setiap bulan.'t'
->t
. Juga, saya harus melakukan banyak pencarian untuk mencari tahu bagaimana "berjalan sebagai pipa dengan-nF
" tapi saya mendapatkannya (saya pikir). :)Java (OpenJDK 8) , 126 byte
Cobalah online!
sumber
false
menjadi ekspresi boolean ingin1<0
menyimpan beberapa byte.QBIC ,
4935 byteSecara signifikan lebih pendek dengan beberapa tipu daya.
Penjelasan
sumber
Perl 5 , 24 byte
23 byte kode +1 untuk
-p
.Cobalah online!
sumber
Ruby , 45 byte
Cobalah online!
Ruby
Date.parse
menerima satu bulan nama sendiri. Apa yang biasanya menjadi pergeseran kanan (>>
) sebenarnya menambah bulanDate
objek. Pengurangan mempengaruhi hari dalam sebulan, yang akan membungkus mundur ke hari terakhir bulan sebelumnya.sumber
Kotlin , 92 byte
Cobalah online!
sumber