pengantar
Beberapa bulan benar - benar simetris , artinya mereka memiliki simetri sentral serta simetri refleksi , seperti February of 2010
:
February 2010
┌──┬──┬──┬──┬──┬──┬──┐
│ │ │ │ │ │ │ │
├──┼──┼──┼──┼──┼──┼──┤
│ │ │ │ │ │ │ │
├──┼──┼──┼──┼──┼──┼──┤
│ │ │ │ │ │ │ │
├──┼──┼──┼──┼──┼──┼──┤
│ │ │ │ │ │ │ │
└──┴──┴──┴──┴──┴──┴──┘
Beberapa bulan hanya memiliki simetri pusat, seperti February of 1996
atau bulan saat ini, yang April of 2018
:
February 1996
┌──┬──┬──┬──┐
│ │ │ │ │
┌──┬──┬──┼──┼──┼──┼──┤
│ │ │ │ │ │ │ │
├──┼──┼──┼──┼──┼──┼──┤
│ │ │ │ │ │ │ │
├──┼──┼──┼──┼──┼──┼──┤
│ │ │ │ │ │ │ │
├──┼──┼──┼──┼──┴──┴──┘
│ │ │ │ │
└──┴──┴──┴──┘
April 2018 ┌──┐
│ │
┌──┬──┬──┬──┬──┬──┼──┤
│ │ │ │ │ │ │ │
├──┼──┼──┼──┼──┼──┼──┤
│ │ │ │ │ │ │ │
├──┼──┼──┼──┼──┼──┼──┤
│ │ │ │ │ │ │ │
├──┼──┼──┼──┼──┼──┼──┤
│ │ │ │ │ │ │ │
├──┼──┴──┴──┴──┴──┴──┘
│ │
└──┘
Dan beberapa asimetris , seperti bulan sebelumnya, yaitu March of 2018
:
March 2018
┌──┬──┬──┬──┐
│ │ │ │ │
┌──┬──┬──┼──┼──┼──┼──┤
│ │ │ │ │ │ │ │
├──┼──┼──┼──┼──┼──┼──┤
│ │ │ │ │ │ │ │
├──┼──┼──┼──┼──┼──┼──┤
│ │ │ │ │ │ │ │
├──┼──┼──┼──┼──┼──┼──┘
│ │ │ │ │ │ │
└──┴──┴──┴──┴──┴──┘
Tugas
Ambil input dalam bentuk tanggal , misalnya:
2018.04
2018.03
2010.02
1996.02
Keluarkan simetri yang sesuai , mis
2018.04
->centrally symmetric
2018.03
->asymmetric
2010.02
->symmetric
1996.02
->centrally symmetric
Aturan
- Ini adalah kode golf, sehingga jumlah byte terkecil menang.
- Celah standar tidak diperbolehkan.
- Asumsikan minggu dimulai dengan hari Senin (terima kasih kepada Angs dan Arnauld untuk sarannya).
- Pertimbangkan hanya tahun antara 1900 dan 2100 ( inklusif ).
- Aturan pemformatan input dan output permisif , artinya Anda dapat menggunakan format apa pun yang setara dengan bahasa pilihan Anda.
- Dasarkan solusi Anda pada kalender Gregorian .
f(x)
untuk setiap orangx
dalam daftar." Bagaimana dengan "mengambil input dalam bentuk tanggal"?Jawaban:
JavaScript (ES6), 55 byte
Disimpan 6 byte berkat @Neil
Mengambil input dalam sintaks currying
(year)(month)
. Pengembalianfalse
untuk asimetris,true
untuk simetris terpusat dan0
untuk sepenuhnya simetris.Cobalah online!
Bagaimana?
Kami mendefinisikan fungsi g () yang mengembalikan hari kerja yyyy / mm / 01 , sebagai bilangan bulat antara 0 = Senin dan 6 = Minggu.
Karena getDay () mengembalikan secara asli 0 = Minggu hingga 6 = Sabtu, kami menggeser hasilnya ke kisaran yang diharapkan dengan meminta kueri untuk hari ke-7.
Lalu kami mendefinisikan:
Karena konstruktor Tanggal memperkirakan bulan yang diindeks 0 dan karena g () menurunkan m setelah meneruskannya ke Tanggal , kami sebenarnya menghitung hari kerja pada hari pertama bulan berikutnya dan kemudian menambahkan bahwa hari ini.
Sepenuhnya bulan simetris
Bulan yang sepenuhnya simetris dimulai dengan hari Senin dan diikuti oleh bulan yang juga dimulai dengan hari Senin. Ini hanya mungkin untuk Februari tahun non-kabisat.
Ini mengarah ke n = 0 .
Bulan simetris terpusat
Bulan simetris terpusat adalah bulan di mana jumlah hari kerja pada hari pertama mereka dan bulan berikutnya adalah 7 .
Karenanya tes kedua: n == 7 .
Tidak ada bawaan, 93 byte
Menggunakan kongruensi Zeller . Format I / O yang sama dengan versi lainnya.
Cobalah online!
sumber
true
,false
danfilenotfound
bukannya0
...g=m=>new Date(y,m,7).getDay()
menghemat 6 byte.T-SQL , 213 byte (aturan I / O yang ketat)
Kueri di atas mempertimbangkan aturan pemformatan input / output yang ketat.
Input diambil dari kolom
s
tabel bernamat
:Tidak Disatukan:
SQLFiddle 1
T-SQL , 128 byte (aturan I / O permisif)
Jika format input dan output dapat diubah, saya akan memilih untuk memasukkan hari pertama bulan itu, dalam
datetime
kolom bernamad
:Outputnya adalah 1 untuk asimetrik, 0 untuk simetri, NULL untuk simetri terpusat.
Jika kami dapat menjalankannya di server (atau dengan login) yang dikonfigurasi untuk bahasa BRITISH, kami dapat menghapus
SET DATEFIRST 1
penyimpanan 15 byte lebih banyak.SQLFiddle 2
sumber
CONVERT(DATETIME,s+'.01')
bukanREPLACE
. Anda juga dapat meletakkan ruang diFROM (SELECT
DATEFORMAT
pengaturan. Misalnya, jika kita menggunakanSET LANGUAGE BRITISH
, makaCONVERT(DATETIME,'2018.02.01')
akan menjadi 2 Januari, bukan 1 Februari.Haskell, 170 byte
Mengembalikan 2 untuk simetris terpusat, 1 untuk simetris dan 0 untuk asimetris
sumber
Python 2,
118104 byteTerima kasih kepada Jonathan Allan dan Dead Possum untuk perbaikannya!
Python 3,
122105 byteMemasukkan
Keluaran
sumber
Y
atauM
), jadi ini saat ini potongan dan tidak valid. Namun, jika Anda mengubah variabel ke panggilaninput()
, ini akan baik-baik saja._[0]+_[-1]
->sum(..)
Merah ,
199, 168161 byteCobalah online!
0 - asimetris
1 - simetris
2 - simetris terpusat
Lebih mudah dibaca:
sumber
Mathematica, 137 byte
Fungsi murni. Mengambil tahun dan bulan sebagai input dan pengembalian
-1
untuk bulan asimetris,0
untuk bulan simetris terpusat, dan1
untuk bulan simetris sepenuhnya. Tidak yakin mengapa bahasa ini tidak dapat mengonversi dari hari kerja ke angka secara default ...sumber
Utilitas Bash + GNU, 70
Input diformat sebagai
YYYY/MM
.Outputnya numerik, sebagai berikut:
Saya menganggap format output ini dapat diterima untuk pertanyaan ini.
Cobalah online!
sumber
C, 111 byte
Meminta
f(year, month)
, 0 untuk sepenuhnya simetris, 1 untuk asimetris, 2 untuk simetris terpusat.sumber
return
dengany=
(parameter pertama) dan keluar dari fungsinya.Perl 6 , 74 byte
Blok kosong, secara implisit fungsi dari 1 argumen, string seperti
"2012-02"
. Pengembalian:Ketika polanya simetris, karena. Hari-minggu meningkat sebesar 1,. Hari-dalam-bulan akan perlu bergerak sebesar 2 agar tetap cocok (bulan akan mulai sehari kemudian tetapi harus berakhir sehari sebelumnya) ), jadi
2 * .day-of-week + .days-in-month
beri kami ukuran celah itu. Modulo 7 seharusnya 1 untuk mendapatkan simetri, tetapi pertama-tama kita dapat dengan murah memeriksa Februari non-lompatan dengan memeriksa total sebelum modulo (Senin dan 28 hari per bulan adalah kombinasi minimum yang mungkin).Saya terkejut bahwa ini membutuhkan banyak byte, tetapi sepenuhnya 36 byte diperlukan untuk hanya membuat tanggal dan mendapatkan hari dalam seminggu dan hari dalam bulan itu.
sumber