Winter Bash 2014 jest na najlepszej drodze i czy wszyscy nie uwielbiamy czapek? Zwłaszcza tajne czapki!
Dlaczego więc nie narysować jednej z tajnych czapek?
Wyzwanie
Twoim zadaniem jest narysowanie Ciepłego Kapelusza Powitalnego w proporcji, w wybranym przez Ciebie języku i mając dokładnie taką samą budowę, jak na tej stronie .
Jak zawsze możesz renderować kapelusz do pliku lub ekranu za pomocą grafiki wektorowej lub rastrowej. Jeśli dane wyjściowe są rasteryzowane, obraz musi mieć wymiary co najmniej 400 x 400 pikseli.
Ponadto rzeczywista zawartość kapelusza (obszar ograniczającego prostokąta kolorowych części obrazu) powinna pokryć ponad 40% obrazu wyjściowego.
Dane techniczne
Poniższy obraz przedstawia różne wymiary czapki. Wszystkie wymiary są w jednostce, na przykład piksele. Cały promień obramowania na obrazie należy narysować za pomocą promienia 13
jednostek.
Kolory :
- Czerwona gwiazda i okrągły pierścień - rgb (255, 28, 34)
- Żółty w kole - rgb (255, 202, 87)
- Najjaśniejszy szary - RGB (88, 88, 92)
- Najciemniejsza szarość - rgb (31, 26, 26)
- Średni szary - RGB (64, 64, 64)
Punktacja
To jest kod golfowy, więc wygrywa najkrótsza odpowiedź (w bajtach).
Jako ostrzeżenie, użycie istniejącej kompresji (jak osadzenie skompresowanego pliku GIF) wpada w kilka standardowych luk .
źródło
Odpowiedzi:
GolfScript (
376 373 364350 lub645 610607 bajtów)Zgodnie z oryginalną specyfikacją, która wymagała dokładnej budowy SVG, SVG z golfem jest generowany w 607 bajtach.
Kod zawiera wiele niedrukowalnych znaków, więc oto wynik xxd:
Jest to wariant konstruktywnego silnika gramatycznego, który znawcy złożoności kolmogorowa znają:
Okazało się, że nieco lepiej jest napisać dużą czcionką SVG, skompresować ją, a potem małe litery po dekompresji.
Po uruchomieniu generuje plik SVG o długości 840 bajtów:
Poprawiłem pozycję o kilka milipikseli i poprawiłem jedną małą asymetrię w najciemniejszej szarej części.
Ale zmiany w pytaniu i dyskusji na czacie wskazują, że w rzeczywistości dopuszczalne jest stworzenie dobrego przybliżenia SVG, co można zrobić w 364 bajtach. Łańcuch dekompresyjny jest podobny, więc wyjście xxd pliku GolfScript to:
i generuje plik SVG o długości 547 bajtów:
Podziękowania dla Paula LeBeau za wskazanie 7-bajtowej oszczędności w pliku SVG, która w GolfScript przełożyła się na 9 bajtów, oraz za odpowiedź, która wykazała, że gwiazdę można narysować za pomocą tylko 5 punktów. (Korzystając z jego odpowiedzi, mogłem zejść do 329 bajtów lub 323 z drobnymi poprawkami do jego odpowiedzi, ale nie czuję się z tym dobrze).
Eksportowane w 50% z Inkscape:
Aby zobaczyć strukturę, oto SVG renderowane
fill="none"
we wszystkim, a niektóre kolory wypełnienia zmieniono na kolory obrysu:źródło
SVG (
462 460 454 429 384365 bajtów)Wiem, że to nie jest język programowania, ale pomyślałem, że przynajmniej przyda się każdemu, kto generuje wyjście SVG ...
Jest to oparte na SVG Petera Taylora.
Korzystając z oryginalnych współrzędnych i nieco optymalizując ścieżki, udało mi się zmniejszyć SVG. Poprawiłem też kolory.
Aktualizacja: Naprawiono błąd wskazany przez Petera Taylora i pozycję prostokątów i zapisano 2 kolejne bajty.
Aktualizacja 2: Dodano kolejną poprawkę i sugestie od Petera (-6 bajtów)
Aktualizacja 3: Właśnie zauważyłem, że instrukcje określają teraz wszystkie promienie na 13, więc korzystając z tego i optymalizując ścieżki nieco bardziej, zapisałem kolejne 25 bajtów. Bardziej czytelne skrzypce tutaj.
Aktualizacja 4: Ponieważ już zakładam, że plik SVG jest osadzony w kodzie HTML (samodzielne pliki SVG wymagają deklaracji przestrzeni nazw), mogę to właściwie wycisnąć. (a) Nie potrzebuję atrybutów szerokości i wysokości, ponieważ rozmiar SVG jest mniejszy niż domyślny rozmiar, jaki przeglądarki nadają obiektom, których rozmiar jest nieokreślony (300 x 150), i (b) parser HTML wybacza atrybuty mają cytaty, więc niektóre z nich można usunąć (pomysł z Squeamish Ossifrage ). Zapisuje kolejne 45 bajtów.
Aktualizacja 5: Używanie sztuczek hsl do usuwania cudzysłowów z kolorów i upuszczania końcowych znaczników. Zaoszczędziliśmy kolejne 19 bajtów. Ta ostatnia wydawała mi się na początku nieco podstępna, ale ponieważ działa we wszystkich przeglądarkach, zmieniłem zdanie. :) Dzięki hsl!
źródło
fill="none"
do grupy, czy dostosowując krzywą.<rect>
Powinien mieć wysokość74
zamiast78
. I sprawiają, że oszczędność 5-char zastąpić go z<path>
zarównofill
istroke
,stroke-width="18"
, a następnie przeniósł się wewnątrz<g>
i wspólnastroke-width="18"
przeniósł się z dwóch ścieżek do<g>
. Posiadanie innego<path>
niż a<rect>
powinno również nieco pomóc w ściśliwości.Mathematica
787 612 600 514506 bajtówPotrzebna zaskakująca ilość kodu. Na pewno zostanie pobity.
Forma bez golfa
Grał w golfa
źródło
HTML + ES6, 533
Snippet (zmodyfikowany):
źródło
serif
, która nie jest nawet konkretną czcionką ...HTML + CSS,
676 636625 bajtówMożna to bardzo pograć w golfa, pozbywając się ichTeraz używamy transformacji do centrowania wszystkiego zamiastleft:XXXpx
i używając pewnego rodzaju centrowania.left:XXXpx
.Uwaga: Działa to najlepiej / zgodnie z oczekiwaniami w przeglądarce Firefox w systemie Windows
Wynik końcowy wygląda następująco:
źródło
ActionScript 3.0, 491 bajtów
Forma golfa:
Dane wyjściowe: http://megaswf.com/file/2708781.swf
źródło
var ww=new WarmWelcome(); stage.addChild(ww);
i narysuj go we Flashu za pomocą:)
MATLAB R2013a,
551541To mój pierwszy Code Golf. Więc jeśli coś nie jest zgodne z zasadami, naucz mnie / powiedz mi :)
Forma golfa:
Wyjście (zrasteryzowane):
źródło
LaTeX / TikZ (613 bajtów)
Rezultatem
pdflatex
jest plik PDF z kapeluszem jako grafiką wektorową i ciasną ramką ograniczającą.Nie golfił
Wartości są pobierane z pliku SVG, były bardziej dokładne (ale zawiera również błędy zaokrąglania). Najtrudniejsze było ciemne ukośne linie w tle. Są narysowane jako bardzo gruba linia z zaokrąglonymi kreskami i połączeniami.
źródło
Perl + TK: 555
Nowe wiersze służą tylko do odczytu, chociaż zgubiłem tak wiele zmiennych.
Oto zdjęcie:
Nie wydaje mi się, żeby był idealnie zbliżony do piksela, ale jest wystarczająco blisko :)
źródło