Haklı hükümdar kimdir?


18

Alemi kim yönetecek?

Aşağıdakileri içeren bir soy ağacı verilir: her aile üyesi için ad, cinsiyet, doğum tarihi, ölüm tarihi ve mirasçılar listesi. Ağacı temsil etmek için herhangi bir uygun (iç içe) liste biçimi kullanabilirsiniz. Aşağıdaki örnekler JSON kullanacaktır. Alemi kimin hangi sırayla yöneteceğini belirleyin. Ardıllık kuralları şunlardır:

  1. Bir kral öldüğünde bölge en eski yasal erkek çocuğuna gider.
  2. Eğer yoksa, en büyük yasal kız çocuğa geçer.
  3. Kralın mirasçısı yoksa, bölge en eski yasal kralın kardeşine gider
  4. Eğer erkek kardeş yoksa, bölge en büyük yasal kralın kız kardeşine gidecek
  5. Tüm yasal akrabalar öldüğünde, bölge yukarıdaki kuralları uygulayarak en yakın piçe gider
  6. Yasal veya piç akrabaları canlı değilse LINE EXTINCT

Yasal bir oğlu, babasıyla aynı "ev" adına sahip bir oğul olarak tanımlıyoruz.

Örnekler:

Giriş {}

Çıktı LINE EXTINCT

Giriş

{
    "name" : "Maegor",
    "house" : "Targaryen",
    "birth" : 12,
    "death" : 48,
    "sex" : "male",
    "heirs" : []
}

Çıktı 12-48: Maegor, LINE EXTINCT

Giriş

{
    "name" : "Jaehaerys",
    "house" : "Targaryen",
    "birth" : 34,
    "death" : 103,
    "sex" : "male",
    "heirs" : [
        {
        "name" : "Viserys",
        "house" : "Targaryen",
        "birth" : 77,
        "death" : 129,
        "sex" : "male",
        "heirs" : []
        }
    ]
}

Çıktı 34-103: Jaehaerys, 103-129: Viserys, LINE EXTINCT

Giriş

{
        "name" : "Eddard",
        "house" : "Stark",
        "birth" : 263,
        "death" : 299,
        "sex" : "male",
        "heirs" : [
            {
            "name" : "Robb",
            "house" : "Stark",
            "birth" : 283,
            "death" : 300,
            "sex" : "male",
            "heirs" : []
            },
            {
             "name" : "Jon",
             "house" : "Snow",
             "birth" : 284,
             "death" : 384,
             "sex" : "male",
             "heirs" : []
            },
            {
             "name" : "Sansa",
             "house" : "Stark",
             "birth" : 286,
             "death" : 320,
             "sex" : "female",
             "heirs" : []
            },
            {
             "name" : "Arya",
             "house" : "Stark",
             "birth" : 289,
             "death" : 350,
             "sex" : "female",
             "heirs" : []
            },

            {
             "name" : "Brann",
             "house" : "Stark",
             "birth" : 290,
             "death" : 315,
             "sex" : "male",
             "heirs" : []
            },
            {
             "name" : "Rickon",
             "house" : "Stark",
             "birth" : 295,
             "death" : 319,
             "sex" : "male",
             "heirs" : []
            }

        ]
    }

Çıktı: 263-299: Eddard, 299-300: Robb, 300-315: Brann, 315-319: Rickon, 319-320: Sansa, 320-350: Arya, 350-384: Jon, LINE EXTINCT

Çıktının istediğiniz herhangi bir şekilde biçimlendirilebileceğini unutmayın, tek gereksinimi saltanat zamanını ve saltanat kralının adını o yıllarda içermesidir. Ben ASOIAF krallar örnek olarak kullandım, ancak kod tüm giriş için geçerli olması gerekir.

İkizlerin doğmayacağını varsayabilirsiniz.

Bu bir kod golf mücadelesi, bu yüzden bayttaki en kısa kod kazanır

İyi şanslar!!!


1
"Piçler" nasıl temsil edilir?
ASCIIThenANSI

Kendi içinde bir özellik olarak belirtilmezler, aile adlarının babanınkinden farklı olup olmadığını kontrol etmek gerekir.
WizardOfMenlo

@WizardOfMenlo Evlerinin adı soyadı mı?
ASCIIThenANSI

1
@WizardOfMenlo Point 3 biraz belirsiz - In case the king had no sons the realm goes to the oldest legit king's brother. Nokta 2 ile çelişiyor gibi görünüyor (Eğer yasal bir oğul yoksa, en büyük yasal kız taçlandırılır). 3. nokta heirsyerine mi demek istiyorsun sons?
Kamehameha

1
@kamehameha evet, şimdi düzenleyeceğim
WizardOfMenlo

Yanıtlar:


6

PHP, 664 bayt

664 bayt kod golf için uygun olup olmadığından emin değilim, ama burada:

$k=json_decode($argv[1]);$s=[];$f='array_shift';$r='heirs';$e='death';$y='year';function s
($k,&$e){uasort($e,function($a,$b)use($k){$c=$a->{$h='house'};$d=$b->$h;$e=$k->$h;if($c==$e
&&$d!=$e)return-1;elseif($c!=$e&&$d==$e)return 1;elseif($a->sex<$b->sex)return 1;elseif($a
->sex>$b->sex)return -1;else return$a->birth-$b->birth;});}function d(&$e,$y){foreach($e 
as$i=>$h)if($h->death<=$y)unset($e[$i]);};($x=(array)$k)&&$k->$y=$k->birth;$l=[];while($x)
{$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
,$s);d($s,$k->$e);$k=$f($s);}if(!$k)break;$k->$y=$z;}foreach($l as$k)
echo"{$k->$y}-{$k->$e}: $k->name, ";echo"LINE EXTINCT";

JSON dize girdisini ilk komut satırı bağımsız değişkeni olarak alır.

Algoritma, meydan okumada açıklanan adımları takip eder (kraldan başlar, daha sonra bir sonraki kralı bulmak için mirasçıları ve sonra kardeşleri sıralar).

gösteri


Bu hızlı oldu!
WizardOfMenlo

whilePHP golf yaparken döngü yasaktır :).
Kara delik

Ben bir hata olduğunu düşünüyorum, ben burada test ve bağlantı doğru aşağı gidiyor, ancak Jon Snow vermek için geri gitmez sonra bu haklı taht
WizardOfMenlo

Bu bir hata değil. Aslında meydan okumada tanımlanan kuralları takip eder. Gördüğünüz gibi, son kral Arya'nın oğlu olan Tyrion'dur. Bu, bir sonraki kralın Tyrion'un mirasçıları veya kardeşlerinden biri olması gerektiği anlamına gelir. Ama ne kardeşi ne de varisi var. Örneğinizdeki JSON'a göre Jon Snow'un Tyrion'un amcası olduğunu lütfen unutmayın.
Razvan

Kesinlikle haklısın, benim fanboysm en iyi benim var
WizardOfMenlo
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.