Przybył nowy superkomputer prognozujący pogodę i nie działa.
W międzyczasie twój szef chce, abyś kupił technikom jakiś czas, fałszując codzienne mapy wiatru.
Twoim zadaniem jest narysowanie siatki strzałek przedstawiających kierunek wiatru.
Siatka jest:
- składa się z kwadratowych płytek 15px
- 8 płytek po 8 płytek
- Łącznie 120 pikseli kwadratowych
000 tła
Każda płytka siatki ma 8 potencjalnych orientacji, reprezentujących kierunek wiatru:
- Północ
- Północny wschód
- Wschód
- Południowy wschód
- południe
- Południowy zachód
- Zachód
- Północny zachód
Co należy przedstawić w następujący sposób:
N NE E SE S SW W NW
Mapy muszą się zmieniać stopniowo , aby były wiarygodne.
Oznacza to, że każda płytka może różnić się od sąsiada tylko o jeden krok. Konkretnie:
- Płytka może różnić się tylko o jeden przyrost lub spadek od każdej z 4 sąsiadujących płytek. (lub 3 dla płytek bocznych, 2 dla płytek narożnych).
- np. kafelek z sąsiadem E może być NE, E lub SE (zakładając, że jest zgodny z innymi sąsiadami).
- Orientacje mogą zawracać, tzn. N -> NW i NW -> N.
Aby to zilustrować, obowiązuje następująca mapa:
NW N NE NE NE NE NE NE
N NE NE NE NE NE NE E
NE NE NE NE NE NE E SE
E NE NE NE NE E SE S
SE E E E E SE S SE
S SE SE SE SE S SE E
SW S S S S SE E NE
SW SW S S SE E NE N
Mapy muszą być unikalne , nie generuj tej samej mapy dla różnych danych wejściowych.
- Dane wejściowe są liczbami całkowitymi odpowiadającymi dniom między teraz a twoją prognozą (np. 1 to prognoza jutra, 365 to rok).
- Dane wyjściowe to mapa jako obraz.
- Wyjście powinno być odtwarzalne, to samo wejście zawsze daje takie samo wyjście
- Musisz dawać unikalne mapy przez co najmniej 8 lat - tzn. Brak identycznych danych wyjściowych dla danych wejściowych od 1 do 2920 (ignoruję lata przestępne).
- Nie ma zdefiniowanej wydajności dla żadnego wejścia większego niż 2920.
Zwycięskie zgłoszenie wygeneruje prawidłowe mapy (do 2920 dnia) z najmniejszą liczbą bajtów kodu źródłowego.
Odpowiedzi:
BBC Basic, 83 znaki ASCII, tokenizowany rozmiar pliku 72
Pobierz emulator na http://www.bbcbasic.co.uk/bbcwin/bbcwin.html
Jest to w zasadzie część koncepcji Martina, ale implementacja w BBC basic jest zupełnie inna. Przeprogramowuję czcionkę dla liczb
0
a1
następnie wypisuję cyfry binarnen
w odwrotnej kolejności.Nieskluczony kod znajduje się poniżej. W BBC basic możesz drukować pojedyncze znaki ASCII za pomocą
VDU
polecenia, ale język ma szereg kodów specyficznych dla maszyny, podobnych do sekwencji specjalnych, ale rozpoczynających się od znaków niedrukowalnych. Aby przeprogramować czcionkę, zaczynamy od ASCII 23. Zwykle pobierane są wartości 8-bitowe, ale jeśli użyjesz średnika jako separatora zamiast przecinka, zajmie to 16-bitowe małe wartości endian (tak jak w wersji golfowej).Wynik
Dla liczb od 0 do 7. Zauważ, że czcionka nie jest resetowana na końcu programu, dlatego cyfry 0 i 1 pojawiają się jako strzałki w pierwszych dwóch przykładach.
źródło
Matlab (182 *)
Zakłada się, że dane wejściowe są przechowywane w
n
. Patrząc na algorytm, nie jest pewne, czy wyniki będą unikalne, ale sprawdziłemn=1 upto 3000
, czy są one unikalne i spełniają reguły. Zasadniczo używam po prostu liczb zespolonych okręgu jednostkowego i „wygładzam” je przez conv2 za pomocą filtra gaussowskiego. Następnie zostają zaokrąglone w 8 możliwych kierunkach.* Nie wiem jak skalować wyjście do określonej liczby pikseli, więc trzeba to zrobić ręcznie = /
EDYCJA: Właśnie odkryłem, że są przypadki, w których mój program sprawdzający nie rozpoznał niewłaściwych rozwiązań (zmiany o więcej niż 1 krok), ale próbuję znaleźć inne rozwiązanie.
Wejście:
Kod:
źródło
Mathematica,
116115 bajtówPrzypuszczam, że dobry koń nigdy nie skacze wyżej niż musi. 2920 różnych siatek można bardzo łatwo osiągnąć przy użyciu tylko dwóch kierunków (używam
N
iNE
), co sprawia, że spełnienie zasady ciągłości jest banalne. Po prostu wybieram pomiędzy N i NE na podstawie bitówn
, więc w rzeczywistości da to 2 64 różnych map wiatru.Oto pierwsze dziesięć map:
PS: Moim oryginalnym pomysłem było wyliczenie wszystkich 8 4 kombinacji dla 4 rogów i interpolacja „liniowa” reszty siatki. Prawdopodobnie spowodowałoby to ładniejsze mapy, ale w końcu to jest golf golfowy, więc poszedłem z tym, co spełnia minimalne wymagania.
źródło
PHP 5.4, 549 bajtów
Nieco utrudniony przez konieczność definiowania strzałek jako grafiki, oto mój kod PHP:
Pobiera argument z wiersza poleceń, na przykład:
To rozwiązanie wykorzysta dane wejściowe jako definicję czterech rogów. Reszta mapy będzie płynnie interpolowana między wartościami. Zdefiniował wyniki dla wszystkich wartości od 0 do 4095, co stanowi w sumie ~ 11,25 lat fałszywej prognozy, co powinno wystarczyć na naprawę oprogramowania pogodowego!
Oto GIF wszystkich wyników:
A plik ZIP zawierający każdą mapę można pobrać tutaj
(Mała uwaga: Moja domena niedawno wygasła, ponieważ nie zwracałem na to uwagi. Odnowiłem ją, ale powyższy obraz i link mogą nie działać do czasu aktualizacji DNS)
Nieskwalifikowany:
źródło