ใครคือผู้ปกครองที่ชอบธรรม?


18

ใครจะเป็นผู้ปกครองอาณาจักร?

คุณจะได้รับแผนภูมิต้นไม้ซึ่งประกอบด้วย: ชื่อ, เพศ, วันเดือนปีเกิด, วันที่ตายและรายชื่อทายาทสำหรับสมาชิกครอบครัวแต่ละคน คุณสามารถใช้รูปแบบรายการที่สะดวก (ซ้อนกัน) เพื่อแสดงต้นไม้ ตัวอย่างต่อไปนี้จะใช้ JSON กำหนดผู้ที่จะปกครองอาณาจักรและในลำดับที่ กฎการสืบทอดมีดังต่อไปนี้:

  1. เมื่อกษัตริย์สิ้นชีวิตอาณาจักรก็ไปสู่ลูกผู้ชายที่ถูกกฎหมายที่สุด
  2. หากไม่มีใครผ่านไปยังเด็กผู้หญิงที่ถูกกฎหมายที่เก่าแก่ที่สุด
  3. ในกรณีที่กษัตริย์ไม่มีทายาทอาณาจักรจะไปหาน้องชายของกษัตริย์ผู้ชอบธรรม
  4. หากไม่มีพี่น้องชายอาณาจักรจะไปหาน้องสาวของกษัตริย์ผู้ชอบธรรม
  5. หากญาติสนิททุกคนตายไปแล้วอาณาจักรจะไปสู่ไอ้ที่อยู่ใกล้ที่สุดโดยใช้กฎข้างต้น
  6. หากไม่มีญาติแท้หรือลูกครึ่งที่ยังมีชีวิตอยู่พิมพ์ LINE EXTINCT

เราให้คำจำกัดความลูกชายที่ถูกกฎหมายว่าเป็นคนที่มีชื่อ "บ้าน" เหมือนกับพ่อของมัน

ตัวอย่าง:

อินพุต {}

เอาท์พุต LINE EXTINCT

อินพุต

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

เอาท์พุต 12-48: Maegor, LINE EXTINCT

อินพุต

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

เอาท์พุต 34-103: Jaehaerys, 103-129: Viserys, LINE EXTINCT

อินพุต

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

        ]
    }

เอาท์พุท: 263-299: Eddard, 299-300: Robb, 300-315: Brann, 315-319: Rickon, 319-320: Sansa, 320-350: Arya, 350-384: Jon, LINE EXTINCT

โปรดทราบว่าเอาต์พุตสามารถจัดรูปแบบในแบบที่คุณต้องการข้อกำหนดเพียงอย่างเดียวคือมันมีเวลาของการครองราชย์และชื่อของราชาผู้ครองราชย์ในช่วงปีเหล่านั้น ฉันใช้ kings จาก ASOIAF เป็นตัวอย่างในการสาธิตอย่างไรก็ตามรหัสจะต้องถูกต้องสำหรับอินพุตทั้งหมด

คุณอาจคิดว่าจะไม่มีฝาแฝดเกิด

นี่คือการแข่งขันกอล์ฟรหัสดังนั้นรหัสที่สั้นที่สุดในหน่วยไบต์ชนะ

โชคดี!!!


1
มีการแสดง "ไอ้สารเลว" อย่างไร
ASCIIThenANSI

ในตัวเองพวกเขาไม่ได้ระบุว่าเป็นคุณลักษณะหนึ่งจะต้องตรวจสอบว่าชื่อครอบครัวของพวกเขาแตกต่างจากพ่อ
WizardOfMenlo

@WizardOfMenlo ดังนั้นชื่อบ้านของพวกเขาคือชื่อครอบครัวของพวกเขา?
ASCIIThenANSI

1
@WizardOfMenlo 3 จุดเป็นบิตชัดเจน In case the king had no sons the realm goes to the oldest legit king's brother- ดูเหมือนว่าจะขัดแย้งกับจุดที่ 2 (ถ้าไม่มีลูกที่ถูกต้องก็จะได้สวมมงกุฎลูกสาวที่ถูกต้องที่สุด) คุณหมายถึงheirsแทนที่จะเป็นsonsในจุดที่ 3 หรือไม่?
Kamehameha

1
@kamehameha ใช่ฉันจะแก้ไขทันที
WizardOfMenlo

คำตอบ:


6

PHP, 664 ไบต์

ฉันไม่แน่ใจว่า 664 ไบต์เหมาะสำหรับการตีกอล์ฟหรือไม่ แต่นี่คือ:

$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 เป็นอาร์กิวเมนต์บรรทัดคำสั่งแรก

อัลกอริทึมทำตามขั้นตอนที่อธิบายไว้ในการท้าทาย (เริ่มจากราชาแล้วทายาทและพี่น้องเพื่อค้นหากษัตริย์องค์ต่อไป)

การสาธิต


มันเร็วมาก!
WizardOfMenlo

whileไม่อนุญาตให้วนซ้ำเมื่อเล่นกอล์ฟใน PHP :)
Blackhole

ฉันคิดว่ามีข้อผิดพลาดฉันได้ทดสอบที่นี่และลิงก์เชื่อมโยงลงไปอย่างถูกต้องอย่างไรก็ตามหลังจากที่มันไม่ได้กลับไปให้ Jon Jon เป็นบัลลังก์ที่ถูกต้อง
WizardOfMenlo

มันไม่ใช่ความผิดพลาด จริง ๆ แล้วมันเป็นไปตามกฎที่กำหนดไว้ใน challange อย่างที่คุณเห็นกษัตริย์องค์สุดท้ายคือ Tyrion ซึ่งเป็นบุตรของอารี นี่หมายความว่ากษัตริย์องค์ต่อไปควรอยู่ในกลุ่มทายาทแห่งไทเรเนียนหรือพี่น้องของเขา แต่เขาไม่มีพี่น้องหรือทายาท โปรดทราบว่าจอนสโนว์ในตัวอย่างของคุณจอนสโนว์เป็นลุงของทรีออน
Razvan

คุณพูดถูกจริงๆแฟน ๆ ของฉันได้รับสิ่งที่ดีที่สุดของฉัน
WizardOfMenlo
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.