Cetak tanggal semua hari Minggu pada tahun 2017 dalam format berikut: dd.mm.yyyy
.
Output yang Diharapkan:
01.01.2017
08.01.2017
15.01.2017
22.01.2017
29.01.2017
05.02.2017
12.02.2017
19.02.2017
26.02.2017
05.03.2017
12.03.2017
19.03.2017
26.03.2017
02.04.2017
09.04.2017
16.04.2017
23.04.2017
30.04.2017
07.05.2017
14.05.2017
21.05.2017
28.05.2017
04.06.2017
11.06.2017
18.06.2017
25.06.2017
02.07.2017
09.07.2017
16.07.2017
23.07.2017
30.07.2017
06.08.2017
13.08.2017
20.08.2017
27.08.2017
03.09.2017
10.09.2017
17.09.2017
24.09.2017
01.10.2017
08.10.2017
15.10.2017
22.10.2017
29.10.2017
05.11.2017
12.11.2017
19.11.2017
26.11.2017
03.12.2017
10.12.2017
17.12.2017
24.12.2017
31.12.2017
code-golf
kolmogorov-complexity
date
ShinMigami13
sumber
sumber
Jawaban:
Python 2 , 81 byte
Cobalah online!
Tidak ada perpustakaan tanggal, yang menghitung tanggal secara langsung. Trik utamanya adalah memperlakukan nilai
dd.mm
desimal. Misalnya,16.04.2017
(16 April) sesuai dengan nomor tersebut16.04
. Jumlah ini dicetak diformat sebagaixx.xx
dengan.2017
ditambahkan.Hari dan bulan dihitung secara hitung. Setiap minggu menambahkan 7 hari dilakukan sebagai
x+=7
. Mengambil pegangan peganganx
modulo30.99
dengan mengurangi30.99
kapan nomor hari terlalu besar. Ini digabungkan-31
untuk mengatur ulang hari dengan+0.01
menambah bulan.Rollover mengasumsikan setiap bulan memiliki 31 hari. Bulan dengan hari yang lebih sedikit disesuaikan untuk dengan mendorong
x
ke atas pada angka minggu tertentu dengan+[8,8,8,17,25,38,47].count(x/7)
. Daftar ini adalah angka minggu yang mengakhiri bulan-bulan pendek ini, dengan8
tiga kali lipat karena Februari 3 hari lebih pendek dari 31.Daftar ini bisa dikompresi menjadi string dengan mengambil nilai ASCII plus 40. Pergeseran
+40
bisa dihindari dengan menggunakan karakter yang tidak patut, dan dapat diakses lebih pendek sebagai objek byte di Python 3.sumber
'888z!}+'.count(chr(x%146))
menghemat satu byte.PHP, 48 byte
PHP, 46 byte (untuk offset UTC non-negatif)
sumber
gmdate
untuk keamanan zona waktu? Gagal di onlinephpfunctions.com. Kerja hebat dalam semua aspek lainnya!Python 2 ,
9079 byte-5 byte dengan bantuan xnor (hindari menghitung minggu sendiri)
-1 byte terima kasih kepada xnor (tambahkan kembali e untuk 605000 sebagai 605e3)
Cobalah online!
0
detik sejak zaman adalah 00:00:00 pada tanggal 1 Januari 1970, yang, seperti 2017 bukan tahun kabisat.605000
detik adalah 1 minggu, 3 menit, 20 detik. Menambahkan 52 dari "minggu" ini tidak membawa kita melampaui tengah malam.sumber
605e3
. Saya punya beberapa ide :)Bash + coreutils, 44 byte
dapat menghemat 2 byte
-u
jika GMT diasumsikan-f
paramterdate
yang menyimpan 10 byte;@0
adalah 1970-1-1605000
adalah satu minggu (604800
) ditambah 200 detik@32000000
hanya sedikit lebih dari setahunsumber
seq -f@%1.f 14833e5 605e3 1515e6|date -uf- +%d.%m.%Y
menghemat 10 byte. Anda mungkin harus mengklaim ini sebagai Bash + coreutils .PowerShell,
5147Cukup mudah. 2017-01-01 adalah hari Minggu, begitu juga setiap tujuh hari berikutnya. Kita dapat menyimpan dua byte jika kita hanya membutuhkan skrip untuk berfungsi dalam hidupku:
sumber
(date 2017-1-1)+7.*$_
. Lihat jawaban iniint
kutu dan string selama berhari-hari sejauh ini. Bagus untuk mengetahui.Excel VBA
1069179 bytedisimpan 15 byte berkat @Radhato
Dengan asumsi 1/1/2017 adalah hari Minggu akan menghemat 12 byte lebih banyak.
Terima kasih @ Brushbrush 66 byte
Sunting: (Sub dan End Sub tidak perlu) 52 byte
sumber
Sub p:For i=#1/1/2017# To #12/31/2017#:MsgBox i:i=i+6:Next:End Sub
adalah kode VBA yang benar-benar valid dan hanya 66 byte. Fakta bahwa Editor VBA menambahkan dalam ruang ekstra tidak relevan.PHP, 67 byte
Menggunakan fakta bahwa PHP secara otomatis memberikan nilai 1 ke variabel loop yang tidak dideklarasikan, dan menggunakan zaman Linux,
sumber
<?for(;54>++$t;)echo date("d.m.Y\n",605e3*$t+148263e4);
seharusnya okphp -r
sehingga Anda tidak perlu<?php
dan?>
dan oleh karena itu dapat mengandalkan ini sebagai59 bytes
seperti @JonathanAllan benar berkata. Anda tidak perlu tanda kurung$t
. Beberapa golf lain dan Anda berakhir denganfor(;++$t<54;)echo date("d.m.Y\n",605e3*$t+14827e5);
untuk51 bytes
(di zona waktu saya). Anda dapat mengganti "\ n" dengan jeda baris nyata yang hanya 1 byte karena itu 51 byte.gmdate
daripadadate
untuk keamanan zona waktu.k6, 32 byte
Penjelasan singkat:
Sayangnya, ini sepertinya hanya bekerja pada penerjemah sumber terbatas, atas permintaan saja.
sumber
Pyke ,
2624 byteCobalah online!
Atau 11 byte
Jika dibiarkan mengabaikan format output
Cobalah online!
sumber
R,
796758 bytePertama Januari menjadi minggu, cuplikan ini membuat urutan hari, setiap 7 hari mulai dari 01-01-2017 hingga 31-12-2017, memformatnya ke format yang diinginkan dan mencetaknya.
sumber
print(as.Date("2017-01-01")+seq(7,365,7))
Befunge-98 (PyFunge) ,
99959385 byte, Daun tertinggal baris baruSemua optimasi dilakukan oleh @ JoKing banyak terima kasih kepada mereka
Cobalah online!
Saya merasa seperti kami kehilangan esoterisitas di sini, jadi saya membuat solusi dalam bahasa Esosterik favorit saya.
Penjelasan :
>8><><>><><>
Menyandikan panjang 12 bulans
Menyimpan hari yang lama di ruang kosong:1g2/
Dapatkan nilai ASCII dari baris paling bawah dan membaginya dengan dua, ini memberi kita lamanya satu bulan tertentu. Kel. 2 = 28 => Bulan (Februari) memiliki 28 hari.10g\%
Dapatkan hari yang disimpan sebelumnya dan modulasi pada panjang bulan yang memungkinkan kita untuk mengubah tanggal menjadi bulan berikutnya.:d1p
Simpan salinan hari yang baru diperbarui.10g\`+
Tes jika tanggal lama > tanggal baru => kami beralih ke bulan berikutnya => tambahkan 1 ke penghitung bulan:b`
Uji jika penghitung bulan> 11 itu berarti kami mencapai akhir tahun (menggunakan 0 pengindeksan)#@_
Berdasarkan sebelumnya jika menghentikan program:1\0d1g
Susun ulang tumpukan jadi terlihat seperti ini:Month, 1, Month, 0, Day
#
lewati insctruction berikutnya (duh)1+:a/'0+,a%'0+,'.,
Konversikan angka menjadi 1 pengindeksan, cetak, tambahkan.
di akhirj;
Gunakan 0 dari tumpukan untuk tidak melompat dan gunakan;
untuk pergi ke ke jadwal cetak lagi kemudian gunakan 1 untuk melompati;
berikutnya waktua"7102"4k,
Cetak2017\n
d1g
Dapatkan nilai hari lagi7+
Tambahkan seminggu sebelum berulangsumber
JavaScript,
111106 byteCatatan: Konsol Stack Exchange tidak cukup panjang untuk menampilkan seluruh daftar, jadi inilah paruh pertama sebagai cuplikan terpisah:
Format khusus harganya 40 byte ...
sumber
Perl 5 , 64 byte
Cobalah online!
Tugas yang diberikan adalah 2017, bukan tahun apa pun, jadi saya hardcode di:
POSIX adalah modul inti dan selalu diinstal dengan Perl5. Melakukan hal yang sama tanpa menggunakan modul dalam 101 byte, menghapus spasi putih:
sumber
Ruby, 75 byte
Solusi mudah untuk mengetahui tanggal dengan
Time
.sumber
t=Time.new 1
dan kemudian lakukant.strftime"%d.%m.2017"
untuk -1 byte.SAS,
5250 byteDisimpan 2 byte berkat @ user3490.
sumber
data;
sajadata c;
dan yang menyimpan 2 byte. Saya pikir Anda perlu sedikitrun;
sekalipun.data _null_
? Juga,run
pernyataan itu tersirat jika hilang.datan
konvensi penamaan.Mathematica
9084 byteCukup bertele-tele. numbermaniac dan Scott Milner masing-masing menyimpan 5 dan 1 byte.
sumber
Most@
? Outputnya tampaknya identik tanpa itu.Most
ada di sana untuk menghindari hari Minggu pertama pada tahun 2018. Saya awalnya menguji kode, tanpaMost
, selama bertahun-tahun, 2011, 2012, dalam hal ini hari Minggu pertama pada tahun 2012 termasuk dalam output. (Itu sebabnya saya memasukkannya ke dalam kode.) Anehnya,Most
tidak diperlukan untuk 2017-18. Juga tidakMost
memiliki efek yang jelas pada hasilnya. Gaib!VBA, 81 byte (mungkin 64)
Posting pertama saya. Membangun solusi newguy dengan menghapus cek untuk hari kerja dan hanya menentukan setiap hari ke-7. Menghapus tanggal menghemat 12 byte per lembar. 42736 adalah 1/1/2017. Format tanggal keluaran tergantung pada pengaturan sistem. Apakah itu diizinkan? Jika demikian, itu 64 byte karena Anda tidak memerlukan metode format .
sumber
For i=0To 52
danFormat(42736+i*7,"dd.mm.yyyy")
. Anda juga bisa menggunakanNext
sajaNext i
.AHK , 67 byte
Tidak ada yang ajaib terjadi di sini. Saya mencoba mencari cara yang lebih pendek daripada
FormatTime
tetapi saya gagal.sumber
Java 8+,
10410099 bytesJava 5+,
109105104 bytesMenggunakan kemampuan tanggal
printf
format.Uji sendiri!
Tabungan
sumber
T-SQL, 94 Bytes
jika Anda tidak suka SQL GOTO atau WHILE, berikut adalah solusi CTE 122 byte
sumber
08.01.2017
tidak01.01.2017
Ruby, 60 + 7 = 67 byte
Menggunakan
-rdate
bendera.sumber
Groovy,
8177636056 byteDi atas dapat dijalankan sebagai skrip groovy.
Entri golf kode pertama saya. Untungnya, tahun 1970 bukan tahun kabisat, sehingga dapat menggunakannya sebagai basis.
Berkat Dennis, ini a: Cobalah secara online!
sumber
53.times{printf('%td.%<tm.2017%n',new Date(0)+it*7)}
,, 52 byte. Mempertahankan kehormatan groovy di sini ...C #,
138111102 byteDisimpan 9 byte lebih banyak berkat Johan du Toit !
Disimpan 27 byte berkat saran Kevin Cruijssen !
Fungsi anonim yang mencetak semua hari Minggu di tahun 2017.
Program lengkap dengan metode ungolfed:
sumber
.AddDays(7*i++)
? Maka tidak perlu untuk.DayOfWeek<1
cek. Kita tahu 01-01-2017 adalah hari Minggu, dan dari sana kita bisa terus menambahkan 7 hari.System
di sana -System.DateTime
danSystem.Console.Write
?()=>{for(int i=0;i<53;)Console.Write(new DateTime(2017,1,1).AddDays(7*i++).ToString("dd.MM.yyyy\n"));};
using
pernyataan harus dimasukkan dalam jumlah byte.using
Pernyataan yang diperlukan untuk menjalankan kode harus dihitung. Lihat pertanyaan Meta ini: Apakah saya perlu menggunakan impor atau dapatkah saya menyebut kelas explicity?C #,
110109 byteAnda dapat menikmati program ini secara online di sini
Dalam soluion ini kami:
Gunakan OLE Automation Date (OADate) untuk menghindari "AddDay ()" dari datetime.
FromOADate()
tampak besar tetapi sama dengannew DateTime(2017,1,1)
Mulai perulangan pada hari minggu terakhir 2016. untuk memungkinkan kami meningkatkan
+=
hanya dengan operator . Operator ini mengembalikan nilai setelah kenaikan dilakukan.Kenaikan 7 hari untuk melompat dari minggu ke minggu sebelum mencetak tanggal.
Kami berhenti setelah minggu terakhir 2017 tiba.
GunakanDebug
alih-alihConsole
untuk menyimpan dua karakterHindari deklarasi dan penugasan variabel yang eksplisit
sumber
using System;
dan beralih keConsole
dariDebug
(yang merupakan dodgy itu sendiri, tapi saya bisa dapat menemukan komentar tentang meta mengenai hal itu).Debug
untukConsole
sejakDebug
diperlukan tertentu termasuk. Namun, saya tidak mematuhi 'sistem penggunaan' karena pesaing saya dalam bahasa ini tidak melakukannya. Selain itu, Anda tidak bisa membuat kode di luar kelas yang harus didefinisikan dalam namespace. Saya cukup yakin sebagian besar jawaban c # di situs ini tidak termasuk itu. Jadi bagaimana sekarang, apakah kita membuang semua jawaban ini ke sampah? Apakah kita menurunkan semua suara untuk memaksa mereka menurut? Jika demikian, maka komunitas mungkin juga melarang c # dari codegolf sama sekali.using
arahan atau sepenuhnya memenuhi syarat metode dan jenis, tolong jangan anggap ini sebagai masalah pribadi. Saya sudah lama menjadi pegolf C #, dan saya menghargai betapa sewenang-wenang aturannya, jadi saya ingin mendorong orang ke arah yang benar ketika saya bisa. Saya secara khusus 'menargetkan' jawaban C # karena saya relatif cukup tahu tentang masalah ini.using System;
(saya berasumsi itu tidak disengaja) jadi itu 109 byte.TSQL,
112105 byteDemo
T-SQL Konversi Sintaks
sumber
DAY
dengand
. Itu melakukan hal yang sama.'20170101'
dengan42734
. Tanggal adalah angka. Waktu adalah bagian desimal dari angka tersebut.JavaScript (ES6), 123 byte
Ini posting pertama saya di sini, halo!
Solusi ini menggunakan data hardcoded dan dirancang untuk bekerja secara khusus untuk tahun 2017. Ini bergantung pada API tidak ada tanggal / waktu.
Adapun digit dalam string
155274263153
, setiap digit adalah angka sendiri dan menunjukkan hari Minggu pertama setiap bulan berturut-turut. Output untuk sepanjang tahun dapat dihasilkan dengan menambahkan 7 secara berurutan.Bagaimana dengan angka ajaib,
2633
digunakan dalam loop?Yah ...
2633
(desimal)101001001001
dalam biner. Sekarang apa1
artinya itu? Mulai dari kanan, bit 1, 4, 7, 10 dan 12 diatur. Ini sesuai dengan bulan yang kebetulan memiliki lima hari Minggu, berbeda dengan mereka yang hanya memiliki empat hari. Golfed ke ekspresi rapi ini, awalnya tampak seperti ini:for(j=0;j<4+ +[0,3,6,9,11].includes(i);j++)
.Saya kira bagian yang tersisa cukup jelas.
sumber
ECMAScript 2015
menjadiJavascript (ES6)
, tapi ... Anda memecahkan kode saya dan saya harus mengembalikannya.a=
kode sebenarnya rusak .T-SQL,
7977 BytesSetelah membantu Salman A meningkatkan jawabannya . Saya memutuskan untuk menulis sendiri menggunakan loop dan
PRINT
.Saya mengakhiri dengan solusi 90 byte ini.
Kemudian saya melihat pemimpin saat ini di T-SQL yang merupakan 94 byte dari WORNG ALL dengan jawaban ini . Orang ini telah menemukan trik yang sangat bagus.
@
GOTO
bukannya LOOP yang sebenarnyaFORMAT
bukanCONVERT
. (Hanya SSMS2012 +)Dengan menggunakan trik ini, solusi ini dipangkas menjadi solusi di bawah ini yang 79 byte.
sumber
Oktaf , 37 byte
Jauh lebih pendek daripada semua bahasa non-golf lainnya, dan bahkan terikat dengan Jelly! Cara untuk pergi Octave! :)
Cobalah online!
Untungnya, tahun
2 AD
terlihat persis sama dengan tahun2017 AD
. Keduanya dimulai dan berakhir pada hari Minggu, dan tidak ada tahun kabisat. Ini menghemat banyak byte, karena367:7:737
cukup sedikit lebih pendek dari736696:7:737060
.Ini mengonversi jumlah hari sejak
01.01.0001
, menjadi string pada formatDD.mm
, dengan trailing.2017
.sumber
Haskell ,
133130 byteCobalah online!
Tanpa perpustakaan kalender,
148144140 byteIni lucu karena menggunakan operator untuk fungsi padding menghemat dua byte meskipun argumen kedua tidak digunakan, karena kurung lebih sedikit diperlukan -
p(last l)
lebih lama darilast l!l
. Bekerja dengan menghitungday/month
pasangan dengan mengurangi tanggal mulai bulan kumulatif dari hari dalam setahun. Tanggal mulai bulan dikompresi sebagai (scanl((+).(+28))0[3,0,3,2,3,2,3,3,2,3,2]
). Nomor bulan adalah jumlah elemen positif dan jumlah hari adalah elemen positif terakhir.Cobalah online!
sumber
C #,
116114113 bytefor(long i=(long)636188256e9;i<636502857e9;i+=(long)605e10)Out.Write(new DateTime(i).ToString("dd.MM.yyyy\n"));
Dapat dijalankan di jendela interaktif Visual Studio (atau C # REPL lain berdasarkan Roslyn)
Turun ke 113 byte: terima kasih kepada Kevin Cruijssen.
sumber
for(long i=(long)636188256e9;i<636502857e9;i+=(long)605e10)Out.Write(new DateTime(i).ToString("dd.MM.yyyy\n"));
using System;
dan menggunakanConsole.WriteLine(string)