fork download
  1. <?php
  2. // Simulate the input
  3. $argv[1] = <<<HEREDOC
  4. {
  5.   "name" : "Eddard",
  6.   "house" : "Stark",
  7.   "birth" : 263,
  8.   "death" : 299,
  9.   "sex" : "male",
  10.   "heirs" : [
  11.   {
  12.   "name" : "Robb",
  13.   "house" : "Stark",
  14.   "birth" : 283,
  15.   "death" : 300,
  16.   "sex" : "male",
  17.   "heirs" : []
  18.   },
  19.   {
  20.   "name" : "Jon",
  21.   "house" : "Snow",
  22.   "birth" : 284,
  23.   "death" : 384,
  24.   "sex" : "male",
  25.   "heirs" : []
  26.   },
  27.   {
  28.   "name" : "Sansa",
  29.   "house" : "Stark",
  30.   "birth" : 286,
  31.   "death" : 320,
  32.   "sex" : "female",
  33.   "heirs" : []
  34.   },
  35.   {
  36.   "name" : "Arya",
  37.   "house" : "Stark",
  38.   "birth" : 289,
  39.   "death" : 350,
  40.   "sex" : "female",
  41.   "heirs" : [
  42.   {
  43.   "name" : "Tyrion",
  44.   "house" : "Stark",
  45.   "birth" : 340,
  46.   "death" : 380,
  47.   "sex" : "female",
  48.   "heirs" : []
  49.   }
  50.   ]
  51.   },
  52.  
  53.   {
  54.   "name" : "Brann",
  55.   "house" : "Stark",
  56.   "birth" : 290,
  57.   "death" : 315,
  58.   "sex" : "male",
  59.   "heirs" : []
  60.   },
  61.   {
  62.   "name" : "Rickon",
  63.   "house" : "Stark",
  64.   "birth" : 295,
  65.   "death" : 319,
  66.   "sex" : "male",
  67.   "heirs" : []
  68.   }
  69.  
  70.   ]
  71.   }
  72. HEREDOC;
  73.  
  74. $k=json_decode($argv[1]);$s=[];$f='array_shift';$r='heirs';$e='death';$y='year';function s
  75. ($k,&$e){uasort($e,function($a,$b)use($k){$c=$a->{$h='house'};$d=$b->$h;$e=$k->$h;if($c==$e
  76. &&$d!=$e)return-1;elseif($c!=$e&&$d==$e)return 1;elseif($a->sex<$b->sex)return 1;elseif($a
  77. ->sex>$b->sex)return -1;else return$a->birth-$b->birth;});}function d(&$e,$y){foreach($e
  78. as$i=>$h)if($h->death<=$y)unset($e[$i]);};($x=(array)$k)&&$k->$y=$k->birth;$l=[];while($x)
  79. {$l[]=$k;$z=$k->$e;s($k,$k->$r);d($k->$r,$k->$e);if($k->$r){$s=$k->$r;$k=$f($s);}else{s($k
  80. ,$s);d($s,$k->$e);$k=$f($s);}if(!$k)break;$k->$y=$z;}foreach($l as$k)
  81. echo"{$k->$y}-{$k->$e}: $k->name, ";echo"LINE EXTINCT";
Success #stdin #stdout 0.02s 52472KB
stdin
Standard input is empty
stdout
263-299: Eddard, 299-300: Robb, 300-315: Brann, 315-319: Rickon, 319-320: Sansa, 320-350: Arya, 350-380: Tyrion, LINE EXTINCT