Sebuah kantor (sebut saja "Kantor") akan mengurangi waktu terbuang pada tahun 2019 dengan menggabungkan pesta ulang tahun kantor. Dua orang yang berulang tahun antara hari Senin dan Jumat (termasuk) dari minggu yang sama akan dirayakan dengan Pesta Ulang Tahun Bersama beberapa waktu dalam minggu itu. Orang-orang yang ulang tahunnya jatuh pada hari Sabtu atau Minggu tidak mendapat pesta sama sekali.
Beberapa orang tidak suka berbagi pesta ulang tahun dengan orang-orang yang tidak membagikan ulang tahun mereka yang sebenarnya. Mereka akan sangat marah memiliki Pesta Ulang Tahun Bersama .
Kami akan mensimulasikan kantor dan menemukan minggu pertama di mana seseorang menjadi sangat marah tentang Pesta Ulang Tahun Bersama mereka .
Tantangan
Tulis program atau fungsi yang menghasilkan angka minggu ISO pertama untuk 2019 di mana seseorang di kantor yang disimulasikan menjadi sangat marah tentang Pesta Ulang Tahun Bersama mereka , tunduk pada aturan dasar berikut:
- masukan bilangan bulat N > 1, yang merupakan jumlah pekerja di kantor.
- yang N ulang tahun sendiri terdistribusi secara merata secara acak dari 1 Januari - 31 Desember (mengabaikan Februari 29).
- tetapi minggu kerja untuk tujuan menentukan Pesta Ulang Tahun Bersama adalah Tanggal Pekan ISO 2019, yaitu antara 2019-W01-1 (2018-12-31) dan 2019-W52-7 (2019-12-29). Minggu ISO baru dimulai setiap hari Senin. (Saya pikir ini semua yang perlu Anda ketahui tentang ISO minggu untuk tantangan ini).
- untuk orang- orang N di kantor, masing-masing memiliki peluang 1/3 untuk memiliki tipe kepribadian Pesta Ulang Tahun yang Sangat Marah , jadi Anda harus mensimulasikannya juga.
- tetapi mereka tidak akan marah jika pesta itu dibagikan kepada orang-orang yang memiliki ulang tahun yang sama .
- mengeluarkan nomor minggu ISO (format yang tepat untuk ini fleksibel selama jumlah minggu jelas) untuk kemunculan pertama orang yang Sangat Marah . Jika tidak ada orang yang marah, Anda dapat menampilkan apa pun yang tidak bingung dengan minggu ISO atau program dapat kesalahan keluar dll.
Beberapa asumsi penyederhanaan:
- seperti yang saya sebutkan, abaikan masalah 29 Februari sepenuhnya (komplikasi yang tidak dibutuhkan)
- abaikan hari libur umum (ini adalah komunitas internasional sehingga liburan kami akan berbeda) dan anggap saja kantor buka pada setiap hari kerja.
Aturan
Ini adalah kode-golf. Jawaban terpendek dalam byte untuk setiap bahasa menang. Celah default dilarang.
Penjelasan kode diterima.
Contoh yang berhasil
Contoh 1 dibuat dengan input N = 7. Kolom pertama dan kedua acak seperti yang dijelaskan dalam aturan (tapi tentu saja tidak acak di sini).
Angry Type
Person? Birthday ISO Week Comment
================================================================================
N 2018-12-31 W01 In the 2019 ISO week date year
Y 2018-12-31 W01 Same birthday, so no anger happens
N 2019-02-05 W06
Y 2019-03-15 W11 No anger happens because other W11 b-day is a Saturday
N 2019-03-16 W11
N 2019-09-08 W36 My birthday!
Y 2019-12-30 - Not in the 2019 ISO week date year
Jadi tidak ada kemarahan yang terjadi. Program atau fungsi dapat membuat kesalahan atau mengeluarkan sesuatu yang tidak dikacaukan dengan angka minggu ISO.
Contoh 2 dengan N tidak ditentukan.
Angry Type
Person? Birthday ISO Week Comment
================================================================================
N 2019-01-19 W03
Y 2019-02-04 W06
N 2019-02-05 W06 No anger because not an angry person
... ... ... (No angry people until...)
Y 2019-03-12 W11 Very Angry Person!
N 2019-03-14 W11
... ... ... ...
Outputnya akan menjadi W11
atau sesuatu yang setara.
Jawaban:
Python 2 ,
172202 byteCobalah online!
Ups! Kehilangan persyaratan; biaya 30 byte.
Diberikan oleh OP bahwa ulang tahun Anda bukan tanggal 29 Februari.
Jika ulang tahun Anda adalah 30 Desember, maka tidak akan termasuk dalam minggu ISO 2019, jadi Anda tidak dapat menjadi minggu ISO Sangat Marah pada 2019.
Yang membuat 364 ulang tahun lainnya menganggap Anda sangat marah. 104 dari ini jatuh pada akhir pekan ketika kami telah menetapkan bahwa Anda tidak akan menjadi sangat marah tentang hal itu. Jadi kami hanya peduli dengan Anda 260/365 waktu; yaitu kapan
R(0,364)>104
(randint
rentangnya inklusif). Mengingat kendala itu, tidak dapat disangkal bahwa ulang tahun hari kerja Anda termasuk dalam salah satu dari 52 minggu ISO tahun 2019, dan setiap hari kerja dalam minggu itu; dan, secara mandiri, bahwa Anda adalah 1 dari 3 yang cenderung menjadi orang yang sangat marah.D adalah seperangkat
(weeknum,weekday)
sehingga jika seseorang yang berpotensi Marah membagikan ulang tahun yang sebenarnya, maka tidak perlu menjadi Amgry kecuali ada orang lain yang berulang tahun pada minggu itu.0 dikembalikan jika tidak ada orang yang Sangat Marah yang memanifestasikan selama ISO 2019 minggu apa pun; jika tidak, nomor minggu ISO dari krisis paling awal dikembalikan.
sumber
Jelly ,
36 3233 byte+1 byte untuk memperbaiki kasus tepi 30-Des yang saya tidak perhatikan (seperti yang ditunjukkan oleh Chas Brown dalam komentar di bawah OP)
-4 Terima kasih kepada Erik the Outgolfer (pembantu inline dan penggunaan produk luar)
Cobalah online!
Atau lihat versi ini yang mencetak minggu-minggu di mana ulang tahun setiap orang berada (0 untuk akhir pekan) dikelompokkan, lalu mencetak daftar daftar urutan yang sama dari apakah orang-orang itu dari tipe Sangat Marah, dan akhirnya mencetak hasilnya.
sumber
Java 8, 198 byte
Output berbasis nol (0-51); nilai 52 menunjukkan tidak ada orang yang sangat marah . Cobalah online di sini .
Tidak Disatukan:
sumber
91>26
alih-alih364>104