Lembar waktu
Di tempat kerja Anda sering harus mengisi waktu. Tugas ini adalah menulis kode untuk membantu ini.
Memasukkan
Dua kali dalam jam 12 jam yang sedikit non-standar menandakan awal dan akhir hari dipisahkan oleh spasi. Angka ketiga mewakili jumlah menit yang diambil untuk makan siang. Sebagai contoh
9:14 5:12 30
Ini berarti Anda mulai bekerja pada jam 9:14 pagi, selesai bekerja pada jam 5:12 sore dan makan siang selama 30 menit.
Anda bisa berasumsi itu
- Kapan saja dalam kolom pertama adalah dari pukul 00:00 (tengah malam) hingga tetapi tidak termasuk 13:00 dan setiap saat dalam kolom kedua adalah 13:00 paling awal hingga 11:59 malam.
- Istirahat makan siang tidak lebih dari hari kerja!
Format input harus seperti pada contoh yang diberikan.
Tugas
Kode Anda harus dibaca dalam file (atau input standar) dari tiga kali lipat ini, dan untuk masing-masing output berapa lama Anda bekerja. Output ini harus menunjukkan jumlah jam. Untuk contoh di atas ini adalah:
7 jam dan 58 menit dikurangi 30 menit yaitu 7 jam 28 menit.
Keluaran
Output Anda harus menentukan jumlah (seluruh) jam dan menit dan tidak boleh mencantumkan lebih dari 59 menit. Itu adalah Anda tidak dapat menghasilkan 2 jam 123 menit. Selain itu, kode Anda dapat ditampilkan dalam format apa pun yang mudah dibaca dan nyaman untuk Anda.
Contohnya
10:00 1:00 30 --> 2hr 30min
12:59 1:00 0 --> 0hr 1min
00:00 11:59 0 --> 23hr 59min
10:00 2:03 123 --> 2hr 0min
:
waktu terbatas pada jam 12 jam) menambah tantangan ini.Jawaban:
MATL , 28 byte
Cobalah online!
sumber
"XXhr YYmin"
?Retina 0.8.2 , 83 byte
Cobalah online! Tautan termasuk kasus uji. Penjelasan:
Konversikan input ke unary.
Tambahkan 12 jam ke waktu berhenti.
Lipat gandakan jam dengan 60 dan tambahkan ke menit.
Kurangi waktu mulai dan waktu istirahat dari waktu berhenti.
Divmod oleh 60. (Simpan 5 byte untuk format output yang lebih membosankan.)
sumber
Perl 5 -pl,
807471 byteCobalah online!
sumber
Python 3, 161 byte
Saya tahu ini bahkan tidak akan mendekati terkecil, tetapi ia membaca dalam file:
Saya merasakan ironi untuk menghentikan kartu absen saya untuk melakukan ini ...
Python 2.7, 133 byte
Terima kasih atas sarannya di komentar! Beralih ke python 2.7 menyimpan beberapa byte lagi karena defaultnya adalah pembagian integer:
Pendekatan yang sama dengan python3 adalah 135 byte karena pernyataan cetak dan default ke divisi float:
sumber
i=int
di awal dan mengubah baris ketiga kem=-i(l[0])*60+i(l[1][:2])+(i(l[1][3:])*60+720+i(l[2][:2])-i(l[2][2:]))
map(int,l[:-1].split(':'))
dan jatuhkan beberapa konversi ke int, pisahkan semuanya menjadi satu baris dengan mengganti lekukan dengan;
dll untuk menyimpan beberapa byte. Selain itu, Anda dapat mengunjungi Tip untuk bermain golf di Python untuk beberapa trik lebih rapi yang ditemukan pengguna lain selama masa pegolf mereka :).print(m,m%60)
sudah cukup. (Perhatikan juga penggunaanm%60
di tempatm-(m//60*60)
)C, 105 byte
Benar-benar mudah. Cobalah online di sini .
Tidak Disatukan:
sumber
a,b,c,d;f(e)
alih-aliha,b,c,d,e;f()
dan;printf("%d:%d ",a/60,a%60))a=(12+c-a)*60+d-b-e;}
bukannya;)a=(12+c-a)*60+d-b-e,printf("%d:%d ",a/60,a%60);
Bahasa Wolfram
125 119111 byte8 byte disimpan berkat pengguna 202729
Contoh
Singkatan tidak digunakan di sini, untuk membuatnya lebih mudah untuk mengikuti logika.
Interpreter["Time"][#2 <> "pm"]
menafsirkan sebagai parameter kedua diikuti oleh "pm", yaitu, dalam hal ini, "4:12 pm", mengembalikan yangTimeObject
sesuai dengan 4:12 pm.-Interpreter["Time"][# <> "am"])[[1]] - #3/60]
.#3
adalah parameter ketiga, yaitu 20 menit. Tanda minus mengurangi interval jam makan siang dari akhir waktu shift. Ini mengembalikan akhir waktu shift yang disesuaikan, yaitu, akhir shift yang berlaku jika orang tersebut tidak mengambil istirahat makan siang.Interpreter["Time"][#]
menafsirkan sebagai parameter pertama kali, dalam hal ini, "9:00", mengembalikan yangTimeObject
sesuai dengan 9:00 pagi.Mengurangi shift mulai dari hasil penyesuaian waktu shift yang disesuaikan
t
, interval waktu dinyatakan dalam jam.IntegerPart[t]
mengembalikan jumlah jam kerja lengkap.IntegerPart[60 Mod[t,1]], "min"}]
mengembalikan menit tambahan yang berhasil.sumber
Mod[x, 1]
digunakan.Floor
digunakan untuk apaIntegerPart
?-6hr 52min
untuk nilai sampel yang saya gunakan. Saya perlu melihat ini untuk memahami mengapa nilai negatif selama berjam-jam (dan tampaknya menit) diproduksi.JavaScript,
83 byte76 byteBaru saja menyingkirkan fungsi batin dari solusi di bawah ini (Apa yang saya pikirkan?). Mengubah format output juga.
Cobalah online!
TUA: JavaScript,
112 byte111 byte,110 bytePenjelasan:
Di dalam fungsi utama, kita mulai dengan mendefinisikan yang lain yang akan membantu kita menghitung menit waktu pemberian, menambahkan 12 jam ke parameter jam jika parameter ketiga benar:
Selanjutnya, kami
membagi string dengan salah satumencocokkan angka di dalam string yang menghasilkan array dari semua angka dalam string.' '
atau':'
Kemudian kita menghitung perbedaan waktu akhir dan waktu mulai dan mengurangi waktu makan siang menggunakan fungsi yang didefinisikan sebelumnya (mengubah string menjadi angka bila diperlukan).
Akhirnya kami menghasilkan string hasil: jam adalah bagian integer
r/60
dan menit adalahr%60
.Cobalah online!
sumber
map
:a=>a.map(...)
. Ini akan menambah 5 byte jawaban saya. Tetapi saya masih menunggu tanggapan OP (atau siapa pun) terhadap komentar saya.Python 2 , 100 byte
Cobalah online!
Program lengkap yang membaca banyak baris dari file teks, seperti yang diarahkan oleh OP. Sebuah fungsi yang hanya mem-parsing satu baris akan menghemat tambahan al 10 byte.
sumber
Java 10,
194191 byteI / O menyakitkan di Jawa. Berakhir secara abnormal ketika tidak ada baris input berikutnya untuk dibaca. Cobalah online di sini .
Tidak Disatukan:
sumber
Merah , 35 byte
Cobalah online!
Catatan: Output dalam format
hh:mm:ss
sumber
R , 97 byte
Cobalah online!
Untuk setiap baris dikembalikan
"hours minutes"
sumber
data.frame
untuk menyimpan beberapa byte - tidak berfungsi sejauh ini . Tapi perubahan sederhana ini tidak :)