Viết giấy báo tử của riêng bạn


14

Kira cần sự giúp đỡ của bạn!


Định dạng đầu vào:

Date [and/or Time]
Name
Gender
Reason

Định dạng đầu ra:

<Last Name, First Name> <will die/died> on the <DD><st/nd/rd/th> of <MMM, YYYY> [at <hh:mm:ss TT>].
<He/She> <will die/died> of <Reason>.


Chi tiết, chi tiết:


Chương trình của bạn nên chiếm ít nhất các định dạng đầu vào ngày sau:

9 November 2003
9/11/2003
November 9, 2003

Định dạng thời gian:

hh tt
hh TT
hh:mm tt
hh:mm TT
hh:mm:ss tt
hh:mm:ss TT
HH
HH:mm
HH:mm:ss

Các định dạng nhập tên sau đây:

first        // Stephen
last         // Harper
first last   // Stephen Harper
last, first  // Harper, Stephen


Các trường hợp thử nghiệm:


Đầu vào:

2 September 1973
J.R.R. Tolkien
Male
pneumonia

Đầu ra:

Tolkien, JRR qua đời vào ngày 2 tháng 9 năm 1973.

Ông chết vì viêm phổi.


TUYÊN BỐ TỪ CHỐI: Nếu anh ta thực sự chết vào ngày này, đó lỗi của Kira , không phải của tôi.

CẬP NHẬT: Stephen Harper đã không chết vào ngày được liệt kê

Đầu vào:

21/12/12 23:59:59             // DD/MM/YY HH:mm:ss
Harper, Stephen               // Last, First
Unknown                       // Gender
a heart attack for no reason  // Reason

Đầu ra:

Harper, Stephen sẽ chết vào ngày 21 tháng 12 năm 2012 lúc 11:59:59 tối.

Harper, Stephen sẽ chết vì đau tim mà không có lý do.



Tặng kem:

July 21, 1969 02:56:15 GMT
Armstrong, Neil
Male
poisoned moon cheese

--

January 19, 2038 03:14:08 GMT
Everyone
Unknown
Y2K38

Thêm <st/nd/rd/th>vào cuối của DDđầu vào.


Ahaha Tôi vừa đọc xong bộ truyện này: D Không phải là "đau tim" vì "không có lý do" sao?
Ry-

Ừm, ngày 2 tháng 9 là 2/9/11, không phải 2/7/11;)
Ry-

Có phải giới tính không có bất kỳ ảnh hưởng đến đầu ra?
Peter Olson

Ngoài ra, chúng ta có phải chấp nhận ngày trước năm 1970 không?
Peter Olson

5
Làm thế nào để chúng ta phân biệt giữa đầu vào với DD / MM / YYYY và MM / DD / YYYY?
Peter Olson

Câu trả lời:


6

Javascript (561)

Điều này có thể được giảm đáng kể, nhưng ở đây đi:

i=i.split("\n");d=new Date(i[0]);t=d.getDate();z=t%10;t+=z==1?"st":z==2?"nd":z==3?"rd":"th";m=['January','February','March','April','May','June','July','August','September','October','November','December'][d.getMonth()];y=d.getFullYear();a=d.getHours();b=d.getMinutes();c=d.getSeconds();l=a&&b&&c?" at "+a+":"+b+":"+c:"";g=d>new Date()?"will die":"died";n=i[1].split(" ");n[1]?n[0][n[0].length-1]==","?n=i[1]:n=n[1]+", "+n[0]:n[0];s=i[2]=="Male"?"He":i[2]=="Female"?"She":n;document.write(n+" "+g+" on the "+t+" of "+m+", "+y+l+".<br>"+s+" "+g+" of "+i[3]+".");

Mẫu I / O:

2 September 1973
J.R.R. Tolkien
Male
pneumonia

Tolkien, JRR chết vào ngày 2 tháng 9 năm 1973. Ông chết vì viêm phổi.

January 19, 2038 03:14:08 GMT
Everyone
Unknown
Y2K38

Mọi người sẽ chết vào ngày 18 tháng 1 năm 2038 lúc 21: 14: 8. Mọi người sẽ chết vì Y2K38.

Hãy dùng thử trên JsFiddle .


Chỉ muốn chỉ ra rằng i="9 November 2003 03:14:08 GMT\nDouglas Adams\nMale\nI forgot";mang lại cho tôi 8th of November.
Mateen Ulhaq

4
@muntoo Đó là vì nó điều chỉnh múi giờ của bạn. Nếu bạn sống trong múi giờ GMT, nó sẽ cung cấp cho bạn thứ 9.
Peter Olson

Tôi sẽ đổ lỗi cho bạn nếu tôi chết vào ngày sinh nhật của tôi. : P
nyuszika7h

5

VB.NET, 727 695

Được rồi, chơi golf một chút. Yêu cầu Option Strict Off.

Module M
Sub Main
Dim d=Date.Parse(Console.ReadLine),n=Console.ReadLine,o=Date.Now,g=Console.ReadLine,r=Console.ReadLine,i=n.IndexOf(" "),f=d.Day Mod 10+(d.Day\10=1)*5,a=Array.IndexOf("male|female|he|she|him|her|guy|girl|boy|lady|man|woman".Split("|"), g.ToLower),b="|st|nd|rd".Split("|"),m="|January|February|March|April|May|June|July|August|September|October|November|December".Split("|")
If n.IndexOf(",")<0 Then n=n.Substring(i+1)&", "&n.Substring(0,i)
g=If(a<0,n,If(a Mod 2,"She","He"))
Console.Write("{0} {11} on the {1}{2} of {3}, {4} at {5}:{6:00}:{7:00}.{8}{9} {11} of {10}.",n,d.Day,If(f<4,b(f),"th"),m(d.Month),d.Year,d.Hour,d.Minute,d.Second,vbCrLf,g,r,If(o<d,"will die","died"))
End Sub
End Module

