Najpierw przestudiuj tę łamigłówkę, aby poczuć, co będziesz produkować.
Wyzwanie polega na napisaniu programu lub funkcji, która wyświetli okrągłą grafikę podobną do układanki, podając (podstawa 10) liczbę od 1 do 100 (włącznie). Jest to podobne do tego wyzwania , z tym wyjątkiem, że będziesz tworzył grafikę zamiast cyfr rzymskich. Poniższe kółka przedstawiają liczby 1-10, od lewej do prawej:
Jak wynika z odpowiedzi na układankę, twoja grafika powinna wyglądać jak cyfra rzymska od wewnątrz, gdzie grubość linii reprezentuje symbole rzymskie, a cała grafika reprezentuje liczbę. Dla odniesienia, oto grubości linii, których będziesz potrzebować. Każda linia powinna mieć wypełnienie 3px między nią a następną.
Number Roman Numeral Line Width
1 I 1px
5 V 3px
10 X 5px
50 L 7px
100 C 9px
Proszę zamieścić próbkę lub dwie z twoich wyników. Załóżmy, że dane wejściowe są prawidłowe, standardowe luki itp. To jest kod golfowy, więc wygrywa najmniej bajtów. W przypadku remisu większość głosów wygrywa. Powodzenia!
źródło
Odpowiedzi:
Mathematica -
166181 bajtówTrochę bardziej zwięzłe niż inne odpowiedzi Mathematica, po części dzięki bardziej punktowemu stylowi.
Cała biała spacja służy wyłącznie przejrzystości. Definiuje to anonimową funkcję, która zwraca żądaną grafikę.
Animacja
Generowanie animowanego pliku GIF z kręgów liczb jest banalne w Mathematica, która ma wbudowane funkcje do animowania i eksportowania sekwencji dowolnych obiektów. Zakładając, że powyższy kod został właśnie wykonany,
Przykładowy wynik
źródło
Common Lisp -
376331304 bajtyPrzykłady
(1) (24)
(104) (1903) (3999)
Animacja
Dla liczb od 1 do 400:
NB: Dla przypomnienia animacja ta jest wykonywana w następujący sposób:
Mam zmodyfikowaną wersję kodu o nazwie,
rings
która zwraca szerokość wygenerowanego obrazu. Dlatego wynikiem następującej pętli jest maksymalny rozmiar, tutaj 182 :Cała pętla zajmuje 9.573 sekundy. To daje około 24 ms dla każdej liczby całkowitej. Następnie w powłoce:
Bez golfa
Objaśnienia
Funkcja przyjmuje liczbę całkowitą
N
od 1 do 3999 i nazwę plikuUżywam
(format nil "~@R" N)
do konwersji z dziesiętnego na rzymski. Na przykład:~@R
Ciąg kontroli formatu jest określony do pracy dla liczb całkowitych między 1 i 3999. Dlatego istnieje ograniczenie dla zakresu dozwolonych nakładów.Ieruję wynikowy ciąg, aby zbudować listę
P
zawierającą(radius width)
pary dla każdej cyfry C.Szerokość jest prostym odwzorowaniem liniowym: używam stałego ciągu „IVXLCDM”, aby obliczyć w nim pozycję C. Mnożąc przez dwa i dodając jeden, otrzymujemy pożądaną wartość:
W wersji golfowej dzieje się to jednak nieco inaczej:
Obliczenia każdego promienia uwzględniają szerokość każdego pierścienia, a także puste przestrzenie między pierścieniami. Bez optymalizacji prędkości obliczenia pozostają precyzyjne, ponieważ nie są oparte na liczbach zmiennoprzecinkowych, ale liczbach wymiernych.
Edycja : Zmieniłem parametry, aby były zgodne z regułami wypełniania.
Po wykonaniu tej czynności znam wymagany rozmiar wynikowego płótna (dwukrotność ostatniego obliczonego promienia).
P
i zapisuję płótno.źródło
HTML + JQuery, 288
HTML
JS
Pokaż fragment kodu
Skrzypce
źródło
Java, 565
Przykłady
15
84
93
Ładnie sformatowane:
źródło
Matematyka 9 -
301249 bajtów: D Używanie wbudowanej konwersji na cyfry rzymskie jest oszukiwane, ale hej.
(Kiedy robiłem to ostatniej nocy, nie miałem zbyt wiele czasu, ale zdałem sobie sprawę, że można grać w golfa o wiele bardziej. I wziąłem też kilka wskazówek od Davida Zhanga ...: D Dzięki!)
Trochę jaśniej:
Jest to funkcja, którą można wywołać w następujący sposób:
Lub możesz pokazać wyniki od wartości a do b za pomocą:
Table[r[i],{i,a,b}]
Uwaga : Działa to tylko dla wartości do 399.
źródło
Python 2,
322296Skrypt odczytuje liczbę do konwersji ze standardowego wejścia i wysyła obraz jako znacznik SVG.
.. Używam „czerwonego” zamiast „czarnego”, ponieważ oszczędza 2 znaki :)
Oto kilka przykładów: dla 23: http://jsfiddle.net/39xmpq49/ dla 42: http://jsfiddle.net/7Ls24q9e/1/
źródło
JavaScript
342334308źródło