Schreiben Sie Ihre eigene Todesnotiz

14

Kira braucht deine Hilfe!


Eingabeformat:

Date [and/or Time]
Name
Gender
Reason

Ausgabeformat:

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


Details, Details:


Ihr Programm sollte mindestens die folgenden Datumseingabeformate berücksichtigen:

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

Zeitformate:

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

Die folgenden Namenseingabeformate:

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


Testfälle:


Eingang:

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

Ausgabe:

Tolkien, JRR starb am 2. September 1973.

Er starb an einer Lungenentzündung.


HAFTUNGSAUSSCHLUSS: Wenn er an diesem Tag tatsächlich stirbt, ist es Kiras Schuld, nicht meine.

UPDATE: Stephen Harper ist zum angegebenen Datum nicht gestorben

Eingang:

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

Ausgabe:

Harper, Stephen wird am 21. Dezember 2012 um 23:59:59 Uhr sterben.

Harper, Stephen wird ohne Grund an einem Herzinfarkt sterben.



Bonus:

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

--

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

Fügen Sie <st/nd/rd/th>am Ende des DDfür die Eingabe.

Mateen Ulhaq
quelle
Ahaha, ich habe gerade diese Serie gelesen: D Sollte es dann nicht "Herzinfarkt" ohne Grund sein?
Ry
Ähm, der 2. September ist der 09.02.11, nicht der 07.02.11;)
Ry
Hat das Geschlecht keinen Einfluss auf die Ausgabe?
Peter Olson
Müssen wir auch Daten vor 1970 akzeptieren?
Peter Olson
5
Wie kann zwischen der Eingabe mit TT / MM / JJJJ und MM / TT / JJJJ unterschieden werden?
Peter Olson

Antworten:

6

Javascript (561)

Dies kann wahrscheinlich erheblich reduziert werden, aber hier geht:

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

Beispiel-E / A:

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

Tolkien, JRR starb am 2. September 1973. Er starb an einer Lungenentzündung.

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

Jeder wird am 18. Januar 2038 um 21: 14: 8 Uhr sterben. Jeder wird an Y2K38 sterben.

Probieren Sie es auf JsFiddle aus .

Peter Olson
quelle
i="9 November 2003 03:14:08 GMT\nDouglas Adams\nMale\nI forgot";Ich möchte nur darauf hinweisen, das gibt mir die 8th of November.
Mateen Ulhaq
4
@muntoo Das liegt daran, dass es sich an Ihre Zeitzone anpasst. Wenn Sie in der GMT-Zeitzone leben, sollten Sie den 9. Platz belegen.
Peter Olson
Ich werde dir die Schuld geben , wenn ich an meinem Geburtstag sterbe. : P
nyuszika7h
5

VB.NET, 727 695

Okay, ein bisschen Golf gespielt. Benötigt 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

Es akzeptiert die Daten in allen Testfällen und viele andere Formate dank Date.Parse. Es akzeptiert auch viele Geschlechter (wie Sie sehen können). Wenn Kira beschließt, nur den Vor- oder Nachnamen der Person anzugeben, stürzt das Programm ab.

Ry-
quelle
Es sieht so aus, als ob Sie möglicherweise einige Bytes löschen können, indem Sie Ihr geteiltes Argument durch einen MonthName(d.Month)Aufruf ersetzen
Taylor Scott
2

CSharp - 463 Zeichen

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));}
rauben
quelle
1

PHP, 509 474 462 461 Zeichen

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

Ich habe nach jedem Zeilenwechsel neue Zeilen hinzugefügt, diese ;jedoch nicht gezählt, da sie nicht vorhanden sein müssen.
Ob der Code Daten nach dem 19. Januar 2038, 03:14:07 Uhr verarbeitet, hängt davon ab, ob er auf einem 64-Bit-Computer ausgeführt wird.

Gareth
quelle
1

VBA, 384 366 Bytes

Golf gespielt

Vollständige subRoutine, die Eingaben des erwarteten Typs entgegennimmt Variant\Stringund die zugehörige Deathnote-Nachricht an das VBE-Direktfenster ausgibt

Hinweis: VBA ist nicht in der Lage, Zeitzonen zu verarbeiten, ohne Windows-API-Funktionen zu deklarieren. Da diese für die Frage nicht erforderlich sind, wurden sie ausgeschlossen

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

Bonus Verison, 394 376 Bytes

Leicht modifizierte Version des oben genannten, die alle Bonusfälle mit Ausnahme der Zeitzonen behandelt (Korrektur für den Umgang mit Mononymen)

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

Verwendung

Eingabe- und Ausgabereihenfolge der Beispielprobleme aus dem VBE-Direktfenster

?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.
Taylor Scott
quelle