Ini terinspirasi oleh salah satu pertanyaan Downgoat di Sandbox, di mana saya menyarankan agar dia memasukkan 31 April sebagai hari Pi untuk orang yang menggunakan format hari / bulan, hanya agar dia memberi tahu saya bahwa tidak ada 31 April!
Diberikan string tanggal dalam format bulan / hari yang mungkin tidak valid, tampilkan tanggal yang benar menggunakan rollover. (Rollover pertama bulan, lalu rollover hari).
Contoh:
"15/43" - Ini berbunyi sebagai hari ke 43 di bulan ke 15. Pertama, kami memutar bulan ke tahun berikutnya, jadi kami berakhir dengan 3 (Maret). Sekarang, sejak Maret hanya memiliki 31 hari, kami memperpanjang hari ekstra menjadi April, jadi kami menampilkan tanggal aktual sebagai "4/12" (12 April).
"3/16" - Ini adalah tanggal yang valid (16 Maret). Kembalikan apa adanya.
"12/64" - Ah, begitu banyak kenangan indah dari 64 Desember ... Desember 31 hari, Januari 31 hari, jadi yang saya maksud sebenarnya adalah "2/2" (2 Februari).
"19/99" - Pertama, 19 menjadi 7 (Juli). Juli memiliki 31 hari, Agustus memiliki 31 hari, September memiliki 30 hari, sehingga hasilnya adalah "10/7" (7 Oktober).
"1/99999" - Setahun memiliki 365 hari. 99999 (mod 365) = 354. Hari 354 tahun ini adalah "12/20" .
"9999999/10" - Rupanya, 9999999 (mod 12) = 3, jadi ini "3/10" (10 Maret).
Kriteria:
Bulan input adalah bilangan bulat> 0. Hari input adalah bilangan bulat> 0. Tahun tidak perlu ditentukan, karena itu tidak ada tahun kabisat untuk menangani.
Memperbarui:
Karena saya pikir itu akan terlalu menyederhanakan tantangan, fungsi kalender, seperti yang ada di kelas Kalender Java , dilarang. Fungsi parsing / pemformatan tanggal masih diizinkan.
1/99999
sebaiknya12/19
saya hasilkan .Jawaban:
LabVIEW, 32 LabVIEW Primitif
sumber
C #,
269223Sunting : Tetap bekerja untuk kasus-kasus seperti 24/1, 36/1, dll. Dan sedikit bermain golf. Terima kasih atas komentarnya, ada beberapa tempat yang saya simpan sedikit!
Tidak Disatukan:
sumber
24/1
.Console.Write
yang lebih darireturn
, dan dalam C # saya akan gunakanchar[]
sebagai penggantistring
, tetapi jumlah karakter yang sama, dan membuat pemisahan pada yang/
lebih bermasalah. Tapi, catatan Anda tentang Kamus memang menuntun saya ke versi yang jauh lebih baik!R,
208182 byteDapatkan bulan dengan membaginya dengan 12, lalu lilitkan, hapus jumlah hari pada bulan ini sampai Anda mendapatkan angka negatif., Balikkan langkah terakhir dan cetak.
Pada banyak baris (perlu menggunakan file dan sumbernya):
sumber
PHP> = 5.5, 181 byte
PHP hampir mendukung rollover dengan instruksi penguraian tanggal dan format saja. Sebagai contoh:
Namun, begitu salah satu angka menjadi lebih besar dari 100, PHP menolak mem-parsing dan mengembalikan kesalahan (mungkin karena alasan sewenang-wenang). Jadi, teori dengan jawaban ini adalah mengembalikannya ke tempat PHP akan menguraikannya, lalu mengirimkannya ke
date_create_from_format()
.Tidak Disatukan:
Cobalah online
sumber
$argv
atau STDIN.$t
ke$argv[1]
dan sekarang dibaca dari masukan baris perintah.JavaScript (ES6), 106 byte
Penjelasan
Uji
Tampilkan cuplikan kode
sumber
Jawaban yang tidak bersaing - Bash + coreutils, 55
"Fungsi parsing / pemformatan tanggal masih diizinkan" - Saya menganggap ini berarti
date
utilitas diizinkan.Input dibaca dari baris perintah, misalnya:
Ini tidak bersaing karena perintah tanggal diperluas ke sesuatu seperti ini yang menambahkan beberapa hari:
sumber
date.add(875)
menambah tanggal 875 hari. Itu sebagian besar yang saya cari.date
Perintah yang diperluas sepenuhnya di sini adalahdate -d1-3-1+42day +%-m/%-d
, jadi melakukan hal itu. Saya kira ini adalah jawaban yang tidak bersaing maka :(