Kto będzie rządził królestwem?
Dostajesz drzewo genealogiczne, które zawiera: imię, płeć, datę urodzenia, datę śmierci i listę spadkobierców dla każdego członka rodziny. Możesz użyć dowolnego wygodnego (zagnieżdżonego) formatu listy do reprezentowania drzewa. Poniższe przykłady użyją JSON. Ustal, kto będzie rządził królestwem i w jakiej kolejności. Zasady sukcesji są następujące:
- Kiedy król umiera, królestwo przechodzi do jego najstarszego legalnego dziecka.
- Jeśli nie ma, przechodzi na najstarsze prawnie dziecko.
- W przypadku, gdy król nie miał spadkobierców, królestwo przechodzi do najstarszego legalnego brata króla
- Jeśli nie będzie męskich braci, królestwo przejdzie do najstarszej prawowitej siostry króla
- Jeśli wszyscy prawni krewni nie żyją, królestwo trafia do najbliższego drania, stosując powyższe zasady
- Jeśli żaden legalny ani drański krewny nie żyje
LINE EXTINCT
Prawowitego syna definiujemy jako takiego, który ma takie samo „domowe” imię jak jego ojciec.
Przykłady:
Wejście
{}
Wynik
LINE EXTINCT
Wejście
{
"name" : "Maegor",
"house" : "Targaryen",
"birth" : 12,
"death" : 48,
"sex" : "male",
"heirs" : []
}
Wynik 12-48: Maegor, LINE EXTINCT
Wejście
{
"name" : "Jaehaerys",
"house" : "Targaryen",
"birth" : 34,
"death" : 103,
"sex" : "male",
"heirs" : [
{
"name" : "Viserys",
"house" : "Targaryen",
"birth" : 77,
"death" : 129,
"sex" : "male",
"heirs" : []
}
]
}
Wynik 34-103: Jaehaerys, 103-129: Viserys, LINE EXTINCT
Wejście
{
"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" : []
}
]
}
Wynik: 263-299: Eddard, 299-300: Robb, 300-315: Brann, 315-319: Rickon, 319-320: Sansa, 320-350: Arya, 350-384: Jon, LINE EXTINCT
Zauważ, że wyjście można sformatować w dowolny sposób, jego jedynym wymaganiem jest to, aby zawierał czas panowania i imię panującego króla w tych latach. Użyłem królów z ASOIAF jako przykładowego przykładu, jednak kod musi być poprawny dla wszystkich danych wejściowych.
Możesz założyć, że nie rodzą się bliźnięta.
Jest to wyzwanie dla golfistów, więc wygrywa najkrótszy kod w bajtach
Powodzenia!!!
In case the king had no sons the realm goes to the oldest legit king's brother
. Wydaje się, że jest sprzeczny z punktem 2 (jeśli nie ma prawowitego syna, wówczas koronowana jest najstarsza prawna córka). Masz na myśliheirs
zamiastsons
w punkcie 3?Odpowiedzi:
PHP, 664 bajty
Nie jestem pewien, czy 664 bajty pasują do gry w golfa kodowego, ale oto:
Otrzymuje dane wejściowe ciągu JSON jako pierwszy argument wiersza poleceń.
Algorytm wykonuje kroki opisane w wyzwaniu (zaczyna od króla, następnie sortuje spadkobierców, a następnie rodzeństwo, aby znaleźć następnego króla).
Próbny
źródło
while
pętle są zabronione podczas gry w golfa w PHP :).