fork(1) 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.  
  44.   {
  45.   "name" : "Brann",
  46.   "house" : "Stark",
  47.   "birth" : 290,
  48.   "death" : 315,
  49.   "sex" : "male",
  50.   "heirs" : []
  51.   },
  52.   {
  53.   "name" : "Rickon",
  54.   "house" : "Stark",
  55.   "birth" : 295,
  56.   "death" : 319,
  57.   "sex" : "male",
  58.   "heirs" : []
  59.   }
  60.  
  61.   ]
  62.   }
  63. HEREDOC;
  64.  
  65. $k=json_decode($argv[1]);$s=[];$f='array_shift';$r='heirs';$e='death';$y='year';function s
  66. ($k,&$e){uasort($e,function($a,$b)use($k){$c=$a->{$h='house'};$d=$b->$h;$e=$k->$h;if($c==$e
  67. &&$d!=$e)return-1;elseif($c!=$e&&$d==$e)return 1;elseif($a->sex<$b->sex)return 1;elseif($a
  68. ->sex>$b->sex)return -1;else return$a->birth-$b->birth;});}function d(&$e,$y){foreach($e
  69. as$i=>$h)if($h->death<=$y)unset($e[$i]);};($x=(array)$k)&&$k->$y=$k->birth;$l=[];while($x)
  70. {$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
  71. ,$s);d($s,$k->$e);$k=$f($s);}if(!$k)break;$k->$y=$z;}foreach($l as$k)
  72. echo"{$k->$y}-{$k->$e}: $k->name, ";echo"LINE EXTINCT";
Success #stdin #stdout 0.03s 52480KB
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-384: Jon, LINE EXTINCT