Kamu suka makan siang Namun, Anda melakukan diet dan ingin memastikan Anda tidak makan siang dua kali dalam satu hari. Jadi, Anda perlu membuat program untuk membantu Anda memastikan.
Namun, satu komplikasi adalah Anda makan siang dengan jadwal yang sangat aneh. Waktu Anda makan siang adalah BULAN: HARI PM (Anda dapat menggunakan UTC atau zona waktu setempat). Itu benar, jika hari ini 14 Juli , Anda makan siang pukul 19:14 .
Untuk program Anda, Anda perlu menggunakan tanggal dan waktu saat ini (jangan mengambil input), dan menampilkan nilai kebenaran yang konsisten jika Anda sudah makan siang hari itu (atau sekarang waktu makan siang), atau nilai falsy yang konsisten jika belum.
Contoh: (Waktu Anda menjalankan program => keluaran)
- 4 Mei 11:35 AM => false (Anda akan makan siang pukul 17:04)
- 3 Juni 5:45 PM => false (Anda akan makan siang pukul 18:03)
- 28 Juli 8:30 PM => benar (Anda makan siang pukul 19:28)
- 15 Desember 3:25 PM => true (Anda makan siang pukul 12:15)
- 29 Februari 2:29 PM => true (tepat waktu makan siang)
- 12 Oktober 12:00 AM => false (hari baru dimulai)
Referensi:
Jawaban:
Swift 3 , 310 byte
Coba lihat!
Ini mencetak
true
danfalse
, masing-masing untuk kebenaran dan kepalsuan.sumber
05AB1E ,
1518 byteCobalah online!
Penjelasan
sumber
Oktaf , 61 byte
Cobalah online!
Penjelasan:
Pertama fungsinya:
now()
mengembalikan waktu pada format desimal. Tanda kurung adalah opsional.datestr
mengkonversi angka desimal menjadi string pada format yang diberikan pada argumen keduastr2num
mengkonversi string menjadi angkadiff
mengambil perbedaan antara dua angkaKerusakan:
Kami mengambil ini dari tengah:
datestr(now,'mmddHHMM')
: Pertama, kami mengambil waktu saat ininow
sebagai inputdatestr
dan menentukan formatmmddHHMM
. Surat-surat berarti:mm = month
,dd = day
,HH = hour
,MM = minutes
danAM
menetapkan bahwa jam harus di format 12-jam. Tidak ada pemisah yang disertakan, untuk membuatnya sesingkat mungkin. Ini dihasilkand = 07142117
pada saat menulis penjelasan ini. Saya akan merujuk ke bagian itux
mulai sekarang.[(d=x)(1:4);d(5:8)]
: Menyimpan string di atas, saatd
, lalu membuat array dengan dua elemen, empat karakter pertama, lalu 5-9 karakter. Ini memberi :Di mana angka disimpan sebagai string, bukan angka. Kami akan memanggil hasil di atas untuk di
y
bawah ini.str2num(y)
mengubah susunan karakter menjadi angka, di mana setiap baris berubah menjadi satu angka. Ini memberi[714; 2122]
. Kami akan memanggil hasilnya untukz
.diff(z)>1200
mengambil perbedaan antara dua angka dan memeriksa apakah waktu saat ini 1200 lebih tinggi dari tanggal saat ini. Ini menyumbang AM / PM. Ini memberi kita hasil yang diinginkan.sumber
Pyth,
222120 byte-1 byte terima kasih kepada @ Mr.Xcoder
Coba ini!
pendekatan lama,
2220 byteCobalah!
penjelasan
sumber
&g.d6+.d4 12g.d5.d7
bekerja selama 19 byte? Saya tidak yakin dan belum benar-benar mengujinya tetapi ...&g.d6+12.d4g.d5.d7
akan menjadi 18 sebenarnya. Juga, dalam pendekatan lama saya tidak berpikir Anda perlu`
, dan itu akan menjadi 18 byte. Saya tidak tahu, saya mungkin salah.g++720.d5*60.d4+*60.d6.d7
, tetapi sayangnya itu lebih lama (25 byte). Namun, itu mungkin menjadi sumber inspirasi dan saya pikir saya harus menyebutkannya.C #, 174 byte
Cobalah online!
sumber
()=>...
)Action<bool>
untuk menyimpan byte. GunakanDateTime.Now
saat mengakses bulan dan hari. Secara umumpublic
tidak diperlukan danProgram
bisa hanya satu huruf. Gunakanusing D=System.DateTime;
untuk menyimpan byte. Secara keseluruhan ide bagus tetapi bisa banyak bermain golf. Selamat datang di PPCG!PHP dan bahasa lain dengan fungsi-fungsi umum ini: sekitar 28 hingga 29 byte:
atau sebagai alternatif
keduanya akan dicetak.
mungkin dengan
?1:0
tergantung pada representasi. Kemungkinan byte dipotong jika bahasa digunakan yang memiliki gema implisit, atau tidak ada akhir ';'.Mengapa kita memasukkan nilai ke dalam variabel dan sisanya, ketika tidak diperlukan :)
date()
meninggalkan apa pun sebagai literal yang tidak didefinisikan, jadi misalnya,7 May 2017 17:22:43
meneruskan ekspresi1722 - 1200 >= 507
ke eval (). Byte disimpan dengan mengubahnya ke setara1722 - 1199 > 507
.Siapa bilang eval sudah mati? ;-)
sumber
Java, 81 byte
Cobalah online!
Tidak Disatukan:
sumber
java.util.Date
dalam hitungan byte.Haskell,
135129 bytemembongkar ini cukup mengganggu, mungkin penanganan string lebih cocok
// edit: pola penjaga aman 5 byte
sumber
Mathematica,
656462 byte3 Program
Ini masing-masing kurang satu byte jika
≥
dihitung sebagai satu byte dalam Mathematica.Penjelasan
Date[]
mengembalikan daftar dalam formulir{y,m,d,h,m,s}
. BegituDate[][[4;;5]]
juga jam dan menit dari waktu saat ini.p=Date[][[#]]&;
membuatp
fungsi yang mengambil dalam indeks yang kita inginkan dan memberi kita bagian-bagian tanggal.{60,1}.#&
adalah fungsi anonim yang mengambil titik produk{60,1}
dan input untuk mendapatkan cara membandingkan waktu. Ini satu byte lebih pendek dariTimeObject
.p@2
sama denganp[2]
, jumlah bulan.+{12+p@2~Mod~12,0}
menambah{12,0}
bulan dan tanggal saat kita tidak di bulan Desember, dan menambahkan{0,0}
sebaliknya. (Terima kasih, michi7x7!)>=
adalah operator perbandingan, tetapi kami tidak dapat membandingkan {jam, menit} dengan {bulan yang disesuaikan, tanggal} secara masuk .../@
peta{60,1}.#&
ke kedua sisi ketidaksetaraan dalam tanda kurung, sehingga kami dapat membandingkan waktu dengan benar.{60,1}.#&
, mereka gunakan#
untuk mewakili input ke fungsi anonim besar, dan&
untuk menandakan akhir.@Date[]
Menerapkan fungsi besar pada barisnya (yang mengekstrak bagian daftar) ke daftar tanggal itu sendiri.[Date[][[#]]&]
Menerapkan fungsi besar di barisnya ke fungsi anonim lain, yang mengekstrak bagian dari daftar tanggal.Bonus
Sebagai tambahan, jika kita makan siang antara jam 1 pagi sampai 12:59 malam, maka kita bisa menghemat 25 byte saja
{60,1}.#&[Date[][[#]]]&/@(4;;5>=2;;3)
.Anda dapat menguji semua ini dengan menempelkan kode ke kotak pasir Wolfram Cloud dan mengklik Gear-> Evaluate Cell atau tekan Shift + Enter atau Numpad Enter.
sumber
13:01
untuk24:31
Date[]
bonus dengan(Date[]+{0,12,0,0,0,0})
(mungkin ada cara untuk bermain golf itu, tetapi12UnitVector[6,2]
lebih lama). Masalahnya adalah bahwa pada tanggal-tanggal seperti 3 Desember, kita makan siang pukul 12:03, bukan 24:03, jadi kita perlu menambahkan 12 kecuali pada bulan Desember . Ini mengharuskan kita untuk 1. mengintip ke dalam tanggal untuk melihat apakah kita pada bulan Desember atau tidak (seperti dalam jawaban saya), atau 2. menulis fungsi yang memeriksa jika kita pergi ke 24: XX setelah fakta, yang akan menjadi lebih lama.JavaScript (ES6), 75 byte
Nama-nama fungsi panjang ...
sumber
Python 3 , 104 byte
Cobalah online!
Semua tes datetime. Saya mengganti 29 Februari dengan 28 Februari karena tanggal yang tidak valid tidak berfungsi.
sumber
R , 92 byte
Cobalah online!
sumber
q, 31 byte
Contoh:
Penerjemah tersedia di sini
Versi lama
sumber
2$
pad akan berubah6
ke6_
ketimbang_6
, sehingga Anda ingin(-2)$
, tapi Anda dapat membatalkan mereka tambahan 3 karakter dengan menggunakan singkatan untukstring
sebagai($)
... atau bukan menggunakan $ untuk pad, tambahkan "0" dan kemudian mengambil 2 terakhir chars:{x:.z.P;x>"T"$":"sv -2#'"0",'($)12 0+
mmdd$\:x}
for 49 bytesJavaScript, 75 byte
Yang setara dengan kode berikut:
sumber
t
can be used while modifyt=new Date,t.setMinutes(t.getDate(t.setHours(13+t.getMonth(n=+t))))<n
Python 2.7, 130 bytes
Try it online
Note: There may be a problem with the sign. Please excuse that because I follow IST and it's quite confusing because it's 2:28am here now. Do correct the sign if you feel it is wrong.
sumber
Perl, 45 chars
If I have to provide a method, it will be 45 for
sub c{...}
. If I have to printsay ()||0
even makes it 47. I will add that in if it's a requirement.sumber
you need to make a program to help you make sure
that snippets are not allowed - that said either of your listed output methods are generally considered validperl -e
was generally ok, but others have provided functions, so I edited it in.Excel,
525049 bytesInput is this formula in any cell.
Output is either
TRUE
orFALSE
.Excel's built-in date handling helps a lot.
The
TIME
function returns the day's lunch time as a time value which, if converted to a date, would useJan 0, 1900
. We compare it againstNOW - TODAY
so we get the current time with a date value of0
orJan 0, 1900
.Saved 2 bytes thanks to Wernisch
Saved 1 byte thanks to Adam
sumber
now()-today()
tomod(now(),1)
JavaScript, 62 chars
Test code below:
Show code snippet
sumber
Excel VBA, 55 Bytes
Anonymous VBE immediate window function that takes no input and outputs a Boolean value representing whether I've had lunch to the VBE immediate window
sumber
Ruby, 64+7 = 71 bytes
Requires the
-rtime
flag because for some reasonTime::parse
is like, the only function requires it out of the entireTime
module.Try it online! (it also prints out the current time)
sumber
Julia 0.6.0 99 bytes
a=split(string(Dates.today()),"-");(Dates.hour(now())<parse(a[2]))&&Dates.minute(now())<parse(a[3])
Julia has built in function to use the clock/calendar of the computer. My computer is running on ubuntu 16.04 and already with 12 hour clock, so I can't say if what I did works with other machine using different clock, but seems to works on my machine.
sumber
JavaScript ES6, 70 Bytes
Maybe not that right on some milliseconds...
sumber
Matlab, 241 bytes
Explanation: First, I obtain the date as a string. Then, I isolate the month and day. Since the problem states that it is always interpreted as PM, then I automatically write false if the time is in AM. If the current time is in PM, then I continue on and just compare the numbers of the time.
Note: I've formatted it slightly differently here for readability.
sumber