Saya mengerjakan standar sembilan sampai lima. Senin sampai Jumat. Saya membutuhkan waktu setengah jam untuk makan siang mulai pukul 12:30 hingga 13:00.
Tuliskan saya sebuah program yang, ketika dijalankan, menghitung persentase minggu kerja yang telah saya selesaikan saat ini.
Aturan
- Hanya menghitung waktu yang benar-benar dihabiskan untuk bekerja. Saya tepat waktu dan tidak bekerja saat makan siang.
- Tidak ada input Anda dapat memperoleh informasi seperti waktu / tanggal saat ini namun nyaman.
- Minggu kerja dianggap selesai dari Jumat siang hingga tengah malam antara Minggu dan Senin.
- Zona waktu adalah zona waktu lokal.
- Output harus berupa angka desimal, mis. 66.25498, simbol persentase opsional.
- Program ini harusnya cukup tahan di masa depan. Seharusnya bisa mengatasi tahun kabisat.
- Resolusi keluaran harus sedetik atau lebih baik. Saya suka menonton ketel mendidih.
- Golf kode. Kode terpendek menang.
Jawaban:
Q,
111102sumber
Python 3, 132
Resolusi adalah satu menit, atau 2/45 persen. Itu lebih dari cukup IMO.
sumber
Excel,
132,129,123,119, 117rekatkan ke A2: A4
format sel A4 sebagai% untuk mendapatkan format yang benar
Makan siang berbayar 40 jam kerja:
88, 81sumber
NOW()
setelah pukul 17:00.0
) yang tidak perlu!Perl, 124 karakter
OK, solusi pertama yang sederhana untuk mengatur par:
Jalankan dengan
perl -M5.010
untuk mengaktifkan fitur Perl 5.10+say
. Resolusi adalah satu detik; jika resolusi satu menit dapat diterima,+$s/3600
bagian itu dapat dihapus dengan total panjang 116 karakter .Solusi ini digunakan
localtime
untuk mendapatkan hari dalam seminggu dan waktu dalam sehari, jadi itu harus bekerja terlepas dari perubahan tahun, hari kabisat atau keanehan kalender lainnya, setidaknya selama siklus tujuh hari seminggu tidak berubah. Perubahan DST selama hari kerja akan sedikit membingungkan, tetapi hal itu pada dasarnya tidak pernah terjadi, mungkin karena itu akan menyebabkan terlalu banyak kebingungan.(Untuk kenyamanan pengujian, perhatikan bahwa
localtime
menerima cap waktu Unix sebagai argumen opsional.)sumber
Mathematica
169 168 212 214 211 211 210 210karakterBertele-tele, dengan kode Standar golf.
Berikut ini memperhitungkan minggu kerja yang melintasi batas bulan atau tahun, serta tahun kabisat. Ini menganggap waktu bekerja sesuai dengan jam dan menit.
Saya tidak bisa memikirkan cara untuk menghindari mengeja hari dalam seminggu. Mathematica mengembalikan hari dalam seminggu sebagai string 3 karakter, yang harus dikonversi ke angka.
De-golf
sumber
VBA 141
Diformat untuk dijalankan dari jendela langsung. Terima kasih kepada Sean Cheshire karena menunjukkan peningkatan 10-arang!
sumber
n=(Now-Int(Now))*24:a=(Weekday(Now,3)*7.5+IIf(n>17,7.5,IIf(n>9,IIf(n<12.5,n,IIf(n>13,n-.5,n))-9,0)))/37.5:MsgBox Format(IIf(a>1,1,a),".0%")
@ 139R, 115 karakter
Berikut ini adalah simulasi satu minggu:
sumber
Ruby,
191116.115113Logikanya dicuri dari solusi Fraxtils Python .
Jika Anda ingin menguji kode dengan unit test, Anda memerlukan solusi 143 karakter ini:
Bukan kode terpendek dan paling efisien, tetapi dengan unit test;)
191 karakter termasuk baris baru (saya bisa membuatnya satu baris, cukup ganti setiap baris baru dengan a
;
).Dan kode tes:
sumber
Python 2 130 karakter
Upaya ketiga saya adalah saus yang lemah tapi saya pikir saya sudah mendapatkan logika yang benar.
sumber