เขียนเด ธ โน้ตของคุณเอง


14

คิระต้องการความช่วยเหลือของคุณ!


รูปแบบอินพุต:

Date [and/or Time]
Name
Gender
Reason

รูปแบบผลลัพธ์:

<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>.


รายละเอียดรายละเอียด:


โปรแกรมของคุณควรมีรูปแบบการป้อนข้อมูลตามวันที่อย่างน้อย:

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

รูปแบบเวลา:

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

รูปแบบอินพุตชื่อต่อไปนี้:

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


กรณีทดสอบ:


การป้อนข้อมูล:

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

เอาท์พุท:

โทลคีน JRR เสียชีวิตเมื่อวันที่ 2 กันยายน 2516

เขาเสียชีวิตด้วยโรคปอดบวม


การปฏิเสธความรับผิด:ถ้าเขาตายจริงในวันนี้มันเป็นความผิดของ Kiraไม่ใช่ของฉัน

ปรับปรุง: Stephen Harper ไม่ตายในวันที่ระบุไว้

การป้อนข้อมูล:

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

เอาท์พุท:

Harper, Stephen จะตายในวันที่ 21 ธันวาคม 2012 เวลา 23.55 น.

ฮาร์เปอร์สตีเฟ่นจะตายด้วยอาการหัวใจวายโดยไม่มีเหตุผล



โบนัส:

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

--

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

เพิ่ม<st/nd/rd/th>ที่ส่วนท้ายของDDอินพุต


อาฮาฮาฉันเพิ่งอ่านซีรีส์นี้เสร็จ: D น่าจะไม่ใช่ "หัวใจวาย" เพราะ "ไม่มีเหตุผล" งั้นเหรอ?
Ry-

อืม, 2 กันยายนคือ 2/9/11, ไม่ใช่ 2/7/11;)
Ry-

เพศไม่ได้มีผลกระทบต่อการส่งออกหรือไม่?
Peter Olson

นอกจากนี้เราต้องยอมรับวันที่ก่อนปี 1970 หรือไม่?
Peter Olson

5
เราจะแก้ปัญหาระหว่างอินพุตกับ DD / MM / YYYY และ MM / DD / YYYY อย่างไร
Peter Olson

คำตอบ:


6

Javascript (561)

อาจลดลงอย่างมีนัยสำคัญ แต่นี่จะไป:

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]+".");

ตัวอย่าง I / O:

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

โทลคีน JRR เสียชีวิตเมื่อวันที่ 2 กันยายน 2516 เขาเสียชีวิตด้วยโรคปอดบวม

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

ทุกคนจะตายในวันที่ 18 มกราคม 2581 เวลา 21: 14: 8 ทุกคนจะตายจาก Y2K38

ลองมันออกมาบนJsFiddle


แค่อยากจะชี้i="9 November 2003 03:14:08 GMT\nDouglas Adams\nMale\nI forgot";ให้ฉันเห็น8th of Novemberว่า
Mateen Ulhaq

4
@muntoo นั่นเป็นเพราะมันปรับตามเขตเวลาของคุณ หากคุณอาศัยอยู่ในเขตเวลา GMT ควรให้ 9
Peter Olson

ฉันจะโทษคุณถ้าฉันตายในวันเกิดของฉัน : P
nyuszika7h

5

VB.NET, 727 695

โอเคตีกอล์ฟเล็กน้อย 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

มันรับวันในทุกกรณีการทดสอบและขอบคุณหลายรูปแบบอื่น ๆ Date.Parseที่จะ มันยอมรับเพศมากมาย (เท่าที่คุณเห็น) เช่นกัน หาก Kira ตัดสินใจที่จะใส่เฉพาะชื่อหรือนามสกุลของบุคคลนั้นโปรแกรมจะหยุดทำงาน


ดูเหมือนว่าคุณจะสามารถวางได้ไม่กี่ไบต์โดยแทนที่อาร์กิวเมนต์แยกของคุณด้วยการMonthName(d.Month)โทร
Taylor Scott

2

CSharp - 463 ตัวอักษร

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 ตัวอักษร

<?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];

ฉันได้เพิ่มบรรทัดใหม่หลังจากแต่ละบรรทัด;แต่ไม่นับพวกเขาเนื่องจากพวกเขาไม่จำเป็นต้องอยู่ที่นั่น
ไม่ว่าจะเป็นรหัสที่จัดการกับวันที่เกิน 19 มกราคม 2038 03:14:07 ขึ้นอยู่กับว่ามันทำงานบนเครื่อง 64 บิตหรือไม่


1

VBA, 384 366 ไบต์

แข็งแรงเล่นกอล์ฟ

subรูทีนเต็มรูปแบบที่รับอินพุตชนิดที่คาดหวังVariant\Stringและส่งออกข้อความเด ธ โน้ตที่เกี่ยวข้องไปยังหน้าต่าง VBE ทันที

หมายเหตุ: VBA ไม่สามารถจัดการเขตเวลาได้โดยไม่ต้องประกาศฟังก์ชั่น Windows API ดังนั้นจึงไม่มีความจำเป็นสำหรับคำถามเหล่านี้จึงถูกยกเว้น

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

รูปแบบโบนัส 394 376 ไบต์

เวอร์ชั่นด้านบนที่ได้รับการแก้ไขเล็กน้อยซึ่งสามารถจัดการกับกรณีโบนัสทั้งหมดได้ยกเว้นเขตเวลา (การแก้ไขเพื่อจัดการชื่อเล่น)

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

การใช้

อินพุตและเอาต์พุตลำดับของปัญหาตัวอย่างตามที่เห็นจากหน้าต่าง 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.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.