Kiedy pewnego dnia zacząłem rysować na papierze w kratkę, wymyśliłem powyższą czcionkę o ujemnych odstępach dla cyfr. Jeśli jeszcze tego nie zauważyłeś, odstępy między powyższymi kształtami dają złoty współczynnik 1.618033988749 . W tym wyzwaniu Twoim zadaniem jest pobranie liczby i wprowadzenie jej dokładnie tak, jak pokazano w powyższym przykładzie.
Oto jak są one tworzone. Wszystkie linie będą na regularnej siatce, tak że poszczególne cyfry składają się z niewielkiej liczby komórek siatki. Oto kształty 10 cyfr (zignorujemy przecinek dziesiętny dla tego wyzwania):
Tak, 7 różni się od przykładu złotego podziału u góry. Trochę to popsułem. Pójdziemy z tym.
Zauważ, że każda cyfra ma pięć komórek wysokości i trzy komórki szerokości. Aby wyrenderować liczbę, możesz wyobrazić sobie umieszczenie wszystkich jej cyfr obok siebie, tak aby między każdą parą cyfr była dokładnie jedna pusta kolumna. Na przykład, biorąc 319
jako dane wejściowe, napisalibyśmy:
Zauważ, że dodajemy jedną wiodącą i końcową pustą kolumnę. Teraz odwracamy komórki:
Dane wyjściowe powinny wówczas stanowić granice wynikowych wielokątów:
Oczywiście możesz wygenerować wynik w jakikolwiek inny sposób, o ile renderowany wynik wygląda tak samo.
Wkład
- Możesz napisać program lub funkcję, przyjmując dane wejściowe przez STDIN (lub najbliższą alternatywę), argument wiersza poleceń lub argument funkcji, jako ciąg znaków lub listę cyfr. (Nie możesz wziąć liczby, ponieważ nie pozwoli to na obsługę zer wiodących).
- Możesz założyć, że na wejściu nie będzie więcej 16 cyfr.
Wydajność
- Dane wyjściowe mogą być wyświetlane na ekranie lub zapisywane w pliku we wspólnym formacie obrazu.
- Możesz używać zarówno grafiki rastrowej, jak i wektorowej.
- W obu przypadkach współczynnik kształtu komórek leżącej poniżej siatki musi wynosić 1 (to znaczy komórki powinny być kwadratami).
- W przypadku grafiki rastrowej każda komórka powinna zajmować co najmniej 20 na 20 pikseli.
- Linie nie mogą być szersze niż 10% wielkości komórki. Jestem gotów dać jeden lub dwa piksele swobody dzięki aliasingowi tutaj.
- Linie i tło mogą być dowolnymi dwoma wyraźnie rozróżnialnymi kolorami, ale kształty utworzone przez linie nie mogą być wypełnione (to znaczy wnętrza powinny również mieć kolor tła).
- W każdej zamkniętej pętli nie może być żadnych przerw.
- Oczywiście cały wynik musi być widoczny.
Przypadki testowe
Oto 10 danych wejściowych, które łącznie obejmują wszystkie możliwe pary sąsiednich cyfr, a także każdą możliwą cyfrę wiodącą i końcową:
07299361548
19887620534
21456837709
39284106657
49085527316
59178604432
69471338025
79581224630
89674235011
97518264003
Oto oczekiwane wyniki dla tych:
Upewnij się, że twój kod działa również, gdy otrzyma się jedną cyfrę (nie chcę tutaj podawać oczekiwanych wyników, ponieważ powinny one być oczywiste, a sekcja przypadków testowych jest wystarczająco napuchnięta).
źródło
Odpowiedzi:
BBC BASIC, 182 znaków ASCII (tokenizowany rozmiar pliku 175 bajtów)
Pobierz tłumacza na http://www.bbcbasic.co.uk/bbcwin/bbcwin.html
Punktacja: Gdy powyższy program zostanie wklejony do edytora i uruchomiony, edytor rozszerzy skróty słów kluczowych na pełne słowa kluczowe na ekranie, chociaż w rzeczywistości są one tylko 1 bajt po tokenizacji. (Przykład
I.
=INPUT
1 bajt przestrzeni dyskowej).Wyjaśnienie
Wyjaśnię tylko, co robi linia VDU: rysuje ramkę, odwracając nieco bieżący kolor pikseli na ekranie. Oznacza to, że (przy odrobinie uwagi narożnikami) można po prostu narysować jedną komórkę obok siebie, a krawędź pośrednia zostanie anulowana i zniknie z powodu podwójnego rysowania.
Dokładne sprawdzenie wykaże, że prawy górny i lewy dolny róg komórki są narysowane, ale brakuje lewego górnego i prawego dolnego rogu („zaokrąglone”), aby to zadziałało.
Po narysowaniu komórki kursor graficzny przesuwa się w górę o 32 piksele, gotowy do narysowania następnej komórki.
Reszta programu to dość prosta dekompresja bitmap ASCII. Wymiary komórki wynoszą 64 x 64 jednostki dla gry w golfa / kompatybilności ze sposobem dekompresji mapy bitowej.
q
kontroluje rozmiar drukowanej komórki: 64x64 jednostki dla komórki, która jest obecna, 0x0 dla komórki, która jest nieobecna.Nieskluczony kod
Wydajność
Do
MOVE
s są po prostu wyjście do odpowiednich wysokościach na ekranie. BBC basic używa w tym trybie 2 jednostek = 1 piksel, więc komórki mają w rzeczywistości 32 x 32 piksele.źródło
Oktawa,
233 225 216213 bajtówOto pierwszy przypadek testowy (z przechwytywania ekranu o zmienionym rozmiarze, pasuje do mojego monitora =):
Dane wejściowe mogą mieć dowolną długość, np
'07299361548'
źródło
JavaScript ES6, 506 bajtów
Nie golfowany:
Zakłada, że
<body>
można dołączyć płótno, przetestowane w przeglądarce Firefox 46.Przykład uruchomienia (przypisanie funkcji anonimowej do f):
daje:
źródło
HTML + JavaScript ES6, 352
Przetestuj poniższy fragment kodu
Mniej golfa
źródło
Java, 768 bajtów
Bez golfa
Notatki
Dane wejściowe to pojedynczy ciąg jako argument. Jak używać:
javac G.java
,java G 80085
Zaczynam od czarnego płótna, a następnie dodaję liczby jako białe pozytywy. Tworzę kopię obrazu, a następnie odwracam każdy czarny piksel, który ma 4 czarnych sąsiadów na oryginalnym obrazie.
Wyjścia
Niektóre pojedyncze cyfry:
źródło
R, zbyt wiele bajtów do gry w golfa (
1530+1115)lol przy zapisywaniu na dysk, a następnie czytaniu z dysku edytuj czarne wypełnienie.
źródło
Python 3,
326325 bajtówźródło
range(3)
nigdy nie jest tego warte.C #, 768
773 776bajtówPobiera liczbę jako argument wiersza poleceń. Wysyła ładny, czysty, nie-aliasy obraz BMP z numerem jako nazwą.
Oryginał przed golfem:
źródło
Mathematica 328 bajtów
Wyjaśnienie
Cztery bity zostaną wykorzystane w każdym z 5 wierszy komórek dla każdej cyfry wejściowej.
"75557262277174771717557117471774757711117575775717"
reprezentuje 0 do 9 jako bitmapy.Pierwsze 5 cyfr w dużej liczbie całkowitej powyżej, a mianowicie
75557
wskazuje, jak powinien być wyświetlany każdy wiersz tablicy dla zera.7
będzie reprezentować{0,1,1,1}
białą komórkę, a po jej prawej stronie 3 czarne komórki; wiodące0
to puste miejsce do oddzielania wyświetlanych cyfr.5
koresponduje z{0,1,0,1}
białym, czarnym, białym, czarnym komórkom.Poniżej przedstawiono listę reguł zastępowania:
Zauważ, że kiedy
3
zostanie wprowadzone, zostanie zastąpione przez71717
Ta reprezentacja jest wyrażona w postaci binarnej:Jego czarno-biała odwrotność znajduje się po prostu przez wymianę
1
s i0
s.Zobaczmy, jak
p
iq
jak wyglądają wyświetlane przezArrayPlot
:To po prostu łączy tablice zer i jedynek dla każdej cyfry przed renderowaniem dużej tablicy przez
ArrayPlot
.*
jest definiowanyj
jako końcowa pionowa przestrzeń po ostatniej cyfrze.źródło