Nowa premia! (Patrz poniżej)
Zespół kartograficzny amerykańskiego republikańskiego prezydenta z nadzieją, że Ben Carson ma problemy z mapami (zdjęcie za pośrednictwem Washington Post ):
Problem polega na tym, że nie mają odpowiedniego narzędzia do pracy ™. Potrzebują najbardziej kompaktowego i niezawodnego programu, więc nigdy nie będą musieli martwić się o tworzenie map. Właśnie dlatego cię zatrudnili. Musisz wziąć tę mapę i wydrukować ją ponownie z pożądaną kolorystyką:
Autorstwa Theshibboleth [GFDL ( http://www.gnu.org/copyleft/fdl.html ) lub CC-BY-SA-3.0 ( http://creativecommons.org/licenses/by-sa/3.0/)] , poprzez Wikimedia Commons
Jeśli nie wiesz, gdzie są wszystkie stany (ponieważ nie jesteś Amerykaninem ... lub jesteś Amerykaninem), oto mapa ze wszystkimi nazwiskami (Waszyngton nie jest wymagany do tego wyzwania):
„Mapa USA z nazwami państw 2”. Licencja na licencji CC BY-SA 3.0 za pośrednictwem Wikimedia Commons - https://commons.wikimedia.org/wiki/File:Map_of_USA_with_state_names_2.svg#/media/File:Map_of_USA_with_state_names_2.svg
Na przykład, jeśli dane wejściowe są Ohio, Indiana, Illinois;New York, New Jersey, Florida
, wyprowadzasz:
Pusty obraz mapy jest dostępny w formatach SVG i PNG . Dla Twojej wygody, oto lista wszystkich 50 stanów w porządku alfabetycznym
Jest to wyzwanie związane z golfem i grafiką . Dane wyjściowe muszą być w formacie SVG lub pliku obrazu. Samo wyświetlenie wyniku na ekranie nie wystarczy. Dane wejściowe należy pobrać ze STDIN lub czytając plik tekstowy. Jestem elastyczny w sposobie formatowania danych wejściowych, chociaż powinny one zawierać pełne nazwy każdego stanu, z czerwonymi (republikańskimi) stanami wymienionymi na pierwszym miejscu, a niebieskim (demokratycznymi) stanami na drugim miejscu. Dowolne dwa wyraźne odcienie czerwieni i niebieskiego są dopuszczalne do kolorowania. Oczywiście możesz mieć pusty obraz mapy w tym samym folderze, co program, o dowolnej nazwie pliku.
Kryteria dokładności
Jeśli plik wyjściowy jest plikiem rastrowym, musi mieć co najmniej 800 x 495 pikseli, a linie nie powinny odbiegać od wyniku skalowania SVG do tego samego rozmiaru o więcej niż 1,5 piksela. Jeśli dane wyjściowe to plik wektorowy, linie nie powinny odbiegać od SVG o więcej niż 1,5 piksela, gdy oba są skalowane do 800 na 495 pikseli.
Premia!
Ben próbuje zmniejszyć zależność od obcych bibliotek i oferuje teraz premię -50% każdemu, kto używa tylko mapy w wersji rastrowej mapy i tworzy własny algorytm wykrywania regionu. Ostatecznie to ode mnie zależy, czy twoje podejście liczy się jako „pisanie własnego” algorytmu.
Powodzenia!
źródło
Odpowiedzi:
Python 626
W poniższym podejściu dodałem .rstate i .bstate na podstawie .state w opisie CSS. W moim zmieniłem nazwę dostarczonego pliku .svg na
v.svg
. Pobiera dane wejściowe, jak opisano poniżej i zapisuje do plikuw.png
. Aby przenieść z pełnej nazwy stanu do wersji skróconej, sprawdzam je na podstawie pierwszej i ostatniej dwóch liter stanów.Przykładowe dane wejściowe:
Przykładowe dane wyjściowe:
Lub zainspirowany flagą Francji:
źródło
Przetwarzanie, 425 bajtów (plik 259 bajtów + 1 +165 bajtów)
Kod:
Pusta mapa powinna mieć nazwę „ M.svg ” i być przechowywana w folderze o nazwie / data (wszystkie inne pliki znajdują się w tym samym folderze co program).
Plik wejściowy („ a ”):
Plik klucza („ b ”): http://pastebin.com/0pNufAH9
Dane wyjściowe („ m.tif ”):
Ok, oto moja próba na własne wyzwanie. Niektóre uwagi:
Jeśli ktoś ma jakiekolwiek rozbieżności w moim własnym osądzaniu mojego kodu, możesz zostawić komentarz.
Ponadto, jeśli ktoś jest zainteresowany wypróbowaniem tego wyzwania w Przetwarzaniu , obsługuje zarówno odczytywanie plików SVG do plików
PShape
, jak i parsowanie plików SVG jako XML.źródło
for(int i=0;i++<51;)
zamiastfor(int i=0;i<51;i++)
. Oszczędza 1 bajt i ma uśmiechniętą twarz;)++i
, żeby działało. Czy to brzmi dobrze?String[] a
PHP, 714 bajtów
Dane wyjściowe to pusty plik SVG, który powinien być przechowywany w pliku o nazwie
a
, z dodatkowym CSS do pokolorowania stanów, który powinien być przechowywany w pliku ob
następującym formacie:Dodałem kilka nowych linii dla czytelności.
Oto wersja bez golfa:
Zasada jest prosta: w pustym pliku SVG każda ścieżka ma identyfikator odpowiadający skrótowi reprezentowanego przez nią stanu (na przykład
<path d="…" id="HI" />
na Hawajach).Wystarczy dodać CSS, aby pokolorować tę ścieżkę w odpowiednim odcieniu. Ale w pustym pliku jest już trochę CSS (w szczególności
<style type="text/css">…</style>
tag już istnieje), więc jest to naprawdę łatwe i krótkie. Możemy zauważyć, że ciąg.b
znajduje się tylko w CSS dla.border
. Dobre wieści! Będziemy po prostu wymienić.b
sięOUR_WONDERFUL_CSS.b
.Stworzenie „naszego wspaniałego CSS” nie jest wcale trudniejsze:
Ohio0Indiana0Illinois1New York0New Jersey0Florida
.OH0IN0IL1NY0NJ0FL
.0
postacie z,#
:OH,#IN,#IL1NY,#NJ,#FL
.1
charakter z{fill:red}#
:OH,#IN,#IL{fill:red}#NY,#NJ,#FL
.#
na początku i{fill:blue}
na końcu:#OH,#IN,#IL{fill:red}#NY,#NJ,#FL{fill:blue}
.źródło
implode
i twoja nazwa użytkownika!Mathematica 1025
Nie elegancki, ale działa.
Nie wiedziałem, że pliki SVG mają ścieżki dla każdego stanu, więc znalazłem te stany,
MorphologicalComponents
a następnie powiązałem każdy składnik z jego odpowiednim stanem. Stany takie jak Michigan (z górną i dolną półwyspem) i Hawaje (wiele wysp) mają więcej niż jeden składnik.Kod zakłada, że plik mapy jest zawarty w zmiennej m .
Poniżej znajduje się obraz, który zostanie wyeksportowany przez następujące dane wejściowe:
źródło