Ini mirip dengan penyederhanaan fraksi, tetapi dengan Tanggal!
Input dari program Anda harus dalam bentuk mm/dd
Misalnya
3/4 //March 4
12/15 //December 15
1/1 // January 1
Kami berasumsi bahwa input akan valid sehingga bulan memiliki jumlah hari di dalamnya:
January 31
February 28
March 31
April 30
May 31
June 30
July 31
August 31
September 30
October 31
November 30
December 31
Tugas program Anda adalah mengambil input yang dianggap benar, dan secara iteratif (atau secara rekursif) menyederhanakan tanggal, dan pada setiap iterasi (termasuk tanggal 0), buat tanggal dengan nama lengkap bulan seperti tertulis di atas.
Sebagai contoh:
Diberikan input dari:
12/18
Akan menghasilkan
December 18
June 9
February 3
Input yang sudah disederhanakan hanya menghasilkan sendiri:
11/17
Output:
November 17
Nama bulan tidak dapat berasal dari fungsi dalam bahasa Anda. String dapat dikaburkan, dihitung, sesuka Anda, tetapi Anda tidak dapat menggunakan fungsi standar seperti GetMonthString (4) atau sesuatu, Anda harus menulis fungsi itu, atau menemukan cara untuk menampilkan nama bulan seperti yang dijelaskan.
Saya tidak dapat memikirkan kasus di mana tanggal yang disederhanakan menghasilkan tanggal yang ilegal, tetapi jika pernah Anda menghasilkan tanggal yang ilegal di sepanjang jalan, hasilnya:
Illegal Date
Tetapi jika Anda yakin ini tidak dapat terjadi, Anda tidak perlu memiliki kode yang mencakup kasus ini. Tanggal yang dikeluarkan hanya selalu perlu valid sesuai dengan apa yang dijelaskan di atas (tidak perlu dikatakan bahwa bulan dan hari mulai dari 1).
Algoritma:
Pada setiap iterasi Anda membaginya dengan angka terkecil yang membagi pembilang dan penyebut.
Artinya, Anda menemukan semua angka sehingga, membagi pembilang dan penyebut dengan angka ini menghasilkan pembilang dan penyebut baru yang keduanya bilangan bulat (faktor umum). Pilih yang terkecil dan pisahkan pembilang dan penyebut untuk menghasilkan pecahan baru. Jika satu-satunya angka yang dapat Anda bagi dengan adalah 1, maka Anda telah menyederhanakan sebanyak mungkin dan Anda berhenti.
Saya harap ini jelas.
Bahasa apa pun diizinkan. Ini Golf Code, kode terpendek menang!
sumber
12/18
ke6/9
dan tidak4/6
(saya tidak mendapatkan semua kekacauan iterasi ... ketika saya menyederhanakan sebagian kecil saya langsung mendapatkan nilai yang disederhanakan)?Jawaban:
Jelly , 59 byte
Cobalah online!
Bagaimana itu bekerja
sumber
Pyth -
11687 byteTest Suite .
sumber
TSQL 296 byte
Tidak diizinkan untuk menggunakan nama file standar yang membuat saya kehilangan banyak byte, namun untuk menghemat beberapa byte, saya menggunakan 3 karakter pertama dari deskripsi tanggal default (dengan format mon dd yyyy hh: miAM (atau PM)) dan menambahkan sisa nama bulan.
Golf:
Cobalah online
Tidak Disatukan:
sumber
'12/2'
di baris kedua, apakah Anda yakin Anda mengatakan yang sebenarnya?September
denganSeptemper
.'temper','ober','ember','ember')+' '+LEFT(@d,2)