Apa program terpendek yang dapat memprediksi waktu Jumat berikutnya akan jatuh pada hari ke 13 bulan itu?
- Harus merupakan program yang berfungsi lengkap (bukan hanya fungsi / subrutin)
- Harus mencetak tanggal dalam format berikut:
YYYY-MM-DD
- Izinkan pengguna untuk memberikan tanggal mulai baik sebagai argumen baris perintah atau melalui
STDIN
- Jika pengguna tidak memberikan tanggal mulai, gunakan hari ini sebagai tanggal mulai.
- Jika tanggal mulai adalah hari Jumat tanggal 13, program harus mencari hari Jumat tanggal 13 yang berikutnya .
Jika saya menjalankan program hari ini (16 Feb 2011) saya harus mendapatkan output berikut.
$ ./fr13th 2013-05-09
2013-09-13
$ ./fr13th 2007-06-29
2007-07-13
$ ./fr13th 2007-07-13
2008-06-13
$ ./fr13th
2011-05-13
2013-9-13
output akan ok untuk contoh pertama?Jawaban:
Windows PowerShell, 74
Cukup mudah. Satu bit yang mungkin membingungkan adalah penggunaan
"Get-Date $args" | Invoke-Expression
untuk mendapatkan tanggal saat ini (jika$args
kosong) atau tanggal yang ditentukan dalam$args
tanpa meningkatkan kesalahan.Varian 72 byte:
Membutuhkan waktu lama, meskipun ... ini tidak menambah datetime setiap hari setiap iterasi tetapi hanya 900 nanodetik. Tapi dua byte lebih pendek.
Varian 67 byte:
Ini agak sensitif terhadap lokal; jika gagal pada mesin Anda, coba atur format tanggal Anda ke ISO-8601 sebelumnya. :-)
Oh, dan itu bisa dibuat menjadi 65 byte sama seperti versi 72 byte.
Sejarah:
for
. Perbandingan sama seperti pengurangan alih-alih-eq
yang menyimpan dua byte lagi.date
String format Unix sedikit lebih pendek.yyy-MM-d
cukup (karena tahun selalu lebih lama dari tiga karakter dan hari selalu 13. Terima kasih kepada Ty Auvil untuk ini.sumber
iex
? Coba saja (sebutkan $ args) sebagai gantinya.$null
untukGet-Date
Anda akan mendapatkan error, bukan tanggal saat ini."date $args"|iex
namun, memutuskan untuk tanggal yang diberikan$args
atau tanggal saat ini, yang persis seperti yang kita inginkan di sini.bash, 75
Ini agak sensitif terhadap lokal; jika gagal pada mesin Anda, cobalah
export
ingLC_ALL=C
terlebih dahulu.sumber
Ruby,
9675 karakterMengambil tanggal dari stdin. Untuk tidak menentukan tanggal, tekan ctrl-d.
Terima kasih banyak atas bantuan Ventero.
Tidak Disatukan:
Sampel IO:
sumber
d.wday*d.day==65
lebih pendek 4 karakter. Dan Anda harus dapat menggantinyaDate.today.to_s
dengan"thu"
require"date";d=Date.parse($*[0]||"thu")+1;d+=1 while d.wday*d.day!=65;$><<d
. Dan Anda bisa membaca tanggal dari stdin dengangets
alih - alih$*[0]
menyimpan karakter lain (masukkan EOF untuk mendapatkan perilaku default).C #, 185
Berdasarkan solusi C # Andrew Koester , tetapi sangat dimodifikasi di sepanjang jalan. Saya akhirnya tiba pada solusi yang mirip dengan solusi PowerShell saya:
sumber
Perl (dan lainnya), 114
Perl 5.10 atau lebih baru, jalankan dengan
-E 'code here'
atau-M5.010 file
. Kebutuhandate
(dari coreutils untuk Linux) dancal
(dari util-linux)Contoh dijalankan:
Saya tidak yakin kapan nol terkemuka selama berbulan-bulan sebelum Oktober disimpan. Ini jelas hilang ketika tahun bergulir; tampaknya disimpan ketika jawabannya baru bulan depan. Sebut saja perilaku tak terdefinisi itu - hei, ini golf!
sumber
PESTA
KONSEP DIGUNAKAN:
SAMPEL I / O
sumber
C #
240 karakter. C # membutuhkan mode "jalankan di dalam fungsi saja"!
Tidak golf:
Uji keluaran
sumber
D: 227 Karakter
Lebih Jelas:
Bagian yang menyenangkan adalah bahwa std.datetime D membuat kode semacam ini sangat mudah untuk ditulis, itu juga sangat bertele-tele - terutama karena nama fungsi yang tepat (dan karena itu panjang). Jadi, kegunaan dan pemeliharaan kode sangat tinggi, tetapi kode golfabilitasnya agak rendah.
sumber
Python - 166 karakter
Dibaca dari stdin, jadi Anda perlu memberi makan baris kosong jika Anda ingin kencan hari ini
sumber
SQLite, 374 karakter
(Jeda baris ditambahkan di sini agar mudah dibaca; tidak termasuk dalam hitungan.)
Persyaratan untuk "Izinkan pengguna untuk memberikan tanggal mulai baik sebagai argumen baris perintah atau melalui STDIN" dihilangkan karena keterbatasan teknis.
4 pernyataan pertama membuat tabel (R) dengan satu kolom yang berisi semua bilangan bulat dari 0 hingga 4095.
Pernyataan ke-5 membangun tabel (F) dari semua hari Jumat tanggal 13 antara 2000-10-13 dan 2340-12-13.
Pernyataan 6 hanya mengembalikan Jumat pertama tanggal 13 setelah tanggal (UTC) saat ini.
sumber
PHP - 103
(paksaan)
Tidak Disatukan:
Uji:
sumber
!=
ke-
. Anda juga dapat menyimpan hingga 2 karakter dengan naik ke atas$d->modify('next fri')
di bagian kenaikan loop.-r
dan Anda tidak perlu tag. Gunakan konfigurasi default dengan-n
dan Anda tidak perlu@
.\n
tidak perlu.echo
alih-alihdie
menyimpan byte lain.strtotime
bukannyaDate
kelas dapat menyimpan satu atau dua lagi.C #,
206194 karakterMemperbarui
Ini sedikit berbeda dari masalah, jadi saya meninggalkan usaha saya yang lain di sini secara penuh.
Di sini, saya menemukan hari Jumat "sekarang" minggu dan kemudian bertambah tujuh sampai saya menemukan satu yang 13. Saya juga menggunakan Joey untuk format loop dan output untuk mencukur beberapa karakter.
Tidak Disatukan:
Asli:
Ini mirip dengan Andrew di atas, tetapi ada cukup banyak perbedaan yang saya putuskan untuk mengirim jawaban terpisah daripada mengomentari dan menyarankan suntingan.
Tidak Disatukan:
sumber
R, 113 karakter
Contoh berjalan:
sumber
Perl 6 , 69 byte
Cobalah online!
Berkat @ ASCII-hanya untuk -5
sumber
day-of-week==5
Javascript
ps: yeah, saya tahu, saya melanggar aturan pertama (tidak bisa hanya fungsi)
Tes pada shell javascript
sumber
T-SQL
359285253 KarakterSaya hanya ingin meletakkan smack pada solusi SQLite dengan fungsi tanggal verbose non-pintar saya menggunakan prosedur T-SQL.
Pembaruan: Ketakutan awal saya bahwa melakukan peningkatan satu hari akan memakan lebih banyak ruang daripada kenaikan satu bulan itu sangat salah.
Hasil tes (SSMS):
sumber
Javascript lain, 153
Saya mengirim jawaban javascript lain karena saya tidak dapat mengomentari yang pertama ...
Jalankan dengan nodeJS:
sumber
Python 3.3, 166 karakter
Input dalam format
2013 1 1
,atau cukup tekan enter untuk menggunakan tanggal hari ini (akan 2013/12/11 untuk output ini)
(sebenarnya ada campuran dari solusi saya dan @gnibbler yang menghitung 144 karakter)
Baris yang sangat bagus
while t.day*t.weekday()-65:
adalah dari solusi @ gnibbler.sumber
Japt, 35 byte
-8 byte terima kasih kepada @ASCIIOnly!
Cobalah!
sumber
toISOString
mengkonversi ke UTC yang mengubah tanggalK
waktu penyimpanan sebagai waktu lokal?Swift 4 , 310 byte
Cobalah online!
-4 Terima kasih untuk TagTaco.
Sayang...:
Int
s digunakan sebagaiBool
.??
.!=
juga perlu spasi, jangan sampai itu ditafsirkan sebagai membuka.sumber
VB.net (96c *)
Masuk
Jadi skor saya rusak seperti itu
sumber
Rebol, 136
Tidak Disatukan:
Contoh penggunaan:
sumber
Java 8,
200197 bytePenjelasan:
Coba di sini (hapus argumen untuk menggunakan tanggal saat ini).
CATATAN: Format default Java saat pencetakan sudah
yyyy-MM-dd
.sumber
05AB1E , 141 byte
05AB1E tidak memiliki builtin untuk objek atau perhitungan Date. Satu-satunya builtin mengenai tanggal yang dimilikinya adalah tahun ini / bulan / hari / jam / menit / detik / mikrodetik.
Jadi karena itu, hampir semua kode yang Anda lihat adalah perhitungan manual untuk hari berikutnya, dan menghitung hari dalam seminggu.
Sebagian besar berasal dari jawaban 05AB1E saya dalam tantangan The Work Day Countdown (itulah sebabnya saya diedit bahwa salah satu sekitar satu jam yang lalu ketika saya datang di bug ..)
Input adalah string dalam format
dd-MM-yyyy
(tetapi output dalam formatyyyy-MM-dd
, karena itu adalah salah satu aturan tantangan).Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
sumber