Opgave #306
Forfatter:IOAI Committee
Sværhedsgrad
Din bedste score
N/A
I det syttende århundrede forsøgte John Wilkins at konstruere et fuldkomment sprog: En tings navn skulle afsløre dens plads i en klassifikation bygget af YES/NO-sondringer.
Projektet blev opgivet, men en ukendt skriver fortsatte med at samle dyr i et enormt Distinktionernes kabinet. Hver skuffe skjuler et væsen. Etiketterne er gået tabt, og messinggitteret på hver skuffe besvarer kun binære spørgsmål om animal indeni.
Følgende optegnelser er bevaret fra arkivet:
animals_pool.txt — de 250 dyr, der kan forekomme i kabinettet;questions_pool.csv — de 280 tilladte spørgsmål;oracle_table.csv — de fastfrosne orakel-responses for hvert (animal, question)-par.I skal konstruere en adaptiv politik, der identificerer animal med så få kald som muligt.
I den interaktive version ville programmet efter tur kalde:
interactor.ask(question) # -> "yes" / "no"interactor.guess(animal) # -> "correct" / "wrong"I den nuværende version kører platformen imidlertid ikke en interaktor i realtid. Derfor skal I indsende det beslutningstræ, som jeres program ville udføre. Bedømmeren starter ved knude 0, konsulterer det private orakel og følger den tilsvarende gren for hvert answer.
Træet kan faktisk være en rettet graf: Flere grene kan føre til den samme knude. Cykler er ikke nyttige, fordi hvert besøg i en knude forbruger ét kald, og budgettet er strengt.
animals_pool.txtÉt animal navn pr. linje. Kun disse navne må gættes.
questions_pool.csv| Kolonne | Betydning |
|---|---|
question_id | identifikator på formen Q0001 |
question | question-teksten |
kind | semantic eller lexical |
Semantiske spørgsmål beskriver biologiske eller økologiske egenskaber. Leksikalske spørgsmål beskriver det engelske navn, der er bevaret i kataloget. Begge typer er gyldige spørgsmål i kabinettet.
oracle_table.csv| Kolonne | Betydning |
|---|---|
animal | kandidat-animal |
responses | binær streng i rækkefølgen fra questions_pool.csv |
Tegnet på position i er oraklets answer på question i række i:
1 = yes;0 = no.Oraklet er deterministisk og fastfrosset. Tabellen repræsenterer dets overbevisninger frem for en fuldkommen zoologisk vidensbase, så nogle svar kan være diskutable. Løsningen skal optimere politikken til de faktiske responses, der er gemt i tabellen.
Upload et arkiv med følgende struktur:
submission.zip└── submission.csvsubmission.csv skal ligge i arkivets rod. Arkivet må ikke indeholde andre filer.
CSV-filen skal indeholde præcis følgende kolonner:
id,subtaskID,answerid — entydig numerisk identifikator for knuden;subtaskID — altid 1;answer — beskrivelse af knuden.Rodknuden skal have id = 0.
Upload ikke
submission.csvdirekte. Platformen skal modtage arkivetsubmission.zip.
Q|question_id|yes_node|no_nodeEksempel:
0,1,Q|Q0001|1|2Hvis answer på Q0001 er yes, fortsætter bedømmeren til knude 1; ellers fortsætter den til knude 2.
G|animal|wrong_nodeEksempel:
1,1,G|agouti|3Bedømmeren spørger: »Er animal agouti?« Hvis guess er correct, slutter tilfældet. Hvis guess er wrong, fortsætter evalueringen ved knude 3.
Den særlige værdi END betyder, at politikken giver op:
2,1,G|alligator gar|ENDDa feltet
answerindeholder tegnet|, kræves der no særlig CSV-escaping. Dyrenavne indeholder ikke|.
For hvert skjult animal er højst 15 kald tilladt.
Hver besøgt knude forbruger præcis ét kald:
Q-knude forbruger ét kald;G-knude forbruger ét kald, uanset om guess er correct eller wrong.Efter det 15th kald slutter tilfældet automatisk.
For hvert animal:
score_case = max(0, (1 if guessed correctly, otherwise 0) - 0.02 × calls_used)Eksempler:
0.98;0.90;0.70;0.Den endelige score er:
100 × mean(score_case)Den teoretiske maksimumscore er 98, fordi selv et øjeblikkeligt correct guess forbruger ét kald.
20,000 knuder;0 skal findes;question_id skal findes i questions_pool.csv;animals_pool.txt for at være correct;submission.csv.Indholdet af submission.csv:
id,subtaskID,answer0,1,Q|Q0001|1|21,1,G|agouti|END2,1,G|alligator gar|ENDDenne politik stiller ét enkelt question og foretager derefter ét enkelt guess. Den løser kun de tilfælde, hvor de to blade svarer til det skjulte animal.
log2(250) ≈ 7.97. I et ideelt træ ville omtrent otte binære svar være nok til at skelne mellem de 250 dyr, men de tilgængelige spørgsmål deler ikke altid kandidatmængden fuldkomment i to halvdele.
En nyttig strategi er at:
yes og no rekursivt;Problemet er en ONIA-tilpasning af notebooken Hjemmeopgave 3 — John Wilkins' analytiske sprog, der er udgivet i IOAI 2026-repositoriet. Den LLM-baserede interaktor blev erstattet med et fastfrosset orakel, så evalueringen forbliver hurtig og deterministisk.