Programmierwettbewerb für
Schülerinnen und Schüler
Oktober 2025 – Juni 2026
Um es gleich zu sagen: Sehr viel! Und dies vor allem durch die sehr wertvollen Beiträge hier in den Blogs sowie auf dem Discord Kanal!
Mein Bot hat in der Rangliste einen schönen Satz “nach oben” gemacht, was hat das aber mit dem Filtern zu tun?
Ich möchte in diesem Beitrag meine Erfahrungen aus meinen Ups & Downs weitergeben, die ich in der Stage-2 durchlitten hatte ;o)
Meine, nein unsere, Zielsetzung hat sich natürlich nicht geändert. Gems finden, und zwar möglichst schnell!
Auch meine Grundannahmen haben sich nicht geändert. Sie sind in unserem gemeinsamen Austausch bestätigt worden.
Hinweise:
Endlich! Ich empfange ein Signal in Tick 17! Soweit, so gut:

Und ja, in Tick 18 erkenne ich auch meinen gefilterten Kreis, in dem der Gem liegen muss:

Aber Moment! Ich habe noch immer 8 Kandidaten!
Mein Filter wirkt schon, aber da links außen kommt bereits das nächste Signal. Spannend!
Was passiert nun? Mein Filter steigt in Tick 19 aus, denn er kann die 8 Kandidaten
nicht mehr filtern und hat das neue Signal noch nicht einmal im Visier. Oh weia:

Erkenntnis: So geht’s nicht! Aber was nun? Filtern vergessen? Oder ganz anders filtern?
Ich bin ja manchmal auch etwas beratungsresistent und stur. Also verfeinern! Los!!!
Und nun derselbe Tick 19 nach einer weiteren Optimierung:

Öha! Da scheint etwas zu wirken. Ich habe nun nicht nur die 8 Kandidaten auf 2 eingedampft,
sondern auch das ziemliche ferne Signal mit 2 Kandidaten im Visier ;o) Ich bleibe zuversichtlich…
Schaut mal, was da 2 Ticks später (Tick 21) passiert:

Ich habe nun 2 Signale mit exakt 2 Kandidaten!
Wem es (noch) nicht aufgefallen ist: Vgl. meine Debug-Ausgaben… ;o)
Aber was habe ich denn nun an meinem Bot geändert?
An und für sich nichts Besonderes, es hatte dennoch eine Wirkung…
Ich habe jetzt nicht nur den Bot sowie die vermeintlichen Signale berücksichtigt,
sondern auch alle verbliebenen Kandidaten ebenso!
D.h. ich berechne mit allen bekannten Kandidaten rückwärts.
Mein (zugegeben) gewöhnungsbedürfter C++ Code sieht dann so aus:
if (0 == size && !map.empty())
{
#if 1
// think twice!
for (auto mit = map.begin(); mit != map.end(); ++mit)
{
SignalPosition testpos;
testpos.mLevel = std::fabs(mit->second.mLevel - remaininglevel);
Update(mTick, pos, testpos.mLevel, testpos);
SignalPositionSet circumference;
CalculateCircle(testpos, circumference);
if (!circumference.empty())
{
// keep this circumference tile!
tmp.insert(mit->second);
}
}
#else
for (auto mit = map.begin(); mit != map.end(); ++mit)
{
tmp.insert(mit->second);
}
#endif
}
Ich habe vor allem folgende Erkenntnisse aus der Stage-2 mitgenommen:
Ich freue mich wirklich auf die Stage-3!
Keine Ahnung, inwiefern ich da abschneide, es ist und bleibt aber spannend!
Happy Coding!
Michael (a.k.a. Buffo)