Tulis Death Note Anda sendiri

14

Kira membutuhkan bantuanmu!


Masukkan format:

Date [and/or Time]
Name
Gender
Reason

Format output:

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


Detail, Detail:


Program Anda harus memperhitungkan setidaknya format input tanggal berikut:

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

Format waktu:

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

Format input nama berikut:

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


Kasus uji:


Memasukkan:

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

Keluaran:

Tolkien, JRR meninggal pada tanggal 2 September 1973.

Dia meninggal karena pneumonia.


PENOLAKAN: Jika dia benar-benar mati pada tanggal ini, itu adalah kesalahan Kira , bukan milikku.

UPDATE: Stephen Harper tidak mati pada tanggal yang tercantum

Memasukkan:

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

Keluaran:

Harper, Stephen akan mati pada 21 Desember 2012 pukul 11:59:59 malam.

Harper, Stephen akan mati karena serangan jantung tanpa alasan.



Bonus:

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

--

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

Tambahkan <st/nd/rd/th>di akhir DDinput.

Mateen Ulhaq
sumber
Ahaha saya baru saja selesai membaca seri ini: D Bukankah seharusnya itu "serangan jantung" karena "tidak ada alasan"?
Ry-
Um, September 2 adalah 2/9/11, tidak 2/7/11;)
Ry-
Apakah gender tidak memiliki efek pada output?
Peter Olson
Juga, apakah kita harus menerima tanggal sebelum tahun 1970?
Peter Olson
5
Bagaimana kita membedakan antara input dengan DD / MM / YYYY dan MM / DD / YYYY?
Peter Olson

Jawaban:

6

Javascript (561)

Ini mungkin dapat dikurangi secara signifikan, tetapi begini:

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

Sampel I / O:

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

Tolkien, JRR meninggal pada tanggal 2 September 1973. Dia meninggal karena pneumonia.

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

Setiap orang akan mati pada tanggal 18 Januari 2038 pukul 21.14: 8. Semua orang akan mati karena Y2K38.

Cobalah di JsFiddle .

Peter Olson
sumber
Hanya ingin menunjukkan yang i="9 November 2003 03:14:08 GMT\nDouglas Adams\nMale\nI forgot";memberi saya 8th of November.
Mateen Ulhaq
4
@muntoo Itu karena itu menyesuaikan dengan zona waktu Anda. Jika Anda tinggal di zona waktu GMT, itu seharusnya memberi Anda urutan ke-9.
Peter Olson
Aku akan menyalahkan Anda jika aku mati pada ulang tahun saya. : P
nyuszika7h
5

VB.NET, 727 695

Oke, golf sedikit. Membutuhkan 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

Ia menerima tanggal dalam semua kasus uji, dan banyak format lainnya berkat Date.Parse. Ini menerima banyak jenis kelamin (seperti yang Anda lihat) juga. Jika Kira memutuskan untuk hanya memasukkan nama depan atau belakang orang tersebut, program tersebut akan macet.

Ry-
sumber
Sepertinya Anda mungkin dapat menjatuhkan beberapa byte dengan mengganti argumen split Anda dengan MonthName(d.Month)panggilan
Taylor Scott
2

CSharp - 463 karakter

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));}
rampok
sumber
1

PHP, 509 474 462 461 karakter

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

Saya telah menambahkan baris baru setelah masing-masing ;tetapi tidak menghitungnya karena tidak perlu ada di sana.
Apakah kode menangani tanggal di luar 19 Januari 2038 03:14:07, tergantung pada apakah itu dijalankan pada mesin 64bit.

Gareth
sumber
1

VBA, 384 366 Bytes

Golf

subRutin penuh yang mengambil input dari tipe yang diharapkan Variant\Stringdan menampilkan pesan deathnote terkait ke jendela VBE segera

Catatan: VBA tidak mampu menangani Zona Waktu tanpa mendeklarasikan fungsi Windows API, sehingga ini tidak diperlukan untuk pertanyaan, mereka telah dikecualikan

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

Versi modifikasi di atas yang menangani semua kasus bonus dengan perkecualian zona waktu (Koreksi untuk penanganan mononim)

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

Pemakaian

input dan output urutan contoh masalah seperti yang terlihat dari jendela langsung 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.
Taylor Scott
sumber