Wyzwanie polega na kodowaniu tłumacza dla języka opisu malarstwa Mondrian (MPDL).
Definicja języka
Język działa na stosie prostokątów. Prostokąt jest zdefiniowany przez jego lewą górną współrzędną i dolną prawą współrzędną. Współrzędne muszą być liczbami całkowitymi. Stos jest inicjowany pojedynczym prostokątem z atrybutami(1,1,254,254)
Każde polecenie ma następujący format:
<character><integer>
Istnieją trzy polecenia:
v<integer>
: wykonaj podział pionowy na ostatnim prostokącie w stosie, w miejscu wskazanym przez parametr (w procentach). Prostokąt źródłowy jest usuwany ze stosu i zastępowany dwoma nowymi prostokątami wynikającymi z podziału. Lewy prostokąt jest wciskany na stosie, a następnie prawy prostokąt. Ponieważ współrzędne prostokąta są liczbami całkowitymi, ułamki powinny być zaokrąglane do największej mniejszej liczby całkowitej.
h<integer>
: podział poziomy. Górny prostokąt jest wciskany na stosie, a następnie dolny prostokąt.
c<integer>
: usuwa najnowszy prostokąt ze stosu i maluje go na kolor podany jako parametr. 1 = biały, 2 = czerwony, 3 = niebieski, 4 = żółty
Wyzwanie
Napisz program, który przyjmuje jako parametr opis malowania i tworzy bitmapę 256 x 256 reprezentacji malowanych prostokątów. Prostokąty muszą być oddzielone czarną linią 3 piksele. Prostokąt z jednym lub dwoma pikselami powinien mieć ukryte czarne piksele poza obramowaniem.
Dane wejściowe można odczytać jako parametr lub jako plik, zależnie od Ciebie. Polecenia powinny być oddzielone spacją. Możesz założyć, że plik wejściowy ma poprawną składnię i nie ma spacji końcowych ani wiodących, tabulatorów itp. Dane wyjściowe można wyświetlić bezpośrednio na ekranie lub zapisać w pliku, zależnie od Ciebie.
Najkrótszy kod wygrywa.
Test
Następujące źródło:
v25 h71 v93 h50 c4 c1 c1 c2 h71 c3 h44 c1 c1
Powinien produkować Kompozycję II w kolorze czerwonym, niebieskim i żółtym :
v
ah
argumenty powinny być w pikselachv30 v50 c1 c5 h70 v50 c1 c3 c2
.Odpowiedzi:
Perl 5 + ImageMagick - 297
Coś na początek:
Pobiera dane z wiersza poleceń i generuje
a.gif
.źródło
Haskell - 335
Program odczytuje instrukcje jako jedną linię od standardowego wejścia , jeśli jest to niedopuszczalne, daj mi znać.
Kompiluje się w program, który przyjmuje flagi -w szerokość -h wysokość -o plik wyjściowy .Wysyła plik „a.svg”, jeśli nie jest to natychmiast usunięte z kodu. Ponieważ wynik jest obrazem wektorowym, nie jest on „pikselowy”.Po raz pierwszy pracuję z pakietem Diagramy, możesz wskazać wszelkie błędy, które popełniłem. Zwłaszcza każdy backend, który pozwoliłby mi na wyjście z mniejszym kodem, byłby miły.
Niektóre z pierwszych kroków, które podjąłem podczas opracowywania kodu, można znaleźć na stronie http://paste.hskll.org/get/1737 . Różni się od powyższego kodu importem i brakuje mu głównego, ponieważ paste.hskll.org zapewnia własne środowisko główne i rysunkowe.
źródło
Python -
434 405 377 364361Mój pierwszy golf python. Prawdopodobnie można to DUŻO poprawić, więc wszelkie opinie są mile widziane.
źródło
a+=[x]
zamiasta.append(x)
. A split nie potrzebuje argumentu, jeśli oddziela się spacjami.HTML + JavaScript ES6 (407)
Testowane z Firefox 32.0.3
źródło
x.charAt(0)
->x[0]
;x.substr
->x.slice
;white yellow
->#fff #ff0
;document.getElementById("c")
->c
... i więcejHTML + JavaScript (ES6) 335
Zbyt podobna do odpowiedzi @mika - oznaczenie CW.
źródło