Zgłoszenia do tego wyzwania będą zawierać animowaną obracającą się figurkę Lissajous . Pojawienie się obrotu 3d występuje, gdy parametr x jest kolejno przesuwany fazowo w każdej klatce.
Wejście:
a
I b
parametry (zgodnie z art wikipedia ) zostaną podane w wierszu poleceń, lub czytać ze standardowego wejścia.
Wynik:
Jest to ascii-art , więc dane wyjściowe będą wyświetlane w oknie emulatora terminala lub równorzędnym. Rozmiar wyjściowy może być zakodowany na stałe, ale liczba Lissajous musi być co najmniej wystarczająco duża, aby wypełnić okno 80x24.
Szybkość klatek animacji wyniesie około 50 kl./s. Spanie przez 20 ms między każdą klatką jest w porządku, pod warunkiem, że czas obliczenia każdej ramki jest niewielki w porównaniu ze stałym czasem uśpienia. Jeśli Twój wybór języka nie jest w stanie obliczyć wystarczająco szybko na wybranej platformie, musisz obliczyć czas do spania dynamicznie.
Każda ramka nie będzie wyświetlana, dopóki wszystkie obliczenia dla tej ramki nie zostaną zakończone. Nie ma potrzeby czyszczenia ekranu między poszczególnymi ramkami.
Figurka wykona pełny 2*Pi
obrót co około 4 sekundy.
Dla każdej ramki należy wygenerować krzywą całkowicie zamkniętą. Należy obliczyć co najmniej 1000 punktów wzdłuż krzywej. Rysowanie linii między punktami nie jest konieczne.
Punkty krzywej zostaną wykreślone jako #
znaki. Reszta obszaru wyświetlania będzie pusta / biała.
To jest golf golfowy , więc najkrótsza odpowiedź w bajtach (uważana przeze mnie za akceptowalną) zostanie przyjętym zwycięzcą tydzień po opublikowaniu.
Nieodniesiona odpowiedź referencyjna .
Odpowiedzi:
Perl - 177
Współczynniki są przekazywane za pomocą argumentów. Powyższy gif jest produkowany z
perl % 2 3
źródło
C (odpowiedź referencyjna - bez gry w golfa)
Wyjście z
./lissajous 2 3
:C, 257 bajtów
Ok, cóż, sam nie mogłem się oprzeć golfowi. Myślę jednak, że jest o wiele więcej do gry w golfa:
źródło
usleep
na 20000 ms, dlaczego nie tylkosleep
na 20s?usleep(2e4);
?Python 3 - 280
Przepraszam, nie mam dla ciebie żadnego z tych fantazyjnych animowanych gifów. Konsola Windows wolno drukuje: P
Nie jestem pewien, czy spełnia to wymagania 50 klatek na sekundę, ale nie jestem pewien, czy to naprawdę możliwe w przypadku Pythona. Możesz wyregulować 1000 w drugim wierszu dla liczby punktów do obliczenia (lista to szerokość wyjściowa, wysokość wyjściowa, punkty do znalezienia, postęp na klatkę (pi * 2 / n) i punkt początkowy). Lub możesz je usunąć i określić również w danych wejściowych.
WIĘCEJ WAŻNEJ EDYCJI: Wejście przez stdin, rozdzielone spacjami, zakończone znakiem nowej linii. Będzie czekać na twoje dane wejściowe.
EDYCJA: zrzut ekranu. W tym przypadku zmieniono wysokość na 40.
źródło
lissajous.py
, a następnie biegpython3 lissajous.py 2 3
powinien wystarczyć, prawda?stdin
, a nie argumentów (nie udało się określić, że ... oops). Rozdzielone spacjami.input()
i zgadłem. Działa dobrze dla mnie teraz z 3.2.3. +1C # -
360352 (dla wielu platform - 332 tylko dla systemu Windows)Edytowane po naprawie błędu mikro golfa i zaokrąglania + sugestia Ypnypn
Nie do końca kandydat na taką długość - i jest to dosłownie kopia referencji - ale no cóż. :)
Wieprz pamięci, tworząc nową tablicę dla każdego odświeżania - pierwotnie (ponownie) używał StringBuilder, ale poświęcił go dla skrócenia. Ale przynajmniej odświeżenie zajmuje mniej niż 1 ms na moim starym Core2.
Po usunięciu niektórych - teraz bolesnych dla długości - starych golfów, zmniejszając w ten sposób o 8 znaków, próbowałem przywrócić go do „poetyckiego” 360, powracając do podwójnej zamiast int parsowania i powracając do 80 * 24 zamiast 1920. To wciąż tylko 359 - i żaden inny pojedynczy znak, który mogę wymyślić, nie wnosi żadnej wartości do kodu. Pozostaniemy więc przy 352. :-)
Unrolled (zgubiłem kod przed golfa):
Konsola systemu Windows akceptuje generowanie dużej liczby znaków zerowych, co daje wynik (graficznie) identyczny z użyciem rzeczywistego znaku spacji - co pozwala na zainicjowanie tablicy znaków o kilka znaków mniej.
źródło
using C = Console
naprawdę zapisuje jakieś postacie?Python 2.7 - 214
Myślę, że jeszcze raz na to spojrzę. Mam wrażenie, że można to jeszcze bardziej obniżyć, ale trudno będzie trafić liczbę bajtów Perla. Matematyka wydaje się tutaj moim największym ograniczeniem.
Ostrzeżenie: może wystąpić awaria dowolnego używanego terminala. Przetestowałem to w wierszu polecenia systemu Windows za pomocą
lissajous.py 2 3
. Ze względu na szybkie pisanie w wierszu polecenia, spodziewaj się, że ramki nieco podskoczą. Można to w większości rozwiązać (kosztem prędkości), używając większejs
wrange(s)
it=2*pi*i
.Nie używam
\r
ani\b
tutaj celowo, ponieważ uruchamiam go w systemie Windows i kosztuje to dodatkowe znaki.źródło