Tugas
Tulis program atau fungsi yang menghitung nama hari-hari dari tanggal yang dimasukkan pengguna.
Input output
Input adalah string YYYYMMDD
,.
Contoh nilai input:
20110617: 17 Juni 2011 19040229: 29 Februari 1904 06661225: 25 Desember 666 00000101: 1 Januari 0 99991231: 31 Desember 9999
Anda dapat mengasumsikan bahwa semua input valid. Perhatikan bahwa tahun nol adalah valid.
Output adalah bilangan bulat antara 0
dan 6
. Setiap bilangan bulat mewakili nama hari kerja. Anda dapat memutuskan bilangan bulat mana yang mewakili nama hari kerja, seperti ini
0: Senin 1: Selasa 2: Rabu ... 6: Minggu
(dalam urutan) atau yang ini
0: Senin 1: Rabu 2: Minggu ... 6: Sabtu
(tidak berurutan).
Uji Kasus
Input Output Hari-Hari ([0..6 -> Senin..Sunday] digunakan dalam contoh ini.) 20110617 Jumat 4 19500101 Minggu 6 22220202 Sabtu 5 19000228 Rabu 2 19000301 Kamis 3 19450815 Rabu 2 19040229 Senin 0 19040301 Selasa 1 17760704 Kamis 3 20000228 Senin 0 20000229 Selasa 1 20000301 Rabu 2 20121223 Minggu 6 00000401 Sabtu 5 66660606 Rabu 2 59161021 Sabtu 5
Larangan
Anda tidak boleh menggunakan segala jenis fungsi / kelas / ... yang terkait dengan stempel waktu atau tanggal, seperti Date
kelas di Java
/ JavaScript
/ ActionScript
, atau getdate
fungsi dalam PHP
.
Anda harus menggunakan kalender Gregorian , yang digunakan oleh banyak orang sekarang.
Tentu saja, kode terpendek menang. Jika dua kode memiliki panjang yang sama, maka kode dengan suara terbanyak menang.
(Jatuh tempo: Ketika ada lebih dari 5 kode yang memiliki lebih dari (atau setara) +1
suara.)
echo 4
.Jawaban:
Ruby,
9592 karakterImplementasi ruby langsung polos dengan 0: Senin, ...
sumber
PHP -
10197103125 karakterKode
Catatan
Sayangnya, karena dinamis, lemah mengetik PHP, algoritma Sakamoto tidak berfungsi dengan baik tanpa secara eksplisit lantai operasi masing-masing divisi.
sumber
y+y/4-y/100+y/400
.y=4
dalam kasus itu mengembalikan 4, bukan 5 yang benar dariy+y/4+y/100+y/400
(di mana hanya dua istilah pertama ikut bermain). Itulah yang mengganggu jawaban JavaScript saya. Apakah mungkin dobel dibuat bukan int? (PHP saya terlalu lemah untuk diketahui.)C - 129
Ini menyalahgunakan bagaimana pembagian berputar ke nol, setidaknya pada sistem saya (Linux x86).
Konstanta ajaib
86400
,, melayani dua tujuan:Itu juga merupakan jumlah detik dalam sehari.
sumber
y+=m>2;
alih-alihm>2?y++:0;
dan cukur beberapa byte.Javascript,
126123 karakterMenggunakan algoritma Sakamoto dengan 0 = Minggu:
Saya curiga divisi-divisi itu bisa runtuh, tetapi saat ini saya tidak melihatnya.
Sunting: Memperbaiki divisi (tidak perlu
~~
ketika Anda bisa saja~
).sumber
Python 2 ,
83116113109 byteMenerapkan algoritma Sakamoto . Saran bermain golf diterima. Cobalah online!
Sunting:
Saya harus memperbaikinya beberapa waktu yang lalu.-6 byte dari saran Jonathan Allan +2 byte untuk benar-benar memperbaiki kode.sumber
int('032503514624'[m-1])
hemat 6Perl - 110 byte
Berikut ini adalah solusi untuk dijalankan dengan perl -p source.pl ATAU perl -pe 'di sini adalah kode'.
Cukup salin-tempel kasus uji ke stdin.
Ini tampaknya menjadi satu-satunya kode tanpa variabel, konstanta string, dan divisi.
sumber
JavaScript (ES6), 73 byte (Tidak bersaing)
Cobalah
sumber