Będąc wielkim fanem kostki Rubika i fajnej sztuki, pracowałem nad połączeniem tych dwóch, aby zrobić naprawdę fajne rzeczy. Zasadniczo rozwiązywanie miniaturowych kostek Rubika w celu utworzenia podstawowych pikseli w tworzeniu kostki Rubika. Przykłady takich dzieł można zobaczyć pod tym linkiem: http://google.com/search?q=rubik%27s+cube+art
Teraz celem tego Code Golf jest utworzenie kodu, który akceptuje obraz jako dane wejściowe, a następnie konwertuje go w następujący sposób:
Obraz jest początkowo redukowany do bezpiecznych dla sieci kolorów w skali szarości. Powodem tego jest to, że musimy wyizolować bezpieczną dla palety internetowej skalę szarości (tj. 000000, 333333, 666666, 999999, CCCCCC i FFFFFF). Algorytm metody kolorymetrycznej konwersji na skalę szarości jest dostępny na stronie : http://en.wikipedia.org/wiki/Grayscale#Colorimetric_.28luminance-preserving.29_conversion_to_grayscale , jeśli chcesz użyć tego jako inspiracji.
Następnie renderowano skalę szarości na odpowiednie kolory. Aby szybko to rozbić: 000000 będzie odnosić się do niebieskiego Rubika, 333333 będzie odnosić się do czerwonego Rubika, 666666 będzie odnosić się do zielonego Rubika, 999999 będzie odnosić się do pomarańczowego Rubika, CCCCCC będzie odnosić się do żółtego Rubika, a FFFFFF będzie odnosić się do białego Rubika.
Wolę, aby Twój wynikowy kod mógł renderować z palety zdjęcia prosto do kolorów Rubika. Dwustopniowa metoda przejścia z bezpiecznej dla sieci skali szarości, a następnie do odpowiedniej palety Rubika, ma na celu przedstawienie logiki procesu, ale jeśli jest to łatwiejsze, zrób to.
Rzeczywiste wartości RGB dla palety Rubika muszą odpowiadać następującym:
- Czerwony: # C41E3A
- Zielony: # 009E60
- Niebieski: # 0051BA
- Pomarańczowy: # FF5800
- Żółty: # FFD500
- Biały: #FFFFFF
Aby dać wam przykład, przyciąłem głowę Abrahama Lincolna z poniższego obrazu: i przetworzyłem algorytm, aby uzyskać następujące:
Siatka jest tam, abyś mógł zobaczyć, w jaki sposób każda indywidualna miniaturowa kostka Rubika musiałaby zostać skonfigurowana do utworzenia obrazu. Rzeczywisty rozmiar uzyskanego obrazu wynosi 45 na 45 pikseli, co oznacza (45/3) * (45/3) = 15 * 15 = 225 miniaturowe kostki Rubika zostaną użyte do stworzenia tego obrazu. Nie oczekuję, że przedstawisz wynikowy obraz z siatką, tak jak ja.
Oto, co jest wymagane:
Obraz przetwarzany przez ten algorytm musi mieć szerokość x pikseli na wysokość y pikseli, tak aby xiy były wielokrotnościami 3. Ma to na celu ułatwienie renderowania jako części mozaiki kostki Rubika. Jeśli obraz jest dość duży, zaleca się zmniejszenie go do około 45 x 45 do 75 x 75 lub mniej więcej przed przetworzeniem. Pamiętaj, że ten element zmiany rozmiaru jest OPCJONALNY.
Aby utworzyć mozaikę, obraz należy przekonwertować na paletę sześcianów Rubika o seksownym kolorze.
Powstały obraz musi być poprawnym plikiem graficznym po przetworzeniu. Aby udowodnić, że Twój kod działa, uruchom go na obrazie jednego z prezydentów Stanów Zjednoczonych Ameryki lub znanej gwiazdy Hollywood. Użyłem już Abrahama Lincolna w moim przykładzie, więc nie można już używać tego prezydenta. Upewnij się, że podajesz używany język, liczbę bajtów, a także prezydenta / celebryty użytej do przetestowania kodu, w tym przed i po ujęciach ...
Każdy wpis musi mieć unikalnego prezydenta / celebrytę jako swój testowy przypadek. Nie przyjmę duplikatów. Zapewni to, że duplikaty wyników nie będą używane do testowania różnych wpisów kodu. Bardzo dobrze jest powiedzieć, że twój kod działa, to kolejna rzecz, aby to udowodnić.
5. Najkrótszy kod wygrywa.
Zmieniam to na konkurs popularności ... Wolałbym zobaczyć, kto może to zrobić bez konkurowania pod względem liczby bajtów ... Więc nagrodzę to nagrodą po 28 lutego 2014 roku.
źródło
#000000 => #0051BA
itp.Odpowiedzi:
Imagemagick (108)
Wersja: ImageMagick 6.8.7-7 Q16 x86_64 2013-11-27
Następujące połączenie:
gdzie
input
ioutput
muszą zostać zmodyfikowane dla wejściowej i wyjściowej nazwy pliku.Naliczyłem tylko znaki między
-resize
i#FFF"
, jeśli uważasz, że jest to nieważne, możesz komentować.Użyłem Lenny jako obrazu (pojawiła się w Playboyu i każdy, kto to robi, powinien liczyć się jako gwiazda Hollywood, prawda?)
Wkład:
Wydajność:
Wyjście powiększone:
Uwagi: zgodnie z dokumentami imagemagick nie można mieć więcej niż jednego operatora warunkowego w zestawieniu, ale połączenie nadal wydaje się działać dobrze, więc prawdopodobnie zostało to naprawione, a dokumenty po prostu nie zostały zaktualizowane.
Uruchamianie identyfikacji na obrazie wynikowym (aby pokazać, że kolory są rzeczywiście w porządku):
Jeśli uważasz, że Lenna nie liczy się jako celebrytka, oto Bruce Willis:
źródło
fx
części można jeszcze bardziej skompresować w języku o lepszej ekspresji. I te języki mają również natywną obsługę obrazów (więc nie trzeba tracić znaków przy importowaniu imagemagick / gd / itp.)Matematyka
Będziemy pracować z kwadratowym regionem z amerykańskiego znaczka z Gretą Garbo. Będzie to określane jako
j
.Funkcja f przyjmuje 3 parametry:
i
który odnosi się do obrazurs
, rozmiar rastram
, zmienna boolowska określająca, czy należy użyć linii siatki. (Domyślne ustawienie to True).Używając rozmiarów rastrowych 15, 30, 45 i 75:
Nie wyobrażam sobie, żeby ktoś tworzył kostkę Rubrika z tyloma kawałkami! Niemniej interesujące ćwiczenie.
Baw się kolorami
To z wcześniejszego wpisu. Kod jest nieco inny.
Graphics
jest używany zamiastArrayPlot
. Ponadto używamy pełnego stempla, nawet jeśli nie jest kwadratowy.Istnieje 6! = 720 permutacji kolorów kostki Rubrik.
Poniżej pokazano środkowy obraz górnego rzędu (ustaw 6 zdjęć poniżej). Gdy wartości w skali szarości są ustawione od najciemniejszego do najjaśniejszego, kolory to {r, gr, b, o, y, w}. Inne odmiany jednak działają.
i
to oryginalny obraz w skali szarości.i
jest oryginalnym obrazem w skali szarości pełnego znaczka Greta Garbo.Rasterize[garbo,RasterSize->75
rasteryzuje obraz do tablicy 75 na 75.ColorQuantize[<>, 6]
redukuje wartości skali szarości do zestawu 6.ImageData
pobiera tablicę danych z obrazu; przychodzi do góry nogami.Reverse
odwraca tablicę danych, stąd obraz, prawą stroną do góry.garboColors
to 6 wartości skali szarości w skwantowanym obrazie.Graphics[Raster
wyświetla ostateczny obraz.rubrikColors
są wartościami RGB 6 kolorów kostki Rubrika.Podano różne kombinacje kolorów czerwonego, zielonego, niebieskiego, pomarańczowego, żółtego i białego.
I kod:
Garbos Galore
Oto 72 (z 720) zdjęć Greta Garbo, które wykorzystują 6 kolorów kostki Rubrika. Niektóre obrazy działają lepiej niż inne, nie sądzisz?
źródło
Reverse
można wyeliminować, pozostawiając obraz do góry nogami, ale nie widzę żadnych innych możliwości. Mathematica jest wyrazista, ale używa dużych słów. Ktoś biegły w obrazach prawdopodobnie może nieco zmniejszyć rozmiar kodu, ale wątpię, by pobił twój kod imagemagick.i
przytrzymaj oryginalny obraz.gr
oznacza zieleń Rubrika.g
odnosi się do zrasteryzowanych i skwantowanych danych obrazu dla obrazu w skali szarości.Smalltalk (Smalltalk / X),
289139 *wejście: i; wyjście: r
wkład:
wydajność:
powiększony:
(dla wszystkich młodych ludzi: to NIE jest Madonna ;-)
[*] Nie policzyłem powiększenia do 75x75 (pierwsza linia) - mógłbym użyć już zmienionego rozmiaru jako wejścia. Mam nadzieję, że wszystko jest w porządku.
źródło
Postscriptum i PRAWDZIWE kolory Rubika! ;-)
Cóż, to rozwiązanie jest trochę nie na temat, ponieważ ogranicza się do nieco wysoce wyspecjalizowanej sfery. Ale po wielu frustracjach związanych np. Z „pytaniem o dziwne liczby” (niezdolność do stworzenia czegoś praktycznie działającego) postanowiłem coś opublikować, więc wyciągnąłem to ze stosu niedokończonych bazgrołów i sprawiłem, że jest to reprezentatywne.
Rozwiązanie wykorzystuje fakt, że pierwsza wersja tego pytania określa wymagane kolory poprzez link do strony, która wyraźnie stwierdza, że należy stosować kolory Pantone®, a kolory RGB są jedynie przybliżeniami. Potem pomyślałem, dlaczego miałbym dokonywać przybliżeń, skoro mogę robić prawdziwy kolor? - :)
Ten kod należy zapisać np.,
rubik.ps
A następnie dostarczyć do Ghostscript ze zwykłą inkantacją:Następnie czeka cię w następnym wierszu, aby wprowadzić nazwę pliku JPG, np
i jeśli wszystko pójdzie dobrze, zapisuje dane wyjściowe w
out.psd
pliku.Wejście musi być kwadratowe RGB JPEG (dowolnego rozmiaru), wyjście to PSD z kanałami kolorów dodatkowych. Potrzebujesz programu Photoshop, aby wyświetlić plik. Zmiana urządzenia GS
psdcmyk
na cokolwiek innego nie da nic użytecznego. JPEG jako dane wejściowe - ponieważ interpreter PostScript może bezpośrednio dekodować strumień danych. Kwadratowy kształt - ponieważ program korzystasqrt
z długości łańcucha, aby znaleźć szerokość (i wysokość) obrazu.Pierwsze wiersze określają rozmiar obrazu wyjściowego (można zmienić z domyślnego 75) i paletę kolorów (kolory i ich liczbę można również zmienić). Wydaje mi się, że wszystko inne nie jest zakodowane na stałe.
Co się dzieje? Strumień trypletów RGB jest konwertowany w locie na ciąg wartości w skali szarości (za pomocą prostej formuły), budowany jest zwykły 8-bitowy słownik obrazków contone i używany do malowania 5 identycznych obrazów na sobie w 5
Separation
przestrzeniach kolorów. Sztuką jest zastosowanie funkcji przenoszenia przed każdym wywołaniemimage
operatora. Np. W przypadku żółtej farby funkcja zwraca 0 dla wartości wejściowych tylko w zakresie 0,167 .. 0,333, a w przeciwnym razie 1.Wkład:
Zrzut ekranu wyjścia 75x75 otwartego w Photoshopie, powiększony 800%:
I paleta kanałów Photoshop:
źródło
DO#
Musisz uruchomić go z 3 parametrami:
foo.exe 75 d:\test.jpg d:\out.png
Gdzie
75
jest maks. szerokość / wysokośćd:\test.jpg
jest plikiem wejściowym id:\out.png
plikiem wyjściowym.Dane wyjściowe dla różnych zdjęć w tym konkursie:
Moja własna celebrytka:
Wydajność:
Jednak inne (większe niż 75 x 75) rozmiary dają lepsze obrazy:
A jeśli będziemy trzymać się prezydentów:
Ponieważ nie jest to (już?) Kodegolf, nie zadałem sobie trudu, aby zbytnio „zminimalizować” kod. Ponadto, ponieważ instrukcje nie wspominały wyraźnie o tym, że obraz musi mieć tę samą szerokość co wysokość (kwadrat), nie zawracałem sobie głowy kadrowaniem; I zrobić , więc upewnij się, że obraz jest wielokrotnością szerokości 3 pikseli / high. Jeśli chcesz kwadratowe obrazy, użyj kwadratowych danych wejściowych Wreszcie; algorytm jest daleki od optymalnego.
Jeszcze kilka (ponieważ ludzie głosują na gorące laski / bohaterów internetowych więcej )
źródło
Brainfuck
Wymaga to interpretera / kompilatora BF, który ma -1 jako EOF i który ma więcej niż 8 bitów komórek JEŻELI jeden z czerwonych pikseli ma 255. W przeciwnym razie przestanie przedwcześnie, ponieważ nie będzie mógł różnić się między EOF a wartością 0xFF . Z jitbf masz wszystko, co maszyna ma jako liczbę całkowitą i możesz to zrobić, aby wymusić -1 jako EOF:
Renderowany format pliku obrazu to pełny plik RGB PNM (P6), nieprzetworzony jako opcja w Gimp.
Używa tylko kanału zielonego (który jest jednym z wielu sposobów konwersji kolorowego obrazu na skalę szarości). Zmniejsza wartość o 43 bez zmniejszania wartości poniżej zera, aby dowiedzieć się, którego koloru rubika użyć, i ma przełącznik, który drukuje odpowiedni kolor RBG, który odpowiada.
Zdjęcie Angeliny Jolie z Hackers (1995) zmniejszone do 75x75 i przetworzone za pomocą aplikacji:
To samo, tylko użyłem oryginalnego rozmiaru :
A ponieważ jestem medium, oto także prezydent:
źródło
Cel C
Widziałem to wyzwanie zeszłej nocy i miałem trochę nieco mylący czas
-[NSArray indexOfObject:inSortedRange:options:usingComparator:]
, stąd opóźnienie.Uruchomiłem go na iPadzie tak:
Przed Po
Przed Po
źródło
Pyton
Format:
python rubik.py <input> <max_cubes> <output>
.Obejmuje piksele do skali szarości przy użyciu sugerowanego algorytmu.
Wkład:
(źródło: ilmamilio.it )
Wyjście z
max_cubes = 25
:Wyjście z
max_cubes = 75
:Wyjście z
max_cubes = 225
:źródło