Napisz własną notatkę śmierci


14

Kira potrzebuje twojej pomocy!


Format wejściowy:

Date [and/or Time]
Name
Gender
Reason

Format wyjściowy:

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


Szczegóły, szczegóły:


Twój program powinien uwzględniać co najmniej następujące formaty wprowadzania daty:

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

Formaty czasu:

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

Następujące formaty wprowadzania nazw:

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


Przypadki testowe:


Wejście:

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

Wynik:

Tolkien, JRR zmarł 2 września 1973 r.

Zmarł na zapalenie płuc.


ZASTRZEŻENIE: Jeśli faktycznie umrze w tym dniu, to wina Kiry , a nie moja.

AKTUALIZACJA: Stephen Harper nie umarł w podanym dniu

Wejście:

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

Wynik:

Harper, Stephen umrze 21 grudnia 2012 o 23:59:59.

Harfiarzu, Stephen umrze na atak serca bez powodu.



Premia:

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

--

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

Dodaj <st/nd/rd/th>na końcu DDdo wprowadzania.


Ahaha Właśnie skończyłem czytać tę serię: D Czy nie powinien to być „atak serca” bez „żadnego powodu”?
Ry-

Um, 2 września to 2/9/11, a nie 2/7/11;)
Ry-

Czy płeć nie ma żadnego wpływu na wynik?
Peter Olson

Czy musimy także akceptować daty sprzed 1970 r.?
Peter Olson

5
Jak rozróżnić dane wejściowe za pomocą DD / MM / RRRR i MM / DD / RRRR?
Peter Olson

Odpowiedzi:


6

JavaScript (561)

Można to prawdopodobnie znacznie zmniejszyć, ale oto:

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

Przykładowe I / O:

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

Tolkien, JRR zmarł 2 września 1973 r. Zmarł na zapalenie płuc.

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

Wszyscy zginą 18 stycznia 2038 r. O godzinie 21: 14: 8. Wszyscy umrą na Y2K38.

Wypróbuj to na JsFiddle .


Chcę tylko podkreślić, że i="9 November 2003 03:14:08 GMT\nDouglas Adams\nMale\nI forgot";daje mi to 8th of November.
Mateen Ulhaq

4
@muntoo To dlatego, że dostosowuje się do strefy czasowej. Jeśli mieszkasz w strefie czasowej GMT, powinna ona dać ci 9 miejsce.
Peter Olson

Będę cię winić , jeśli umrę w moje urodziny. : P
nyuszika7h

5

VB.NET, 727 695

Okej, trochę grałem w golfa. Wymaga 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

Akceptuje daty we wszystkich przypadkach testowych i wiele innych formatów dzięki Date.Parse . Akceptuje także wiele płci (jak widać). Jeśli Kira zdecyduje się podać tylko imię lub nazwisko osoby, program się zawiesi.


wygląda na to, że możesz upuścić sporo bajtów, zastępując swój podzielony argument MonthName(d.Month)wywołaniem
Taylor Scott,

2

CSharp - 463 znaków

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 znaków

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

Dodawałem nowe wiersze po każdym, ;ale ich nie policzyłem, ponieważ nie muszą tam być.
To, czy kod będzie obsługiwany, wykracza poza 19 stycznia 2038 03:14:07, zależy od tego, czy działa na komputerze 64-bitowym.


1

VBA, 384 366 bajtów

Grał w golfa

Pełna subprocedura, która pobiera dane wejściowe oczekiwanego typu Variant\Stringi wysyła powiązany komunikat z uwagą do okna VBE

Uwaga: VBA nie jest w stanie obsłużyć stref czasowych bez zadeklarowania funkcji Windows API, więc ponieważ nie są one potrzebne do pytania, zostały wykluczone

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 bajtów

Nieznacznie zmodyfikowana wersja powyższego, która obsługuje wszystkie przypadki bonusowe z wyjątkiem stref czasowych (Korekta dotycząca obsługi mononimów)

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

Stosowanie

sekwencja wejściowa i wyjściowa przykładowych problemów widzianych w bezpośrednim oknie 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.
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.