새로운 보너스! (아래 참조)
미국 공화당 대통령 희망 벤 벤슨의지도 제작 팀은지도에 문제가 있습니다 ( 워싱턴 포스트 를 통한 이미지 ).
문제는 그들이 올바른 직업을위한 도구를 가지고 있지 않다는 것입니다. 가장 작고 안정적인 프로그램이 필요하므로지도를 다시 만들지 않아도됩니다. 그들이 당신을 고용 한 이유입니다. 이 맵을 가져 와서 원하는 색상으로 다시 출력해야합니다.
Theshibboleth [GFDL ( http://www.gnu.org/copyleft/fdl.html ) 또는 CC-BY-SA-3.0 ( http://creativecommons.org/licenses/by-sa/3.0/)] 으로 위키 미디어 공용
미국이 아니거나 미국인이기 때문에 모든 주가 어디에 있는지 모르는 경우 여기에 모든 이름의지도가 있습니다 (이 도전에는 워싱턴 DC가 필요하지 않음).
“주 이름이 2 인 미국지도”. CC BY-SA 3.0에서 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
예를 들어 입력이 인 Ohio, Indiana, Illinois;New York, New Jersey, Florida
경우 다음을 출력합니다.
빈 맵 이미지는 SVG 및 PNG 형식으로 제공됩니다. 귀하의 편의를 위해 다음은 알파벳 순서 로 모든 50 개 주 목록입니다.
이것은 코드 골프 및 그래픽 출력 문제입니다. 출력은 SVG 또는 이미지 파일이어야합니다. 단순히 화면에 출력을 표시하는 것만으로는 충분하지 않습니다. STDIN 또는 텍스트 파일을 읽어 입력해야합니다. 입력의 형식을 유연하게 지정할 수 있지만 각 상태의 전체 이름을 포함해야하지만 빨간색 (공화당) 상태가 먼저 나열되고 파란색 (민주적) 상태가 두 번째입니다. 채색에는 빨강과 파랑의 두 가지 음영이 허용됩니다. 물론 원하는 파일 이름으로 프로그램과 같은 폴더에 빈 맵 이미지를 만들 수 있습니다.
정확도 기준
출력이 래스터 파일 인 경우 파일 크기는 800×495 픽셀 이상이어야하며 SVG를 동일한 크기로 1.5 픽셀 이상 확장 한 결과에서 선이 벗어나지 않아야합니다. 출력이 벡터 파일 인 경우 둘 다 800px x 495px로 크기가 조정될 때 선이 SVG에서 1.5 픽셀 이상 벗어나지 않아야합니다.
보너스!
벤은 외국 도서관에 대한 의존도를 줄이려고 노력하고 있으며 현재 래스터 그래픽 버전의지도 만 입력으로 사용하고 지역 감지를위한 자체 알고리즘을 생성하는 모든 사람에게 -50 %의 보너스를 제공하고 있습니다. 궁극적으로, 여러분의 접근 방식이 “자신의 작성”알고리즘으로 계산되는지 여부를 결정하는 것은 저의 판단입니다.
행운을 빕니다!
답변
파이썬 626
아래 접근 방식에서 CSS 설명에 .state를 기반으로 .rstate 및 .bstate를 추가했습니다. 내에서 제공된 .svg 파일의 이름을로 변경했습니다 v.svg
. 아래에 설명 된대로 입력을 받아 파일에 씁니다 w.png
. 전체 상태 이름에서 약식 버전으로 이전하기 위해 상태의 첫 두 문자와 마지막 두 글자를 기준으로 검색합니다.
r='Ama,Aka,Ana,Aas,Cia,Cdo,Cut,Dre,Fda,Gia,Hii,Iho,Iis,Ina,Iwa,Kas,Kky,Lna,Mne,Mnd,Mts,Man,Mta,Mpi,Mri,Mna,Nka,Nda,Nre,Ney,Nco,Nrk,Nna,Nta,Oio,Oma,Oon,Pia,Rnd,Sna,Sta,Tee,Tas,Uah,Vnt,Via,Won,Wia,Win,Wng'.split(',')
y='lkzraotelaidlnasyaedainsotevhjmycdhkraicdnxttaaviy'
v=open('v.svg','r')
s=v.read()
v.close()
k=s.find('.state')
j=s.find('.',k+1)
t=input().split(';')
w=open('w.svg','w')
k+=1
c='#E0E0E0'
s=s[:j]+'.r'+s[k:j].replace(c,'red')+'.b'+s[k:j].replace(c,'blue')+s[j:]
c='rb'
for j in range(2):
for d in t[j].split(','):k=s.find('state '+d[0].lower()+y[r.index(d[0]+d[-2:])]);s=s[:k]+c[j]+s[k:]
w.write(s)
w.close()
입력 예 :
'California,Illinois,Iowa,Mississippi;New Mexico,Pennsylvania,South Dakota,Vermont'
답변
처리 중 425 바이트 (259 바이트 + 1 +165 바이트 파일)
암호:
size(959,593);String[]a=loadStrings("a"),b=loadStrings("b");PShape m=loadShape("M.svg");m.disableStyle();for(int i=0;i<51;i++){fill(255);int r=0;for(String j:a){if(j.isEmpty())r++;if(j.contains(b[i]))fill(r>0?#0000FF:#FF0000);}shape(m.getChild(i));}save("m");
빈 맵의 이름은 ” M.svg ” 여야 하고 / data 라는 폴더에 저장 해야합니다 (다른 모든 파일은 프로그램과 동일한 폴더에 있습니다).
입력 파일 ( ” a “) :
Mississippi
California
Connecticut
Delaware
Florida
Wyoming
Hawaii
키 파일 ( ” b “) : http://pastebin.com/0pNufAH9
출력 ( ” m.tif “) :
좋아, 여기 내 도전에 대한 나의 시도가있다. 몇 가지 참고 사항 :
- 출력 맵은 다음과 같은 방식으로 입력 맵과 다르게 보입니다.
- 입력지도는 투명한 배경에 회색으로 채워져있었습니다. 출력은 회색 배경에 흰색으로 채워집니다. 흰색, 회색 및 투명성이 모두 중립적이므로 이것이 허용되어야한다고 생각합니다.
- 출력 맵에 입력이 가지고있는 하와이와 알래스카 주변의 선이 누락되었습니다. 다시 한번, 선이지도의 중요한 부분이 아니기 때문에 이것이 정상이라고 생각합니다.
- 프로그램은 외부 파일을 사용하여 키를 보유합니다. 이 메타 포스트 에 따르면 하나의 파일에 1 바이트를 추가하면됩니다.
내 코드에 대한 본인의 판결과 불일치가있는 사람은 언제든지 의견을 남겨주십시오.
또한 Processing 에서이 도전을 시도하는 사람이 궁금하다면 PShape
SVG 파일을 XML 로 읽는 것뿐만 아니라 SVG 파일을 XML로 파싱 하는 것을 모두 지원합니다 .
답변
PHP, 714 바이트
출력은 빈 SVG 파일이며, 파일 a
은 상태를 색상 지정하기위한 추가 CSS와 함께 이름이 지정된 파일에 저장되어야하며 b
, 다음 형식으로 이름이 지정된 파일에 저장되어야 합니다.
Ohio0Indiana0Illinois1New York0New Jersey0Florida
가독성을 위해 줄 바꿈을 추가했습니다.
<?
$x=str_replace;echo$x('.b','#'.$x([0,1],[',#','{fill:red}#'],$x(split(0,'Alabama0Alaska0
Arizona0Arkansas0California0Colorado0Connecticut0Delaware0Florida0Georgia0Hawaii0Idaho0Illin
ois0Indiana0Iowa0Kansas0Kentucky0Louisiana0Maine0Maryland0Massachusetts0Michigan0Minnesota0M
ississippi0Missouri0Montana0Nebraska0Nevada0New Hampshire0New Jersey0New Mexico0New York0Nor
th Carolina0North Dakota0Ohio0Oklahoma0Oregon0Pennsylvania0Rhode Island0South Carolina0South
Dakota0Tennessee0Texas0Utah0Vermont0Virginia0Washington0West Virginia0Wisconsin0Wyoming'),s
tr_split(ALAKAZARCACOCTDEFLGAHIIDILINIAKSKYLAMEMDMAMIMNMSMOMTNENVNHNJNMNYNCNDOHOKORPARISCSDT
NTXUTVTVAWAWVWIWY,2),file(b)[0])).'{fill:blue}.b',implode('',file(a)));
ungolfed 버전은 다음과 같습니다.
<?php
$stateNames = 'Alabama0Alaska0Arizona0Arkansas0California0Colorado0Connecticut0Delaware0Florida0Georgia0Hawaii0Idaho0Illinois0Indiana0Iowa0Kansas0Kentucky0Louisiana0Maine0Maryland0Massachusetts0Michigan0Minnesota0Mississippi0Missouri0Montana0Nebraska0Nevada0New Hampshire0New Jersey0New Mexico0New York0North Carolina0North Dakota0Ohio0Oklahoma0Oregon0Pennsylvania0Rhode Island0South Carolina0South Dakota0Tennessee0Texas0Utah0Vermont0Virginia0Washington0West Virginia0Wisconsin0Wyoming';
$statesAbbreviations = 'ALAKAZARCACOCTDEFLGAHIIDILINIAKSKYLAMEMDMAMIMNMSMOMTNENVNHNJNMNYNCNDOHOKORPARISCSDTNTXUTVTVAWAWVWIWY';
$blankSVG = implode('', file('a'));
$inputWithStateNames = file('b')[0];
$inputWithStateAbbreviations = str_replace(
explode('0', $stateNames),
str_split($statesAbbreviations, 2),
$inputWithStateNames
);
echo str_replace(
'.border',
'#'. str_replace(
[
'0',
'1'
],
[
',#',
'{fill:red}#'
],
$inputWithStateAbbreviations
) .'{fill:blue}.border',
$blankSVG
);
원칙은 간단합니다. 빈 SVG에서 각 경로는 나타내는 상태의 약어 (예 : <path d="…" id="HI" />
하와이의 경우)에 해당하는 ID를 갖습니다 .
이 경로를 적절한 음영으로 채색하기 위해 CSS를 추가하기 만하면됩니다. 그러나 빈 파일에는 이미 일부 CSS가 있으며 (특히 <style type="text/css">…</style>
태그가 이미 존재 함) 실제로 쉽고 간단합니다. 문자열 .b
은의 CSS에서만 찾을 수 있습니다 .border
. 좋은 소식! 우리는 단지로 대체 할 것 .b
입니다 OUR_WONDERFUL_CSS.b
.
“훌륭한 CSS”를 만드는 것은 그리 어렵지 않습니다.
- 파일에서 입력을 읽으십시오
Ohio0Indiana0Illinois1New York0New Jersey0Florida
.. - 상태 이름을 약어로 바꾸십시오
OH0IN0IL1NY0NJ0FL
. 0
문자를,#
다음으로 바꾸십시오OH,#IN,#IL1NY,#NJ,#FL
.1
문자를{fill:red}#
다음으로 바꾸십시오OH,#IN,#IL{fill:red}#NY,#NJ,#FL
.- 추가
#
시작과{fill:blue}
끝에 :#OH,#IN,#IL{fill:red}#NY,#NJ,#FL{fill:blue}
.
답변
매스 매 티카 1025
우아하지는 않지만 작동합니다.
SVG 파일에 각 상태에 대한 경로가 있다는 것을 알지 못했기 때문에 상태를 사용하여 MorphologicalComponents
각 구성 요소를 해당 상태와 연결했습니다. 미시간 (상단 및 하단 반도 포함) 및 하와이 (여러 섬)와 같은 주에는 여러 구성 요소가 있습니다.
코드는 맵 파일이 변수 m에 포함되어 있다고 가정합니다 .
r=Thread[{"Washington","Montana","Maine","Minnesota","North Dakota","Oregon","Michigan","New Hampshire","Vermont","Wisconsin","New York","Idaho","South Dakota","Wyoming","Massachusetts","California","Connecticut","Nevada","Pennsylvania","Iowa","New Mexico","New Jersey","Ohio","Nebraska","Illinois","Indiana","Colorado","Delaware","Maryland","West Virginia","Virginia","Missouri","Washington, D.C.","Kansas","Kentucky","North Carolina","New Mexico","Tennessee","Arizona","Oklahoma","Arkansas","South Carolina","Georgia","Alabama","Mississippi","Texas","Louisiana","Alaska","Florida","Hawaii"}->{6,7,8,9,10,11,{13,23},14,16,18,{19,39},20,24,25,26,27,31,32,36,37,38,40,41,42,43,44,45,46,{47,55},49,50,51,52,53,56,57,58,59,60,61,62,65,66,67,69,{71,80,87},72,{73,75,82,93,101,104},74,{79,81,83,84,85,89,92}}];
v=Flatten;c=MorphologicalComponents@Binarize@m;
h@s_:=v[((Reverse/@Position[c,#])/.{x_,y_}:>{x,1241-y})&/@s,1]
k@{s_,c_}:=Thread[(h@s)->c]
f@{a_,b_}:=Export["f.jpg",(ReplacePixelValue[map,v[k[{v[#/.r],#2}]&@@@{{a,Red},{b,Blue}}]])]
다음은 다음 입력으로 내보내지는 이미지입니다.
f[{{"Ohio", "Indiana", "Illinois", "Alaska"}, {"New York", "Michigan","Oregon", "New Jersey", "Florida"}}]