Ai là người cai trị hợp pháp?


18

Ai sẽ cai trị vương quốc?

Bạn được cấp một cây gia đình bao gồm: tên, giới tính, ngày sinh, ngày chết và danh sách những người thừa kế, cho mỗi thành viên trong gia đình. Bạn có thể sử dụng bất kỳ định dạng danh sách (lồng nhau) thuận tiện để đại diện cho cây. Các ví dụ sau sẽ sử dụng JSON. Xác định ai sẽ cai trị vương quốc và theo thứ tự nào. Các quy tắc kế tiếp như sau:

  1. Khi một vị vua chết, vương quốc sẽ đến với đứa con trai hợp pháp lâu đời nhất của nó.
  2. Nếu không có nó, nó sẽ chuyển sang đứa con gái lớn nhất hợp pháp.
  3. Trong trường hợp nhà vua không có người thừa kế, vương quốc sẽ đến với anh trai của vị vua hợp pháp lâu đời nhất
  4. Nếu không có anh em, vương quốc sẽ đến nhà chị gái hợp pháp lâu đời nhất
  5. Nếu tất cả người thân hợp pháp đã chết, vương quốc sẽ đến với tên khốn gần nhất, áp dụng các quy tắc trên
  6. Nếu không có người thân hợp pháp cũng không phải là bản in LINE EXTINCT

Chúng tôi định nghĩa một đứa con trai hợp pháp là một người có cùng tên "nhà" với bố của nó.

Ví dụ:

Đầu vào {}

Đầu ra LINE EXTINCT

Đầu vào

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

Đầu ra 12-48: Maegor, LINE EXTINCT

Đầu vào

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

Đầu ra 34-103: Jaehaerys, 103-129: Viserys, LINE EXTINCT

Đầu vào

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

        ]
    }

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

Lưu ý rằng đầu ra có thể được định dạng theo bất kỳ cách nào bạn muốn, yêu cầu duy nhất của nó là nó chứa thời gian trị vì và tên của vị vua trị vì trong những năm đó. Tôi đã sử dụng các vị vua từ ASOIAF làm ví dụ minh họa, tuy nhiên mã cần phải hợp lệ cho tất cả các đầu vào.

Bạn có thể cho rằng sẽ không có cặp song sinh nào được sinh ra.

Đây là một thử thách chơi gôn mã, vì vậy mã ngắn nhất tính bằng byte sẽ thắng

Chúc may mắn!!!


1
"Những kẻ khốn" được đại diện như thế nào?
ASCIIThenANSI

Bản thân chúng không được chỉ định là một thuộc tính, người ta sẽ cần kiểm tra xem họ của họ có khác với họ hay không.
WizardOfMenlo

@WizardOfMenlo Vậy nhà của họ có phải là họ của họ không?
ASCIIThenANSI

1
@WizardOfMenlo Điểm 3 không rõ ràng - In case the king had no sons the realm goes to the oldest legit king's brother. Nó dường như mâu thuẫn với điểm 2 (Nếu không có con trai hợp pháp thì con gái hợp pháp lớn tuổi nhất sẽ lên ngôi). Bạn có nghĩa là heirsthay vì sonstrong điểm 3?
Kamehameha

1
@kamehameha vâng, tôi sẽ chỉnh sửa nó ngay bây giờ
WizardOfMenlo

Câu trả lời:


6

PHP, 664 byte

Tôi không chắc 664 byte có phù hợp để chơi gôn không, nhưng đây là:

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

Nó nhận đầu vào chuỗi JSON làm đối số dòng lệnh đầu tiên.

Thuật toán tuân theo các bước được mô tả trong thử thách (bắt đầu từ nhà vua, sau đó sắp xếp những người thừa kế và sau đó là anh chị em để tìm vị vua tiếp theo).

Bản giới thiệu


Nó thật nhanh!
WizardOfMenlo

whilevòng lặp bị cấm khi chơi golf trong PHP :).
Hố đen

Tôi nghĩ rằng có một sai lầm, tôi đã kiểm tra nó ở đây và nó liên kết chính xác xuống dòng, tuy nhiên sau khi nó không quay trở lại để trao cho Jon Snow thì đó là ngai vàng đúng đắn
WizardOfMenlo

Đó không phải là một sai lầm. Nó thực sự tuân theo các quy tắc đã được xác định trong challange. Như bạn có thể thấy, vị vua cuối cùng là Tyrion, con trai của Arya. Điều này có nghĩa là vị vua tiếp theo nên nằm trong số những người thừa kế của Tyrion hoặc một trong những người anh em của mình. Nhưng anh không có anh em, cũng không có người thừa kế. Xin lưu ý rằng, theo JSON trong ví dụ của bạn, Jon Snow là chú của Tyrion.
Razvan

Bạn hoàn toàn đúng, fanboysm của tôi có thứ tốt nhất của tôi
WizardOfMenlo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.