Bu, kesirleri basitleştirmeye benzer, ancak Tarihler!
Programınızın girişi şu biçimde olmalıdır mm/dd
: Örneğin
3/4 //March 4
12/15 //December 15
1/1 // January 1
Girdinin, aylarda bu sayıda gün olacak şekilde geçerli olacağını varsayıyoruz:
January 31
February 28
March 31
April 30
May 31
June 30
July 31
August 31
September 30
October 31
November 30
December 31
Programınızın işi varsayılan geçerli girdiyi almak ve yinelemeli olarak (veya yinelemeli olarak) tarihi basitleştirmek ve her yinelemede (0 dahil) tarihi yukarıda yazılan ayın tam adıyla çıktı olarak almaktır.
Örneğin:
Bir girdi verildiğinde:
12/18
Çıktı
December 18
June 9
February 3
Önceden basitleştirilmiş bir girdi yalnızca kendi çıktısını verir:
11/17
Çıktılar:
November 17
Ay isimleri sizin dilinizdeki bir fonksiyondan gelemez. Dizeler gizlenebilir, hesaplanabilir, ancak istediğiniz gibi olabilir, ancak GetMonthString (4) veya başka bir şey gibi standart bir işlevi kullanamazsınız, ya bu işlevi yazmanız ya da ay adlarını açıklandığı gibi çıkarmanın bir yolunu bulmanız gerekir.
Basitleştirilmiş tarihin yasadışı bir tarih oluşturduğu durumları düşünemiyorum, ancak yol boyunca yasadışı bir tarih çıkarırsanız, çıktı:
Illegal Date
Ancak bunun gerçekleşemeyeceğinden eminseniz, bu durumu kapsayan bir kodunuzun olması gerekmez. Çıkarılan tarihlerin her zaman yukarıda açıklananlara göre geçerli olması gerekir (ayların ve günlerin 1'den başladığını söylemeye gerek yoktur).
Algoritma:
Her yinelemede, pay ve paydayı bölen en küçük sayıya bölünürsünüz.
Yani, tüm sayıları bulursunuz, hem pay hem de paydayı bu sayıya bölmek, her ikisi de tamsayı olan (ortak faktörler) yeni bir pay ve payda üretir. En küçük olanı seçin ve yeni bir kesir oluşturmak için pay ve paydayı ayrı ayrı bölün. Bölebileceğiniz tek sayı 1 ise, olabildiğince basitleştirdiniz ve durdunuz.
Umarım açık olmuştur.
Herhangi bir dile izin verilir. Bu Code Golf, en kısa kod kazanıyor!
12/18etmek 6/9değil, 4/6(ben immedialtely var bir kısmını çıkan basitleştirilmiş değeri basitleştirmek zaman ... tüm yineleme karmaşa alamadım)?