Neuer Bonus! (Siehe unten)
Das Kartografieteam des US-republikanischen Präsidenten Ben Carson hat einige Probleme mit seinen Karten (Bild via Washington Post ):
Das Problem ist, dass sie nicht das richtige Tool für den Job ™ haben. Sie benötigen ein möglichst kompaktes und zuverlässiges Programm, damit sie sich nie wieder Gedanken über das Erstellen von Karten machen müssen. Deshalb haben sie dich angeheuert. Sie müssen diese Karte nehmen und wieder mit der gewünschten Farbe ausgeben:
Von Theshibboleth [GFDL ( http://www.gnu.org/copyleft/fdl.html ) oder CC-BY-SA-3.0 ( http://creativecommons.org/licenses/by-sa/3.0/)] über Wikimedia Commons
Wenn Sie nicht wissen, wo sich alle Bundesstaaten befinden (weil Sie kein Amerikaner sind ... oder Sie ein Amerikaner sind), finden Sie hier eine Karte mit allen Namen (Washington DC ist für diese Herausforderung nicht erforderlich):
Msgstr "Karte der USA mit Staatsnamen 2". Lizenziert unter CC BY-SA 3.0 über 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
Wenn die Eingabe beispielsweise lautet Ohio, Indiana, Illinois;New York, New Jersey, Florida
, geben Sie Folgendes aus:
Das leere Kartenbild ist in den Formaten SVG und PNG verfügbar. Zur Vereinfachung finden Sie hier eine Liste aller 50 Staaten in alphabetischer Reihenfolge
Dies ist eine Code-Golf- und Grafik-Ausgabe- Herausforderung. Die Ausgabe muss als SVG- oder Bilddatei erfolgen. Es reicht nicht aus, nur die Ausgabe auf dem Bildschirm anzuzeigen. Die Eingabe muss von STDIN oder durch Lesen einer Textdatei erfolgen. Ich bin flexibel, wie Sie die Eingabe formatieren, obwohl sie die vollständigen Namen der einzelnen Bundesstaaten enthalten sollte, wobei die roten (republikanischen) Bundesstaaten an erster Stelle und die blauen (demokratischen) Bundesstaaten an zweiter Stelle stehen. Für die Färbung sind zwei unterschiedliche Rot- und Blautöne zulässig. Natürlich können Sie das leere Kartenbild mit dem gewünschten Dateinamen im selben Ordner wie Ihr Programm speichern.
Genauigkeitskriterien
Wenn es sich bei Ihrer Ausgabe um eine Rasterdatei handelt, muss diese mindestens 800 x 495 Pixel groß sein, und die Linien dürfen nicht vom Ergebnis der Skalierung der SVG-Datei auf dieselbe Größe um mehr als 1,5 Pixel abweichen. Wenn es sich bei Ihrer Ausgabe um eine Vektordatei handelt, sollten die Linien nicht mehr als 1,5 Pixel vom SVG abweichen, wenn beide auf 800 x 495 Pixel skaliert sind.
Bonus!
Ben versucht, die Abhängigkeit von fremden Bibliotheken zu verringern, und bietet jetzt einen Bonus von -50% für alle, die nur eine Rastergrafikversion der Karte als Eingabe verwenden und einen eigenen Algorithmus für die Regionserkennung erstellen. Letztendlich ist es meine Entscheidung, ob Ihr Ansatz als "Schreiben Ihres eigenen" Algorithmus zählt.
Viel Glück!
quelle
Antworten:
Python 626
Im folgenden Ansatz habe ich .rstate und .bstate basierend auf .state in die CSS-Beschreibung eingefügt. In meinem habe ich die mitgelieferte .svg Datei in umbenannt
v.svg
. Es nimmt eine Eingabe wie unten beschrieben entgegen und schreibt in eine Dateiw.png
. Um vom vollständigen Statusnamen in die abgekürzte Version überzugehen, suche ich sie anhand der ersten und letzten beiden Buchstaben des Status.Beispiel Eingabe:
Beispielausgabe:
Oder inspiriert von der Flagge Frankreichs:
quelle
Verarbeitung, 425 Byte (259 Byte + 1 + 165 Byte-Datei)
Code:
Leere Map sollte " M.svg " heißen und in einem Ordner namens / data gespeichert werden (alle anderen Dateien befinden sich im selben Ordner wie das Programm.)
Eingabedatei (" a "):
Schlüsseldatei (" b "): http://pastebin.com/0pNufAH9
Ausgabe (" m.tif "):
Ok, hier ist mein Versuch, meine eigene Herausforderung anzunehmen. Einige Notizen:
Wenn jemand Unstimmigkeiten mit meiner Selbsteinschätzung meines Codes hat, können Sie gerne einen Kommentar hinterlassen.
Wenn Sie diese Herausforderung in Processing ausprobieren möchten , können Sie sowohl SVG-Dateien
PShape
einlesen als auch SVG-Dateien als XML analysieren.quelle
for(int i=0;i++<51;)
stattfor(int i=0;i<51;i++)
. Es speichert 1 Byte und es hat ein Smiley-Gesicht;)++i
dass es funktioniert. Klingt das richtig?String[] a
PHP, 714 Bytes
Die Ausgabe ist die leere SVG-Datei, die in einer Datei mit dem Namen gespeichert werden soll
a
, mit zusätzlichem CSS zum Färben der Status, die in einer Datei mit dem Namenb
im folgenden Format gespeichert werden soll:Ich habe einige Zeilen hinzugefügt, um die Lesbarkeit zu verbessern.
Hier ist die ungolfed Version:
Das Prinzip ist einfach: In der leeren SVG-Datei hat jeder Pfad eine ID, die der Abkürzung des Staates entspricht, den er repräsentiert (z. B.
<path d="…" id="HI" />
für Hawaii).Alles, was wir tun müssen, ist, etwas CSS hinzuzufügen, um diesen Pfad im entsprechenden Farbton einzufärben. Die leere Datei enthält jedoch bereits CSS (insbesondere das
<style type="text/css">…</style>
Tag ist bereits vorhanden). Dies ist also sehr einfach und schnell zu bewerkstelligen. Wir können feststellen, dass die Zeichenfolge.b
nur im CSS für gefunden wird.border
. Gute Nachrichten! Wir werden einfach ersetzen.b
mitOUR_WONDERFUL_CSS.b
."Unser wundervolles CSS" zu erstellen ist nicht wirklich schwieriger:
Ohio0Indiana0Illinois1New York0New Jersey0Florida
.OH0IN0IL1NY0NJ0FL
.0
Zeichen mit,#
:OH,#IN,#IL1NY,#NJ,#FL
.1
Zeichen mit{fill:red}#
:OH,#IN,#IL{fill:red}#NY,#NJ,#FL
.#
am Anfang und{fill:blue}
am Ende:#OH,#IN,#IL{fill:red}#NY,#NJ,#FL{fill:blue}
.quelle
implode
und Ihren Benutzernamen!Mathematica 1025
Nicht elegant, aber es funktioniert.
Mir war nicht bewusst, dass SVG-Dateien Pfade für jeden Status haben, daher habe ich die Status mithilfe der
MorphologicalComponents
einzelnen Komponenten ermittelt und sie dann mit dem jeweiligen Status verknüpft. Staaten wie Michigan (mit oberen und unteren Halbinseln) und Hawaii (mehrere Inseln) haben mehr als eine Komponente.Der Code setzt voraus, dass die Zuordnungsdatei in der Variablen m enthalten ist .
Unten ist das Bild, das mit der folgenden Eingabe exportiert wird:
quelle