Nó chấp nhận ngày trong tất cả các trường hợp thử nghiệm và nhiều định dạng khác nhờ Date.Parse. Nó cũng chấp nhận nhiều giới tính (như bạn có thể thấy). Nếu Kira quyết định chỉ đặt tên hoặc họ của người đó, chương trình sẽ bị sập.


có vẻ như bạn có thể giảm khá nhiều byte bằng cách thay thế đối số phân tách của mình bằng một MonthName(d.Month)cuộc gọi
Taylor Scott

2

CSharp - 463 ký tự

void Main(){Func<String>c=()=>Console.ReadLine();var d=DateTime.Parse(c());var n=c();if(!n.Contains(",")&&n.Contains(" "))n=n.Split(' ')[1]+", "+n.Split(' ')[0];n+=" ";var g=c().ToLower();g=g.Contains("male")?g.Replace("female","She").Replace("male","He"):"They";var r=c();var f=(DateTime.Now<d);Console.Write(String.Format(n+"{0} on the {1} {2}\n{3} {0} of {4}",(f?"will die":"died"),d.ToString("dddd 'of' MMMM, yyyy"),d.Date==d?"":d.ToString("hh:mm:ss"),g,r));}

1

PHP, 509 474 462 461 ký tự

<?for($l=0;$l<4;)$i[$l++]=chop(fgets(STDIN));
putenv('TZ=GMT');
$t=strtotime(preg_match("/(\d+)\/(\d+)\/(\d+)(.*)/",$i[0],$q)?"$q[1]-$q[2]-".($q[3]<100?19+1*($q[3]<70):"").$q[3].$q[4]:$i[0]);
$z=$t<time()?" died":" will die";
$f="jS \of F, Y".($t%86400?" \a\\t g:i:s A":"");
$n=strpos($i[1],',')?$i[1]:explode(" ",$i[1]);
if(is_array($n))$n=$n[1]!=""?$n[1].", ".$n[0]:$n[0];?>
<?=$n."$z on the ".date($f,$t)."\n\n".($i[2][0]==M?He:($i[2][0]==F?She:$n))."$z of ".$i[3];

Tôi đã thêm các dòng mới sau mỗi ;nhưng không được tính chúng vì chúng không cần phải ở đó.
Mã có xử lý ngày vượt quá ngày 19 tháng 1 năm 2038 03:14:07 hay không, tùy thuộc vào việc nó có chạy trên máy 64 bit hay không.


1

VBA, 384 366 byte

Chơi gôn

Toàn bộ subthói quen nhận đầu vào của loại dự kiến Variant\Stringvà xuất thông báo deathnote liên quan đến cửa sổ VBE ngay lập tức

Lưu ý: VBA không có khả năng xử lý các múi giờ mà không khai báo các hàm API của Windows, vì vậy những điều này là không cần thiết cho câu hỏi, chúng đã bị loại trừ

Sub x(d,n,g,r)
e=CDate(d)
f=Day(e) Mod 10
w=IIf(e>Now," will die"," died")
i=InStr(1,n," ")
n=IIf(InStr(1,n,","),n,Mid(n,i+1)&", "&Mid(n,1,i-1))
g=LCase(g)
Debug.?n;w" on the "Day(e)Split("th|st|nd|rd","|")(IIf(f>3,0,f))" of "MonthName(Month(e))", "Year(e)IIf(InStr(1,d,":")," at "&TimeValue(d),"")"."vbCr;IIf(g="male","He",IIf(g="female","She",n))w" of "r".
End Sub

Tiền thưởng Verison, 394 376 Byte

Phiên bản sửa đổi một chút ở trên xử lý tất cả các trường hợp tiền thưởng ngoại trừ múi giờ (Sửa lỗi để xử lý các từ đồng nghĩa)

Sub x(d,n,g,r)
e=CDate(d)
f=Day(e) Mod 10
i=InStr(1,n," ")
w=Space(0 ^i)&IIf(e>Now,"will die","died")
n=IIf(InStr(1,n,",")^i,n,Mid(n,i+1)&", "&Mid(n,1,i))
g=LCase(g)
Debug.?n;w" on the "Day(e)Split("th|st|nd|rd","|")(IIf(f>3,0,f))" of "MonthName(Month(e))", "Year(e)IIf(InStr(1,d,":")," at "&TimeValue(d),"")"."vbCr;IIf(g="male","He",IIf(g="female","She",n))w" of "r".
End Sub

Sử dụng

chuỗi đầu vào và đầu ra của các vấn đề mẫu được nhìn thấy từ cửa sổ ngay lập tức VBE

?Now
01-Jun-17 1:59:35 PM

x "2 September 1973", "J.R.R. Tolkien", "Male", "pneumonia"
Tolkien, J.R.R. died on the 2nd of September, 1973.
He died of pneumonia.

x "21/12/12 23:59:59", "Harper, Stephen", "Unknown", "a heart attack for no reason"
Harper, Stephen died on the 21st of December, 2012 at 11:59:59 PM.
Harper, Stephen died of a heart attack for no reason.

x "July 21, 1969 02:56:15", "Armstrong, Neil", "Male", "poisoned moon cheese"
Armstrong, Neil died on the 21st of July, 1969 at 2:56:15 AM.
He died of poisoned moon cheese.

## Using Bonus Version

x "January 19, 2038 03:14:08","Everyone","Unknown","Y2K38"
Everyone will die on the 19th of January, 2038 at 3:14:08 AM.
Everyone will die of Y2K38.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.