Amerika'yı (n Haritalar) Tekrar Harika Yap


16

Yeni Bonus! (Aşağıya bakınız)

ABD Cumhuriyetçi cumhurbaşkanı umutlu Ben Carson'un haritacılık ekibi haritalarıyla ilgili bazı sorunlar yaşıyor ( Washington Post üzerinden görüntü ):

Bir grup devletin yanlış yere taşındığı harita (Ben Carson'un kampanya ekibi tarafından) ve yanında gerçek bir ABD haritası

Sorun, Job ™ için Doğru Alete sahip olmamalarıdır. Mümkün olan en kompakt ve güvenilir programa ihtiyaç duyarlar, bu yüzden bir daha harita yapma konusunda endişelenmek zorunda kalmazlar. Bu yüzden seni işe aldılar. Bu haritayı almanız ve istediğiniz renkle tekrar çıkarmanız gerekir:

Devlet sınırları gösterilen boş harita Amerika Birleşik Devletleri

Theshibboleth [GFDL ( http://www.gnu.org/copyleft/fdl.html ) veya CC-BY-SA-3.0 ( http://creativecommons.org/licenses/by-sa/3.0/)] yoluyla Wikimedia Commons

Tüm eyaletlerin nerede olduğunu bilmiyorsanız (çünkü Amerikalı değilsiniz ya da Amerikalısınız), işte tüm isimleri içeren bir harita (bu meydan okuma için Washington DC gerekli değildir): Devlet sınırları ve adları ile Amerika Birleşik Devletleri Haritası

"Devlet adları 2 ile ABD Haritası". CC BY-SA 3.0 altında Wikimedia Commons aracılığıyla lisanslanmıştır - https://commons.wikimedia.org/wiki/File:Map_of_USA_with_state_names_2.svg#/media/File:Map_of_USA_with_state_names_2.svg

Örneğin, giriş Ohio, Indiana, Illinois;New York, New Jersey, Florida , çıktı alırsınız: Devlet sınırları ile Amerika Birleşik Devletleri Haritası.  Ohio, Indiana ve Illinois kırmızı renktedir;  New York, New Jersey Florida mavi renklidir.

Boş harita görüntüsü SVG'de mevcuttur ve PNG formatlarında mevcuttur. Size kolaylık sağlamak için, 50 eyaletin hepsinin alfabetik sırayla listesi

Bu bir ve meydan okumadır. Çıktı bir SVG veya resim dosyası olmalıdır. Çıktıyı ekranda görüntülemek yeterli değildir. Giriş STDIN'den veya bir metin dosyası okunarak alınmalıdır. Her devletin tam adlarını içermesine rağmen, girdiyi nasıl biçimlendirdiğiniz konusunda esnekim, ilk önce kırmızı (Cumhuriyetçi) durumlar ve ikinci olarak mavi (Demokratik) durumlar. Kırmızı ve mavinin herhangi iki farklı tonu renklendirme için kabul edilebilir. Tabii ki, boş harita görüntüsünü istediğiniz dosya adıyla programınızla aynı klasörde bulabilirsiniz.

Doğruluk Kriterleri

Çıktınız bir raster dosyasıysa, en az 800 piksel x 495 piksel olmalıdır ve satırlar SVG'yi aynı boyutta 1,5 pikselden fazla ölçeklemenin sonucundan sapmamalıdır. Çıktınız bir vektör dosyasıysa, her ikisi de 800 piksel x 495 piksele ölçeklendiğinde satırlar SVG'den 1,5 pikselden fazla sapmamalıdır.

Bonus!

Ben, yabancı kütüphanelere olan bağımlılığı azaltmaya çalışıyor ve şimdi haritanın yalnızca raster grafik sürümünü girdi olarak kullanan ve bölge tespiti için kendi algoritmasını oluşturan herkese % -50 bonus veriyor. Nihayetinde, yaklaşımımın "kendi yazdığınız" algoritma olarak sayılacağını belirleyen benim kararımdır.

İyi şanslar!


örnek, doldurulmamış satırların etrafındaki bazı takma adları gösterir. Bu kabul edilebilir mi?
Sparr

@Sparr Örneği bir görüntü düzenleyicisiyle yaptım, bu yüzden onu "mükemmel" olarak görüyorum, bu yüzden kaçırdığı bir şeyi kaçırırsanız sorun değil.
geokavel

Emin olmak için: boş SVG dosyasını değiştirmemize izin veriliyor mu? Puanımız bizim puanımızda sayılıyor mu? "Ekranda çıktıyı görüntülemek yeterli değil" ile ne demek istiyorsun?
Kara delik

@Blackhole Hayır, boş SVG dosyasını değiştiremezsiniz, ancak harici olarak yüklediğiniz sürece puanınızın bir parçası olarak sayılmaz.
geokavel

@Blackhole Demek istediğim, bir dosya çıktı gerekiyor.
geokavel

Yanıtlar:


7

Piton 626

Aşağıdaki yaklaşımda, CSS açıklamasında .state'i temel alan .rstate ve .bstate ifadelerini ekledim. Benim sağlanan sağlanan .svg dosyasını yeniden adlandırdı v.svg. Aşağıda açıklandığı gibi bir girdi alır ve bir dosyaya yazar w.png. Tam durum adından kısaltılmış sürüme aktarmak için bunları eyaletlerin ilk ve son iki harfine göre ararım.

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

Örnek girdi:

'California,Illinois,Iowa,Mississippi;New Mexico,Pennsylvania,South Dakota,Vermont'

Örnek çıktı: çıktı rakam

Ya da Fransa bayrağından esinlenerek: çıktı şekil fransa


Güzel, demokrasi yaşıyor!
geokavel

Tebrikler, kazanan sizsiniz! Katılan herkese teşekkürler!
geokavel

6

İşleniyor, 425 bayt (259 bayt + 1 +165 bayt dosya)

Kod:

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

Boş harita " M.svg " olarak adlandırılmalı ve / data adlı bir klasörde saklanmalıdır (diğer tüm dosyalar programla aynı klasördedir.)

Girdi Dosyası (" a "):

Mississippi
California
Connecticut

Delaware
Florida
Wyoming
Hawaii

Anahtar Dosyası (" b "): http://pastebin.com/0pNufAH9

Çıktı (" m.tif "):

resim açıklamasını buraya girin

Tamam, işte benim kendi mücadelem. Bazı notlar:

  • Çıktı haritası aşağıdaki yollarla giriş haritasından farklı görünüyor
    1. Giriş haritasının şeffaf bir arka plan üzerinde gri dolgusu vardı. Çıktı gri bir arka planda beyaz dolgulu. Bence buna izin verilmeli, çünkü beyaz, gri ve şeffaflık tamamen nötr.
    2. Çıktı haritası, Hawaii ve Alaska etrafındaki girdilerin sahip olduğu satırları kaçırıyor. Bir kez daha, bence bu iyi çünkü çizgiler haritanın önemli bir parçası değil.
  • Program tuşları tutmak için harici bir dosya kullanır. Bu meta gönderiye göre , sadece bir ek dosya için 1 bayt eklemem gerekiyor.

Kodumu kendim yargılama konusunda herhangi bir tutarsızlık varsa, yorum bırakmaktan çekinmeyin.

Ayrıca, herkes İşleme'deki bu zorluğu denemeyi merak ederse, hem SVG dosyalarını PShape' s'lara okumayı hem de SVG dosyalarını XML olarak ayrıştırmayı destekler.


For-loop'unuz için for(int i=0;i++<51;)yerinefor(int i=0;i<51;i++) . 1 bayt kaydeder ve içinde gülen bir yüz vardır;)
Kritixi Lithos

@ ΚριτικσιΛίθος Yapmam gerekiyordu ++i için onu . Kulağa doğru geliyor mu?
geokavel

@ ΚριτικσιΛίθος Bir bayt kaydedebilir, ancak döngü içindeki davranışı tamamen değiştirir.
Tom Carpenter

@ ΚριτικσιΛίθος Evet, sanırım bunu kullanamam çünkü Hawaii'yi kaybediyorum. Belki Java'da diğer dillerden farklı çalışır.
geokavel

Ekstra yararsız bir alanınız varString[] a
Kritixi Lithos

5

PHP, 714 bayt

Çıktı, aşağıdaki formatta aadlandırılan bir dosyada saklanması gereken durumları renklendirmek için ek CSS ile adlandırılmış bir dosyada saklanması gereken boş SVG dosyasıdır b:

Ohio0Indiana0Illinois1New York0New Jersey0Florida

Okunabilirlik için bazı yeni satırlar ekledim.

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

İşte ungolfed sürümü:

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

İlke basittir: boş SVG'de her yol, temsil ettiği durumun kısaltmasına karşılık gelen bir kimliğe sahiptir (örneğin, <path d="…" id="HI" />Hawaii için).

Tek yapmamız gereken, bu yolu uygun gölgede renklendirmek için biraz CSS eklemektir. Ancak boş dosyada zaten bazı CSS var (özellikle <style type="text/css">…</style>etiket zaten var), bu yüzden bunu yapmak gerçekten kolay ve kısa. Dizenin .byalnızca CSS'de bulunduğundan daha fazla fark edebiliriz .border. İyi haberler! Biz sadece değiştiririz .bile OUR_WONDERFUL_CSS.b.

"Harika CSS'imizi" oluşturmak gerçekten zor değil:

  1. Dosyadan girdi oku:
    Ohio0Indiana0Illinois1New York0New Jersey0Florida.
  2. Onların kısaltmalarla devletlerin isimlerini değiştirin:
    OH0IN0IL1NY0NJ0FL.
  3. Değiştirin 0Karakterleri ,#: ile
    OH,#IN,#IL1NY,#NJ,#FL .
  4. Değiştirin 1 ile karakteri {fill:red}#:
    OH,#IN,#IL{fill:red}#NY,#NJ,#FL.
  5. Ekle #başında ve {fill:blue}sonunda:
    #OH,#IN,#IL{fill:red}#NY,#NJ,#FL{fill:blue}.

Tamam, iyi iş çıkardın. Teknik olarak istediğim gibi bir dosya yazmazken, kullanıcı tarayıcıda "Sayfayı Farklı Kaydet" seçeneğine basarak görüntüyü kolayca kaydedebilir. Bu tür bir cevaba izin vereceğim.
geokavel

3
İlginçtir ki Pennsylvania, Rhode Island ve Güney Carolina kısaltmaları PARIS'i heceliyor.
geokavel

@geokavel Gerekirse kolayca dosya oluşturabilirim. Cevabımı değiştirmeli miyim? Evet, çok yaşa Paris! Bu arada, bu zor zamanlarda desteğiniz için teşekkürler, Atlantik'in ötesindeki kardeşler!
Kara delik

@DavidCarraher Bazı açıklamalar ekledim. Umarım cevabımı anlamanıza yardımcı olur.
Kara delik

İçin +1 implodeve kullanıcı adınız!
caird Instagram Hesabındaki Resim ve Videoları coinheringaahing

3

Mathematica 1025

Zarif değil ama işe yarıyor.

SVG dosyalarının her durum için yolları olduğunu bilmiyordum, bu yüzden durumları kullanarak durumları buldum MorphologicalComponentsve her bileşeni kendi durumuyla ilişkilendirdim. Michigan (üst ve alt yarımadaları olan) ve Hawaii (birden fazla ada) gibi eyaletlerin birden fazla bileşeni vardır.

Kod, eşleme dosyasının m değişkeninde bulunduğunu varsayar .

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

Aşağıdaki giriş tarafından dışa aktarılacak görüntü aşağıdadır:

f[{{"Ohio", "Indiana", "Illinois", "Alaska"}, {"New York", "Michigan","Oregon", "New Jersey", "Florida"}}]

map

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.