Bos saya perlu tahu berapa lama untuk menambahkan dua bilangan bulat. Tapi, saya tidak suka bekerja di akhir pekan, dan saya pikir wajar kalau kode saya juga tidak. Masalahnya adalah, bos adalah orang yang menuntut dan berpikir saya harus memasukkan dari waktu ke waktu untuk memastikan waktu yang dibutuhkan tetap sama, dan saya tahu dia akan memeriksa apakah kodenya berfungsi dengan baik.
Bisakah Anda menulis kepada saya program singkat yang:
- Menerima dua bilangan bulat, dan mengembalikan hasil penambahan yang benar dan berapa lama waktu yang diperlukan untuk melakukan penambahan - waktu ini harus masuk akal dan didasarkan pada runtime kode. Namun, jika Anda perlu menyelinap beberapa operasi antara kode waktunya yang membuatnya berjalan sedikit lebih lama dari seharusnya ini diizinkan. Namun Anda tidak bisa hanya menampilkan waktu palsu.
- Tidak bekerja pada akhir pekan di kode waktu setempat (tidak bisa hanya mengembalikan hasil yang salah, kode perlu rusak, kesalahan, atau gagal dieksekusi)
- Tidak segera jelas mengapa itu tidak bekerja pada akhir pekan
Saya tahu kriteria pertama agak aneh, tapi saya ingin memastikan orang bisa mengimpor perpustakaan tanggal / waktu jika diperlukan, tanpa menimbulkan kecurigaan untuk kriteria 3. Namun, saya yakin ada beberapa orang pintar, jadi -10 karakter untuk siapa pun yang dapat melakukan ini, tanpa menggunakan fungsi kalender dari pustaka tanggal standar
Mengenai 'perpustakaan tanggal / waktu standar'
Contoh pustaka datetime standar termasuk python datetime
, date
pustaka objek javascript , java.util.Date
dan sejenisnya. Fungsi untuk menghitung timedeltas untuk dieksekusi seperti timeit
modul ular sanca tidak akan melanggar criteia ini karena bos mengharapkan kode untuk diatur waktunya. Dalam beberapa kasus, pustaka-pustaka ini perlu diimpor untuk mengakses fungsi waktu apa pun , sehingga diizinkan untuk memanggil fungsi yang mengembalikan waktu sejak dimulainya zaman saat ini sebagai bilangan bulat, tetapi fungsi kalender yang mengembalikan objek waktu terstruktur yang dapat memberikan objek terpisah jam, hari, dll ... tidak diperbolehkan.
sunting: Mengenai pertanyaan Dan04, kode harus memenuhi 4 kriteria ini tentang kapan akan berfungsi atau tidak. Anda juga harus menjelaskan bagaimana kode Anda memeriksa waktu, karena slack pada Senin pagi / Jumat malam harus memberikan beberapa peluang untuk beberapa cara kreatif untuk mempersingkat kode.
- tidak boleh bekerja dari 00:00:00 Sabtu pagi hingga 23:59:59 Minggu malam.
- harus selalu bekerja mulai pukul 06:00:00 Senin pagi hingga 19:59:59 Jumat malam
- dapat bekerja atau tidak bekerja dari 00:00:00 Senin pagi hingga 5:59:59 Senin pagi
- bisa bekerja atau tidak bekerja mulai pukul 20:00:00 Jumat malam hingga 23:59:59 Jumat malam pagi
sunting2: Dengan segera jelas itu harus memenuhi 3 kriteria berikut:
- Tidak boleh memanggil fungsi yang disebut
DayOfWeek
(atau serupa), tanpa menggunakannya untuk menghitung waktu fungsi. - Tidak boleh menggunakan Sabtu atau Minggu atau singkatannya dalam bahasa Inggris.
- Tidak boleh menggunakan Sat atau Sun (atau dalam kasus huruf alternatif mereka) tanpa variabel bernama identik tidak digunakan untuk menentukan hari dalam seminggu atau ketika menentukan apakah kode harus dijalankan.
sumber
Jawaban:
Rebmu : 17 (27 - 10, dikaburkan) atau 30 tidak dikaburkan
Rebmu dirancang khusus untuk bermain golf kode sambil dibaca (bagi mereka yang mendapatkan "trik"), sehingga aturan kebingungan bertentangan dengan prinsipnya. Tapi:
Ini berfungsi sepanjang hari pada hari kerja:
... tetapi pada akhir pekan itu tidak melakukan apa-apa:
Penjelasan:
Menggunakan huruf kapital yang unmushing dan memperhatikan adalah kata-kata yang terpisah, dan kurangnya aliran modal terkemuka berarti kita tidak membuat kata-kata, kita mendapatkan Rebol disingkat:
Tanpa menyingkatnya, yang Anda dapatkan adalah:
Nomor tanggal dalam Rebol diberi nomor 1 untuk hari Senin hingga 7 untuk hari Minggu. Cara yang lebih melek huruf untuk mendapatkan satu hari dalam seminggu dari hari kerja adalah dengan mengatakan
d/weekday
tetapi Anda juga bisa mendapatkannyad/7
. Solusi pilihan saya tanpa mengubah hal-hal hanya untuk beradaptasi dengan masalah ini akan lebih seperti:Tetapi jika ingin memperbarui kosa kata untuk aplikasi umum untuk gaya masalah ini, yang mungkin muncul cukup sering untuk tidak ingin jatuh ke kata-kata Rebol setiap kali, saya mungkin akan membuat MON melalui SUN menjadi 1 - 7) dan menyingkat SEKARANG MINGGU, pada saat itu akan terlihat lebih seperti ...
Catatan
Seperti biasa, Anda dapat membuat "program" itu sendiri sedikit lebih pendek jika Anda mengizinkan input untuk diteruskan ke Rebmu sebagai argumen dan hanya menerima hasil evaluasi (di sini, baik nilai type time atau NONE) tanpa mencetaknya:
Juga waktu delta, tanggal, pembuatan gambar, dan sejumlah hal gila sudah termasuk dalam setengah megabita Rebol , eksekusi tanpa instalasi .
sumber
Skrip golf,
5156 - 10 = 46http://golfscript.apphb.com/?c=OycxIDUnCiciI3tUaW1lLm5vdy50b19pfSInLn5%2BQH4rQH5%2BMiQtQDYwIDU%2FOS8vKCg3JSgsKT1dYA%3D%3D
Memenuhi ketiga kondisi, dan tidak menggunakan salah satu fungsi perpustakaan standar kecuali apa yang diperlukan untuk mendapatkan waktu saat ini. Jadi, saya yakin saya memenuhi syarat untuk bonus.
Mengenai kriteria obsfuscation - meskipun memenuhi surat hukum, itu tidak tampak sangat polos. Sangat jelas ada sesuatu yang terjadi dengan konstanta ajaib 60 dan 7. Sayangnya, segala jenis kebingungan akan menaikkan alis.
Input: dua bilangan bulat dipisahkan oleh spasi putih
Keluaran: suatu array skrip golf literal - dua bilangan bulat (jumlah, waktu dalam ms) dipisahkan oleh spasi dan dikelilingi oleh tanda kurung siku.
contoh:
'"#{Time.now.to_i}"'
adalah string skrip golf yang berisi string skrip golf berisi blok Ruby yang dapat dieksekusi untuk mengambil kembali waktu saat ini. Tumpukan sekarang memegang input di bagian bawah dan resep waktu di bagian atas..~~
mengkloning resep waktu dan mengevaluasinya dua kali. Evaluasi pertama mengubah string string menjadi string numerik dengan mengeksekusi ruby section. Evaluasi kedua mengubahnya menjadi angka. Tumpukan sekarang menampung (dari bawah) input, resep waktu dan waktu mulai@~+
mengeluarkan input ke atas, mengevaluasinya, dan melakukan penambahan. Tumpukan sekarang memegang resep waktu, waktu mulai, dan jumlahnya.@);' "'+~~
menarik keluar resep waktu, mengubahnya'"'
menjadi' "'
(lihat pembahasan di bawah) dan mengevaluasi dua kali. Tumpukan sekarang memegang waktu mulai, jumlah dan waktu akhir.2$-
mengkloning waktu mulai ke atas dan mengurangi dari waktu akhir. Tumpukan sekarang memegang waktu mulai, jumlah dan perbedaan waktu.@86400/
menarik waktu mulai ke atas dan mengubahnya dari detik ke hari.((7%(
mengurangi hari-hari sejak dimulainya zaman dua kali (itu Kamis, kami ingin Sabtu), mengambil modulo 7 dan mengurangi sekali lagi. Peta akhir pekan ke -1 dan 0, peta hari kerja ke 1..5.,)=
membuat tabel bilangan bulat ukuran itu. Ini bagus - array ukuran negatif kosong. Kemudian dibutuhkan elemen terakhirnya. Sayangnya, beberapa penerjemah belum crash. Sebagai gantinya, mereka mengeluarkan nol - yang aman untuk dibuang. Jadi, alih-alih membuang, kami menggunakannya sebagai indeks untuk array itu. Mengambil indeks ke-n akhirnya menabrak penerjemah, tetapi mengambil elemen out-of-bound baik-baik saja - tidak ada yang didorong ke stack. Dalam hal ini, akses array selalu di luar batas, jadi kami tidak perlu membuang.]`
meraih tumpukan dan memformatnya sebagai array skrip golf.sumber
JavaScript
Ini menggunakan utilitas ini:
Dan inilah fungsi sebenarnya:
Saya harap itu tidak segera jelas ...
sumber