Najdłuższy dzień w roku - oto coś do stracenia dodatkowego czasu ...
Przegląd
Pamiętaj, że nie jest to konkurs popularności, a nie graficzne wyzwanie wyjściowe - musisz jedynie wygenerować ciąg 65 536 zer i jedynek. Fragment kodu w dolnej części pytania wyświetli to jako czarno-biały obraz 256 na 256 i obliczy Twój oficjalny wynik. Następnie możesz zapisać obraz i przesłać go do swojej odpowiedzi wraz ze swoim kodem (ponieważ wynik łańcucha nie mieści się w 30 000-znakowej odpowiedzi Stack Exchange).
Punktacja
Wynik obrazu jest sumą wyników jego poszczególnych pikseli. Wynik danego piksela jest sumą podwyników dla każdego z non-prostopadłych , prime odległości pikseli, które są przeciwnego koloru na piksel jest punktowane. Wynik dla każdego takiego piksela to miejsce, w 1/p
którym p
znajduje się główna odległość.
W kontekście tego pytania terminy mają następujące definicje:
Nie-ortogonalny: piksel nie jest ortogonalny w stosunku do ocenianego piksela, jeśli nie znajduje się w tym samym rzędzie i nie znajduje się w tej samej kolumnie.
Główna odległość: piksel znajduje się w największej odległości od punktowanego piksela, jeśli dzieli je odległość euklidesowa, która jest dokładnie liczbą pierwszą. W szczególności odległość to minimalna odległość mierzona toroidalnie - lewy górny piksel to odległość
sqrt(2)
od prawego dolnego piksela (wszystkie 4 krawędzie zawinięcia).Kolor przeciwny: piksel ma kolor przeciwny do piksela ocenianego, jeśli ich wartości sumują się do 1. Oznacza to, że pierwszy to 0, a drugi to 1 lub pierwszy to 1, a drugi to 0.
Fragment kodu zawiera przykładowy kod pokazujący sposób oceniania obrazu, ale nie zawiera żadnych optymalizacji ani skutecznego podejścia, wystarczy poprawny kod, aby można było konsekwentnie oceniać końcowe obrazy.
Jeśli cokolwiek w kodzie jest nieprawidłowe, daj mi znać albo w komentarzach, albo na czacie .
JavaScript nie musi być najlepszym językiem do odbierania tego szczególne wyzwanie. Pamiętaj, że kod Snippet celowo nie daje wskazówek co do szybszych podejść. Będzie miał tylko wprowadzone wydajności, które zostały już wykazane w istniejącej odpowiedzi.
Wyobrażanie sobie
Punktowane piksele
Dla intuicyjnego wyczucia rozkładu pikseli punktowanych tutaj (na fioletowo) są nieortogonalne piksele o podstawowej odległości dla piksela (128, 128) obrazu 256 na 256:
Losowy obraz
Jest to losowo generowany obraz z przykładowej odpowiedzi w języku Python 3. Ma wynik 138 267,64 i daje ci coś do pokonania.
Wejście
Kod nie wymaga wprowadzania danych.
Wynik
Kod powinien generować ciąg 65 536 zer i jedynek, reprezentujących piksele czarno-białego obrazu 256 na 256. Cyfry powinny być ciągiem ciągłym, bez separatorów. Kopiowanie i wklejanie może być łatwiejsze, jeśli wyprowadzasz dane do pliku, ale to zależy od ciebie.
Twój kod może także wyświetlać inne informacje, które okażą się przydatne, o ile ciąg będzie można skopiować i wkleić do fragmentu kodu. Na przykład możesz chcieć wyprowadzać najlepszy ciąg znaków do pliku, a najlepszy jak dotąd wynik do STDOUT w regularnych odstępach czasu, pozwalając użytkownikowi wybrać, kiedy zatrzymać wyszukiwanie.
Fragment kodu
Jak wskazał Sp3000 , fragment kodu potrzebował 10 minut na obliczenie wyniku, który jest nieco zbyt wolny, nawet w przypadku celowo nieefektywnej implementacji referencyjnej. Zredagowałem w sugerowanej przez Sp3000 poprawie wstępnego obliczania przesunięć pikseli dla punktacji, a teraz obliczenie wyniku zajmuje kilka sekund.
Jeśli wykorzystasz wynik lub kod innej odpowiedzi jako punkt wyjścia dla własnego kodu, pamiętaj o podaniu kredytu i linku do odpowiedzi uzupełniającej. Odpowiedzi na to pytanie nie muszą podawać przykładowej odpowiedzi ani kodu w pytaniu.
źródło
Python 3, wynik 138267,64
To minimalna odpowiedź jako przykład tego, co jest wymagane i jako coś do pokonania ...
Obejmuje
Wynik
Kod
To tylko przykład. Python niekoniecznie jest najlepszym językiem dla konkurencyjnych odpowiedzi na to szczególne wyzwanie.
źródło