Novo bônus! (Ver abaixo)
A equipe de cartografia do candidato presidencial republicano dos EUA Ben Carson está tendo alguns problemas com seus mapas (imagem via Washington Post ):
O problema é que eles não têm a ferramenta certa para o trabalho ™. Eles precisam do programa mais compacto e confiável possível, para nunca mais se preocupar em fazer mapas novamente. Por isso te contrataram. Você precisa pegar este mapa e imprimi-lo novamente com a cor desejada:
Por Theshibboleth [GFDL ( http://www.gnu.org/copyleft/fdl.html ) ou CC-BY-SA-3.0 ( http://creativecommons.org/licenses/by-sa/3.0/)] , via Wikimedia Commons
Se você não sabe onde estão todos os estados (porque você não é americano ... ou é americano), aqui está um mapa com todos os nomes (Washington DC não é necessário para esse desafio):
"Mapa dos EUA com nomes de estado 2". Licenciado sob CC BY-SA 3.0 via 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
Por exemplo, se a entrada for Ohio, Indiana, Illinois;New York, New Jersey, Florida
, você gera:
A imagem do mapa em branco está disponível nos formatos SVG e PNG . Para sua conveniência, aqui está uma lista de todos os 50 estados em ordem alfabética
Este é um desafio do código-golfe e da saída gráfica . A saída deve ser como um arquivo de imagem ou SVG. Simplesmente exibir a saída na tela não é suficiente. A entrada deve ser retirada do STDIN ou da leitura de um arquivo de texto. Sou flexível com a formatação da entrada, embora ela deva conter os nomes completos de cada estado, com os estados vermelho (republicano) listados primeiro e os estados azul (democrático) em segundo. Quaisquer dois tons distintos de vermelho e azul são aceitáveis para a coloração. Obviamente, você pode ter a imagem do mapa em branco na mesma pasta do seu programa com o nome de arquivo que desejar.
Critérios de precisão
Se a sua saída for um arquivo raster, ele deverá ter pelo menos 800 x 495 px e as linhas não deverão se desviar do resultado da expansão do SVG para o mesmo tamanho em mais de 1,5 pixels. Se a sua saída for um arquivo vetorial, as linhas não deverão se desviar do SVG em mais de 1,5 pixels quando ambas forem dimensionadas para 800 px por 495 px.
Bônus!
Ben está tentando reduzir a dependência de bibliotecas estrangeiras e agora oferece um bônus de -50% para quem usa apenas uma versão gráfica raster do mapa como entrada e cria seu próprio algoritmo para detecção de região. Por fim, é meu julgamento que determina se sua abordagem conta como algoritmo "escrevendo seu próprio".
Boa sorte!
fonte
Respostas:
Python 626
Na abordagem abaixo, adicionei .rstate e .bstate com base em .state na descrição do CSS. No meu, renomei o arquivo .svg fornecido para
v.svg
. Ele recebe uma entrada conforme descrito abaixo e grava em um arquivow.png
. Para transferir do nome completo do estado para a versão abreviada, procuro-os com base nas duas primeiras e últimas letras dos estados.Exemplo de entrada:
Exemplo de saída:
Ou inspirado pela bandeira da França:
fonte
Processamento, 425 bytes (259 bytes + 1 +165 bytes)
Código:
O mapa em branco deve ser nomeado " M.svg " e armazenado em uma pasta chamada / data (todos os outros arquivos estão na mesma pasta que o programa).
Arquivo de entrada (" a "):
Arquivo de chave (" b "): http://pastebin.com/0pNufAH9
Saída (" m.tif "):
Ok, aqui está a minha tentativa no meu próprio desafio. Algumas notas:
Se alguém tiver alguma discrepância com meu auto-julgamento do meu código, fique à vontade para deixar um comentário.
Além disso, se alguém tiver curiosidade em experimentar esse desafio no Processing , ele suporta a leitura de arquivos SVG em
PShape
's, bem como a análise de arquivos SVG como XML.fonte
for(int i=0;i++<51;)
vez defor(int i=0;i<51;i++)
. Ele economiza 1 byte e tem um rosto sorridente nele;)++i
lo funcionar. Isso soa certo?String[] a
PHP, 714 bytes
A saída é o arquivo SVG em branco, que deve ser armazenado em um arquivo nomeado
a
, com CSS adicional para colorir os estados, que devem ser armazenados em um arquivo nomeadob
no seguinte formato:Eu adicionei algumas novas linhas para facilitar a leitura.
Aqui está a versão não destruída:
O princípio é simples: no SVG em branco, cada caminho possui um ID correspondente à abreviação do estado que representa (por exemplo,
<path d="…" id="HI" />
no Havaí).Tudo o que precisamos fazer é adicionar um pouco de CSS para colorir esse caminho na tonalidade apropriada. Mas já existe algum CSS no arquivo em branco (em particular a
<style type="text/css">…</style>
tag já existe), por isso é realmente fácil e curto de fazê-lo. Podemos notar que a string.b
só é encontrada no CSS para.border
. Boas notícias! Nós vamos apenas substituir.b
comOUR_WONDERFUL_CSS.b
.Criar "nosso maravilhoso CSS" não é realmente mais difícil:
Ohio0Indiana0Illinois1New York0New Jersey0Florida
.OH0IN0IL1NY0NJ0FL
.0
caracteres com,#
:OH,#IN,#IL1NY,#NJ,#FL
.1
personagem com{fill:red}#
:OH,#IN,#IL{fill:red}#NY,#NJ,#FL
.#
no início e{fill:blue}
no final:#OH,#IN,#IL{fill:red}#NY,#NJ,#FL{fill:blue}
.fonte
implode
e seu nome de usuário!Mathematica 1025
Não é elegante, mas funciona.
Eu não sabia que os arquivos SVG tinham caminhos para cada estado, então encontrei os estados usando
MorphologicalComponents
e depois associei cada componente ao seu respectivo estado. Estados como Michigan (com penínsulas superior e inferior) e Havaí (ilhas múltiplas) têm mais de um componente.O código pressupõe que o arquivo de mapa esteja contido na variável m .
Abaixo está a imagem que será exportada pela seguinte entrada:
fonte