Siapa penguasa yang sah?

18

Siapa yang akan memerintah kerajaan?

Anda diberi silsilah keluarga yang berisi: nama, jenis kelamin, tanggal lahir, tanggal kematian dan daftar ahli waris, untuk setiap anggota keluarga. Anda dapat menggunakan format daftar yang mudah digunakan (bersarang) untuk mewakili pohon. Contoh berikut akan menggunakan JSON. Tentukan siapa yang akan memerintah wilayah dan urutannya. Aturan suksesi adalah sebagai berikut:

  1. Ketika seorang raja meninggal dunia pergi ke anak laki-laki tertua yang sah.
  2. Jika tidak ada, maka akan diteruskan ke anak perempuan tertua yang sah.
  3. Jika raja tidak memiliki ahli waris, kerajaan jatuh ke tangan saudara lelaki tertua yang sah
  4. Jika tidak ada saudara laki-laki, kerajaan akan pergi ke saudara tertua raja yang sah
  5. Jika semua kerabat yang sah mati dunia akan pergi ke bajingan terdekat, menerapkan aturan di atas
  6. Jika tidak ada kerabat sah atau bajingan yang masih hidup dicetak LINE EXTINCT

Kami mendefinisikan anak yang sah sebagai orang yang memiliki nama "rumah" yang sama dengan ayahnya.

Contoh:

Memasukkan {}

Keluaran LINE EXTINCT

Memasukkan

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

Keluaran 12-48: Maegor, LINE EXTINCT

Memasukkan

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

Keluaran 34-103: Jaehaerys, 103-129: Viserys, LINE EXTINCT

Memasukkan

{
        "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" : []
            }

        ]
    }

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

Perhatikan bahwa output dapat diformat dengan cara apa pun yang Anda inginkan, satu-satunya persyaratan adalah bahwa ia berisi waktu pemerintahan dan nama raja yang memerintah selama tahun-tahun itu. Saya telah menggunakan raja-raja dari ASOIAF sebagai contoh demonstratif, namun kode harus valid untuk semua input.

Anda mungkin berasumsi bahwa tidak ada anak kembar yang dilahirkan.

Ini adalah tantangan golf kode, jadi kode terpendek dalam byte menang

Semoga berhasil!!!

WizardOfMenlo
sumber
1
Bagaimana "bajingan" diwakili?
ASCIIThenANSI
Dalam dirinya sendiri mereka tidak diindikasikan sebagai atribut, orang perlu memeriksa apakah nama keluarga mereka berbeda dari ayah.
WizardOfMenlo
@WizardOfMenlo Jadi, apakah nama rumah mereka adalah nama keluarga mereka?
ASCIIThenANSI
1
@WizardOfMenlo Point 3 agak tidak jelas - In case the king had no sons the realm goes to the oldest legit king's brother. Tampaknya bertentangan dengan poin 2 (Jika tidak ada putra yang sah, maka anak perempuan tertua yang sah dinobatkan). Apakah maksud Anda heirsalih-alih sonsdi poin 3?
Kamehameha
1
@kamehameha ya, saya akan mengeditnya sekarang
WizardOfMenlo

Jawaban:

6

PHP, 664 byte

Saya tidak yakin apakah 664 byte cocok untuk kode golf, tetapi ini dia:

$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";

Ia menerima input string JSON sebagai argumen baris perintah pertama.

Algoritme mengikuti langkah-langkah yang dijelaskan dalam tantangan (mulai dari raja, kemudian mengurutkan ahli waris dan kemudian saudara kandung untuk menemukan raja berikutnya).

Demo

Razvan
sumber
Itu tadi cepat!
WizardOfMenlo
whileloop dilarang saat bermain golf di PHP :).
Blackhole
Saya pikir ada kesalahan, saya sudah mengujinya di sini dan tautannya berjalan dengan benar di telepon, namun setelah itu tidak kembali memberi Jon Snow tahta yang sah
WizardOfMenlo
Itu bukan kesalahan. Ini sebenarnya mengikuti aturan yang didefinisikan dalam tantangan. Seperti yang Anda lihat, raja terakhir adalah Tyrion yang merupakan putra Arya. Ini berarti bahwa raja berikutnya harus berada di antara ahli waris Tyrion atau salah satu saudara lelakinya. Tetapi dia tidak memiliki saudara laki-laki, atau pewaris. Harap perhatikan bahwa, sesuai JSON dalam contoh Anda, Jon Snow adalah paman Tyrion.
Razvan
Anda memang benar, fanboysm saya mendapatkan yang terbaik dari saya
WizardOfMenlo