अमेरिका बनाओ (n Maps) ग्रेट अगेन


16

नया बोनस! (निचे देखो)

अमेरिकी रिपब्लिकन राष्ट्रपति पद के उम्मीद के साथी बेन कार्सन की कार्टोग्राफी टीम को उनके नक्शे ( वाशिंगटन पोस्ट के माध्यम से छवि ) से कुछ परेशानी हो रही है :

राज्यों के एक समूह के साथ नक्शा गलत स्थानों पर चला गया (बेन कार्सन की अभियान टीम द्वारा) और इसके आगे अमेरिका का एक वास्तविक नक्शा

समस्या यह है कि उनके पास नौकरी ™ के लिए सही उपकरण नहीं है। उन्हें सबसे अधिक कॉम्पैक्ट और विश्वसनीय कार्यक्रम की आवश्यकता है, इसलिए उन्हें फिर से नक्शे बनाने के बारे में चिंता करने की आवश्यकता नहीं है। इसलिए उन्होंने आपको काम पर रखा है। आपको इस नक्शे को लेने की आवश्यकता है और इसे वांछित रंग के साथ फिर से आउटपुट करना होगा:

संयुक्त राज्य अमेरिका के ब्लैंक मानचित्र को दिखाया गया है

थेशिबबोलेथ [जीएफडीएल ( http://www.gnu.org/copyleft/fdl.html ) या CC-BY-SA-3.0 ( http://creativecommons.org/licenses/by-sa/3.0/)] के माध्यम से विकिमीडिया कॉमन्स

यदि आप नहीं जानते कि सभी राज्य कहां हैं (क्योंकि आप एक अमेरिकी नहीं हैं ... या आप एक अमेरिकी हैं), यहां सभी नामों के साथ एक नक्शा है (वाशिंगटन डीसी को इस चुनौती के लिए आवश्यक नहीं है): राज्य की सीमाओं और उस पर नामों के साथ संयुक्त राज्य का नक्शा

"राज्य के नाम 2 के साथ यूएसए का मानचित्र"। विकिमीडिया कॉमन्स के माध्यम से CC BY-SA 3.0 के तहत लाइसेंस प्राप्त - 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, तो आप आउटपुट: राज्य सीमाओं के साथ संयुक्त राज्य का नक्शा।  ओहियो, इंडियाना और इलिनोइस लाल रंग में रंगे हैं;  न्यू यॉर्क, न्यू जर्सी फ्लोरिडा नीले रंग में रंगे हैं।

रिक्त मानचित्र छवि एसवीजी और पीएनजी प्रारूप में उपलब्ध है। आपकी सुविधा के लिए, यहाँ सभी 50 राज्यों की सूची वर्णमाला क्रम में दी गई है

यह एक और चुनौती है। आउटपुट एक SVG या छवि फ़ाइल के रूप में होना चाहिए। बस स्क्रीन पर आउटपुट प्रदर्शित करना पर्याप्त नहीं है। इनपुट STDIN से या एक पाठ फ़ाइल को पढ़ने से लिया जाना चाहिए। मैं इस बात से लचीला हूं कि आप इनपुट को कैसे प्रारूपित करते हैं, हालांकि इसमें प्रत्येक राज्य का पूरा नाम होना चाहिए, जिसमें लाल (रिपब्लिकन) राज्य पहले और नीले (डेमोक्रेटिक) दूसरे स्थान पर हैं। रंग के लिए लाल और नीले रंग के दो अलग-अलग रंग स्वीकार्य हैं। बेशक, आप अपने प्रोग्राम के रूप में उसी फ़ोल्डर में रिक्त मानचित्र छवि रख सकते हैं जो भी फ़ाइल नाम आप चाहते हैं।

शुद्धता मानदंड

यदि आपका आउटपुट एक रेखापुंज फ़ाइल है, तो यह 495px से कम से कम 800px होनी चाहिए, और एसवीजी को स्केल करने के परिणाम से लाइनें 1.5 पिक्सेल से एक ही आकार तक नहीं होनी चाहिए। यदि आपका आउटपुट एक वेक्टर फ़ाइल है, तो लाइनों को एसवीजी से 1.5 पिक्सेल से अधिक विचलन नहीं करना चाहिए, जब दोनों को 495px से 800px तक बढ़ाया जाता है।

बक्शीश!

बेन विदेशी पुस्तकालयों पर निर्भरता में कटौती करने की कोशिश कर रहा है, और अब किसी को भी -50% बोनस की पेशकश कर रहा है जो नक्शे के केवल रेखापुंज ग्राफिक्स संस्करण को इनपुट के रूप में उपयोग करता है और क्षेत्र का पता लगाने के लिए अपना एल्गोरिथ्म बनाता है। अंततः, यह मेरा निर्णय है जो निर्धारित करता है कि क्या आपका दृष्टिकोण "अपने स्वयं के एल्गोरिथ्म लिखने" के रूप में गिना जाता है।

शुभ लाभ!


उदाहरण उन रेखाओं के आसपास कुछ एलियासिंग दिखाता है जो भरी नहीं गई हैं। क्या यह स्वीकार्य है?
शुक्राणु

@Sparr मैंने एक छवि संपादक के साथ उदाहरण बनाया है, इसलिए मैं इसे "संपूर्ण" मानता हूं, इसलिए यदि आप कुछ भी याद करते हैं तो यह ठीक हो जाता है।
जियोकॉवेल

बस यह सुनिश्चित करने के लिए: क्या हमें रिक्त SVG फ़ाइल को संशोधित करने की अनुमति है? क्या इसका आकार हमारे स्कोर में है? "बस स्क्रीन पर आउटपुट प्रदर्शित करना पर्याप्त नहीं है" से आपका क्या मतलब है?
ब्लैकहोल

@ ब्लेकहोल नहीं, आप रिक्त एसवीजी फ़ाइल को संशोधित नहीं कर सकते हैं, लेकिन जब तक आप इसे बाहरी रूप से लोड नहीं करते तब तक यह आपके स्कोर के हिस्से के रूप में नहीं गिना जाता है।
जियोकॉवेल

@ ब्लेकहोल मेरा क्या मतलब है, आपको एक फाइल आउटपुट करना होगा।
जियोकॉवेल

जवाबों:


7

अजगर 626

नीचे दिए गए दृष्टिकोण में, मैंने .rstate और .bstate को CSS विवरण में .state के आधार पर जोड़ा। अपने में मैंने प्रदान की गई .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'

उदाहरण आउटपुट: आउटपुट आंकड़ा

या फ्रांस के झंडे से प्रेरित: आउटपुट आंकड़ा फ्रांस


एक अच्छा, लोकतंत्र पर रहता है!
जियोकॉवेल

बधाई हो, आप विजेता हैं! उन सभी को धन्यवाद जिन्होंने भाग लिया!
जियोकावेल

6

प्रसंस्करण, 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 " नाम दिया जाना चाहिए और एक फ़ोल्डर में संग्रहीत किया जाना चाहिए जिसे डेटा / डेटा कहा जाता है (अन्य सभी फाइलें प्रोग्राम के समान हैं।)

इनपुट फ़ाइल (" "):

Mississippi
California
Connecticut

Delaware
Florida
Wyoming
Hawaii

की फाइल (" बी "): http://pastebin.com/0pNufAH9

आउटपुट (" m.tif "):

यहाँ छवि विवरण दर्ज करें

ठीक है, यहाँ मेरी अपनी चुनौती पर मेरी कोशिश है। कुछ नोट:

  • आउटपुट मैप निम्न तरीकों से इनपुट मैप से अलग दिखता है
    1. इनपुट मैप में पारदर्शी पृष्ठभूमि पर ग्रे फिलिंग थी। आउटपुट में ग्रे बैकग्राउंड पर सफेद फिलिंग होती है। मुझे लगता है कि इसे अनुमति दी जानी चाहिए, क्योंकि सफेद, ग्रे और पारदर्शिता सभी तटस्थ हैं।
    2. आउटपुट मैप में हवाई और अलास्का के आस-पास की लाइनें गायब हैं जो इनपुट के पास थीं। एक बार फिर, मुझे लगता है कि यह ठीक है क्योंकि लाइनें नक्शे का एक महत्वपूर्ण हिस्सा नहीं हैं।
  • कार्यक्रम चाबियाँ रखने के लिए एक बाहरी फ़ाइल का उपयोग करता है। इस मेटा पोस्ट के अनुसार , मुझे केवल एक अतिरिक्त फ़ाइल के लिए 1 बाइट जोड़ने की आवश्यकता है।

यदि किसी को मेरे कोड के स्व-स्थगन के साथ कोई विसंगतियां हैं, तो टिप्पणी छोड़ने के लिए स्वतंत्र महसूस करें।

इसके अलावा, अगर किसी को प्रसंस्करण में इस चुनौती की कोशिश करने के बारे में उत्सुक है, तो यह एसवीजी फ़ाइलों को पढ़ने के PShapeसाथ-साथ XML के रूप में SVG फ़ाइलों को पार्स करने के लिए दोनों का समर्थन करता है ।


आपके लूप के लिए, के for(int i=0;i++<51;)बजाय है for(int i=0;i<51;i++)। यह 1 बाइट बचाता है और इसमें एक स्माइली चेहरा है;)
क्रिति लिथोस

@ ΚριΚικσιΛίθοΚ मुझे ++iइसके लिए काम करना था। क्या यह सही है?
जियोकावेल

@ ΣριΚικσιΛίθοΚ यह एक बाइट को बचा सकता है, लेकिन यह लूप के अंदर के व्यवहार को पूरी तरह से बदल देता है।
टॉम कारपेंटर

@ ΣριΚικσιΛίθοΚ हाँ, मुझे लगता है कि मैं इसका उपयोग नहीं कर सकता क्योंकि मैं हवाई खो देता हूं। शायद यह जावा में अन्य भाषाओं में अलग काम करता है।
जियोकावेल

आपको एक अतिरिक्त बेकार स्थान मिल गया हैString[] a
Kritii Lithos

5

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

सिद्धांत सरल है: रिक्त एसवीजी में, प्रत्येक पथ में राज्य के संक्षिप्त नाम के अनुरूप एक आईडी होती है, जो इसे प्रस्तुत करता है (उदाहरण के लिए, <path d="…" id="HI" />हवाई के लिए)।

हमें बस इतना करना है कि इस पथ को उपयुक्त छाया में रंगने के लिए कुछ सीएसएस जोड़ना है। लेकिन रिक्त फ़ाइल में कुछ सीएसएस पहले से ही है (विशेष रूप से <style type="text/css">…</style>टैग पहले से मौजूद है), इसलिए यह करना वास्तव में आसान और छोटा है। हम यह देख सकते हैं कि स्ट्रिंग .bकेवल CSS के लिए मिली है .border। खुशखबरी! हम बस के .bसाथ बदल देंगे OUR_WONDERFUL_CSS.b

"हमारा अद्भुत CSS" बनाना वास्तव में अधिक कठिन नहीं है:

  1. फ़ाइल से इनपुट पढ़ें
    Ohio0Indiana0Illinois1New York0New Jersey0Florida:।
  2. राज्यों के नामों को उनके संक्षिप्त नामों से बदलें
    OH0IN0IL1NY0NJ0FL:।
  3. बदलें 0साथ वर्ण ,#:
    OH,#IN,#IL1NY,#NJ,#FL
  4. बदलें 1के साथ चरित्र {fill:red}#:
    OH,#IN,#IL{fill:red}#NY,#NJ,#FL
  5. #शुरुआत और {fill:blue}अंत में जोड़ें
    #OH,#IN,#IL{fill:red}#NY,#NJ,#FL{fill:blue}:।

ठीक है, बहुत अच्छा काम। जबकि तकनीकी रूप से यह एक फ़ाइल नहीं लिखता है जैसा कि मैं चाहूंगा, उपयोगकर्ता ब्राउज़र में "सेव पेज अस" को धक्का देकर आसानी से छवि को बचा सकता है। मैं इस प्रकार के उत्तर की अनुमति दूंगा।
जियोकावेल

3
दिलचस्प है कि पेंसिल्वेनिया, रोड आइलैंड, और दक्षिण कैरोलिना के लिए संक्षिप्त विवरण PARIS बाहर हैं।
जियोकावेल

@geokavel यदि आवश्यक हो, तो मैं आसानी से एक फ़ाइल बना सकता हूं। क्या मुझे अपना जवाब संशोधित करना चाहिए? हाँ, लंबे समय तक जीना पेरिस! वैसे, इस कठिन समय में आपके समर्थन के लिए धन्यवाद, अटलांटिक से परे भाइयों!
ब्लैकहोल

@DavidCarraher मैंने कुछ स्पष्टीकरण जोड़े हैं। मुझे उम्मीद है कि यह मेरे उत्तर को समझने में आपकी मदद करेगा।
ब्लैकहोल

+1 implodeऔर आपके उपयोगकर्ता नाम के लिए!
'12:38 पर caird coinheringaahing

3

गणितज्ञ १०२५

सुरुचिपूर्ण नहीं है लेकिन यह काम करता है।

मुझे पता नहीं था कि एसवीजी फाइलों में प्रत्येक राज्य के लिए रास्ते थे, इसलिए मैंने राज्यों MorphologicalComponentsको अपने संबंधित राज्य के साथ प्रत्येक घटक का उपयोग करते हुए पाया । मिशिगन (ऊपरी और निचले प्रायद्वीप के साथ) और हवाई (कई द्वीप) जैसे राज्यों में एक से अधिक घटक हैं।

कोड मानता है कि मानचित्र फ़ाइल चर में समाहित है, मी

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"}}]

नक्शा

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.