Aufgabe #306
Autor:IOAI Committee
Schwierigkeit
Dein bestes Ergebnis
N/V
Im siebzehnten Jahrhundert versuchte John Wilkins, eine vollkommene Sprache zu entwickeln: Der Name eines Dinges sollte dessen Platz innerhalb einer Klassifikation offenbaren, die aus YES/NO-Unterscheidungen aufgebaut war.
Das Projekt wurde aufgegeben, doch ein unbekannter Schreiber sammelte weiterhin Tiere in einem gewaltigen Kabinett der Unterscheidungen. Jede Schublade verbirgt ein Lebewesen. Die Beschriftungen sind verloren gegangen, und das Messingraster an jeder Schublade beantwortet ausschließlich binäre Fragen über das darin befindliche animal.
Aus dem Archiv sind die folgenden Aufzeichnungen erhalten geblieben:
animals_pool.txt — die 250 Tiere, die im Kabinett vorkommen können;questions_pool.csv — die 280 zulässigen Fragen;oracle_table.csv — die eingefrorenen Orakel-responses für jedes (animal, question)-Paar.Sie müssen eine adaptive Strategie entwickeln, die das animal mit möglichst wenigen Aufrufen identifiziert.
In der interaktiven Version würde das Programm nacheinander Folgendes aufrufen:
interactor.ask(question) # -> "yes" / "no"interactor.guess(animal) # -> "correct" / "wrong"In der aktuellen Version führt die Plattform jedoch keinen Echtzeit-Interactor aus. Daher müssen Sie den Entscheidungsbaum einreichen, den Ihr Programm ausführen würde. Der Auswerter beginnt beim Knoten 0, befragt das private Orakel und folgt für jede answer dem entsprechenden Zweig.
Der Baum kann tatsächlich ein gerichteter Graph sein: Mehrere Zweige können zum selben Knoten führen. Zyklen sind nicht sinnvoll, da jeder Besuch eines Knotens einen Aufruf verbraucht und das Budget strikt ist.
animals_pool.txtEine animal-Bezeichnung pro Zeile. Nur diese Bezeichnungen dürfen geraten werden.
questions_pool.csv| Spalte | Bedeutung |
|---|---|
question_id | Kennung der Form Q0001 |
question | question-Text |
kind | semantic oder lexical |
Semantische Fragen beschreiben biologische oder ökologische Eigenschaften. Lexikalische Fragen beschreiben den im Katalog erhaltenen englischen Namen. Beide Arten sind gültige Fragen des Kabinetts.
oracle_table.csv| Spalte | Bedeutung |
|---|---|
animal | das Kandidaten-animal |
responses | Binärzeichenfolge in der Reihenfolge aus questions_pool.csv |
Das Zeichen an Position i ist die answer des Orakels auf die question in Zeile i:
1 = yes;0 = no.Das Orakel ist deterministisch und eingefroren. Die Tabelle stellt seine Überzeugungen dar und keine vollkommene zoologische Wissensbasis; daher können einige Antworten strittig sein. Die Lösung muss die Strategie für die tatsächlich in der Tabelle gespeicherten responses optimieren.
Laden Sie ein Archiv mit der folgenden Struktur hoch:
submission.zip└── submission.csvsubmission.csv muss sich im Stammverzeichnis des Archivs befinden. Das Archiv darf keine weiteren Dateien enthalten.
Die CSV-Datei muss genau die folgenden Spalten enthalten:
id,subtaskID,answerid — eindeutige numerische Kennung des Knotens;subtaskID — immer 1;answer — Beschreibung des Knotens.Der Wurzelknoten muss id = 0 haben.
Laden Sie
submission.csvnicht direkt hoch. Die Plattform muss das Archivsubmission.ziperhalten.
Q|question_id|yes_node|no_nodeBeispiel:
0,1,Q|Q0001|1|2Wenn die answer auf Q0001 yes lautet, fährt der Auswerter mit Knoten 1 fort; andernfalls fährt er mit Knoten 2 fort.
G|animal|wrong_nodeBeispiel:
1,1,G|agouti|3Der Auswerter fragt: „Ist das animal agouti?“ Wenn der guess correct ist, endet der Fall. Ist guess wrong, wird die Auswertung bei Knoten 3 fortgesetzt.
Der besondere Wert END bedeutet, dass die Strategie aufgibt:
2,1,G|alligator gar|ENDDa das Feld
answerdas Zeichen|enthält, ist no besondere CSV-Escapesequenz erforderlich. Tierbezeichnungen enthalten kein|.
Für jedes verborgene animal sind höchstens 15 Aufrufe zulässig.
Jeder besuchte Knoten verbraucht genau einen Aufruf:
Q-Knoten verbraucht einen Aufruf;G-Knoten verbraucht einen Aufruf, unabhängig davon, ob der guess correct oder wrong ist.Nach dem 15th Aufruf endet der Fall automatisch.
Für jedes animal:
score_case = max(0, (1 if guessed correctly, otherwise 0) - 0.02 × calls_used)Beispiele:
0.98;0.90;0.70;0.Die Endpunktzahl lautet:
100 × mean(score_case)Die theoretische Höchstpunktzahl beträgt 98, da selbst ein sofortiger correct guess einen Aufruf verbraucht.
20,000 Knoten;0 muss vorhanden sein;question_id muss in questions_pool.csv vorhanden sein;animals_pool.txt übereinstimmen, um als correct zu gelten;submission.csv enthalten.Inhalt von submission.csv:
id,subtaskID,answer0,1,Q|Q0001|1|21,1,G|agouti|END2,1,G|alligator gar|ENDDiese Strategie stellt eine einzige question und unternimmt anschließend einen einzigen guess. Sie löst nur die Fälle, in denen die beiden Blätter mit dem verborgenen animal übereinstimmen.
log2(250) ≈ 7.97. In einem idealen Baum würden ungefähr acht binäre Antworten ausreichen, um die 250 Tiere voneinander zu unterscheiden, doch die verfügbaren Fragen teilen die Kandidatenmenge nicht immer vollkommen in zwei Hälften.
Eine nützliche Strategie besteht darin:
yes und no rekursiv aufzubauen;Die Aufgabe ist eine ONIA-Anpassung des Notebooks Hausaufgabe 3 — Die analytische Sprache von John Wilkins, das im IOAI 2026-Repository veröffentlicht wurde. Der LLM-basierte Interactor wurde durch ein eingefrorenes Orakel ersetzt, damit die Auswertung schnell und deterministisch bleibt.