W 2015 r . Międzynarodowe lotnisko w Portland rozpoczęło wymianę kultowego dywanu . Chcę, żebyś napisał program rysujący stary dywan w jak najmniejszej liczbie bajtów.
Dywan:
Dane techniczne
Oto link do skalowalnego obrazu pdf jednego kafelka. Twój wynik powinien odpowiadać względnym wymiarom i położeniu tego obrazu.
Wszystkie kolory na ostatecznym obrazie powinny mieścić się w granicach 15 każdej wartości RGB określonego obrazu. Są one wymienione poniżej dla Twojej wygody.
Red Green Blue Teal: 0, 168, 142 Magenta: 168, 108, 185 Orange: 247, 58, 58 Light Blue: 90, 166, 216 Dark Blue: 0, 77, 117
Twój wynik musi mieć co najmniej 150 x 150 pikseli i powinien być kwadratowy. Jeśli zdecydujesz się na wyjście w formacie skalowalnym, takim jak obraz wektorowy, powinieneś dokładnie dopasować obraz.
Możesz wyprowadzić obraz w dowolnym istniejącym formacie obrazu.
To jest golf golfowy, więc powinieneś dążyć do zminimalizowania liczby bajtów w swoim kodzie.
źródło
Odpowiedzi:
Czysty HTML, 873 bajtów
HTML + CSS, 625 bajtów
źródło
Tikz,
725693681671 bajtówWypróbuj online!
Wyjaśnienie
Dużą część kodu stanowi opakowanie:
Jest to niewielka odmiana standardowego opakowania Tikz, ponieważ ma również linię,
\usepackage{xcolor}
dzięki czemu możemy poprawnie tworzyć kolory.Pierwszą rzeczą, którą należy zrobić, jest
line width=20,every node/.style={minimum size=20}]
ustawienie odpowiedniego rozmiaru linii i węzłów.Po wykonaniu tej czynności określamy kolory, których będziemy używać w różnych częściach obrazu:
Teraz, gdy wszystko jest już ustawione, pomalujemy tło na naszą płócienną turkus:
(Nie dołączę obrazu tego, ponieważ jest to tylko turkusowy kwadrat, ale dołączę zdjęcia każdego kroku)
Pierwszy dodawany przez nas węzeł to pomarańczowy węzeł po lewej stronie środka płótna.
Teraz narysujemy jasnoniebieskie i purpurowe węzły. Istnieje 7 niebieskich węzłów i 4 niebieskie węzły, ale możemy narysować dodatkowe węzły, które zostaną później pokryte liniami, więc narysujemy 7 każdego z nich.
Teraz narysujemy wszystkie grupy 3 kropek za pomocą pojedynczej
\foreach
pętliTeraz narysujemy właściwą linię. Ta linia będzie prostą linią z przesunięciami
.35
w każdym kierunku, aby dopasować do wielkości węzła.Teraz musimy narysować ciemnoniebieskie linie i kwadraty na osi x. Narysujemy je jedną linią przy użyciu niestandardowego wzoru kreski.
Ten wzór jest
[dash pattern=on20off8.5on162.5off8.5]
To tworzy kwadrat z długim solidnym ogonem. Nasza linia rozpocznie się od dołu i nie obejmie do końca 2 cykli wzoru.A teraz skończymy.
źródło
\definecolor
zeHTML
specyfikacją (zamiastRGB
) pozwala określić kolory za pomocą heksadecymalnego.dosłowny plik PNG,
283,234227 bajtówEDYTOWAĆ : Korzystając z internetowej usługi kompresji obrazu https://compress-or-die.com/ , zmniejszyło się to o kolejne 7 bajtów.
albn @ alexhi
227 bajtów to rzeczywisty rozmiar pliku binarnego carpet.png. Po zakodowaniu w base64, jak pokazano w cytowanym bloku powyżej, jest on o kilka bajtów dłuższy (308 bajtów). Hermetyzacja tego we fragmencie HTML, który od razu renderuje obraz, doda kolejne kilka bajtów:
HTML,
414,343, 336 bajtówEdycja : usunąłem cytaty i zamknąłem>, jak sugerował Kudłaty. Również skompresował obraz o kolejne
17, 24 bajtówźródło
=
i końcowe>
. Oto 366-bajtowa wersja, nad którą pracowałem, zanim zobaczyłem twoją odpowiedź:<img src=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJgAAACYBAMAAADq7D0SAAAAD1BMVEUAqI4ATXWobLlaptj3OjrqGXAuAAAAp0lEQVRo3u3YQQqFMAxFUbeQLbiFbsH9r8k3y8CmTiKm7b2Dwv/CgUAD4jF3TYGBRdgKmRqPCQa28gaMZ20KDGz5DQhnbQoMTG2wAcPR/ScY2HeYVw4zBQYWYDUvbRLWFS/lBxhYhM3bpXzMcWBgEVa5U70cpsDAnkf1FxcwMDAwMLBczP8DAwuwmpc2HzMFBhY8qHlp8zFTYGCdyn8GKrhOYBtjv3QDvf+Zic+8bOsAAAAASUVORK5CYII
Mathematica, 285 bajtów
Łatwiej czytać:
Linie 1–3 definiują krótkie nazwy funkcji, z których najważniejszą jest
s
narysowanie kwadratu pośrodku otrzymanych współrzędnych (tak naprawdę 3-krotność współrzędnych, dla odpowiedniego skalowania). Wiersz 4 definiuje funkcję koloru za pomocą „skrótu” systemu Mathematica RGB:,RGBColor["#xyz"]
gdziexyz
są cyframi szesnastkowymi, oznaczaRGBColor[{17x, 17y, 17z}]
(tak, że każda współrzędna ma 16 równomiernie rozmieszczonych opcji od 0 do 255). Pierwsze polecenia w wierszach 6–10 zmieniają bieżący kolor, używając kolorów skrótów najbliższych wyznaczonym pięciu kolorom (żadna wartość nie jest wyłączona o więcej niż 8, gdy zaokrąglamy do najbliższej wielokrotności 17).Linia 6 rysuje duży kwadrat turkusowy. Linia 7 rysuje linię magenta kwadratów, linia 8 rysuje linię pomarańczowych kwadratów i pojedynczy pomarańczowy kwadrat. Linia 9 rysuje linię jasnoniebieskich kwadratów. Linia 11 rysuje trzy ukośne linie ciemnoniebieskich kwadratów, a także pojedynczy granatowy kwadrat na dole. Na koniec linia 12 rysuje trzy długie ciemnoniebieskie prostokąty. Dane wyjściowe są poniżej:
(Wskazówka golfowa: polecenie
Cuboid
, które jest przeznaczone dla obiektów graficznych 3D, działa dobrze w 2D i jest krótsze niżRectangle
.)źródło
Python, 420
źródło
HTML / SVG,
550542521 bajtówźródło
HTML, 366 bajtów
W niedzielę otrzymałem odpowiedź Base64 , kiedy jeszcze nad tym pracowałem; jeśli zdecyduje się go użyć, usunę tę odpowiedź.
Jeśli ciąg Base64 jako taki jest poprawną odpowiedzią, to tylko 335 bajtów:
źródło
HTML / SVG + JavaScript (ES6),
500499 bajtów>
Wymagana jest dodatkowa funkcja, aby działała jak fragment kodu , zobacz ten Fiddle dla rzeczywistego kodu.Wyjaśnienie
Tablicy tablic jest mapowany do funkcji
a
, tworząc klonyrect
w HTML, umieszczanie ich po początkowymrect
i ustawiania ichfill
,x
,y
,width
iheight
atrybuty. Każda tablica zawiera wartości dla tych atrybutów, w tej kolejności, a wszelkie brakujące wartości są ustawiane przez domyślne parametrya
. Pozornie niepotrzebner.id++
pozwala na użyciecloneNode()
, zapewniając jednocześnie, że jest tylko 1rect
z anid
; oszczędza to konieczności korzystania z absurdalnie drogichdocument.createElementNS("http://www.w3.org/2000/svg","rect")
.źródło
PHP + SVG, 425 bajtów
rozszerzony
Wynik kodu we fragmencie HTML
PHP + SVG, 375 bajtów
Tę liczbę bajtów można osiągnąć poprzez kompresję SVG
źródło