Usenet saatindeki tarih nedir?


9

Eylül 1993, Usenet'te hiç bitmeyen Eylül olarak bilinir. Böylece, örneğin, bu sorunun gönderildiği gün 8740 Eylül 1993 Cumartesi.

Programınız veya işleviniz, herhangi bir Gregoryen tarihini (pozitif yılla birlikte) girdi olarak almalı ve Eylül 1993'ten önce ise çıktıyla aynı tarihi veya daha sonra Eylül 1993 takvimindeki tarihi döndürmelidir.

YYYY-AA-GG, YYYY / AA / GG, AA / GG / YYYY, GG / AA / YYYY, D-Monthnameabbr-YYYY veya yılın tamamını kullanan diğer popüler biçimleri ( yıl modulo 100). Seçtiğiniz böyle bir biçimi kabul etmeniz yeterlidir. Çıktı biçimi, giriş biçimiyle eşleşmelidir.

Örnek giriş → çıkış:

  • 6 Ağustos 2017 Pazar → 8741 Eylül 1993 Pazar
  • 28 Ocak 1986 Salı → 28 Ocak 1986 Salı

Veya:

  • 2017-08-06 → 1993-09-8741
  • 1986-01-28 → 1986-01-28

Daha ilginç cevaplar için, bu amaç için tasarlanan yerleşik bir fonksiyonun (UN * X sdatekomutu gibi) kullanımına izin verilmez. Bunun ve standart istisnaların yanı sıra , bu golf, bu yüzden en kısa cevap kazanır.


1
Yani burada insanlar Mathematica'nın yerleşik hakkında yorum yapabilirsiniz DateDifference kullanamazsınız ???
J42161217

@Jenny_mathy, bu Date Farkı ? Sanırım kullanabilirsiniz, neden olmasın?
msh210

Yanıtlar:


2

JavaScript (ES6), 48 bayt

f=
s=>(d=new Date(s)/864e5-8643|0)>9?'1993-09-'+d:s
<input size=10 oninput=o.textContent=/\d{4}(-\d\d){2}/.test(this.value)?f(this.value):``><pre id=o>

@ Mr.Xcoder'ın algoritmasına dayanmaktadır.


3

Python 3 , 109 bayt

from datetime import*
i=input()
z=date(*map(int,i.split())).toordinal()-727806
print([i,'1993 09 %d'%z][z>9])

Çevrimiçi deneyin!


Bay Xcoder sayesinde -jaja3m sayesinde -jaja -3 bayt -59 bayt
officialaimm
sayesinde -12 bayt-Jonathan Allan sayesinde -12 bayt



1
Veya daha iyisi, -59 bayt.
notjagan


1
-8644+1can be -8643..
officialaimm

1
@ Mr.Xcoder Olmanız gerekiyor, z>9aksi takdirde gün önde gelen sıfırı kaybedersiniz.
Neil

2

Mathematica, 55 bayt

If[(s=#&@@{1993,9}~DateDifference~#)>0,{1993,9,s+1},#]&

I / O

{2017, 8, 6} -> {1993, 9, 8741}
{1986, 1, 28} -> {1986, 1, 28}

Kullanıcıya -6 bayt thanx


2 bayt tasarruf {1993,9,1}etmek için zaman işaretini bir gün geri kaydırmayı düşünür +1müsünüz?
user202729

Teşekkürler. Bir dahaki sefere daha kibar olmaya çalışmalıyım. Ve {1993,9,0}izin verildiğini bile bilmiyorum .
user202729

1

Perl 5 , 102 + 16 (-MTime :: Yerel -F-) = 118 bayt

$,='-';say @F=($t=timelocal(0,0,0,$F[2],$F[1]-1,$F[0]-1900)-749433599)>0?(1993,'09',31+int$t/86400):@F

Çevrimiçi deneyin!

Tarihi "YYYY-AA-GG" olarak alır

Bence sayımı komut satırı seçeneklerinde yaptım. Eminim eğer yapmazsam birisi beni düzeltir.


1

C # (.NET Core) , 107 bayt

s=>{var d=(System.DateTime.Parse(s)-new System.DateTime(1993,8,31)).TotalDays;return d<1?s:"9/"+d+"/1993";}

Çevrimiçi deneyin!

Tarihleri ​​A / G / YYYY olarak alır (10'un altındaki sayılar yalnızca 1 basamakla yazılır). API'yı kullanarak cep telefonumdan kaleme alındı.


1

Gaia , 78 bayt

ℍZ¤∨4Ė
:'//d¦[1993₉31];>\{\‡:(…1993>↑¦365+¦¤ṇ↑∂K∂k,=;((<¤)-243]_ḥΣ“1993/09/”¤+}?

Çevrimiçi deneyin!

açıklama

İlk olarak, bir yılın artık yıl olup olmadığını belirleyen bir yardımcı fonksiyonumuz var.

ℍ       100
 Z      Divmod year by 100, pushing the first 2 digits, then the second 2 digits
  ¤     Swap
   ∨    Logical OR, gives the left-most non-zero number
    4Ė  Check for divisibility by 4

Ana işlev işin geri kalanını yapar:

:              Push two copies of the input.
'//            Split the top on on slashes.
d¦             Parse each section as a number.
[1993₉31]      Push the list [1993 9 31].
;>             Copy the date and check if its less than that.
\              If it is, delete the list and leave the input string on top.
{              Else:
 :(             Copy the date and get the year.
 …1993>         Get the range from 1993 to year-1.
 ↑¦365+¦        Map each to 365+(whether it's a leap year).
 ¤              Swap, bring the date back to the top.
 ṇ↑             Pull out the year and check if it's a leap year.
 ∂K∂k,          Push the pair of lists [[days in months in a leap year] [days in months]]
 =              Index the result of checking if the year is a leap year into the pair.
 ;((<           Get the first (month number - 1) elements.
 ¤              Swap, bring date back to the top.
 )              Get the day.
 -243           Push -243 (243 is the number of days between Jan 1 1993 and Sept 1 1993).
 ]              Wrap everything in a list.
 _              Flatten the list.
 ḥ              Remove the first element (the input string).
 Σ              Sum it.
 “1993/09/”¤+   Append the resulting number to "1993/09/".
}?             (end if)
               Implicitly display whatever is on top of the stack.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.