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).