Écrivez votre propre Death Note


14

Kira a besoin de votre aide!


Format d'entrée:

Date [and/or Time]
Name
Gender
Reason

Format de sortie:

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


Détails, Détails:


Votre programme doit prendre en compte au moins les formats d'entrée de date suivants:

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

Formats d'heure:

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

Les formats d'entrée de nom suivants:

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


Cas de test:


Contribution:

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

Production:

Tolkien, JRR est décédé le 2 septembre 1973.

Il est décédé d'une pneumonie.


AVERTISSEMENT: S'il meurt réellement à cette date, c'est la faute de Kira , pas la mienne.

MISE À JOUR: Stephen Harper n'est pas mort à la date indiquée

Contribution:

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

Production:

Harper, Stephen mourra le 21 décembre 2012 à 23 h 59 min 59 s.

Harper, Stephen mourra d'une crise cardiaque sans raison.



Prime:

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

--

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

Ajouter <st/nd/rd/th>à la fin de DDpour la saisie.


Ahaha Je viens de terminer la lecture de cette série: D Ne devrait-ce pas être une "crise cardiaque" sans "raison"?
Ry-

Um, le 2 septembre est le 2/9/11, pas le 2/7/11;)
Ry-

Le sexe n'a-t-il aucun effet sur la sortie?
Peter Olson

De plus, devons-nous accepter des dates antérieures à 1970?
Peter Olson

5
Comment pouvons-nous lever l'ambiguïté entre la saisie avec JJ / MM / AAAA et MM / JJ / AAAA?
Peter Olson

Réponses:


6

Javascript (561)

Cela peut probablement être considérablement réduit, mais voici:

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

Exemple d'E / S:

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

Tolkien, JRR est décédé le 2 septembre 1973. Il est décédé d'une pneumonie.

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

Tout le monde mourra le 18 janvier 2038 à 21: 14: 8. Tout le monde mourra de Y2K38.

Essayez-le sur JsFiddle .


Je veux juste souligner que cela i="9 November 2003 03:14:08 GMT\nDouglas Adams\nMale\nI forgot";me donne le 8th of November.
Mateen Ulhaq

4
@muntoo C'est parce qu'il s'adapte à votre fuseau horaire. Si vous vivez dans le fuseau horaire GMT, cela devrait vous donner 9e.
Peter Olson

Je vais te blâmer si je meurs le jour de mon anniversaire. : P
nyuszika7h

5

VB.NET, 727 695

D'accord, un peu joué au golf. Requiert 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

Il accepte les dates dans tous les cas de test, et bien d'autres formats grâce à Date.Parse. Il accepte également de nombreux genres (comme vous pouvez le voir). Si Kira décide de ne mettre que le prénom ou le nom de la personne, le programme se bloquera.


il semble que vous puissiez supprimer quelques octets en remplaçant votre argument fractionné par un MonthName(d.Month)appel
Taylor Scott

2

CSharp - 463 caractères

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 caractères

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

J'ai ajouté des nouvelles lignes après chacune ;mais je ne les ai pas comptées car elles n'ont pas besoin d'être là.
Que le code gère les dates au-delà du 19 janvier 2038 03:14:07, cela dépend s'il est exécuté sur une machine 64 bits.


1

VBA, 384 366 octets

Golfé

Routine complète subqui prend l'entrée du type attendu Variant\Stringet génère le message de note de mort associé dans la fenêtre Immédiatement du VBE

Remarque: VBA est incapable de gérer les fuseaux horaires sans déclarer les fonctions de l'API Windows, de sorte que celles-ci ne sont pas nécessaires pour la question, elles ont été exclues

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 octets

Version légèrement modifiée de ce qui précède qui gère tous les cas de bonus à l'exception des fuseaux horaires (correction pour la gestion des mononymes)

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

Usage

séquence d'entrée et de sortie des exemples de problèmes vus depuis la fenêtre immédiate du 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.
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.