Rabu utama
Tugas Anda adalah menghitung jumlah hari Rabu yang jatuh pada hari pertama bulan itu di tahun tertentu. Misalnya, 7-13-16
adalah hari Rabu utama. Untuk konsistensi gunakan kalender Gregorian untuk semua tanggal.
Memasukkan
Input untuk program / fungsi Anda akan satu tahun (misalnya 2016
) dan fleksibel. Tahun ini akan menjadi bilangan bulat antara 1912 dan 2233 inklusif.
Keluaran
Outputnya juga fleksibel dan harus berupa jumlah hari Rabu utama (mis 18
.).
Mencetak gol
Ini adalah kode-golf sehingga kode terpendek dalam byte menang!
Uji Kasus
input -> output
--------------------
1912 -> 19
1914 -> 16
1984 -> 17
1996 -> 19
2063 -> 19
2150 -> 16
2199 - > 18
2233 -> 18
Python 2,
95936867 byteTerima kasih kepada @Josay untuk bermain golf 1 byte!
Uji di Ideone .
sumber
0x10ea2c8dbb06c5619
bukan19501370182350951961
.big_constant//5**long_expression
tetapi bagaimana Anda bisa datang dengan ekspresi konstan dan itu? Gila: DBrain-Flak ,
6588,2310,2308, 2290 byteHal pertama yang pertama, saya tidak menulis hampir 100% dari program ini, yang mungkin dibuktikan dengan besarnya ukuran program. Sebagian besar kode ini ditulis oleh algoritma golf Brain-Flak saya sendiri . Seiring dengan skrip python tambahan saya menulis untuk mengarahkannya ke arah yang benar.
Cobalah online!
Walaupun program ini cukup panjang untuk kode golf, sebenarnya cukup untuk Brain-Flak. Saat ini rekor dunia untuk divisi integer adalah lebih dari 1000 byte.
Penjelasan
Algoritma ini cukup sederhana. Karena ada sejumlah tahun yang tersedia (321), itu hanya mendorong jawaban dalam urutan terbalik di bawah input dan menggunakan algoritma pencarian untuk menemukan jawaban yang benar. Walaupun hardcoding semua 321 kemungkinan mungkin tampak agak tidak efisien dengan tugas serumit yang satu ini dan bahasa yang esoteris seperti brain-flak, mungkin ini adalah solusi terbaik. (Saya berencana untuk mencari tahu dalam minggu mendatang).
Karena sebagian besar dari 321 angka rata-rata sekitar 18 dan mereka sedikit berbeda dari tahun ke tahun alih-alih mendorong semua angka secara individu, saya mendorong tahun pertama (2233) secara normal dan kemudian hanya menduplikasi dan mengubah nilainya sedikit untuk setiap tahun setelah. Dengan cara ini alih-alih membayar untuk mendorong ~ 18 untuk semua 321 tahun, saya hanya membayar untuk mendorong ~ 2 untuk setiap tahun.
Setelah semua jawaban didorong, dikurangi 1912 dari input
({}[(((((((((()()()()())){}{}){}){}){}){}[()]){}){}){}])
(Ini mungkin suboptimal, saya menulis ulang pengoptimal untuk melewati nilai-nilai tertentu yang saya yakin tidak akan optimal karena angka hardcoding adalah proses super-eksponensial dan menjalankannya sampai selesai mungkin memiliki diambil beberapa hari).Kemudian kurangi satu dari elemen pertama dan muncul elemen kedua hingga hasilnya mencapai nol ,
{({}[()]<{}>)}
.Ini muncul nol,
{}
dan semua elemen di bawah elemen atas({}<{{}}>)
.sumber
n
danm
mana yang panjangk
danl
, saya anggapn+m
panjangnyak+l
? Bagaimana dengann*m
?n*m
akank+4m-4
ataul+4n-4
. Ini karena perkaliannya adalah hardcode. Kami pertaman
m-1
kali mendorong kali. Untuk melakukan ini, kita perluk
simbol untuk mengekspresikann
dan2m-2
simbol untuk mengekspresikan dorongan (masing-masing dorongan adalah 2 simbol). Lalu kami munculm-1
kali, biaya tambahan kami2m-2
(muncul biaya 2 simbol juga). Ini totalk+4m-4
. kita juga bisa melipatgandakanm*n
(properti komutatif) untuk mendapatkanl+4n-4
. Hasilnya akan menjadi lebih pendek dari keduanya.+1
biaya 2,*2
biaya 4,*3
biaya 8,*4
biaya 12, yang lebih mahal daripada*2*2
, jadi tidak sepadan (dari angka di bawah 1000 saya hanya menemukan 10 yang tidak menggunakan*2
: 1, 2, 3 , 4, 5, 9, 15, 27, 45, 135). Untuk tahun 1912 yang terbaik yang bisa saya lakukan adalah((((((1+1+1)*2+1)*2*2+1)*2+1)*2+1)*2+1)*2*2*2
dengan panjang 52.Bash + utilitas umum, 39
Mengambil tahun input sebagai parameter baris perintah. Biasanya menampilkan pesan seperti ini ke STDERR - Saya pikir ini sah sesuai meta-jawaban ini :
Jika Anda ingin secara eksplisit menekan output STDERR maka Anda bisa melakukan ini untuk skor 43 :
sumber
gd_GB.utf8
mana semua nama hari disingkatDi
.Oktaf, 86 byte
Ini tidak cepat, dengan cara apa pun. Tapi itu bukan tujuan dari kode golf, bukan?
Oktaf dapat melacak tanggal dengan "nomor tanggal" - jumlah hari yang telah berlalu di mana 1 Jan 0 adalah hari 1. Dengan ukuran ini, 3 Jan 1912 (hari Rabu pertama di set kami) adalah hari 698.346. Mulai di sana, dan ulangi setiap 7 hari (semua hari Rabu) hingga akhir 2233, dan tambahkan 1 jika tahun adalah tahun target DAN hari-bulan adalah yang utama.
sumber
Python 2.7,
166,165, 150 bytePasti ada ruang untuk perbaikan di sini. Saya agak baru bermain golf dengan python. Ini menggunakan
datetime
modul. Itu loop sepanjang hari dalam setahun menambahkan satu ke akumulator jika sesuai dengan kriteria. Itu kemudian mencetak hasilnya. Sebagian besar pengangkatan berat ada di modul sehingga kode bisa sangat ramping.Satu byte disimpan berkat Morgan Thrapp dan 15 byte yang disimpan oleh Pietu1998 .
sumber
n%x==0
ken%x<1
.-1
tidak perlu karenarange
indeks akhir eksklusif. Selain itu, Anda dapat mengonversikannyafilter
menjadi generator.[0for x in range(2,n)if n%x<1]
any(...)
atauall(...)
bukannyanot filter(...)
.all
Anda dapat menyimpan sejumlah besar.c+=n>1<2==d.weekday()>0<all(n%x for x in range(2,n))
J, 44 byte
Saya baru tahu bahwa J memiliki bawaan untuk manipulasi tanggal.
Pemakaian
Perintah tambahan digunakan untuk memformat beberapa input / output.
Penjelasan
sumber
PowerShell v3 +,
9995 bytePendekatan kekerasan -
Mengambil input
$y
, loop dari1
ke12
, menyimpan bulan sementara ke dalam$m
, kemudian loop setiap prime dari2
ke31
. Untuk masing-masing dari itu, kami membuat aGet-Date
dari hari itu, lalu memilih hanya mereka yangDayOfWeek
-eq
ual ke3
(yaitu, Rabu). Meringkas bahwa semua dalam parens untuk merumuskan array, dan mengambilnya.Count
.Atau, pendekatan matematika -
PowerShell v3 +, 105 byte
Akhirnya menjadi hanya rambut lebih panjang dari pendekatan brute force, tapi saya memasukkannya di sini karena mungkin bermanfaat bagi orang lain.
Sekali lagi menerima input
$y
sebagai tahun. Kali ini kami melakukan operasi matematika ketat berdasarkan pada hari pertama tahun ini. Kami pertama menghitung hari apa dalam minggu itu, dan menyimpannya$a
untuk digunakan nanti. Itu indeks ke dalam array pertama, yang memberi kita nomor yang biasanya benar. Kita harus menambahkan bahwa indeks kedua berdasarkan apakah itu tahun kabisat potensial, apakah itu hari Minggu, Selasa, Rabu, atau Kamis, dan berdasarkan tahun berapa itu.Ini berdasarkan pengamatan berikut. Kolom pertama adalah hari apa pada minggu 1 Januari, yang kedua adalah output biasa. Kecuali jika tahun adalah salah satu angka tengah, maka itu adalah angka di parens. Kolom terakhir menjelaskan cara kerja pengindeksan% 5.
Catatan: Kedua asumsi ini
en-us
adalah pengaturan PowerShell saat ini untuk informasi budaya / tanggal. Pemformatan danDayOfWeek
nomor tanggal mungkin perlu disesuaikan untuk varian budaya lainnya.sumber
Ruby, 83 + 15 (
-rdate -rprime
bendera) = 98 byteCobalah online! (Modul yang diimpor diikutsertakan karena idk jika saya dapat menggunakan flag di repl.it)
sumber
JavaScript ES6,
187182181179 byte179 Ditukar dalam for-loop untuk while-loop
181 Memadatkan terner
182 Menggabungkan dua loop
187
sumber
Batch, 248 byte
Penjelasan:
d
adalah hari dalam seminggu, dengan0
untuk hari Senin, yang merupakan tanggal 1 Januari 1912.l
adalah bendera untuk apakah tahun tersebut merupakan tahun kabisat,1
untuk tahun 1912. Kami kemudian beralih dari tahun 1913 ke tahun input, memperbarui hari dari minggu dan menghitung ulang bendera tahun kabisat saat kita pergi. Akhirnya kami menggunakan bendera tahun kabisat dan hari dalam seminggu untuk mengindeks ke dalam apa yang secara efektif merupakan pernyataan peralihan besar untuk menentukann
, jumlah hari Rabu utama. Menetapkann
ke 20 dan menurunkannya dengan jatuh meskipun lebih murah daripada menggunakan logika kontrol aliran, tetapi hasilnya adalah jika tanggal 1 Januari tahun non-kabisat adalah Kamis atau Minggu maka ada 16 Rabu utama dan seterusnya untuk kasus lainnya .sumber
JavaScript ES6
206203199197195183182179Bukan yang terpendek, tapi terbaik yang bisa saya lakukan untuk saat ini ... Saran bermain golf disambut ...
Perubahan:
3>=x?3-x:10-x
ke6-(x+10)%7
, hemat: 3 Perubahan ke lokasi deklarasi;x=w.getDay();z=D(w,6-(x+10)%7)
menjadiz=D(w,6-(w.getDay()+10)%7)
, hemat: 4Z=0
darifor
loop ke Deklarasi tanggal dan mendorongz=D(w,6-(x+10)%7)
kefor
loop untuk merapikan, menghemat: 2w=new Date(a,Z=0,1)
deklarasi menjadifor
loop, menggabungkan denganw
deklarasi yang ada , menyimpan: 2+!!
ke~~
untuk mengurangi dan masih mengonversip(d=1)
dariNaN
ke0
, memungkinkan fungsi Uji Perdana tetap berfungsi, menghemat: 1W
, redefinedfor
loop - mundur dari 31 Desember, menulisDate
objek sebagai variabel terpisah, kemudian menulis ulangfor
loop menjadieval
panggilan; hemat 3.@ PandaCoder, saya menyusul Anda, sobat!
sumber
R,
149147 byteUji di Ideone .
sumber
Groovy, 126
Groovy tidak memiliki validasi bilangan prima, harus membangunnya juga.
sumber