Istnieje dość silne poparcie dla meta, aby pytania dotyczące pisania pytań były tematem głównym, pod warunkiem, że pytania te są konkretne i można na nie odpowiedzieć. Jednak nie mamy jeszcze takich pytań, więc pomyślałem, że przetestuję wody. To pytanie prawdopodobnie wkracza w dobre subiektywne, złe subiektywne terytorium, ale myślę, że prawdopodobnie takie będą pytania dotyczące pisania wyzwań. Aby mieć pewność, że nadal generują treści wysokiej jakości, nie zamieszczaj w odpowiedziach dzikich pomysłów spekulacyjnych. Wyjaśnij, dlaczego unikają problemów wymienionych poniżej lub idealnie wskazują na istniejące wyzwania, które z powodzeniem stosowały sugerowaną technikę w przeszłości.
W przypadku niektórych wyzwań związanych z optymalizacją wolnym parametrem w ustawianiu wyzwania jest wielkość problemu, który należy zoptymalizować. Przez „wyzwanie optymalizacji” nie rozumiem takich rzeczy, jak nasz gatunek najszybszego kodu , w którym odpowiedzi są zwykle wymagane, aby były dokładne / optymalne, a wyzwanie jest oceniane na podstawie ustalonego rozmiaru problemu lub największego rozmiaru problemu, który można obsłużyć w ustalonym czasie. Mam na myśli zwłaszcza wyzwania, w których niedopuszczalne rozwiązania podstawowego problemu są dozwolone, a nawet prawdopodobne, a celem jest zrobienie tego, co możliwe.
Ze względu na definitywność zastanów się nad zajętymi wyzwaniami dla bobrów , chociaż w zasadzie dotyczy to również innych rodzajów wyzwań bez znanych optymalnych rozwiązań (używam tutaj tylko zajętych bobrów, ponieważ zaostrzają one problemy wymienione poniżej). Powiedzmy, że chciałem rzucić wyzwanie znalezieniu najbardziej zajętego bobra Brainfuck. Wolnym parametrem w problemach zajętego bobra jest rozmiar kodu. Nie mogę ustawić wyzwania bez odniesienia się do wielkości kodu. W pewien sposób każda wartość parametru rozmiaru problemu N
stanowi osobne (coraz trudniejsze) wyzwanie. Moje główne pytanie dotyczy tego, w jaki sposób mogę sprawić, by takie wyzwanie zadziałało bez problemów z równoważeniem.
Oczywistym rozwiązaniem jest naprawienie N
: „Znajdź kończący się program Brainfuck z N
bajtami kodu źródłowego, który drukuje tyle znaków, ile to możliwe / działa dla tylu tyknięć, ile to możliwe.” Ma to ogromne problemy bilansowania: jeśli wybiorę rozmiar za mały, ktoś może szybko znaleźćnajbardziej ruchliwy bóbr i wyzwanie się skończyło. Jeśli wybiorę zbyt duży rozmiar, optymalne rozwiązanie wydrukuje astronomiczną liczbę znaków przed zakończeniem, co oznacza, że znalezienie takich programów będzie trywialne, a wyzwanie stanie się obowiązkiem / ćwiczeniem z cierpliwości - pozostawia to również terytorium, na którym zajęte bobry można znaleźć programowo, a zamiast tego ludzie będą musieli zacząć formalnie udowadniać swoje wyniki, co wiele osób może nie uważać za bardzo zabawne. Oczywiście problem ten jest bardziej wyraźny w przypadku zapracowanych bobrów niż w innych typach, ze względu na wzrost optymalnych rozwiązań, ale jednak dotyczy innych wyzwań.
Następną opcją byłoby pozostawienie N
nieograniczonego i włączenie go do punktacji poprzez jakąś funkcję. Nawet w przypadku „normalnych” wyzwań prawidłowe wyważenie połączonych wyników jest niezwykle trudne, ale w przypadku zajętych bobrów jest to w zasadzie niemożliwe, ze względu na fakt, że optymalne rozwiązania rosną szybciej N
niż jakakolwiek funkcja obliczeniowa. Oznacza to, że zawsze mogę pokonać najlepszą istniejącą odpowiedź, przechodząc do wystarczająco dużej, N
gdzie mogę łatwo znaleźć program, który działa tak długo, że mogę uzyskać lepszy wynik bez większego wysiłku.
Zastanawiałem się również nad ustaleniem stałej pozycji N
i zezwalaniem ludziom na przesyłanie bobrów na większe, N
które będą używane jako kolejne przerywniki remisów. Ma to podobny problem, że ktoś może po prostu „znaleźć równie dobrze zajętego bobra” dla N
, tworząc w ten sposób remis, a następnie po prostu przesłać prawie wszystko do następnego, w N
którym łatwiej jest znaleźć duży wynik (nawet jeśli znalezienie optymalny wynik staje się trudniejszy). W takich przypadkach, jak poradziłbyś sobie z wieloma osobami korzystającymi z tego samego rozwiązania? Zakazanie byłoby również dziwne, gdyby było optymalne.
Może ktoś mógłby uderzyć w środek ziemi, wykształcając domysły na rozsądnym poziomie, N
a następnie prosząc o zajęte bobry dla wszystkich rozmiarów w (powiedzmy) 5 bajtach N
, aby mieć pewną swobodę w obu kierunkach (a następnie połączyć wyniki ~ 10 w pojedynczą technikę). Nie wydaje mi się to również zadowalające, ponieważ moje początkowe przypuszczenie N
może nadal znajdować się daleko poza zasięgiem, co stwarza ciekawe wyzwania.
TL; DR: w przypadku gdy wyzwaniem jest (nieoptymalne rozwiązanie i) optymalizacja problemu o zmiennej wielkości, jak włączyć rozmiar do wyzwania? Idealnie chciałbym, aby ludzie mogli pracować z taką wartością, N
która znajduje się w pobliżu górnego końca zakresu rozmiarów użytkowych. Ale na wypadek, gdyby okazało się, że możliwe są do tego optymalne rozwiązania N
, byłoby wspaniale, gdyby N
zaczęły się ważyć rozwiązania dla nieco większych , tak aby wyzwanie mogło być kontynuowane z bardziej interesującym rozmiarem problemu.