Berapa banyak dari Anda yang masih menggunakan buku jari Anda sendiri untuk menentukan apakah satu bulan memiliki 31 hari penuh atau kurang?
Tugas Anda adalah menulis sebuah program untuk menghitung berapa bulan, dalam rentang satu bulan, memiliki 31 hari penuh dan berapa banyak yang memiliki kurang dari 31 hari dengan "menghitung buku-buku jari".
Courtesy: amsi.org.au
Memasukkan
Sepasang bulan, yang pertama tidak harus datang secara kronologis sebelum yang kedua, diberikan dalam format yang sesuai. Misalnya: 201703 201902
- Maret 2017 hingga Februari 2019. Mohon jelaskan format input yang Anda pilih. Perhatikan bahwa input harus dapat mencakup semua tahun dari 1 hingga 9999. Kisaran bulan yang ditentukan mencakup bulan awal dan akhir.
Keluaran
Dua bilangan bulat: jumlah bulan dalam rentang yang diberikan dengan 31 hari dan jumlah bulan dalam kisaran dengan kurang dari 31 hari.
Contoh: 14 10
- 14 buku jari, 10 alur (artinya dalam rentang bulan itu kita memiliki 14 bulan yang memiliki 31 hari penuh, dan 10 bulan yang memiliki kurang dari 31 hari).
Untuk input di mana bulan kedua dalam rentang datang secara kronologis sebelum yang pertama, misalnya 201612 201611
, Anda harus mengeluarkan sepasang nol.
Contoh input dan output
| Input | Output |
|---------------|-------------|
| 201703 201902 | 14 10 |
| 201701 202008 | 26 18 |
| 000101 999912 | 69993 49995 |
| 201802 201803 | 1 1 |
| 201601 201601 | 1 0 |
| 201612 201611 | 0 0 |
Aturan
- Anda dapat memilih bahasa apa pun yang Anda suka
- Satu input per baris
- Ini adalah kode-golf , jadi kode terpendek dalam byte menang!
- Pemenang akan dipilih pada 9 April
- Celah standar berlaku
- PS: ini pertanyaan pertamaku di PCG, mungkin ada beberapa ketidakkonsistenan. Jangan ragu untuk mengedit dan mengkonfirmasi apa yang tidak jelas untuk Anda.
201612 201611
.Jawaban:
Jelly , 21 byte
Mengambil input seperti
[[y, m], [y, m]]
.Cobalah online!
Bagaimana itu bekerja
sumber
JavaScript (ES6),
70686764 byteMengambil input sebagai dua bilangan bulat dalam
yyyymm
format dalam sintaks currying(a)(b)
. Output array dua bilangan bulat[knuckles, grooves]
.Diformat dan dikomentari
Uji kasus
NB : Test case ketiga tidak termasuk dalam snippet ini, karena itu tidak akan berfungsi kecuali browser Anda telah mengaktifkan Tail Call Optimization.
Tampilkan cuplikan kode
sumber
Python 2 ,
92908680 byteCobalah online!
6 lainnya dengan mengonversi ke lambda, dengan terima kasih kepada @math_junkie untuk idenya. Sekarang menampilkan daftar yang berisi dua angka.
Versi non-lambda sebelumnya (86 byte)
Cobalah online lama!
2 disimpan dengan terima kasih kepada @ovs karena telah membantu saya menyingkirkan
len(k)
. Saya tidak berpikir untuk menggunakanNone
.Input adalah daftar bilangan bulat dalam format
y1,m1,y2,m2
Beberapa kredit karena @KeerthanaPrabhakaran yang didapat
bin(2741)[2:]
sebelum saya lakukan yang menghemat 1 byte lebih keras dari pengkodean string biner.sumber
len(k)
irisan terakhir. Terima kasih.PHP ,
259256249248237221 byteDiungguli oleh aross : /codegolf//a/114512/38505
Masukkan format:
yyyymm,yyyymm
Cobalah online!
Versi yang lebih lama
Cobalah online!
Cobalah online!
Cobalah online!
Cobalah online!
Cobalah online!
sumber
Batch, 93 byte
Menerima dua parameter dalam format ymm (yaitu 101 - 999912). Solusi berbasis loop 129-byte sebelumnya:
sumber
Python 3.5 (
164162154152150148140137 bytes)repl.it
mengambil input dalam bentuk yyyymm yyyymm
mencetak output sebagai number_of_knuckles number_of_grooves
sumber
n=int
dan mungkin jugaexec
tindakan gila-gilaan.2773&1<<r%12-1>0
sebagai gantinyaint('101010110101'[r%12-1])
print([k,t-k])
apa yangprint(k,t-k)
akan menghasilkan hasil yang diinginkan(k,g)
sehingga mengurangi 2 byte!split(' ')
dengansplit()
Python 2 ,
147146142 byteCobalah online!
Memecah kode,
sumber
if-else
klausa dengan pencarian array. Lihat posting ini untuk detailPHP,
1201039796 byteJalankan seperti ini:
Penjelasan
Tweaks
$e
, cukup bandingkan secara langsungsumber
$x++
alih-alih+$x++
juga bekerja.$x
tidak diinisialisasi string akan menjadi2017-12month
, yang merupakan format yang tidak dikenal dan hasil pada tahun 1970+
dalam string.PowerShell , 96 byte
Cobalah online!
Mengambil input sebagai formulir
2017-03
. Menggunakan pustaka tanggal .NET bawaan dan loop dari input$a
ke$b
, setiap iterasi menambah$x++
dan menambahkan$z
jika saat.Month
ini-in
2,4,6,9,11
(yaitu, bulan non-31 hari). Kemudian kami menampilkan total bulan kami dikurangi bulan non-31 hari$x-$z
, dan bulan non-31 hari$z
.Tosses kesalahan pada
0001-01
untuk9999-12
menguji kasus, karena .NET hanya mendukung tahun hingga9999
, sehingga final.AddMonths(1)
menyebabkan overflow. Tetap menampilkan nilai yang benar, karena itu adalah kesalahan yang tidak berhenti; itu hanya menyebabkan loop keluar.Mungkin akan lebih pendek untuk melakukan ini secara hitung, seperti jawaban Python atau JavaScript, tetapi saya ingin menunjukkan pendekatan menggunakan .NET built-in.
sumber
Pesta , 113 byte
Cobalah online!
membutuhkan golf ...
menerima input sebagai
2016-03
2018-10
output:
ungolfed:
sumber
Cepat, 151 byte
input adalah array dua bilangan bulat dalam format sesuai contoh
sumber